Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f4b74cdd1 | ||
|
|
4c3df3a9e7 | ||
|
|
17811ccafc | ||
|
|
2d616d7bb6 | ||
|
|
0e3d367125 | ||
|
|
9c00bb34f6 | ||
|
|
7094d76126 | ||
|
|
888eb78b8d | ||
|
|
27f4c7bd9e | ||
|
|
a23588eb44 | ||
|
|
a8aa1ea4b8 | ||
|
|
01c8c0d7b7 | ||
|
|
4f39898fff | ||
|
|
09198e2077 | ||
|
|
f841b86636 | ||
|
|
14af368b46 | ||
|
|
11521a0240 | ||
|
|
3a9368f8dc | ||
|
|
f0210183d5 | ||
|
|
721e4cf474 | ||
|
|
dc472890f1 | ||
|
|
442cd39a0a | ||
|
|
585084258e | ||
|
|
8def261e5c | ||
|
|
4ea966ef1e | ||
|
|
aadd8b0e04 | ||
|
|
73a34c3f0a | ||
|
|
654457b7e6 | ||
|
|
1063ef81f8 | ||
|
|
0f9ac86115 | ||
|
|
73fc34c63b | ||
|
|
993c400ee5 | ||
|
|
3a0a1a6202 | ||
|
|
716dce7eff | ||
|
|
d6b8868353 | ||
|
|
6c14930f19 | ||
|
|
8fe55eca53 | ||
|
|
e8681f0f46 | ||
|
|
b8c836e26f | ||
|
|
7df25d1337 | ||
|
|
2b63ad929b | ||
|
|
9992fdc86f | ||
|
|
4aa983b568 | ||
|
|
5f9be07e2f | ||
|
|
da19ae77ad | ||
|
|
591c345763 | ||
|
|
0a0dd06680 | ||
|
|
39c6e62b19 | ||
|
|
6074ba8906 | ||
|
|
5cff5d8bb1 | ||
|
|
0dd4b27da6 | ||
|
|
397c79bbd7 | ||
|
|
8570bb23e9 | ||
|
|
c6835c58fb | ||
|
|
86d858ea44 | ||
|
|
908f328f13 | ||
|
|
bb8ebbcdb6 | ||
|
|
6a8d33c7b0 | ||
|
|
5bb5603248 | ||
|
|
126fbeb220 | ||
|
|
5d01b49fd9 | ||
|
|
f58615695d | ||
|
|
366f28567f | ||
|
|
2f6f616a7a | ||
|
|
07db7e8863 | ||
|
|
ddb7e5148a | ||
|
|
2371c1a437 | ||
|
|
36f6fd0e34 | ||
|
|
2f03cded8d | ||
|
|
acff83428b | ||
|
|
1fdd8ef68c | ||
|
|
a59d3c2996 | ||
|
|
d4437ee0fe | ||
|
|
711d4619df | ||
|
|
a7872fff19 | ||
|
|
8cd8ab3a09 | ||
|
|
e1da57d913 | ||
|
|
5e0138907c | ||
|
|
aba6fadb52 | ||
|
|
355e1fbaa6 | ||
|
|
60caa4430d | ||
|
|
32e4081252 | ||
|
|
e5f868c35b | ||
|
|
38368367d4 | ||
|
|
cff2984b93 | ||
|
|
d3c7962b0a | ||
|
|
6ea2410e2a | ||
|
|
2170970082 | ||
|
|
24a0ae6015 | ||
|
|
684f1c6887 | ||
|
|
547de6711a | ||
|
|
7e00edf477 | ||
|
|
873df9a097 | ||
|
|
1fe5d703ff | ||
|
|
5175581ab7 | ||
|
|
0be0741a24 | ||
|
|
741f8e6777 | ||
|
|
d52a1d882d | ||
|
|
d589656483 | ||
|
|
3c296e59ce | ||
|
|
ec0a75a708 | ||
|
|
eca127c815 | ||
|
|
9d8ed27fd2 | ||
|
|
987878031e | ||
|
|
af16ba7701 | ||
|
|
02cfe1262b | ||
|
|
95cc6f55ba | ||
|
|
88adf09d63 | ||
|
|
7b8e99e718 | ||
|
|
78d59ce712 | ||
|
|
e8e77e6f16 | ||
|
|
f86dcd1cc2 | ||
|
|
908c54a9fe | ||
|
|
e2e353d1f9 | ||
|
|
f869282f57 | ||
|
|
9a74bdf776 | ||
|
|
b17aebcea9 | ||
|
|
b42b3c8aa0 | ||
|
|
70c9f2df23 | ||
|
|
308e9ac07c | ||
|
|
d07c5f8e52 | ||
|
|
2f52768d76 | ||
|
|
9b44734b14 | ||
|
|
78dcab6ebe | ||
|
|
d4e4ce19cb | ||
|
|
7f35fb5e8b | ||
|
|
c6883c1455 | ||
|
|
d3576fb557 | ||
|
|
75bc67a62c | ||
|
|
6e8c4bb4d2 | ||
|
|
ea3d1eb67b | ||
|
|
6d941f0503 | ||
|
|
9d26fc16a5 | ||
|
|
c11474e424 | ||
|
|
614d4a2b61 | ||
|
|
70f896478c | ||
|
|
d420dd7786 | ||
|
|
56816c4be3 | ||
|
|
28b277870e | ||
|
|
302c94f8e1 | ||
|
|
d0e4112c6d | ||
|
|
469b0c47d2 | ||
|
|
aac561e030 | ||
|
|
29c87a05c2 | ||
|
|
db32742aa0 | ||
|
|
351a3333e5 | ||
|
|
309b85cac7 | ||
|
|
149df5c6c8 | ||
|
|
fdd9456ff4 | ||
|
|
a3cf119d7a | ||
|
|
43a93fc1a0 | ||
|
|
4f14dc6777 | ||
|
|
2a85211c2d | ||
|
|
d20473ff04 | ||
|
|
3c0c2bda43 | ||
|
|
04199f297b | ||
|
|
c26e188791 | ||
|
|
580b574212 | ||
|
|
f3e3dddfe7 | ||
|
|
8b8e610a96 | ||
|
|
ac040099bf | ||
|
|
69e123fc7c | ||
|
|
d20022afa1 | ||
|
|
55f8c68913 | ||
|
|
bc33e0abcf | ||
|
|
5427836d6f | ||
|
|
33049709ec | ||
|
|
c20f04b213 | ||
|
|
9f160b5032 | ||
|
|
1377f9cc22 | ||
|
|
e387460838 | ||
|
|
256dabf848 | ||
|
|
deee5cc6d6 | ||
|
|
488d729592 | ||
|
|
46bb029cbe | ||
|
|
711ca8f6e1 | ||
|
|
81485d948e | ||
|
|
8509ba6881 | ||
|
|
01ff58743f | ||
|
|
68d1140516 | ||
|
|
525e54c113 | ||
|
|
bb2e8bd162 | ||
|
|
d2acdc8955 | ||
|
|
cd58bacf6e | ||
|
|
46d9e86d53 | ||
|
|
58db7fbcb5 | ||
|
|
8b741f51ff | ||
|
|
47bd440181 | ||
|
|
56623ce870 | ||
|
|
7f3c58f0af | ||
|
|
41e2fbbc80 | ||
|
|
1972687e2d | ||
|
|
0d9abb0f78 | ||
|
|
f99ca0926f | ||
|
|
e343b1ad94 | ||
|
|
9ace809542 | ||
|
|
fc5a7fccea | ||
|
|
2a8d3fb210 | ||
|
|
d30b7827f7 | ||
|
|
4565038b1a | ||
|
|
8bec6a8229 | ||
|
|
a275f19381 | ||
|
|
4f0a1751f9 | ||
|
|
5b698d0b50 | ||
|
|
db2679192a | ||
|
|
138362a3db | ||
|
|
f9047b9939 | ||
|
|
29f454e1e7 | ||
|
|
6ffaa232a5 | ||
|
|
f6a83ccfb9 | ||
|
|
084084e1f8 | ||
|
|
845f10e7d9 | ||
|
|
575b9841a5 | ||
|
|
fd83f13d36 | ||
|
|
3a8b033d85 | ||
|
|
4f3ddb641e | ||
|
|
f68115d270 | ||
|
|
bc449524fc | ||
|
|
9c9485a54a | ||
|
|
6db9d21293 | ||
|
|
b5594c2d5c | ||
|
|
372b23347c | ||
|
|
6acb265ec7 | ||
|
|
c39255774e | ||
|
|
68bb514e54 | ||
|
|
20fb956f36 | ||
|
|
e57f67a416 | ||
|
|
fcf83d935c | ||
|
|
27149216a1 | ||
|
|
82418bf058 | ||
|
|
f0efb45168 | ||
|
|
9a39f833d8 | ||
|
|
706ccf7e26 | ||
|
|
2cde29bf13 | ||
|
|
a00b922056 | ||
|
|
5ce6f21804 | ||
|
|
3102208c1d | ||
|
|
e5c8bb4b77 | ||
|
|
97f63a5fec | ||
|
|
af58d16478 | ||
|
|
dbb7d7e338 | ||
|
|
d6bafdd156 | ||
|
|
07fb35e555 | ||
|
|
bc209605e6 | ||
|
|
431a8c85aa | ||
|
|
632dfd450f | ||
|
|
4ee8c3c73d | ||
|
|
5833903cd5 | ||
|
|
1a61f42d1e | ||
|
|
de4a4ffbb1 | ||
|
|
f5eb40dbc1 | ||
|
|
7611579f30 | ||
|
|
b68dedbdc0 | ||
|
|
e47e47ba94 | ||
|
|
093cea9c45 | ||
|
|
16b05b04e1 | ||
|
|
dc84c12ba2 | ||
|
|
bc7cb28b56 | ||
|
|
f0d689bae7 | ||
|
|
d95d1fbc86 | ||
|
|
7a36d89d53 | ||
|
|
eaef994eca | ||
|
|
c55ae3eb92 | ||
|
|
8bd22bb3ae | ||
|
|
9d6cc8cc39 | ||
|
|
8fcc3d42f0 | ||
|
|
81a8386c2a | ||
|
|
77e9eb78dc | ||
|
|
676c7070f4 | ||
|
|
83e0ec83f7 | ||
|
|
197b3dc708 | ||
|
|
3fdd200427 | ||
|
|
74f7b33a8c | ||
|
|
81df5b8c82 | ||
|
|
35ef2b39c1 | ||
|
|
3857c9fc09 | ||
|
|
9619c86e83 | ||
|
|
7b0363f5c4 | ||
|
|
2a5642ed3a | ||
|
|
1057d4fca6 | ||
|
|
b1c80784a8 | ||
|
|
5304fef58b | ||
|
|
a354c9a5b4 | ||
|
|
7e8cf4c580 | ||
|
|
73438160ca | ||
|
|
3a2e513801 | ||
|
|
a4a220f8b1 | ||
|
|
201b23943b | ||
|
|
5da2c06361 | ||
|
|
e84d44520d | ||
|
|
554e6921bf | ||
|
|
a531660d5e | ||
|
|
b6cefd0f60 | ||
|
|
047a0a31e6 | ||
|
|
b9c259f01c | ||
|
|
a545a27738 | ||
|
|
689d5e3335 | ||
|
|
9eff2c822f | ||
|
|
d908745573 | ||
|
|
bc25ea771e | ||
|
|
ef64a87c02 | ||
|
|
b6f3c0c119 | ||
|
|
144550e770 | ||
|
|
3dde738477 | ||
|
|
88fe45be25 | ||
|
|
3ece93ee05 | ||
|
|
bc747eaed3 | ||
|
|
1ed44bd0d2 | ||
|
|
a93a1346d1 | ||
|
|
37a83f3a41 | ||
|
|
fc9a194f0d | ||
|
|
e6557c9b11 | ||
|
|
775ddd5d9c | ||
|
|
15b5b65ee4 | ||
|
|
cb22065786 | ||
|
|
24dcf4e0f9 | ||
|
|
debb6a95cc | ||
|
|
d0f704efd9 | ||
|
|
8505955a99 | ||
|
|
e25e333c9a | ||
|
|
d4907e2927 | ||
|
|
514f5e8d28 | ||
|
|
e264f2c728 | ||
|
|
c95d87bd93 | ||
|
|
10ba7ce8dc | ||
|
|
f807c78afe | ||
|
|
35531544e8 | ||
|
|
5c464d9e32 | ||
|
|
822b9917df | ||
|
|
7b5678fdb0 | ||
|
|
16e91fe96e | ||
|
|
5f0556348d | ||
|
|
9d453e3923 | ||
|
|
d2af5b7461 | ||
|
|
9dc1e4a7d8 | ||
|
|
da8ec6977f | ||
|
|
ebf35b0cda | ||
|
|
7a7ce8b310 | ||
|
|
ef3d022bcf | ||
|
|
47628908d9 | ||
|
|
43b48bcb18 | ||
|
|
42655190c2 | ||
|
|
7b351b70c8 | ||
|
|
93ac1a44c6 | ||
|
|
35bf96024e | ||
|
|
f9c82f4156 | ||
|
|
17b10db0d3 | ||
|
|
8c5a8e6267 | ||
|
|
8429204a23 | ||
|
|
924d328e02 | ||
|
|
75b6445152 | ||
|
|
3b87aae42e | ||
|
|
6b9cdd261c | ||
|
|
2732073c85 | ||
|
|
e8e2d50839 | ||
|
|
e84aaeebd7 | ||
|
|
80c4e619d2 | ||
|
|
baef120023 | ||
|
|
2e1dc3f615 | ||
|
|
4977a60818 | ||
|
|
ce646715b2 | ||
|
|
7dfb821e62 | ||
|
|
440676c1cf | ||
|
|
c7b93a8bb4 | ||
|
|
0d0adcfbfe | ||
|
|
f406a202ac | ||
|
|
941db8202f | ||
|
|
123bf2829b | ||
|
|
dee87ddb76 | ||
|
|
99bfa6e9c5 | ||
|
|
a63a7345b7 | ||
|
|
a89cc1dfd2 | ||
|
|
6f822a2be3 | ||
|
|
e40fc20915 | ||
|
|
a0128fdb3b | ||
|
|
8b4d58d218 | ||
|
|
d538d69c0c | ||
|
|
9137cbadec | ||
|
|
7135784416 | ||
|
|
68b85cd735 | ||
|
|
df9b0019d9 | ||
|
|
bb165a433a | ||
|
|
a8f603e6f3 | ||
|
|
b721a1f502 | ||
|
|
5e45d47086 | ||
|
|
1131f3b30c | ||
|
|
d05f44eefe | ||
|
|
86dcf5f245 | ||
|
|
cb22027a07 | ||
|
|
1a6f822479 | ||
|
|
ab3642df38 | ||
|
|
34590cc644 | ||
|
|
30921d7611 | ||
|
|
03112cff3d | ||
|
|
1da05f7977 | ||
|
|
d2aa9b8725 | ||
|
|
2a9c6b72de | ||
|
|
e4d2b90db2 | ||
|
|
b376f71d71 | ||
|
|
2024698ff9 | ||
|
|
80fd48a0f5 | ||
|
|
177f7f7d90 | ||
|
|
83a86d8281 | ||
|
|
5a6d8c1737 | ||
|
|
4dbf0346dd | ||
|
|
13d0cd65b6 | ||
|
|
a7961f25e6 | ||
|
|
6880ca5002 | ||
|
|
1efab4398c | ||
|
|
0e71b43681 | ||
|
|
eac7854367 | ||
|
|
8b11235874 | ||
|
|
f97e5bff69 | ||
|
|
4138353d90 | ||
|
|
0709c70933 | ||
|
|
0f1cb7fc46 | ||
|
|
51d9d9e7cd | ||
|
|
27b9e49434 | ||
|
|
0f291ddabe | ||
|
|
ac16bc5cb5 | ||
|
|
9115bb70af | ||
|
|
779ff65f2a | ||
|
|
2a80c5bf3a | ||
|
|
c07c67e7ba | ||
|
|
eb533aafd0 | ||
|
|
0f776ac60f | ||
|
|
77e0a9c9d0 | ||
|
|
7abf650497 | ||
|
|
80e1dc2071 | ||
|
|
cde17fff5a | ||
|
|
03276ac8a0 | ||
|
|
a0da9446ac | ||
|
|
7d870502c6 | ||
|
|
fa4355936d | ||
|
|
f66d96b967 | ||
|
|
00fe4002eb | ||
|
|
15c051ef11 | ||
|
|
bb50d96fbe | ||
|
|
ed543652c3 | ||
|
|
b377edcd8e | ||
|
|
be90cafbe6 | ||
|
|
2c9a3db6bd | ||
|
|
714aa0cd15 | ||
|
|
1d9eafc7ad | ||
|
|
8a43d216c0 | ||
|
|
0affed00bc | ||
|
|
685a54fcf6 | ||
|
|
b78c0acee1 | ||
|
|
dbb4fc4d39 | ||
|
|
39a35e8772 | ||
|
|
90e3041004 | ||
|
|
c7fe849019 | ||
|
|
3d11b83d12 | ||
|
|
51a1ed9789 | ||
|
|
d69efc672c | ||
|
|
6684b707fd | ||
|
|
bf2d2363ce | ||
|
|
8a1ffdf973 | ||
|
|
21985370ec | ||
|
|
db90b0f08c | ||
|
|
c1b5bc9a86 | ||
|
|
9c55f9d346 | ||
|
|
d616342fcc | ||
|
|
f50fb24ab4 | ||
|
|
2617fd5ab4 | ||
|
|
5f9c3de599 | ||
|
|
28f27d145f | ||
|
|
115d22c0c8 | ||
|
|
f48ada8393 | ||
|
|
3cce03db2e | ||
|
|
2b7ace23f1 | ||
|
|
3b253005e9 | ||
|
|
5920608aa1 | ||
|
|
9bee5d3122 | ||
|
|
278c8859ca | ||
|
|
f5a01422be | ||
|
|
ee92f5e931 | ||
|
|
9282db2407 | ||
|
|
59b10fe4c4 | ||
|
|
3632466130 | ||
|
|
2e89f154cf | ||
|
|
dd9be44e2b | ||
|
|
01d42ee5e2 | ||
|
|
6de6311fb0 | ||
|
|
e94e638198 | ||
|
|
9ba27220c2 | ||
|
|
f973dd51ef | ||
|
|
6d6d95299e | ||
|
|
de9465f179 | ||
|
|
38530d4c39 | ||
|
|
b77d0df48b | ||
|
|
7596f23c36 | ||
|
|
7555280c0d | ||
|
|
4a6c58eb63 | ||
|
|
228dcd44e2 | ||
|
|
e5715cd2c8 | ||
|
|
d6fc0c8126 | ||
|
|
1c65fdee7b | ||
|
|
255a375210 | ||
|
|
2232d1bbd8 |
No files matched your search
@@ -1,4 +0,0 @@
|
||||
# These are supported funding model platforms
|
||||
github: [PranshulGG]
|
||||
ko_fi: pranshulgg
|
||||
liberapay: PranshulGG
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Bug reports help identify and fix issues or unexpected behaviors in the app.
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Bug Description
|
||||
A clear and concise description of the issue.
|
||||
|
||||
### Steps to Reproduce
|
||||
Steps to reproduce the behavior:
|
||||
1. Go to '...'
|
||||
2. Click on '...'
|
||||
3. Scroll down to '...'
|
||||
4. See error
|
||||
|
||||
### Expected Behavior
|
||||
What you expected to happen.
|
||||
|
||||
### Actual Behavior
|
||||
What actually happens.
|
||||
|
||||
### Screenshots
|
||||
If applicable, add screenshots to help explain the problem.
|
||||
|
||||
### Environment
|
||||
- OS: [e.g., Windows, macOS, Ubuntu]
|
||||
- App version: [e.g., v1.0.0]
|
||||
- Device: [e.g., iPhone 12, Samsung Galaxy S21]
|
||||
- Browser (if applicable): [e.g., Chrome, Safari]
|
||||
|
||||
### Additional Context
|
||||
Add any other context or logs about the problem here.
|
||||
@@ -1,51 +0,0 @@
|
||||
name: Bug Report
|
||||
description: Report a bug
|
||||
labels: [ "bug" ]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the sections below to help everyone identify and fix the bug
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Describe your issue
|
||||
placeholder: When I click here this happens
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: steps
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
placeholder: |
|
||||
1. Go to page X
|
||||
2. Click here
|
||||
3. Click there
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: expected
|
||||
attributes:
|
||||
label: What was the expected result?
|
||||
placeholder: I expected this to happen
|
||||
- type: input
|
||||
id: source_used
|
||||
attributes:
|
||||
label: Which weather source are you using?
|
||||
placeholder: Example "Open Meteo"
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: screenshots
|
||||
attributes:
|
||||
label: Put here any screenshots or videos (optional)
|
||||
- type: checkboxes
|
||||
id: acknowledgementsCheck
|
||||
attributes:
|
||||
label: Acknowledgements
|
||||
description: Your issue will be closed if you don’t read this carefully.
|
||||
options:
|
||||
- label: I have reviewed the existing issues to confirm that this is a unique report and not related to any currently open or closed tickets.
|
||||
required: true
|
||||
- label: I understand that this app is provided as-is, without any guarantees, and I might not receive a response to my request. Sometimes you might not get the response you want.
|
||||
required: true
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## Feature Request
|
||||
A clear and concise description of the feature you're requesting.
|
||||
|
||||
### Problem Statement
|
||||
Describe the problem or limitation you're facing that the new feature would solve.
|
||||
|
||||
### Proposed Solution
|
||||
Explain how you think the feature should work.
|
||||
|
||||
### Alternatives Considered
|
||||
Describe any alternative solutions or features you've considered.
|
||||
|
||||
### Additional Context
|
||||
Add any other context or screenshots about the feature request here.
|
||||
@@ -1,51 +0,0 @@
|
||||
name: Feature Request
|
||||
description: Suggest an idea to improve this project
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please provide detailed information to help us understand your idea and its potential impact.
|
||||
- type: textarea
|
||||
id: description
|
||||
attributes:
|
||||
label: Problem Statement
|
||||
placeholder: Describe the problem or limitation you're facing that the new feature would solve.
|
||||
description: Clearly explain the challenge or issue you're encountering to help us understand the context.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: solution
|
||||
attributes:
|
||||
label: Proposed Solution
|
||||
placeholder: Explain how you think the feature should work and address the problem.
|
||||
description: Describe the solution in detail, including any specific behaviors or functionality it should have.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: alternatives
|
||||
attributes:
|
||||
label: Alternatives Considered
|
||||
placeholder: Describe any alternative solutions or features you've considered.
|
||||
description: If there are other ways to solve the issue, please share them here.
|
||||
- type: textarea
|
||||
id: additional
|
||||
attributes:
|
||||
label: Additional Context
|
||||
placeholder: Provide any extra details, links, or examples that might help clarify your request.
|
||||
description: This field is optional but highly encouraged if you have additional information.
|
||||
- type: checkboxes
|
||||
id: acknowledgementsCheck
|
||||
attributes:
|
||||
label: Acknowledgements
|
||||
description: Please confirm the following before submitting your feature request
|
||||
options:
|
||||
- label: I have searched the existing issues and discussions to ensure this feature has not already been requested.
|
||||
required: true
|
||||
- label: I understand that submitting a request does not guarantee it will be implemented.
|
||||
required: true
|
||||
- label: I have provided all necessary information to clearly explain my request.
|
||||
required: true
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Thank you for suggesting an improvement! Your feedback is valuable, and we will review it as soon as possible.
|
||||
@@ -1,30 +0,0 @@
|
||||
name: New source
|
||||
description: Suggest an new source
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please fill out the sections below
|
||||
- type: textarea
|
||||
id: api_link
|
||||
attributes:
|
||||
label: Link to publicly available API or Docs
|
||||
placeholder: Link here
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: details
|
||||
attributes:
|
||||
label: Additional details/context about this source
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: acknowledgementsCheck
|
||||
attributes:
|
||||
label: Acknowledgements
|
||||
description: Your issue will be closed if you don’t read this carefully.
|
||||
options:
|
||||
- label: I have reviewed the existing issues to confirm that this is a unique report and not related to any currently open or closed tickets.
|
||||
required: true
|
||||
- label: I understand that this app is provided as-is, without any guarantees, and I might not receive a response to my request. Sometimes you might not get the response you want.
|
||||
required: true
|
||||
@@ -0,0 +1,28 @@
|
||||
---
|
||||
name: 'UI/UX Issue '
|
||||
about: UI/UX issues highlight problems related to the user interface or experience.
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
## UI/UX Issue
|
||||
A clear and concise description of the user interface or user experience problem.
|
||||
|
||||
### Steps to Reproduce
|
||||
1. Go to '...'
|
||||
2. Click on '...'
|
||||
3. Observe the UI/UX issue.
|
||||
|
||||
### Expected Behavior
|
||||
What you expected the interface or experience to be like.
|
||||
|
||||
### Actual Behavior
|
||||
What is currently happening.
|
||||
|
||||
### Screenshots
|
||||
Provide screenshots of the UI/UX issue, if applicable.
|
||||
|
||||
### Additional Context
|
||||
Any additional context, such as suggestions for improvement.
|
||||
@@ -1,65 +0,0 @@
|
||||
name: WeatherMaster Signed Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
tags:
|
||||
- "*"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-24.04
|
||||
|
||||
env:
|
||||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||||
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
|
||||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||||
GEO_NAMES_USERNAME: ${{ secrets.GEO_NAMES_USERNAME }}
|
||||
MF_KEY: ${{ secrets.MF_KEY }}
|
||||
ACCU_KEY: ${{ secrets.ACCU_KEY }}
|
||||
WEATHERAPI_KEY: ${{ secrets.WEATHERAPI_KEY }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
|
||||
- name: Set up JDK 21
|
||||
uses: actions/setup-java@v5
|
||||
with:
|
||||
distribution: temurin
|
||||
java-version: "21.0.7"
|
||||
|
||||
- name: Setup Android SDK
|
||||
uses: android-actions/setup-android@v3
|
||||
with:
|
||||
packages: 'platform-tools'
|
||||
|
||||
- name: Decode keystore
|
||||
run: |
|
||||
mkdir keystore
|
||||
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > keystore/release.jks
|
||||
|
||||
- name: Verify environment
|
||||
run: |
|
||||
java -version
|
||||
./gradlew --version
|
||||
|
||||
- name: Build signed APK
|
||||
run: |
|
||||
./gradlew \
|
||||
--no-daemon \
|
||||
--no-build-cache \
|
||||
-PGEO_NAMES_USERNAME="${{ secrets.GEO_NAMES_USERNAME }}" \
|
||||
-PMF_KEY="${{ secrets.MF_KEY }}" \
|
||||
-PACCU_KEY="${{ secrets.ACCU_KEY }}" \
|
||||
-PWEATHERAPI_KEY="${{ secrets.WEATHERAPI_KEY }}" \
|
||||
clean assembleRelease
|
||||
|
||||
- name: Upload APK
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: signed-release-apk
|
||||
path: app/build/outputs/apk/release/*.apk
|
||||
@@ -13,6 +13,3 @@
|
||||
.externalNativeBuild
|
||||
.cxx
|
||||
local.properties
|
||||
/weathermaster.jks
|
||||
/.idea
|
||||
gradle.properties
|
||||
@@ -0,0 +1,3 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<bytecodeTargetLevel target="17" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/app/src/main/assets/pages/forecastPage.html" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||
<component name="GradleSettings">
|
||||
<option name="linkedExternalProjectsSettings">
|
||||
<GradleProjectSettings>
|
||||
<option name="testRunner" value="GRADLE" />
|
||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||
<option name="gradleJvm" value="jbr-17" />
|
||||
<option name="modules">
|
||||
<set>
|
||||
<option value="$PROJECT_DIR$" />
|
||||
<option value="$PROJECT_DIR$/app" />
|
||||
</set>
|
||||
</option>
|
||||
</GradleProjectSettings>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
||||
@@ -0,0 +1,6 @@
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||
</component>
|
||||
</project>
|
||||
|
After Width: | Height: | Size: 35 KiB |
|
After Width: | Height: | Size: 39 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 51 KiB |
@@ -0,0 +1,29 @@
|
||||
Index: README.md
|
||||
IDEA additional info:
|
||||
Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP
|
||||
<+> # WeatherMaster \r\n \r\n<img src=\"https://github.com/PranshulGG/WeatherMaster/blob/master/app/src/main/assets/weather-icons/02d.svg?short_path=21e6bd2\" alt=\"\" width=\"150px\">\r\n\r\nWeatherMaster is developed with pure HTML, CSS, JavaScript, and Java. Designed to mimic the look and feel of a native Android app.\r\n\r\n\r\n# \uD83D\uDC41️ Preview\r\n\r\n<div > \r\n<img alt=\"App image\" src=\"screenshots/1.png\" width=\"30%\" style=\"border-radius: 10px;\">\r\n<img alt=\"App image\" src=\"screenshots/2.png\" width=\"30%\">\r\n<img alt=\"App image\" src=\"screenshots/3.png\" width=\"30%\">\r\n<img alt=\"App image\" src=\"screenshots/4.png\" width=\"30%\">\r\n<img alt=\"App image\" src=\"screenshots/5.png\" width=\"30%\">\r\n \r\n</div>\r\n\r\n<br>\r\n\r\n\r\n# \uD83D\uDCF2 Download\r\n\r\n<p align=\"left\">\r\n <a href=\"https://github.com/PranshulGG/WeatherMaster/releases\"><img alt=\"GitHub\" src=\"https://github.com/PranshulGG/CalcMaster-A-Calculator-App/blob/master/previewed/badge_github.png\" height=\"120\"/></a>\r\n</p>\r\n\r\n\r\n# ✨ Features:\r\n\r\n - <strong>Native Android Experience: </stronge>Enjoy a user interface and interaction that closely resemble a native Android Weather app.\r\n \r\n - <strong>Material Design: </stronge>The app is built using Material Web Components, ensuring a clean, consistent, and visually appealing design.\r\n\r\n - <strong>Customization Options: </stronge>Enjoy a ton of customization options. Adjust themes, Units.\r\n \r\n - <strong>Responsive Design: </stronge>WeatherMaster is fully responsive for all mobile devices.\r\n \r\n - <strong>User-Friendly Interface: </stronge>The app's interface is designed to be straightforward and user-friendly.\r\n\r\n\r\n# \uD83D\uDEE0️ Built With:\r\n\r\n - <strong>HTML & CSS: </stronge> For the basic structure and styling of the app.\r\n \r\n - <strong>JavaScript: </stronge>To handle the app's logic and interactivity.\r\n\r\n - <strong>Weather data: </stronge> Using <a href=\"https://openweathermap.org/\">OpenWeatherMap</a> to fetch weather and <a href=\"https://ipgeolocation.io/\">ipgeolocation.io</a> for Moonset and Moonrise timings\r\n\r\n - <strong>Java: </stronge>Mainly used for JavaScript interface and permissions, allowing the app to run on Android devices.\r\n \r\n - <strong>Material Web Components: </stronge>Utilized to create a consistent and attractive Material Design look and feel.\r\n\r\n - <strong>Weather icons</strong>: <a href=\"https://gitlab.com/bignutty/google-weather-icons\">Google weather icons\r\n\r\n # \uD83D\uDCDD Todos:\r\n \r\n - ⬛ Make it lightweight\r\n - ⬛ Notification alerts\r\n - ⬛ A feature that allows you to add multiple locations\r\n - ⬛ More detailed weather\r\n - ✅ Change app colors according to the weather\r\n \r\n<br>\r\n<br>\r\n\r\n> [!NOTE]\r\n> The app is designed to run on Android devices and does not support web browsers. Attempting to open the app in a browser will not work.\r\n\r\n<br>\r\n\r\n\r\n# Contact\r\nFor any questions or feedback, feel free to open an issue on GitHub or contact pranshul.devmain@gmail.com\r\n\r\n<br>\r\n\r\n# License\r\nThis project is licensed under the MIT License. See the `LICENSE` file for details.\r\n\r\n\r\n\r\n\r\n\r\n
|
||||
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
||||
<+>UTF-8
|
||||
===================================================================
|
||||
diff --git a/README.md b/README.md
|
||||
--- a/README.md (revision dbb4fc4d3912cc1ed4676def82edb8120a7814a4)
|
||||
+++ b/README.md (date 1720854695916)
|
||||
@@ -8,11 +8,13 @@
|
||||
# 👁️ Preview
|
||||
|
||||
<div >
|
||||
-<img alt="App image" src="screenshots/1.png" width="30%" style="border-radius: 10px;">
|
||||
-<img alt="App image" src="screenshots/2.png" width="30%">
|
||||
-<img alt="App image" src="screenshots/3.png" width="30%">
|
||||
-<img alt="App image" src="screenshots/4.png" width="30%">
|
||||
-<img alt="App image" src="screenshots/5.png" width="30%">
|
||||
+<img alt="App image" src="screenshots/img_1.jpeg" width="30%" style="border-radius: 10px;">
|
||||
+<img alt="App image" src="screenshots/Img_2.jpeg" width="30%">
|
||||
+<img alt="App image" src="screenshots/img_3.jpeg" width="30%">
|
||||
+<img alt="App image" src="screenshots/img_4.jpeg" width="30%">
|
||||
+<img alt="App image" src="screenshots/img_5.jpeg" width="30%">
|
||||
+<img alt="App image" src="screenshots/img_6.jpeg" width="30%">
|
||||
+
|
||||
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
<changelist name="Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]" date="1720854808110" recycled="false" toDelete="true">
|
||||
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]/shelved.patch" />
|
||||
<option name="DESCRIPTION" value="Uncommitted changes before Update at 13-07-2024 12:43 pm [Changes]" />
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" value="screenshots/3.png" />
|
||||
<option name="AFTER_PATH" />
|
||||
<option name="SHELVED_PATH" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" />
|
||||
<option name="AFTER_PATH" value="screenshots/img_1.jpeg" />
|
||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]/img_1.jpeg" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" value="screenshots/4.png" />
|
||||
<option name="AFTER_PATH" />
|
||||
<option name="SHELVED_PATH" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" />
|
||||
<option name="AFTER_PATH" value="screenshots/img_4.jpeg" />
|
||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]/img_4.jpeg" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" value="screenshots/5.png" />
|
||||
<option name="AFTER_PATH" />
|
||||
<option name="SHELVED_PATH" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" value="screenshots/1.png" />
|
||||
<option name="AFTER_PATH" />
|
||||
<option name="SHELVED_PATH" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" />
|
||||
<option name="AFTER_PATH" value="screenshots/img_3.jpeg" />
|
||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]/img_3.jpeg" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" />
|
||||
<option name="AFTER_PATH" value="screenshots/img_6.jpeg" />
|
||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]/img_6.jpeg" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" />
|
||||
<option name="AFTER_PATH" value="screenshots/img_5.jpeg" />
|
||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]/img_5.jpeg" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" value="screenshots/2.png" />
|
||||
<option name="AFTER_PATH" />
|
||||
<option name="SHELVED_PATH" />
|
||||
</binary>
|
||||
<binary>
|
||||
<option name="BEFORE_PATH" />
|
||||
<option name="AFTER_PATH" value="screenshots/Img_2.jpeg" />
|
||||
<option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_13-07-2024_12_43_pm_[Changes]/Img_2.jpeg" />
|
||||
</binary>
|
||||
</changelist>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -1,66 +0,0 @@
|
||||
# Contributing to WeatherMaster
|
||||
|
||||
Thanks for contributing to WeatherMaster :P Before opening a PR, please read
|
||||
through the guidelines below. They are intended to keep the codebase
|
||||
consistent and make contributions easier to review and maintain
|
||||
|
||||
## Before Contributing
|
||||
|
||||
Before starting work on a contribution, please open an issue first and
|
||||
describe what you would like to change.
|
||||
|
||||
For small changes like typo fixe or other
|
||||
obvious minor fixes, opening an issue is optional
|
||||
|
||||
## General stuff
|
||||
|
||||
- Keep changes focused and avoid unrelated refactors.
|
||||
- Follow the existing architecture and patterns used in the project.
|
||||
- Prefer reusing existing abstractions over introducing new ones.
|
||||
- Don't introduce a new pattern or framework for a single feature.
|
||||
- Keep platform-independent logic independent of UI code where
|
||||
possible
|
||||
- Avoid unnecessary changes to existing behavior.
|
||||
|
||||
## Adding a New Weather Source
|
||||
|
||||
The goal is that adding a new source should primarily require changes to the
|
||||
source itself, rather than adding special cases throughout the codebase
|
||||
|
||||
When implementing a new source:
|
||||
|
||||
- Use the existing source abstractions and interfaces.
|
||||
- Do not add source-specific UI.
|
||||
- Do not add source-specific logic to existing UI components.
|
||||
- If the source requires information that the existing architecture cannot
|
||||
represent, discuss the change before implementing a
|
||||
source-specific workaround
|
||||
|
||||
## AI-Assisted Contributions
|
||||
|
||||
AI tools are allowed, but contributors are expected to understand and take
|
||||
ownership of the code they submit
|
||||
|
||||
Please disclose AI usage in your PR description, including what the AI was
|
||||
used for
|
||||
|
||||
PRs that appear to be largely or entirely AI-generated without meaningful
|
||||
review, understanding, or contribution from the author will be closed
|
||||
|
||||
## Attributions
|
||||
|
||||
Add your attribution above the feature you implemented. Attribution should only be added for feature
|
||||
implementations
|
||||
|
||||
For example:
|
||||
|
||||
```kt
|
||||
/**
|
||||
* Initial YOUR_FEATURE integration implemented by https://github.com/YOUR_GITHUB
|
||||
*/
|
||||
```
|
||||
|
||||
_Thanks :P_
|
||||
|
||||
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
# Privacy Policy
|
||||
|
||||
WeatherMaster is an open-source application.
|
||||
|
||||
We respect your privacy. The application itself does **not**:
|
||||
|
||||
- Collect, store, or share personal information.
|
||||
- Track your IP address, usage data, or device identifiers.
|
||||
- Send personal data to us directly.
|
||||
|
||||
---
|
||||
|
||||
## Third-Party Services & APIs
|
||||
|
||||
WeatherMaster relies on external weather and geolocation services to provide forecasts and
|
||||
location-based functionality.
|
||||
|
||||
These third-party services may process certain technical information, including:
|
||||
|
||||
- IP address
|
||||
- Approximate or precise location data
|
||||
- Device or network-related information required for API requests
|
||||
|
||||
This data processing is handled by the respective service providers under their own privacy
|
||||
policies. WeatherMaster itself does not control or store this data.
|
||||
|
||||
---
|
||||
|
||||
## Location Permission
|
||||
|
||||
The app may request access to your device's location to display local weather information.
|
||||
|
||||
- Granting location permission is optional.
|
||||
- Your precise location is used locally within the app to fetch weather data from external APIs.
|
||||
- WeatherMaster does not store your precise location.
|
||||
|
||||
---
|
||||
|
||||
## Children
|
||||
|
||||
This application is not directed toward children under the age of 13 and does not knowingly collect
|
||||
personal information.
|
||||
|
||||
---
|
||||
|
||||
## Changes
|
||||
|
||||
This Privacy Policy may be updated from time to time. Continued use of the app after changes become
|
||||
effective constitutes acceptance of the revised policy.
|
||||
|
||||
---
|
||||
|
||||
## Contact
|
||||
|
||||
If you have any questions about privacy, please contact:
|
||||
|
||||
**Email:** <pranshul.devmain@gmail.com>
|
||||
@@ -1,11 +1,12 @@
|
||||
|
||||
<div align="center">
|
||||
<img src="preview/icon.png" alt="" width="150px">
|
||||
</div>
|
||||
<img src="https://github.com/PranshulGG/WeatherMaster/blob/master/preview/partly_cloudy_day.svg" alt="" width="120px">
|
||||
</div>
|
||||
<h1 align="center">
|
||||
WeatherMaster
|
||||
</h1>
|
||||
<div align="center">
|
||||
<img src="https://img.shields.io/github/license/PranshulGG/WeatherMaster?style=for-the-badge&color=cba6f7&labelColor=302D41">
|
||||
<img src="https://img.shields.io/github/repo-size/PranshulGG/WeatherMaster?style=for-the-badge&color=cba6f7&labelColor=302D41">
|
||||
<img src="https://img.shields.io/github/last-commit/PranshulGG/WeatherMaster?style=for-the-badge&color=b1d18a&labelColor=1f3701">
|
||||
<img src="https://img.shields.io/github/release/PranshulGG/WeatherMaster?style=for-the-badge&color=dbc66e&labelColor=3a3000">
|
||||
<br>
|
||||
@@ -14,124 +15,134 @@
|
||||
<a href="https://discord.gg/sSW2E4nqmn">
|
||||
<img src="https://img.shields.io/discord/1302477023410782229?label=Discord&style=for-the-badge&color=ffb0c8&labelColor=541d32">
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
<div align="center">
|
||||
|
||||
<img src="https://shields.rbtlog.dev/simple/com.pranshulgg.weather_master_app?style=for-the-badge" alt="RB Status">
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
<h3>WeatherMaster: inspired by the Google Pixel weather app.</h3>
|
||||
|
||||
</div>
|
||||
<div align="center">
|
||||
|
||||
[Features](https://github.com/PranshulGG/WeatherMaster?tab=readme-ov-file#-features) • [Contact](https://github.com/PranshulGG/WeatherMaster?tab=readme-ov-file#%EF%B8%8F-contact) • [License](https://github.com/PranshulGG/WeatherMaster?tab=readme-ov-file#%EF%B8%8F-license) • [Translate](https://github.com/PranshulGG/WeatherMaster?tab=readme-ov-file#-translate-the-app-on-crowdin)
|
||||
</div>
|
||||
|
||||
|
||||
[Features](https://github.com/PranshulGG/WeatherMaster?tab=readme-ov-file#-features) • [Contact](https://github.com/PranshulGG/WeatherMaster?tab=readme-ov-file#contact) • [License](https://github.com/PranshulGG/WeatherMaster?tab=readme-ov-file#license)
|
||||
</div>
|
||||
|
||||
<div align="center">
|
||||
<a href="https://github.com/PranshulGG/WeatherMaster/releases"><img alt="GitHub" src="preview/get_on_github_btn.png" height="80"/></a>
|
||||
<a href="https://apt.izzysoft.de/fdroid/index/apk/com.pranshulgg.weather_master_app"><img alt="GitHub" src="preview/get_on_izzy_btn.png" height="80"/></a>
|
||||
<a href="https://play.google.com/store/apps/details?id=com.pranshulgg.weather_master"><img alt="GitHub" src="preview/get_on_googleplay_btn.png" height="80"/></a></div>
|
||||
|
||||
<a href="https://github.com/PranshulGG/WeatherMaster/releases"><img alt="GitHub" src="https://censorship.no/img/github-badge.png" height="80"/></a>
|
||||
<a href="https://apt.izzysoft.de/fdroid/index/apk/com.example.weathermaster"><img alt="GitHub" src="preview/download_Btn.png" height="80"/></a></div>
|
||||
<br>
|
||||
|
||||

|
||||

|
||||
|
||||
# 👁️ Screenshots
|
||||
|
||||
<div align="center">
|
||||
<img src="preview/preview_1.png" width="250">
|
||||
<img src="preview/preview_2.png" width="250">
|
||||
<img src="preview/preview_3.png" width="250">
|
||||
<img src="preview/preview_4.png" width="250">
|
||||
<img src="preview/current.png" width="320">
|
||||
<img src="preview/24hr.png" width="320">
|
||||
<img src="preview/radar_condi.png" width="320">
|
||||
<img src="preview/uv_aqi.png" width="320">
|
||||
<img src="preview/forecast_page.png" width="320">
|
||||
<img src="preview/gov_alerts.png" width="320">
|
||||
<img src="preview/settings.png" width="320">
|
||||
<img src="preview/radar_page.png" width="320">
|
||||
<img src="preview/condi_forecast.png" width="320">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<br>
|
||||
|
||||
# 🌦️ Supported weather sources
|
||||
# ✨ Features:
|
||||
|
||||
- **Open Meteo**
|
||||
- **Met Norway**
|
||||
- **NWS**
|
||||
- **SMHI**
|
||||
- **DWD**
|
||||
- **Meteo-France**
|
||||
- **FMI**
|
||||
- **ECCC**
|
||||
- **BMKG**
|
||||
- **China**
|
||||
- **AccuWeather**
|
||||
- **Meteo AM**
|
||||
- **IPMA**
|
||||
- **WeatherApi.com**
|
||||
- **Gismeteo**
|
||||
- **Met Office** _(requires your own API key — sign up [here](https://www.metoffice.gov.uk/))_
|
||||
- **AEMET** _(requires your own API key — sign
|
||||
up [here](https://opendata.aemet.es/centrodedescargas/altaUsuario))_
|
||||
- **IMD**
|
||||
- **WMO Severe Weather Information Centre**
|
||||
- **FOSS Public Alert Server**
|
||||
- **CWA**
|
||||
- **Pirate Weather**
|
||||
- **JMA**
|
||||
- **IMET**
|
||||
- **OpenWeather**
|
||||
- _**And more to be added**_
|
||||
- 🌍 **Offline Mode:** Access previously loaded weather data even without an internet connection.
|
||||
- 🌤️ **Current Weather:** Get real-time updates on weather conditions in your area.
|
||||
- 📢 **Government Weather Alerts:** Receive official alerts and warnings to stay safe.
|
||||
- ⏳ **24-Hour Forecast:** Plan your short-term activities with accurate forecasts for the next two days.
|
||||
- 📅 **14-Day Forecast:** View detailed weather predictions for the upcoming week.
|
||||
- 🌙 **Moon Phases:** Track the phases of the moon and plan accordingly.
|
||||
- 🌑 **Moonrise & Moonset:** Know the exact times for moonrise and moonset each day.
|
||||
- 🌅 **Sunrise & Sunset:** Stay informed about sunrise and sunset times to optimize your day.
|
||||
- 📏 **Day Length:** Check how long the daylight lasts each day.
|
||||
- 📝 **Day Description:** Get a brief summary of the day’s weather conditions.
|
||||
- 🌧️ **Rain Bar:** See a visual representation of expected rainfall.
|
||||
- 👁️ **Visibility:** Monitor how far you can see clearly based on weather conditions.
|
||||
- 💧 **Humidity:** Check the current humidity levels to stay comfortable.
|
||||
- 🧭 **Pressure:** Track atmospheric pressure to understand weather changes.
|
||||
- 🌬️ **Wind Direction & Speed:** Stay aware of wind patterns and strength.
|
||||
- ❄️ **Snow Amount:** Know the expected snowfall for winter planning.
|
||||
- ☁️ **Cloudiness:** See how much of the sky is covered by clouds.
|
||||
- 🌡️ **Min-Max Temperature:** View the range of temperatures for the day.
|
||||
- 🌬️ **Feels Like Temperature:** Understand how the temperature feels based on wind and humidity.
|
||||
- 🌧️ **Precipitation Type & Area Coverage:** Get details on what kind of precipitation is expected and its coverage area.
|
||||
- 🌞 **UV Index:** Stay protected from harmful UV rays with UV index updates.
|
||||
- 🌿 **Air Quality:** Monitor air quality to stay informed about pollution levels.
|
||||
- 🗺️ **Live Map:** Access a real-time map to track weather conditions in different areas.
|
||||
- 📍 **Location Picker:** Easily select and view weather information for different locations.
|
||||
- ⭐ **Save Favorite Locations:** Save your preferred locations for quick access to their weather updates.
|
||||
- 👗 **Clothing Recommendations:** Get suggestions on what to wear based on the current weather conditions.
|
||||
- 🌾 **Pollen Data (Europe Only):** View pollen levels for grass, trees, and weeds in your area.
|
||||
|
||||
Some sources need a free API key from the provider before you can select them — add yours from a
|
||||
location's weather source picker, or from **Settings → Weather Sources → API key config**.
|
||||
# 🌞 Weather providers:
|
||||
- [**open-meteo**](https://open-meteo.com)
|
||||
- [**Met norway**](https://www.met.no/en)
|
||||
- [**WeatherApi**](https://www.weatherapi.com/)
|
||||
- [**OpenWeatherMap**](https://openweathermap.org/api)
|
||||
- [**accuweather**](https://www.accuweather.com/)
|
||||
|
||||
# 🌐 Translate the app on [Crowdin](https://crowdin.com/project/weathermaster)
|
||||
# ⚙️ Other:
|
||||
|
||||
_**Feel free to open an issue if you want to request a language**_
|
||||
- 📱<strong>Native Android Experience: </stronge>Enjoy a user interface and interaction that closely resemble a native Android Weather app.
|
||||
|
||||
<a href="https://crowdin.com/project/weathermaster" style="background-color: red"></a>
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
[](https://crowdin.com/project/weathermaster)
|
||||
- 🎨<strong>Material Design: </stronge>The app is built using Material Web Components, ensuring a clean, consistent, and visually appealing design.
|
||||
|
||||
# ✉️ Contact
|
||||
- ⚙️<strong>Customization Options: </stronge>Enjoy a ton of customization options. Adjust themes, Units.
|
||||
|
||||
For any questions or feedback, feel free to open an issue on GitHub or contact
|
||||
pranshul.devmain@gmail.com
|
||||
- 📐<strong>Responsive Design: </stronge>WeatherMaster is fully responsive for all mobile devices.
|
||||
|
||||
# ©️ License
|
||||
- 🧩<strong>User-Friendly Interface: </stronge>The app's interface is designed to be straightforward and user-friendly.
|
||||
|
||||
|
||||
# 🛠️ Built With:
|
||||
|
||||
- <strong>HTML & CSS: </stronge> For the basic structure and styling of the app.
|
||||
|
||||
- <strong>JavaScript: </stronge>To handle the app's logic and interactivity.
|
||||
|
||||
- <strong>Java: </stronge>Mainly used for JavaScript interface and permissions, allowing the app to run on Android devices.
|
||||
|
||||
- <strong>Material Web Components: </stronge>Utilized to create a consistent and attractive Material Design look and feel.
|
||||
|
||||
- <strong>Weather icons</strong>: <a href="https://gitlab.com/bignutty/google-weather-icons">Google weather icons
|
||||
|
||||
# 📝 Todos:
|
||||
|
||||
- ✅ Adding cache to reduce api requests
|
||||
- ✅ Translations
|
||||
- ✅ Notifications
|
||||
- ✅ Make it lightweight
|
||||
- ✅ Allows you to add multiple locations
|
||||
- ✅ Customization
|
||||
- ✅ More detailed weather
|
||||
- ✅ Live weather map
|
||||
- ✅ Pick locations using map
|
||||
- ✅ Change app colors according to the weather
|
||||
- Any user suggestions :)
|
||||
<br>
|
||||
<br>
|
||||
|
||||
> [!NOTE]
|
||||
> The app is designed to run on Android devices and does not support web browsers. Attempting to open the app in a browser will not work.
|
||||
<br>
|
||||
|
||||
# Contact
|
||||
For any questions or feedback, feel free to open an issue on GitHub or contact pranshul.devmain@gmail.com
|
||||
|
||||
<br>
|
||||
|
||||
# License
|
||||
This project is licensed under the GPL-3.0 license. See the `LICENSE` file for details.
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
# The code is a little messy
|
||||
|
||||
### Why is the package `com.example.weathermaster`?
|
||||
|
||||
- Well, when I made this, I didn’t know a whole lot about Android development, and I didn’t realize you had to change the package name. So I made it with com.example, and now I can’t really change it because that would make it a whole new app. People who installed it from F-Droid may not get updates. I might change the package name if I publish the app on the Google Play Store.
|
||||
|
||||
### Why is it made with JS?
|
||||
|
||||
- I was more familiar with it, and it works much smoother and is easier to maintain. Even without optimization, it still runs like butter. But I do have plans to convert it to Kotlin, though it's likely to happen. 🫠
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'com.example.weathermaster'
|
||||
compileSdk 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.example.weathermaster"
|
||||
minSdk 22
|
||||
targetSdk 33
|
||||
versionCode 71
|
||||
versionName "1.7.9 (W)"
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
dependenciesInfo {
|
||||
includeInApk = false
|
||||
includeInBundle = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
dependencies {
|
||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
||||
implementation 'com.google.android.material:material:1.12.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
|
||||
}
|
||||
@@ -1,202 +0,0 @@
|
||||
import java.util.Properties
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.android.application)
|
||||
alias(libs.plugins.kotlin.compose)
|
||||
id("com.google.devtools.ksp") version "2.3.6"
|
||||
id("com.google.dagger.hilt.android")
|
||||
id("androidx.room")
|
||||
kotlin("plugin.serialization") version "2.3.21"
|
||||
}
|
||||
|
||||
val localProps = Properties().apply {
|
||||
val f = rootProject.file("local.properties")
|
||||
if (f.exists()) f.inputStream().use { load(it) }
|
||||
}
|
||||
|
||||
|
||||
val geoNamesUserNameKey =
|
||||
providers.gradleProperty("GEO_NAMES_USERNAME").orNull
|
||||
?: System.getenv("GEO_NAMES_USERNAME")
|
||||
?: ""
|
||||
|
||||
val mfKey = providers.gradleProperty("MF_KEY").orNull ?: System.getenv("MF_KEY")
|
||||
?: ""
|
||||
val accuKey = providers.gradleProperty("ACCU_KEY").orNull ?: System.getenv("ACCU_KEY")
|
||||
?: ""
|
||||
val weatherapiKey =
|
||||
providers.gradleProperty("WEATHERAPI_KEY").orNull ?: System.getenv("WEATHERAPI_KEY")
|
||||
?: ""
|
||||
val keystoreFile = file("../keystore/release.jks")
|
||||
val hasKeystore = keystoreFile.exists()
|
||||
|
||||
val versionNameString = "3.11.0"
|
||||
|
||||
val playStore = false
|
||||
|
||||
android {
|
||||
namespace = "com.pranshulgg.weather_master_app"
|
||||
compileSdk {
|
||||
version = release(37)
|
||||
}
|
||||
android.buildFeatures.buildConfig = true
|
||||
|
||||
defaultConfig {
|
||||
applicationId = if (playStore) {
|
||||
"com.pranshulgg.weather_master"
|
||||
} else {
|
||||
"com.pranshulgg.weather_master_app"
|
||||
}
|
||||
minSdk = 26
|
||||
targetSdk = 36
|
||||
versionCode = 68
|
||||
versionName = versionNameString
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
buildConfigField(
|
||||
"String",
|
||||
"GEO_NAMES_USERNAME",
|
||||
"\"$geoNamesUserNameKey\""
|
||||
)
|
||||
|
||||
buildConfigField(
|
||||
"String",
|
||||
"MF_KEY",
|
||||
"\"$mfKey\""
|
||||
)
|
||||
|
||||
buildConfigField(
|
||||
"String",
|
||||
"ACCU_KEY",
|
||||
"\"$accuKey\""
|
||||
)
|
||||
|
||||
buildConfigField(
|
||||
"String",
|
||||
"WEATHERAPI_KEY",
|
||||
"\"$weatherapiKey\""
|
||||
)
|
||||
|
||||
buildConfigField(
|
||||
"String",
|
||||
"APP_VERSION",
|
||||
"\"v${versionNameString}\""
|
||||
)
|
||||
|
||||
buildConfigField(
|
||||
"boolean",
|
||||
"IS_PLAYSTORE_BUILD",
|
||||
playStore.toString()
|
||||
)
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
if (hasKeystore) {
|
||||
create("release") {
|
||||
storeFile = keystoreFile
|
||||
storePassword = System.getenv("KEYSTORE_PASSWORD")
|
||||
keyAlias = System.getenv("KEY_ALIAS")
|
||||
keyPassword = System.getenv("KEY_PASSWORD")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = false
|
||||
|
||||
if (hasKeystore) {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
)
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
// isCoreLibraryDesugaringEnabled = true
|
||||
}
|
||||
buildFeatures {
|
||||
compose = true
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
dependenciesInfo {
|
||||
includeInApk = false
|
||||
includeInBundle = false
|
||||
}
|
||||
bundle {
|
||||
language {
|
||||
enableSplit = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
room {
|
||||
schemaDirectory("$projectDir/schemas")
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(libs.androidx.core.ktx)
|
||||
implementation(libs.androidx.lifecycle.process)
|
||||
implementation(libs.androidx.lifecycle.runtime.ktx)
|
||||
implementation(libs.androidx.activity.compose)
|
||||
implementation(platform(libs.androidx.compose.bom))
|
||||
implementation(libs.androidx.compose.ui)
|
||||
implementation(libs.androidx.compose.ui.graphics)
|
||||
implementation(libs.androidx.compose.ui.tooling.preview)
|
||||
implementation(libs.androidx.compose.material3)
|
||||
implementation(libs.androidx.navigation.compose)
|
||||
implementation(libs.materialKolor)
|
||||
implementation(libs.androidx.foundation.layout)
|
||||
implementation(libs.coil.compose)
|
||||
implementation(libs.kotlinx.coroutines.android)
|
||||
|
||||
implementation(libs.room.runtime)
|
||||
implementation(libs.room.ktx)
|
||||
implementation(libs.retrofit)
|
||||
implementation(libs.converter.gson)
|
||||
implementation(libs.okhttp.logging)
|
||||
implementation(libs.common.suncalc)
|
||||
implementation(libs.androidx.appcompat)
|
||||
|
||||
implementation(libs.jts.core)
|
||||
implementation(libs.jts.io.common)
|
||||
|
||||
implementation(libs.jackson.module.kotlin)
|
||||
|
||||
// coreLibraryDesugaring(libs.desugar.jdk.libs) // Not sure but it causes timezone crashes on some devices
|
||||
implementation(libs.androidx.hilt.navigation.compose)
|
||||
implementation(libs.converter.jaxb)
|
||||
ksp(libs.room.compiler)
|
||||
implementation(libs.hilt.android)
|
||||
ksp(libs.hilt.android.compiler)
|
||||
ksp(libs.hilt.compiler)
|
||||
implementation(libs.reorderable)
|
||||
implementation(libs.androidx.foundation.layout)
|
||||
implementation(libs.androidx.animation.core)
|
||||
implementation(libs.core.splashscreen)
|
||||
|
||||
implementation(libs.androidx.work.runtime)
|
||||
implementation(libs.hilt.work)
|
||||
ksp(libs.hilt.metadata.jvm)
|
||||
|
||||
implementation(libs.androidx.glance)
|
||||
|
||||
implementation(libs.androidx.glance.appwidget)
|
||||
|
||||
implementation(libs.kotlinx.serialization.json)
|
||||
testImplementation(libs.junit)
|
||||
androidTestImplementation(libs.androidx.junit)
|
||||
androidTestImplementation(libs.androidx.espresso.core)
|
||||
androidTestImplementation(platform(libs.androidx.compose.bom))
|
||||
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
|
||||
debugImplementation(libs.androidx.compose.ui.tooling)
|
||||
debugImplementation(libs.androidx.compose.ui.test.manifest)
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"version": 3,
|
||||
"artifactType": {
|
||||
"type": "APK",
|
||||
"kind": "Directory"
|
||||
},
|
||||
"applicationId": "com.example.weathermaster",
|
||||
"variantName": "release",
|
||||
"elements": [
|
||||
{
|
||||
"type": "SINGLE",
|
||||
"filters": [],
|
||||
"attributes": [],
|
||||
"versionCode": 71,
|
||||
"versionName": "1.7.9 (W)",
|
||||
"outputFile": "app-release.apk"
|
||||
}
|
||||
],
|
||||
"elementType": "File"
|
||||
}
|
||||
@@ -1,682 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 38,
|
||||
"identityHash": "1d015719e48d11dded7be8a0fee6370b",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL NOT NULL, `temperatureMax` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '1d015719e48d11dded7be8a0fee6370b')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,679 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 39,
|
||||
"identityHash": "e3d653d51d672c892c51978003671201",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e3d653d51d672c892c51978003671201')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,699 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 40,
|
||||
"identityHash": "c8326e15b737f950704fa3027bd58b06",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c8326e15b737f950704fa3027bd58b06')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,711 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 41,
|
||||
"identityHash": "f8a4e91742c3f170c10c2703904ec2b9",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f8a4e91742c3f170c10c2703904ec2b9')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,711 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 42,
|
||||
"identityHash": "f8a4e91742c3f170c10c2703904ec2b9",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f8a4e91742c3f170c10c2703904ec2b9')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,747 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 43,
|
||||
"identityHash": "3498b6cf93a31e50cf1bef443490315f",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "github",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `currentTag` TEXT NOT NULL, `lastFetchedTag` TEXT NOT NULL, `lastFetchedTime` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "currentTag",
|
||||
"columnName": "currentTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTag",
|
||||
"columnName": "lastFetchedTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTime",
|
||||
"columnName": "lastFetchedTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3498b6cf93a31e50cf1bef443490315f')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,767 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 44,
|
||||
"identityHash": "80da71ec25bcf07ba0d22811005aa37f",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "github",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `currentTag` TEXT NOT NULL, `lastFetchedTag` TEXT NOT NULL, `lastFetchedTime` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "currentTag",
|
||||
"columnName": "currentTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTag",
|
||||
"columnName": "lastFetchedTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTime",
|
||||
"columnName": "lastFetchedTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '80da71ec25bcf07ba0d22811005aa37f')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,851 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 45,
|
||||
"identityHash": "b2ca5c75db987a1d27628fc45eac72bf",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "github",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `currentTag` TEXT NOT NULL, `lastFetchedTag` TEXT NOT NULL, `lastFetchedTime` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "currentTag",
|
||||
"columnName": "currentTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTag",
|
||||
"columnName": "lastFetchedTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTime",
|
||||
"columnName": "lastFetchedTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `locationId` TEXT NOT NULL, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `time` INTEGER NOT NULL, FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'b2ca5c75db987a1d27628fc45eac72bf')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,863 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 46,
|
||||
"identityHash": "fd66b7531bfe72f6bcac04b8fe26dc9e",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, `alertSource` TEXT NOT NULL, `airQualitySource` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "alertSource",
|
||||
"columnName": "alertSource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "airQualitySource",
|
||||
"columnName": "airQualitySource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "github",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `currentTag` TEXT NOT NULL, `lastFetchedTag` TEXT NOT NULL, `lastFetchedTime` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "currentTag",
|
||||
"columnName": "currentTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTag",
|
||||
"columnName": "lastFetchedTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTime",
|
||||
"columnName": "lastFetchedTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `locationId` TEXT NOT NULL, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `time` INTEGER NOT NULL, FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'fd66b7531bfe72f6bcac04b8fe26dc9e')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,863 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 47,
|
||||
"identityHash": "fd66b7531bfe72f6bcac04b8fe26dc9e",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, `alertSource` TEXT NOT NULL, `airQualitySource` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "alertSource",
|
||||
"columnName": "alertSource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "airQualitySource",
|
||||
"columnName": "airQualitySource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "github",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `currentTag` TEXT NOT NULL, `lastFetchedTag` TEXT NOT NULL, `lastFetchedTime` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "currentTag",
|
||||
"columnName": "currentTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTag",
|
||||
"columnName": "lastFetchedTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTime",
|
||||
"columnName": "lastFetchedTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `locationId` TEXT NOT NULL, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `time` INTEGER NOT NULL, FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'fd66b7531bfe72f6bcac04b8fe26dc9e')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,868 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 48,
|
||||
"identityHash": "5ca7c9b34ef5941f3d7515379d9646f9",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, `alertSource` TEXT NOT NULL, `airQualitySource` TEXT NOT NULL, `customName` TEXT, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "alertSource",
|
||||
"columnName": "alertSource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "airQualitySource",
|
||||
"columnName": "airQualitySource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "customName",
|
||||
"columnName": "customName",
|
||||
"affinity": "TEXT"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "github",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `currentTag` TEXT NOT NULL, `lastFetchedTag` TEXT NOT NULL, `lastFetchedTime` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "currentTag",
|
||||
"columnName": "currentTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTag",
|
||||
"columnName": "lastFetchedTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTime",
|
||||
"columnName": "lastFetchedTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `locationId` TEXT NOT NULL, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `time` INTEGER NOT NULL, FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '5ca7c9b34ef5941f3d7515379d9646f9')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,916 +0,0 @@
|
||||
{
|
||||
"formatVersion": 1,
|
||||
"database": {
|
||||
"version": 49,
|
||||
"identityHash": "41f3af0cd4a758a20290098071993b9c",
|
||||
"entities": [
|
||||
{
|
||||
"tableName": "weather_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `lat` REAL NOT NULL, `lon` REAL NOT NULL, `timezone` TEXT NOT NULL, `source` TEXT NOT NULL, `state` TEXT, `isFavorite` INTEGER NOT NULL, `isPinned` INTEGER NOT NULL, `countryCode` TEXT, `isDefault` INTEGER NOT NULL, `isDeviceLocation` INTEGER NOT NULL, `alertSource` TEXT NOT NULL, `airQualitySource` TEXT NOT NULL, `customName` TEXT, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "name",
|
||||
"columnName": "name",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "country",
|
||||
"columnName": "country",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lat",
|
||||
"columnName": "lat",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lon",
|
||||
"columnName": "lon",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "timezone",
|
||||
"columnName": "timezone",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "source",
|
||||
"columnName": "source",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "state",
|
||||
"columnName": "state",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isFavorite",
|
||||
"columnName": "isFavorite",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isPinned",
|
||||
"columnName": "isPinned",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "countryCode",
|
||||
"columnName": "countryCode",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDefault",
|
||||
"columnName": "isDefault",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDeviceLocation",
|
||||
"columnName": "isDeviceLocation",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "alertSource",
|
||||
"columnName": "alertSource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "airQualitySource",
|
||||
"columnName": "airQualitySource",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "customName",
|
||||
"columnName": "customName",
|
||||
"affinity": "TEXT"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `humidity` REAL NOT NULL, `windSpeed` REAL, `windDirection` TEXT, `pressureMsl` REAL, `visibility` INTEGER, `cloudCover` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `feelsLike` REAL, `time` INTEGER NOT NULL, `dewPoint` REAL, `utcOffsetSeconds` INTEGER, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "cloudCover",
|
||||
"columnName": "cloudCover",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "feelsLike",
|
||||
"columnName": "feelsLike",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "utcOffsetSeconds",
|
||||
"columnName": "utcOffsetSeconds",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperature` REAL, `windSpeed` REAL, `windDirection` TEXT, `rain` REAL NOT NULL, `snowfall` REAL, `uvIndex` REAL, `weatherCondition` TEXT NOT NULL, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `time` INTEGER NOT NULL, `precipitationProbability` INTEGER, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperature",
|
||||
"columnName": "temperature",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rain",
|
||||
"columnName": "rain",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfall",
|
||||
"columnName": "snowfall",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndex",
|
||||
"columnName": "uvIndex",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbability",
|
||||
"columnName": "precipitationProbability",
|
||||
"affinity": "INTEGER"
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_daily",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `temperatureMin` REAL, `temperatureMax` REAL, `windSpeed` REAL, `windDirection` TEXT, `rainSum` REAL NOT NULL, `snowfallSum` REAL, `uvIndexMax` REAL, `weatherCondition` TEXT NOT NULL, `time` INTEGER NOT NULL, `precipitationProbabilityMax` INTEGER, `pressureMsl` REAL, `visibility` INTEGER, `humidity` REAL, `dewPoint` REAL, `sunrise` INTEGER NOT NULL, `sunset` INTEGER NOT NULL, `moonrise` INTEGER NOT NULL, `moonset` INTEGER NOT NULL, `moonPhase` TEXT NOT NULL, `dawn` INTEGER NOT NULL, `dusk` INTEGER NOT NULL, PRIMARY KEY(`locationId`, `time`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMin",
|
||||
"columnName": "temperatureMin",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "temperatureMax",
|
||||
"columnName": "temperatureMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windSpeed",
|
||||
"columnName": "windSpeed",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "windDirection",
|
||||
"columnName": "windDirection",
|
||||
"affinity": "TEXT"
|
||||
},
|
||||
{
|
||||
"fieldPath": "rainSum",
|
||||
"columnName": "rainSum",
|
||||
"affinity": "REAL",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "snowfallSum",
|
||||
"columnName": "snowfallSum",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "uvIndexMax",
|
||||
"columnName": "uvIndexMax",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "weatherCondition",
|
||||
"columnName": "weatherCondition",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationProbabilityMax",
|
||||
"columnName": "precipitationProbabilityMax",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureMsl",
|
||||
"columnName": "pressureMsl",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "visibility",
|
||||
"columnName": "visibility",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "humidity",
|
||||
"columnName": "humidity",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "dewPoint",
|
||||
"columnName": "dewPoint",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunrise",
|
||||
"columnName": "sunrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "sunset",
|
||||
"columnName": "sunset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonrise",
|
||||
"columnName": "moonrise",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonset",
|
||||
"columnName": "moonset",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "moonPhase",
|
||||
"columnName": "moonPhase",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dawn",
|
||||
"columnName": "dawn",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "dusk",
|
||||
"columnName": "dusk",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId",
|
||||
"time"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_weather_daily_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_weather_daily_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "weather_units",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `tempUnit` TEXT NOT NULL, `windUnit` TEXT NOT NULL, `distanceUnit` TEXT NOT NULL, `pressureUnit` TEXT NOT NULL, `precipitationUnit` TEXT NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "tempUnit",
|
||||
"columnName": "tempUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "windUnit",
|
||||
"columnName": "windUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "distanceUnit",
|
||||
"columnName": "distanceUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pressureUnit",
|
||||
"columnName": "pressureUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "precipitationUnit",
|
||||
"columnName": "precipitationUnit",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "weather_blocks",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `isDaily` INTEGER NOT NULL, `type` TEXT NOT NULL, `isHidden` INTEGER NOT NULL, `position` INTEGER NOT NULL)",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isDaily",
|
||||
"columnName": "isDaily",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "type",
|
||||
"columnName": "type",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "isHidden",
|
||||
"columnName": "isHidden",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "position",
|
||||
"columnName": "position",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_current",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `usAqi` INTEGER, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `lastUpdatedInMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "usAqi",
|
||||
"columnName": "usAqi",
|
||||
"affinity": "INTEGER"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedInMilli",
|
||||
"columnName": "lastUpdatedInMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_current_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_current_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "nws_location_gridpoints",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `officeId` TEXT NOT NULL, `gridX` INTEGER NOT NULL, `gridY` INTEGER NOT NULL, `stationIdentifier` TEXT NOT NULL, `lastUpdatedMilli` INTEGER NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "officeId",
|
||||
"columnName": "officeId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridX",
|
||||
"columnName": "gridX",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "gridY",
|
||||
"columnName": "gridY",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "stationIdentifier",
|
||||
"columnName": "stationIdentifier",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastUpdatedMilli",
|
||||
"columnName": "lastUpdatedMilli",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_nws_location_gridpoints_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_nws_location_gridpoints_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "github",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `currentTag` TEXT NOT NULL, `lastFetchedTag` TEXT NOT NULL, `lastFetchedTime` INTEGER NOT NULL, PRIMARY KEY(`id`))",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "currentTag",
|
||||
"columnName": "currentTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTag",
|
||||
"columnName": "lastFetchedTag",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "lastFetchedTime",
|
||||
"columnName": "lastFetchedTime",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"tableName": "air_quality_hourly",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `locationId` TEXT NOT NULL, `pm10` REAL, `pm25` REAL, `carbonMonoxide` REAL, `nitrogenDioxide` REAL, `sulphurDioxide` REAL, `ozone` REAL, `time` INTEGER NOT NULL, FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "id",
|
||||
"columnName": "id",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm10",
|
||||
"columnName": "pm10",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "pm25",
|
||||
"columnName": "pm25",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "carbonMonoxide",
|
||||
"columnName": "carbonMonoxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "nitrogenDioxide",
|
||||
"columnName": "nitrogenDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "sulphurDioxide",
|
||||
"columnName": "sulphurDioxide",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "ozone",
|
||||
"columnName": "ozone",
|
||||
"affinity": "REAL"
|
||||
},
|
||||
{
|
||||
"fieldPath": "time",
|
||||
"columnName": "time",
|
||||
"affinity": "INTEGER",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": true,
|
||||
"columnNames": [
|
||||
"id"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_air_quality_hourly_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_air_quality_hourly_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"tableName": "accu_locations",
|
||||
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`locationId` TEXT NOT NULL, `cityKey` TEXT NOT NULL, PRIMARY KEY(`locationId`), FOREIGN KEY(`locationId`) REFERENCES `weather_locations`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
|
||||
"fields": [
|
||||
{
|
||||
"fieldPath": "locationId",
|
||||
"columnName": "locationId",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
},
|
||||
{
|
||||
"fieldPath": "cityKey",
|
||||
"columnName": "cityKey",
|
||||
"affinity": "TEXT",
|
||||
"notNull": true
|
||||
}
|
||||
],
|
||||
"primaryKey": {
|
||||
"autoGenerate": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
]
|
||||
},
|
||||
"indices": [
|
||||
{
|
||||
"name": "index_accu_locations_locationId",
|
||||
"unique": false,
|
||||
"columnNames": [
|
||||
"locationId"
|
||||
],
|
||||
"orders": [],
|
||||
"createSql": "CREATE INDEX IF NOT EXISTS `index_accu_locations_locationId` ON `${TABLE_NAME}` (`locationId`)"
|
||||
}
|
||||
],
|
||||
"foreignKeys": [
|
||||
{
|
||||
"table": "weather_locations",
|
||||
"onDelete": "CASCADE",
|
||||
"onUpdate": "NO ACTION",
|
||||
"columns": [
|
||||
"locationId"
|
||||
],
|
||||
"referencedColumns": [
|
||||
"id"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"setupQueries": [
|
||||
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
|
||||
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '41f3af0cd4a758a20290098071993b9c')"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
package com.example.weathermaster;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.example.weathermaster", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
package com.pranshulgg.weather_master_app
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
import org.junit.Assert.*
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* See [testing documentation](http://d.android.com/tools/testing).
|
||||
*/
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class ExampleInstrumentedTest {
|
||||
@Test
|
||||
fun useAppContext() {
|
||||
// Context of the app under test.
|
||||
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
|
||||
assertEquals("com.pranshulgg.weathermaster", appContext.packageName)
|
||||
}
|
||||
}
|
||||
@@ -1,230 +1,131 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
|
||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
|
||||
|
||||
<application
|
||||
android:name=".WeatherMasterApplication"
|
||||
android:hardwareAccelerated="true"
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/ic_app_launcher"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_app_launcher_round"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.SplashScreen.OnStart">
|
||||
android:theme="@style/Base.Theme.WeatherMaster"
|
||||
tools:targetApi="33">
|
||||
<activity
|
||||
android:name=".SettingsActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreensAll"
|
||||
/>
|
||||
<activity
|
||||
android:name=".AboutPage"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/aboutMainPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".Terms_Conditions"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreensAll"
|
||||
/>
|
||||
<activity
|
||||
android:name=".PrivacyPolicy"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreensAll"
|
||||
/>
|
||||
<activity
|
||||
android:name=".ThirdParty"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreensAll"
|
||||
/>
|
||||
<activity
|
||||
android:name=".ForecastPage"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreenForecastPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".AlertPage"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreensAll"
|
||||
/>
|
||||
<activity
|
||||
android:name=".LiveRadar"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreenLiveRadar"
|
||||
/>
|
||||
<activity
|
||||
android:name=".LanguagePage"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/ScreensAll"
|
||||
/>
|
||||
<activity
|
||||
android:name=".humidityCondition"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/conditionMainPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".pressureCondition"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/conditionMainPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".sunCondition"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/conditionMainPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".UVIndexCondition"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/conditionMainPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".visibilityCondition"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/conditionMainPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".WindCondition"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true"
|
||||
android:theme="@style/conditionMainPage"
|
||||
/>
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:launchMode="singleTop"
|
||||
android:windowSoftInputMode="adjustResize"
|
||||
android:exported="true"
|
||||
android:label="@string/app_launcher_name"
|
||||
android:theme="@style/Theme.SplashScreen.OnStart">
|
||||
android:theme="@style/app_theme"
|
||||
android:screenOrientation="portrait"
|
||||
android:exported="true" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".widgets.config.WidgetConfigActivity"
|
||||
android:theme="@style/Theme.WeatherMaster"
|
||||
android:exported="true" />
|
||||
|
||||
<service
|
||||
android:name="androidx.appcompat.app.AppLocalesMetadataHolderService"
|
||||
android:enabled="false"
|
||||
android:exported="false">
|
||||
<meta-data
|
||||
android:name="autoStoreLocales"
|
||||
android:value="true" />
|
||||
</service>
|
||||
|
||||
<provider
|
||||
android:name="androidx.startup.InitializationProvider"
|
||||
android:authorities="${applicationId}.androidx-startup"
|
||||
android:exported="false"
|
||||
tools:node="merge">
|
||||
|
||||
<meta-data
|
||||
android:name="androidx.work.WorkManagerInitializer"
|
||||
android:value="androidx.startup"
|
||||
tools:node="remove" />
|
||||
</provider>
|
||||
|
||||
<receiver
|
||||
android:name=".feature.notifications.scheduled.ScheduledNotification"
|
||||
android:enabled="true" />
|
||||
|
||||
<!--WIDGETS-->
|
||||
<receiver
|
||||
android:name=".widgets.weather.WeatherWidgetReceiver"
|
||||
android:label="Weather 1"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/weather_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.pill.WidgetPillReceiver"
|
||||
android:label="Pill"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/widget_pill_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.summary.SummaryWidgetReceiver"
|
||||
android:label="Day Summary"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/summary_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.weatherhorizontal.WeatherHorizontalWidgetReceiver"
|
||||
android:label="Weather 2"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/weather_widget_horizontal_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.glance.GlanceWidgetReceiver"
|
||||
android:label="Glance"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/glance_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.weather3.Weather3WidgetReceiver"
|
||||
android:label="Weather 3"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/weather3_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.weather4.Weather4WidgerReceiver"
|
||||
android:label="Weather 4"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/weather4_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.hourly.WidgetHourlyReceiver"
|
||||
android:label="Hourly"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/hourly_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.uvindex.UvIndexWidgetReceiver"
|
||||
android:label="UV index"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/uv_index_widget_info" />
|
||||
</receiver>
|
||||
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.weather5.Weather5WidgetReceiver"
|
||||
android:label="Weather 5"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/weather5_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<receiver
|
||||
android:name=".widgets.froggy.FroggyWidgetReceiver"
|
||||
android:label="Froggy"
|
||||
android:exported="true">
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/froggy_widget_info" />
|
||||
</receiver>
|
||||
android:name=".ForegroundService"
|
||||
android:enabled="true"
|
||||
android:exported="false" />
|
||||
|
||||
</application>
|
||||
|
||||
<queries>
|
||||
<intent>
|
||||
<action android:name="nodomain.freeyourgadget.gadgetbridge.ACTION_GENERIC_WEATHER" />
|
||||
</intent>
|
||||
</queries>
|
||||
</manifest>
|
||||
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1 @@
|
||||
//STORE ALL KEYS
|
||||
@@ -0,0 +1,880 @@
|
||||
|
||||
const DefaultLocation = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
|
||||
let currentApiKeyIndex = 0;
|
||||
|
||||
let currentKeyMoonIndex = 0;
|
||||
let currentAstronomyKeyIndex = 0;
|
||||
|
||||
|
||||
function handleStorageChange(event) {
|
||||
if (event.key === 'SelectedTempUnit' ||
|
||||
event.key === 'SelectedWindUnit' ||
|
||||
event.key === 'selectedVisibilityUnit' ||
|
||||
event.key === 'selectedTimeMode'||
|
||||
event.key === 'selectedPrecipitationUnit' ||
|
||||
event.key === 'DefaultLocation'||
|
||||
event.key === 'UseBackgroundAnimations'||
|
||||
event.key === 'selectedMainWeatherProvider' ||
|
||||
event.key === 'ApiForAccu' ||
|
||||
event.key === 'selectedPressureUnit') {
|
||||
|
||||
setTimeout(()=>{
|
||||
window.location.reload();
|
||||
|
||||
sendThemeToAndroid('overcast')
|
||||
}, 1500);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('storage', handleStorageChange);
|
||||
|
||||
|
||||
|
||||
let anim = null;
|
||||
|
||||
function ShowError() {
|
||||
|
||||
document.querySelector('.no_internet_error').hidden = false;
|
||||
|
||||
if (anim) {
|
||||
return;
|
||||
}
|
||||
|
||||
var animationContainer = document.getElementById('error_img_cat');
|
||||
var animationData = 'icons/error-cat.json';
|
||||
|
||||
anim = bodymovin.loadAnimation({
|
||||
container: animationContainer,
|
||||
renderer: 'svg',
|
||||
loop: true,
|
||||
autoplay: true,
|
||||
path: animationData
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
let currentLocation = null;
|
||||
|
||||
function useAutoCurrentLocation(){
|
||||
showLoader();
|
||||
if ("geolocation" in navigator) {
|
||||
navigator.geolocation.getCurrentPosition((position) => {
|
||||
currentLocation = {
|
||||
latitude: position.coords.latitude,
|
||||
longitude: position.coords.longitude
|
||||
};
|
||||
DecodeWeather(currentLocation.latitude, currentLocation.longitude);
|
||||
|
||||
document.getElementById('city-name').innerHTML = 'Current location';
|
||||
document.getElementById('SelectedLocationText').innerHTML = 'Current location';
|
||||
localStorage.setItem('CurrentLocationName', 'Current location')
|
||||
document.getElementById('currentLocationName').textContent = 'Current location';
|
||||
|
||||
if( !DefaultLocation || DefaultLocation.name === 'CurrentDeviceLocation' ){
|
||||
localStorage.setItem('DefaultLocation', JSON.stringify({ lat: currentLocation.latitude, lon: currentLocation.longitude, name: 'CurrentDeviceLocation' }));
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if(navigator.onLine){
|
||||
localStorage.setItem('DeviceOnline', 'Yes');
|
||||
if(DefaultLocation){
|
||||
if(DefaultLocation.name === 'CurrentDeviceLocation'){
|
||||
useAutoCurrentLocation()
|
||||
sendThemeToAndroid("ReqLocation")
|
||||
document.querySelector('.currentLocationdiv').hidden = false;
|
||||
} else if(DefaultLocation.lat && DefaultLocation.lon){
|
||||
DecodeWeather(DefaultLocation.lat, DefaultLocation.lon)
|
||||
|
||||
|
||||
document.getElementById('city-name').innerHTML = DefaultLocation.name;
|
||||
document.getElementById('SelectedLocationText').innerHTML = DefaultLocation.name;
|
||||
localStorage.setItem('CurrentLocationName', DefaultLocation.name)
|
||||
document.getElementById('currentLocationName').textContent = DefaultLocation.name
|
||||
}
|
||||
}
|
||||
else{
|
||||
useAutoCurrentLocation()
|
||||
sendThemeToAndroid("ReqLocation")
|
||||
document.querySelector('.currentLocationdiv').hidden = false;
|
||||
}
|
||||
} else{
|
||||
localStorage.setItem('DeviceOnline', 'No');
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
renderOfflineData();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function handleGeolocationError(error) {
|
||||
console.error('Error getting geolocation:', error);
|
||||
displayErrorMessage('Error getting geolocation. Please enable location services.');
|
||||
}
|
||||
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const cityInput = document.getElementById('city-input');
|
||||
const cityList = document.getElementById('city-list');
|
||||
const cityopen = document.getElementById('city-open');
|
||||
const searchContainer = document.getElementById('search-container');
|
||||
const closeButton = document.querySelector('.close_search');
|
||||
const openMapPicker = document.getElementById('openMapPicker');
|
||||
|
||||
cityopen.addEventListener("click", () => {
|
||||
|
||||
if(navigator.onLine){
|
||||
let savedLocations = JSON.parse(localStorage.getItem('savedLocations')) || [];
|
||||
|
||||
localStorage.setItem('DeviceOnline', 'Yes');
|
||||
searchContainer.style.display = 'block';
|
||||
window.history.pushState({ SearchContainerOpen: true }, "");
|
||||
document.querySelector('.header_hold').style.transform = 'scale(1.1)';
|
||||
document.querySelector('.header_hold').style.opacity = '0';
|
||||
|
||||
setTimeout(() => {
|
||||
document.querySelector('.header_hold').style.transform = '';
|
||||
document.querySelector('.header_hold').style.opacity = '';
|
||||
|
||||
|
||||
if (savedLocations.length === 0) {
|
||||
cityInput.focus()
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}, 400);
|
||||
|
||||
|
||||
} else{
|
||||
ToastAndroidShow.ShowToast('No internet', 'long');
|
||||
return;
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
closeButton.addEventListener('click', () => {
|
||||
|
||||
window.history.back()
|
||||
});
|
||||
|
||||
|
||||
openMapPicker.addEventListener('click', () => {
|
||||
document.querySelector('.map_picker').hidden = false;
|
||||
window.history.pushState({ MapPickerContainerOpen: true }, "");
|
||||
|
||||
removeMap()
|
||||
|
||||
setTimeout(() => {
|
||||
RenderSearhMap()
|
||||
}, 400);
|
||||
});
|
||||
|
||||
let debounceTimeout;
|
||||
|
||||
cityInput.addEventListener('input', () => {
|
||||
const searchTerm = cityInput.value.trim();
|
||||
document.querySelector('.currentLocationdiv').hidden = true;
|
||||
document.querySelector('.savedLocations').hidden = true;
|
||||
|
||||
clearTimeout(debounceTimeout);
|
||||
|
||||
if (searchTerm && searchTerm.length > 2) {
|
||||
document.getElementById('cityLoader').hidden = false;
|
||||
|
||||
debounceTimeout = setTimeout(() => {
|
||||
getCitySuggestions(cityInput.value);
|
||||
}, 500);
|
||||
} else {
|
||||
cityList.innerHTML = '';
|
||||
document.getElementById('cityLoader').hidden = true;
|
||||
document.querySelector('.currentLocationdiv').hidden = false;
|
||||
document.querySelector('.savedLocations').hidden = false;
|
||||
|
||||
|
||||
setTimeout(()=>{
|
||||
cityList.innerHTML = '';
|
||||
}, 200)
|
||||
|
||||
setTimeout(()=>{
|
||||
cityList.innerHTML = '';
|
||||
}, 400)
|
||||
|
||||
setTimeout(()=>{
|
||||
cityList.innerHTML = '';
|
||||
}, 600)
|
||||
|
||||
|
||||
let savedLocations = JSON.parse(localStorage.getItem('savedLocations')) || [];
|
||||
|
||||
if (savedLocations.length === 0) {
|
||||
document.querySelector('.savedLocations').hidden = true;
|
||||
} else {
|
||||
document.querySelector('.savedLocations').hidden = false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
cityInput.addEventListener('keypress', (event) => {
|
||||
const searchTerm = cityInput.value.trim();
|
||||
document.querySelector('.currentLocationdiv').hidden = true;
|
||||
|
||||
if (event.key === 'Enter') {
|
||||
if (searchTerm) {
|
||||
document.getElementById('cityLoader').hidden = false;
|
||||
setTimeout(()=>{
|
||||
getCitySuggestions(cityInput.value);
|
||||
}, 500);
|
||||
} else {
|
||||
cityList.innerHTML = '';
|
||||
document.getElementById('cityLoader').hidden = true;
|
||||
document.querySelector('.currentLocationdiv').hidden = false;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
async function getCitySuggestions(query) {
|
||||
const url = `https://geocoding-api.open-meteo.com/v1/search?name=${query}&count=5`;
|
||||
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
const data = await response.json();
|
||||
displaySuggestions(data.results);
|
||||
} catch (error) {
|
||||
console.error('Error fetching city suggestions:', error);
|
||||
}
|
||||
}
|
||||
|
||||
function displaySuggestions(results) {
|
||||
const suggestionsContainer = document.getElementById('city-list');
|
||||
clearSuggestions();
|
||||
|
||||
const displayedSuggestions = new Set();
|
||||
|
||||
const savedLocations = JSON.parse(localStorage.getItem('savedLocations')) || [];
|
||||
const savedLocationsSet = new Set(savedLocations.map(location => location.locationName));
|
||||
|
||||
results.forEach(result => {
|
||||
const city = result.name;
|
||||
const state = result.admin1 || result.admin2 || result.admin3;
|
||||
const country = result.country;
|
||||
const countryCode = result.country_code.toLowerCase();
|
||||
|
||||
const uniqueComponents = [city, state, country].filter((value, index, self) => value && self.indexOf(value) === index);
|
||||
const suggestionText = uniqueComponents.join(', ');
|
||||
|
||||
if (!displayedSuggestions.has(suggestionText)) {
|
||||
displayedSuggestions.add(suggestionText);
|
||||
|
||||
const suggestionItem = document.createElement('div');
|
||||
const clickLocation = document.createElement('savelocationtouch');
|
||||
const saveBtnLocation = document.createElement('md-text-button');
|
||||
saveBtnLocation.textContent = 'Save';
|
||||
|
||||
if (!savedLocationsSet.has(suggestionText)) {
|
||||
saveBtnLocation.hidden = false;
|
||||
} else {
|
||||
saveBtnLocation.hidden = true;
|
||||
}
|
||||
|
||||
const createGap = document.createElement('flex');
|
||||
const countryIcon = document.createElement('span');
|
||||
countryIcon.classList.add('fi', 'fis', `fi-${countryCode}`);
|
||||
|
||||
suggestionItem.classList.add('suggestion-item');
|
||||
const suggestRipple = document.createElement('md-ripple');
|
||||
suggestRipple.style = '--md-ripple-pressed-opacity: 0.1;';
|
||||
suggestionItem.textContent = suggestionText;
|
||||
|
||||
clickLocation.appendChild(suggestRipple);
|
||||
suggestionItem.setAttribute('data-lat', result.latitude);
|
||||
suggestionItem.setAttribute('data-lon', result.longitude);
|
||||
|
||||
clickLocation.addEventListener('click', function () {
|
||||
DecodeWeather(result.latitude, result.longitude);
|
||||
cityList.innerHTML = '';
|
||||
cityInput.value = '';
|
||||
document.getElementById('city-name').innerHTML = suggestionText;
|
||||
|
||||
document.querySelector('.focus-input').blur();
|
||||
document.getElementById('forecast').scrollLeft = 0;
|
||||
document.getElementById('weather_wrap').scrollTop = 0;
|
||||
window.history.back();
|
||||
|
||||
setTimeout(() => {
|
||||
cityInput.dispatchEvent(new Event('input'));
|
||||
}, 200);
|
||||
});
|
||||
|
||||
saveBtnLocation.addEventListener('click', () => {
|
||||
saveLocationToContainer(suggestionText, result.latitude, result.longitude);
|
||||
cityList.innerHTML = '';
|
||||
cityInput.value = '';
|
||||
|
||||
setTimeout(() => {
|
||||
cityInput.dispatchEvent(new Event('input'));
|
||||
}, 200);
|
||||
});
|
||||
|
||||
suggestionItem.appendChild(countryIcon);
|
||||
suggestionItem.appendChild(clickLocation);
|
||||
suggestionItem.appendChild(createGap);
|
||||
suggestionItem.appendChild(saveBtnLocation);
|
||||
suggestionsContainer.appendChild(suggestionItem);
|
||||
|
||||
setTimeout(() => {
|
||||
document.getElementById('cityLoader').hidden = true;
|
||||
}, 400);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function clearSuggestions() {
|
||||
const suggestionsContainer = document.getElementById('city-list');
|
||||
while (suggestionsContainer.firstChild) {
|
||||
suggestionsContainer.removeChild(suggestionsContainer.firstChild);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function saveLocationToContainer(locationName, lat, lon) {
|
||||
let savedLocations = JSON.parse(localStorage.getItem('savedLocations')) || [];
|
||||
savedLocations.push({ locationName, lat, lon });
|
||||
localStorage.setItem('savedLocations', JSON.stringify(savedLocations));
|
||||
|
||||
const savedLocationsHolder = document.querySelector('savedLocationsHolder');
|
||||
|
||||
savedLocationsHolder.innerHTML = ''
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
loadSavedLocations()
|
||||
}, 200)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function loadSavedLocations() {
|
||||
const savedLocationsHolder = document.querySelector('savedLocationsHolder');
|
||||
const savedLocations = JSON.parse(localStorage.getItem('savedLocations')) || [];
|
||||
|
||||
if (savedLocations.length === 0) {
|
||||
document.querySelector('.savedLocations').hidden = true;
|
||||
} else {
|
||||
document.querySelector('.savedLocations').hidden = false;
|
||||
}
|
||||
|
||||
const currentTime = new Date().getTime();
|
||||
|
||||
savedLocations.forEach(location => {
|
||||
const savedLocationItem = document.createElement('savedLocationItem');
|
||||
savedLocationItem.setAttribute('lat', location.lat);
|
||||
savedLocationItem.setAttribute('lon', location.lon);
|
||||
|
||||
const savedLocationItemLat = savedLocationItem.getAttribute('lat');
|
||||
const savedLocationItemLon = savedLocationItem.getAttribute('lon');
|
||||
|
||||
let tempSaved, conditionSaved, tempSavedMet, conditionSavedMet;
|
||||
|
||||
const cacheKey = `weatherData_${location.locationName}`;
|
||||
const cachedData = JSON.parse(localStorage.getItem(cacheKey));
|
||||
const cacheTime = localStorage.getItem(`${cacheKey}_timestamp`);
|
||||
|
||||
if (cachedData && cacheTime && (currentTime - cacheTime) < 1800000) { // 30 minutes in milliseconds
|
||||
// Use cached data
|
||||
displayWeatherData(cachedData, savedLocationItem, location.locationName);
|
||||
} else {
|
||||
// Fetch new data
|
||||
if (localStorage.getItem('selectedMainWeatherProvider') === 'Met norway') {
|
||||
fetch(`https://api.met.no/weatherapi/locationforecast/2.0/complete?lat=${savedLocationItemLat}&lon=${savedLocationItemLon}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const mainTempMet = data.properties.timeseries[0].data.instant.details;
|
||||
|
||||
tempSavedMet = SelectedTempUnit === 'fahrenheit'
|
||||
? Math.round(celsiusToFahrenheit(mainTempMet.air_temperature))
|
||||
: Math.round(mainTempMet.air_temperature);
|
||||
|
||||
conditionSavedMet = getMetNorwayWeatherLabelInLang(data.properties.timeseries[0].data.next_1_hours.summary.symbol_code, 'en');
|
||||
|
||||
const weatherData = {
|
||||
temp: tempSavedMet,
|
||||
condition: conditionSavedMet,
|
||||
icon: getMetNorwayIcons(data.properties.timeseries[0].data.next_1_hours.summary.symbol_code)
|
||||
};
|
||||
|
||||
// Cache data
|
||||
localStorage.setItem(cacheKey, JSON.stringify(weatherData));
|
||||
localStorage.setItem(`${cacheKey}_timestamp`, currentTime);
|
||||
|
||||
displayWeatherData(weatherData, savedLocationItem, location.locationName);
|
||||
});
|
||||
} else {
|
||||
fetch(`https://api.open-meteo.com/v1/forecast?latitude=${savedLocationItemLat}&longitude=${savedLocationItemLon}¤t=temperature_2m,is_day,weather_code`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
tempSaved = SelectedTempUnit === 'fahrenheit'
|
||||
? Math.round(celsiusToFahrenheit(data.current.temperature_2m))
|
||||
: Math.round(data.current.temperature_2m);
|
||||
|
||||
conditionSaved = getWeatherLabelInLangNoAnim(data.current.weather_code, data.current.is_day, localStorage.getItem('AppLanguageCode'));
|
||||
|
||||
const weatherData = {
|
||||
temp: tempSaved,
|
||||
condition: conditionSaved,
|
||||
icon: GetWeatherIcon(data.current.weather_code, data.current.is_day)
|
||||
};
|
||||
|
||||
// Cache data
|
||||
localStorage.setItem(cacheKey, JSON.stringify(weatherData));
|
||||
localStorage.setItem(`${cacheKey}_timestamp`, currentTime);
|
||||
|
||||
displayWeatherData(weatherData, savedLocationItem, location.locationName);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
savedLocationsHolder.append(savedLocationItem);
|
||||
});
|
||||
}
|
||||
|
||||
function displayWeatherData(weatherData, savedLocationItem, locationName) {
|
||||
savedLocationItem.innerHTML = `
|
||||
<savedlocationimg>
|
||||
<img src="${weatherData.icon}" alt="">
|
||||
</savedlocationimg>
|
||||
<div>
|
||||
<p>${locationName}</p>
|
||||
<span>${weatherData.condition}</span>
|
||||
<mainCurrenttempSaved>${weatherData.temp}°</mainCurrenttempSaved>
|
||||
</div>
|
||||
<flex></flex>
|
||||
<md-icon-button class="delete-btn">
|
||||
<md-icon icon-filled>delete</md-icon>
|
||||
</md-icon-button>`;
|
||||
|
||||
savedLocationItem.querySelector('.delete-btn').addEventListener('click', () => {
|
||||
deleteLocation(locationName);
|
||||
savedLocationItem.remove();
|
||||
});
|
||||
|
||||
const savelocationtouch = document.createElement('savelocationtouch');
|
||||
const md_rippleSaveLocationTouch = document.createElement('md-ripple');
|
||||
savelocationtouch.appendChild(md_rippleSaveLocationTouch);
|
||||
|
||||
savelocationtouch.addEventListener('click', () => {
|
||||
DecodeWeather(savedLocationItem.getAttribute('lat'), savedLocationItem.getAttribute('lon'));
|
||||
document.getElementById('city-name').innerHTML = locationName;
|
||||
document.getElementById('forecast').scrollLeft = 0;
|
||||
document.getElementById('weather_wrap').scrollTop = 0;
|
||||
window.history.back();
|
||||
});
|
||||
|
||||
savedLocationItem.appendChild(savelocationtouch);
|
||||
}
|
||||
|
||||
|
||||
document.addEventListener('DOMContentLoaded', (event) => {
|
||||
loadSavedLocations();
|
||||
});
|
||||
|
||||
function deleteLocation(locationName) {
|
||||
let savedLocations = JSON.parse(localStorage.getItem('savedLocations')) || [];
|
||||
|
||||
savedLocations = savedLocations.filter(location => location.locationName !== locationName);
|
||||
|
||||
localStorage.setItem('savedLocations', JSON.stringify(savedLocations));
|
||||
|
||||
if (savedLocations.length === 0) {
|
||||
document.querySelector('.savedLocations').hidden = true;
|
||||
document.getElementById('edit_saved_locations').selected = false;
|
||||
|
||||
} else {
|
||||
document.querySelector('.savedLocations').hidden = false;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
window.addEventListener('popstate', function (event) {
|
||||
|
||||
if (!document.querySelector('.map_picker').hidden) {
|
||||
document.querySelector('.map_picker').style.opacity = '0';
|
||||
document.querySelector('.map_picker').style.transform = 'scale(0.8)';
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
document.querySelector('.map_picker').hidden = true;
|
||||
document.querySelector('.map_picker').style.opacity = '';
|
||||
document.querySelector('.map_picker').style.transform = '';
|
||||
|
||||
}, 300);
|
||||
} else {
|
||||
document.getElementById('search-container').style.opacity = '0'
|
||||
setTimeout(() => {
|
||||
document.getElementById('modal-content').scrollTop = 0;
|
||||
document.getElementById('city-input').value = ''
|
||||
document.getElementById('city-input').dispatchEvent(new Event('input'));
|
||||
document.getElementById('search-container').style.display = 'none'
|
||||
document.getElementById('search-container').style.opacity = '1'
|
||||
|
||||
}, 300);
|
||||
}
|
||||
});
|
||||
|
||||
function getCountryName(code) {
|
||||
return countryNames[code] || "Unknown Country";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function getCurrentLocationWeather() {
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(position => {
|
||||
const latitude = position.coords.latitude;
|
||||
const longitude = position.coords.longitude;
|
||||
DecodeWeather(latitude, longitude); // Call getWeatherByCoordinates with coordinates
|
||||
|
||||
|
||||
}, handleGeolocationError);
|
||||
} else {
|
||||
console.error('Geolocation is not supported by this browser.');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function showLoader() {
|
||||
const loaderContainer = document.getElementById('loader-container');
|
||||
loaderContainer.style.display = 'flex';
|
||||
loaderContainer.style.opacity = '1';
|
||||
document.querySelector('rainmeterbar').scrollLeft = 0
|
||||
|
||||
}
|
||||
|
||||
// Hide the loader
|
||||
function hideLoader() {
|
||||
const loaderContainer = document.getElementById('loader-container');
|
||||
|
||||
loaderContainer.style.opacity = '0';
|
||||
|
||||
setTimeout(() => {
|
||||
loaderContainer.style.display = 'none';
|
||||
|
||||
}, 300);
|
||||
|
||||
|
||||
let savedLocations = JSON.parse(localStorage.getItem('savedLocations')) || [];
|
||||
|
||||
if (savedLocations.length === 0) {
|
||||
document.querySelector('.savedLocations').hidden = true;
|
||||
} else {
|
||||
document.querySelector('.savedLocations').hidden = false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function refreshWeather(){
|
||||
if(navigator.onLine){
|
||||
const latSend = localStorage.getItem('currentLat')
|
||||
const longSend = localStorage.getItem('currentLong')
|
||||
|
||||
DecodeWeather(latSend, longSend)
|
||||
|
||||
setTimeout(()=>{
|
||||
document.querySelector('.refresh_weat').disabled = true;
|
||||
}, 200);
|
||||
|
||||
setTimeout(()=>{
|
||||
document.querySelector('.refresh_weat').disabled = false;
|
||||
}, 300000);
|
||||
} else{
|
||||
ToastAndroidShow.ShowToast('Cache refreshed', 'long');
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
function sendThemeToAndroid(theme) {
|
||||
|
||||
AndroidInterface.updateStatusBarColor(theme);
|
||||
};
|
||||
function Toast(toastText, time){
|
||||
ToastAndroidShow.ShowToast(toastText, time);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// map
|
||||
|
||||
var map;
|
||||
|
||||
function darkModeTileLayer(urlTemplate) {
|
||||
const filterStyle = 'invert(100%) hue-rotate(180deg) brightness(95%) contrast(90%)';
|
||||
|
||||
return window.L.tileLayer(urlTemplate, {
|
||||
}).addTo(map).getContainer().style.filter = filterStyle;
|
||||
}
|
||||
|
||||
function RenderSearhMap() {
|
||||
const latDif = localStorage.getItem('currentLat');
|
||||
const longDif = localStorage.getItem('currentLong');
|
||||
|
||||
map = window.L.map('map', {
|
||||
center: [latDif, longDif],
|
||||
zoom: 8,
|
||||
zoomControl: false
|
||||
});
|
||||
|
||||
darkModeTileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png');
|
||||
|
||||
var marker = window.L.marker([latDif, longDif]).addTo(map);
|
||||
|
||||
map.on('click', function(e) {
|
||||
var lat = e.latlng.lat;
|
||||
var lon = e.latlng.lng;
|
||||
|
||||
marker.setLatLng([lat, lon]);
|
||||
window.history.back();
|
||||
|
||||
document.getElementById('search-container').style.opacity = '0';
|
||||
|
||||
setTimeout(() => {
|
||||
window.history.back();
|
||||
}, 500);
|
||||
|
||||
DecodeWeather(lat, lon);
|
||||
|
||||
|
||||
document.getElementById('forecast').scrollLeft = 0;
|
||||
document.getElementById('weather_wrap').scrollTop = 0;
|
||||
});
|
||||
}
|
||||
|
||||
function removeMap() {
|
||||
if (map) {
|
||||
map.remove();
|
||||
map = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function checkNoInternet() {
|
||||
if (navigator.onLine) {
|
||||
localStorage.setItem('DeviceOnline', 'Yes');
|
||||
} else {
|
||||
const offlineData = JSON.parse(localStorage.getItem('OfflineData'));
|
||||
if (!offlineData) {
|
||||
ShowError();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
checkNoInternet()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
document.addEventListener('DOMContentLoaded', async function() {
|
||||
|
||||
const currentVersion = 'v1.7.9';
|
||||
const githubRepo = 'PranshulGG/WeatherMaster';
|
||||
const releasesUrl = `https://api.github.com/repos/${githubRepo}/releases/latest`;
|
||||
|
||||
try {
|
||||
const response = await fetch(releasesUrl);
|
||||
if (!response.ok) throw new Error('Network response was not ok.');
|
||||
|
||||
const data = await response.json();
|
||||
const latestVersion = data.tag_name;
|
||||
|
||||
|
||||
|
||||
if (latestVersion !== currentVersion) {
|
||||
|
||||
|
||||
if(localStorage.getItem('HideNewUpdateToast') === 'true'){
|
||||
document.querySelector('.new_ver_download').hidden = false;
|
||||
|
||||
setTimeout(()=>{
|
||||
document.querySelector('.new_ver_download').hidden = true;
|
||||
}, 5000);
|
||||
} else{
|
||||
document.querySelector('.new_ver_download').hidden = false;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
document.querySelector('.new_ver_download').hidden = true;
|
||||
return
|
||||
}
|
||||
}catch (error) {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
const scrollView = document.querySelector('.insights');
|
||||
|
||||
|
||||
const scrollIndicators = document.getElementById('scroll-indicators');
|
||||
|
||||
function saveScrollPosition() {
|
||||
const scrollPosition = scrollView.scrollLeft;
|
||||
localStorage.setItem('scrollPosition', scrollPosition);
|
||||
}
|
||||
|
||||
function restoreScrollPosition() {
|
||||
const savedScrollPosition = localStorage.getItem('scrollPosition');
|
||||
if (savedScrollPosition) {
|
||||
scrollView.scrollLeft = savedScrollPosition;
|
||||
}
|
||||
}
|
||||
|
||||
function createScrollDots(){
|
||||
const sections = document.querySelectorAll('.insights_item');
|
||||
|
||||
|
||||
sections.forEach((section, index) => {
|
||||
const dot = document.createElement('span');
|
||||
const dotValue = document.createElement('div');
|
||||
dot.classList.add('dot');
|
||||
dotValue.classList.add('dotValue')
|
||||
dot.onclick = () => {
|
||||
section.scrollIntoView({ behavior: 'smooth' });
|
||||
};
|
||||
scrollIndicators.appendChild(dot);
|
||||
dot.appendChild(dotValue)
|
||||
});
|
||||
}
|
||||
|
||||
const updateActiveIndicator = () => {
|
||||
const scrollPosition = Math.round(scrollView.scrollLeft / scrollView.offsetWidth);
|
||||
const dotsValue = document.querySelectorAll('.dotValue');
|
||||
dotsValue.forEach((dotValue, index) => {
|
||||
if (index === scrollPosition) {
|
||||
dotValue.style.transform = 'scale(1)';
|
||||
} else {
|
||||
dotValue.style.transform = 'scale(0)';
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
function debounce(func, delay) {
|
||||
let inDebounce;
|
||||
return function() {
|
||||
const context = this, args = arguments;
|
||||
clearTimeout(inDebounce);
|
||||
inDebounce = setTimeout(() => func.apply(context, args), delay);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
scrollView.addEventListener('scroll', debounce(saveScrollPosition, 200));
|
||||
scrollView.addEventListener('scroll', updateActiveIndicator);
|
||||
|
||||
document.addEventListener('DOMContentLoaded', ()=>{
|
||||
createScrollDots()
|
||||
updateActiveIndicator();
|
||||
restoreScrollPosition();
|
||||
});
|
||||
|
||||
|
||||
document.getElementById('edit_saved_locations').addEventListener('click', ()=>{
|
||||
|
||||
const allDeleteBtns = document.querySelectorAll('.delete-btn');
|
||||
|
||||
const allTempsSaved = document.querySelectorAll('maincurrenttempsaved');
|
||||
|
||||
if(document.getElementById('edit_saved_locations').selected){
|
||||
|
||||
allDeleteBtns.forEach((deletebtns)=>{
|
||||
deletebtns.style.display = 'flex'
|
||||
})
|
||||
|
||||
allTempsSaved.forEach((TempsSaved)=>{
|
||||
TempsSaved.style.display = 'none'
|
||||
})
|
||||
|
||||
} else{
|
||||
allDeleteBtns.forEach((deletebtns)=>{
|
||||
deletebtns.style.display = 'none'
|
||||
})
|
||||
|
||||
allTempsSaved.forEach((TempsSaved)=>{
|
||||
TempsSaved.style.display = 'block'
|
||||
})
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
function ReturnHomeLocation(){
|
||||
|
||||
const Locations = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
DecodeWeather(Locations.lat, Locations.lon)
|
||||
|
||||
document.getElementById('city-name').innerHTML = Locations.name;
|
||||
document.getElementById('SelectedLocationText').innerHTML = Locations.name;
|
||||
localStorage.setItem('CurrentLocationName', Locations.name)
|
||||
}
|
||||
|
||||
if(localStorage.getItem('removedOldSavedLocations') && localStorage.getItem('removedOldSavedLocations') === 'removed'){
|
||||
localStorage.removeItem('savedLocations');
|
||||
|
||||
setTimeout(()=>{
|
||||
localStorage.getItem('removedOldSavedLocations', 'removed')
|
||||
}, 300);
|
||||
} else{
|
||||
localStorage.getItem('removedOldSavedLocations', 'removed')
|
||||
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
const themeStyle = localStorage.getItem('weatherTHEME')
|
||||
|
||||
document.documentElement.setAttribute('iconCodeTheme', themeStyle);
|
||||
@@ -0,0 +1,252 @@
|
||||
const countryNames = {
|
||||
"BD": "Bangladesh",
|
||||
"BE": "Belgium",
|
||||
"BF": "Burkina Faso",
|
||||
"BG": "Bulgaria",
|
||||
"BA": "Bosnia and Herzegovina",
|
||||
"BB": "Barbados",
|
||||
"WF": "Wallis and Futuna",
|
||||
"BL": "Saint Barthelemy",
|
||||
"BM": "Bermuda",
|
||||
"BN": "Brunei",
|
||||
"BO": "Bolivia",
|
||||
"BH": "Bahrain",
|
||||
"BI": "Burundi",
|
||||
"BJ": "Benin",
|
||||
"BT": "Bhutan",
|
||||
"JM": "Jamaica",
|
||||
"BV": "Bouvet Island",
|
||||
"BW": "Botswana",
|
||||
"WS": "Samoa",
|
||||
"BQ": "Bonaire, Saint Eustatius and Saba ",
|
||||
"BR": "Brazil",
|
||||
"BS": "Bahamas",
|
||||
"JE": "Jersey",
|
||||
"BY": "Belarus",
|
||||
"BZ": "Belize",
|
||||
"RU": "Russia",
|
||||
"RW": "Rwanda",
|
||||
"RS": "Serbia",
|
||||
"TL": "East Timor",
|
||||
"RE": "Reunion",
|
||||
"TM": "Turkmenistan",
|
||||
"TJ": "Tajikistan",
|
||||
"RO": "Romania",
|
||||
"TK": "Tokelau",
|
||||
"GW": "Guinea-Bissau",
|
||||
"GU": "Guam",
|
||||
"GT": "Guatemala",
|
||||
"GS": "South Georgia and the South Sandwich Islands",
|
||||
"GR": "Greece",
|
||||
"GQ": "Equatorial Guinea",
|
||||
"GP": "Guadeloupe",
|
||||
"JP": "Japan",
|
||||
"GY": "Guyana",
|
||||
"GG": "Guernsey",
|
||||
"GF": "French Guiana",
|
||||
"GE": "Georgia",
|
||||
"GD": "Grenada",
|
||||
"GB": "United Kingdom",
|
||||
"GA": "Gabon",
|
||||
"SV": "El Salvador",
|
||||
"GN": "Guinea",
|
||||
"GM": "Gambia",
|
||||
"GL": "Greenland",
|
||||
"GI": "Gibraltar",
|
||||
"GH": "Ghana",
|
||||
"OM": "Oman",
|
||||
"TN": "Tunisia",
|
||||
"JO": "Jordan",
|
||||
"HR": "Croatia",
|
||||
"HT": "Haiti",
|
||||
"HU": "Hungary",
|
||||
"HK": "Hong Kong",
|
||||
"HN": "Honduras",
|
||||
"HM": "Heard Island and McDonald Islands",
|
||||
"VE": "Venezuela",
|
||||
"PR": "Puerto Rico",
|
||||
"PS": "Palestinian Territory",
|
||||
"PW": "Palau",
|
||||
"PT": "Portugal",
|
||||
"SJ": "Svalbard and Jan Mayen",
|
||||
"PY": "Paraguay",
|
||||
"IQ": "Iraq",
|
||||
"PA": "Panama",
|
||||
"PF": "French Polynesia",
|
||||
"PG": "Papua New Guinea",
|
||||
"PE": "Peru",
|
||||
"PK": "Pakistan",
|
||||
"PH": "Philippines",
|
||||
"PN": "Pitcairn",
|
||||
"PL": "Poland",
|
||||
"PM": "Saint Pierre and Miquelon",
|
||||
"ZM": "Zambia",
|
||||
"EH": "Western Sahara",
|
||||
"EE": "Estonia",
|
||||
"EG": "Egypt",
|
||||
"ZA": "South Africa",
|
||||
"EC": "Ecuador",
|
||||
"IT": "Italy",
|
||||
"VN": "Vietnam",
|
||||
"SB": "Solomon Islands",
|
||||
"ET": "Ethiopia",
|
||||
"SO": "Somalia",
|
||||
"ZW": "Zimbabwe",
|
||||
"SA": "Saudi Arabia",
|
||||
"ES": "Spain",
|
||||
"ER": "Eritrea",
|
||||
"ME": "Montenegro",
|
||||
"MD": "Moldova",
|
||||
"MG": "Madagascar",
|
||||
"MF": "Saint Martin",
|
||||
"MA": "Morocco",
|
||||
"MC": "Monaco",
|
||||
"UZ": "Uzbekistan",
|
||||
"MM": "Myanmar",
|
||||
"ML": "Mali",
|
||||
"MO": "Macao",
|
||||
"MN": "Mongolia",
|
||||
"MH": "Marshall Islands",
|
||||
"MK": "Macedonia",
|
||||
"MU": "Mauritius",
|
||||
"MT": "Malta",
|
||||
"MW": "Malawi",
|
||||
"MV": "Maldives",
|
||||
"MQ": "Martinique",
|
||||
"MP": "Northern Mariana Islands",
|
||||
"MS": "Montserrat",
|
||||
"MR": "Mauritania",
|
||||
"IM": "Isle of Man",
|
||||
"UG": "Uganda",
|
||||
"TZ": "Tanzania",
|
||||
"MY": "Malaysia",
|
||||
"MX": "Mexico",
|
||||
"IL": "Israel",
|
||||
"FR": "France",
|
||||
"IO": "British Indian Ocean Territory",
|
||||
"SH": "Saint Helena",
|
||||
"FI": "Finland",
|
||||
"FJ": "Fiji",
|
||||
"FK": "Falkland Islands",
|
||||
"FM": "Micronesia",
|
||||
"FO": "Faroe Islands",
|
||||
"NI": "Nicaragua",
|
||||
"NL": "Netherlands",
|
||||
"NO": "Norway",
|
||||
"NA": "Namibia",
|
||||
"VU": "Vanuatu",
|
||||
"NC": "New Caledonia",
|
||||
"NE": "Niger",
|
||||
"NF": "Norfolk Island",
|
||||
"NG": "Nigeria",
|
||||
"NZ": "New Zealand",
|
||||
"NP": "Nepal",
|
||||
"NR": "Nauru",
|
||||
"NU": "Niue",
|
||||
"CK": "Cook Islands",
|
||||
"XK": "Kosovo",
|
||||
"CI": "Ivory Coast",
|
||||
"CH": "Switzerland",
|
||||
"CO": "Colombia",
|
||||
"CN": "China",
|
||||
"CM": "Cameroon",
|
||||
"CL": "Chile",
|
||||
"CC": "Cocos Islands",
|
||||
"CA": "Canada",
|
||||
"CG": "Republic of the Congo",
|
||||
"CF": "Central African Republic",
|
||||
"CD": "Democratic Republic of the Congo",
|
||||
"CZ": "Czech Republic",
|
||||
"CY": "Cyprus",
|
||||
"CX": "Christmas Island",
|
||||
"CR": "Costa Rica",
|
||||
"CW": "Curacao",
|
||||
"CV": "Cape Verde",
|
||||
"CU": "Cuba",
|
||||
"SZ": "Swaziland",
|
||||
"SY": "Syria",
|
||||
"SX": "Sint Maarten",
|
||||
"KG": "Kyrgyzstan",
|
||||
"KE": "Kenya",
|
||||
"SS": "South Sudan",
|
||||
"SR": "Suriname",
|
||||
"KI": "Kiribati",
|
||||
"KH": "Cambodia",
|
||||
"KN": "Saint Kitts and Nevis",
|
||||
"KM": "Comoros",
|
||||
"ST": "Sao Tome and Principe",
|
||||
"SK": "Slovakia",
|
||||
"KR": "South Korea",
|
||||
"SI": "Slovenia",
|
||||
"KP": "North Korea",
|
||||
"KW": "Kuwait",
|
||||
"SN": "Senegal",
|
||||
"SM": "San Marino",
|
||||
"SL": "Sierra Leone",
|
||||
"SC": "Seychelles",
|
||||
"KZ": "Kazakhstan",
|
||||
"KY": "Cayman Islands",
|
||||
"SG": "Singapore",
|
||||
"SE": "Sweden",
|
||||
"SD": "Sudan",
|
||||
"DO": "Dominican Republic",
|
||||
"DM": "Dominica",
|
||||
"DJ": "Djibouti",
|
||||
"DK": "Denmark",
|
||||
"VG": "British Virgin Islands",
|
||||
"DE": "Germany",
|
||||
"YE": "Yemen",
|
||||
"DZ": "Algeria",
|
||||
"US": "United States",
|
||||
"UY": "Uruguay",
|
||||
"YT": "Mayotte",
|
||||
"UM": "United States Minor Outlying Islands",
|
||||
"LB": "Lebanon",
|
||||
"LC": "Saint Lucia",
|
||||
"LA": "Laos",
|
||||
"TV": "Tuvalu",
|
||||
"TW": "Taiwan",
|
||||
"TT": "Trinidad and Tobago",
|
||||
"TR": "Turkey",
|
||||
"LK": "Sri Lanka",
|
||||
"LI": "Liechtenstein",
|
||||
"LV": "Latvia",
|
||||
"TO": "Tonga",
|
||||
"LT": "Lithuania",
|
||||
"LU": "Luxembourg",
|
||||
"LR": "Liberia",
|
||||
"LS": "Lesotho",
|
||||
"TH": "Thailand",
|
||||
"TF": "French Southern Territories",
|
||||
"TG": "Togo",
|
||||
"TD": "Chad",
|
||||
"TC": "Turks and Caicos Islands",
|
||||
"LY": "Libya",
|
||||
"VA": "Vatican",
|
||||
"VC": "Saint Vincent and the Grenadines",
|
||||
"AE": "United Arab Emirates",
|
||||
"AD": "Andorra",
|
||||
"AG": "Antigua and Barbuda",
|
||||
"AF": "Afghanistan",
|
||||
"AI": "Anguilla",
|
||||
"VI": "U.S. Virgin Islands",
|
||||
"IS": "Iceland",
|
||||
"IR": "Iran",
|
||||
"AM": "Armenia",
|
||||
"AL": "Albania",
|
||||
"AO": "Angola",
|
||||
"AQ": "Antarctica",
|
||||
"AS": "American Samoa",
|
||||
"AR": "Argentina",
|
||||
"AU": "Australia",
|
||||
"AT": "Austria",
|
||||
"AW": "Aruba",
|
||||
"IN": "India",
|
||||
"AX": "Aland Islands",
|
||||
"AZ": "Azerbaijan",
|
||||
"IE": "Ireland",
|
||||
"ID": "Indonesia",
|
||||
"UA": "Ukraine",
|
||||
"QA": "Qatar",
|
||||
"MZ": "Mozambique"
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
let combinedData = {
|
||||
hourlyData: null,
|
||||
dailyData: null
|
||||
};
|
||||
|
||||
function ReportFromhourly(data) {
|
||||
combinedData.hourlyData = data;
|
||||
|
||||
GenerateSummary(combinedData);
|
||||
}
|
||||
|
||||
function ReportFromdaily(data) {
|
||||
combinedData.dailyData = data;
|
||||
|
||||
GenerateSummary(combinedData);
|
||||
}
|
||||
|
||||
function GenerateSummary(data) {
|
||||
let hourlyWeather = getWeatherLabelInLangNoAnimText(data.hourlyData, 1, 'en');
|
||||
let dailyWeather = getWeatherLabelInLangNoAnim(data.dailyData, 1, 'en');
|
||||
|
||||
let weatherComment = '';
|
||||
|
||||
if (hourlyWeather === dailyWeather) {
|
||||
weatherComment = `Looks ${hourlyWeather} throughout the day.`;
|
||||
} else {
|
||||
weatherComment = `Looks ${hourlyWeather} and ${dailyWeather} throughout the day.`;
|
||||
}
|
||||
|
||||
document.getElementById('weatherComments').innerHTML = `
|
||||
${weatherComment}
|
||||
<space></space>
|
||||
<md-icon icon-outlined id="arrow_up_toggle">keyboard_arrow_down</md-icon>
|
||||
`;
|
||||
}
|
||||
@@ -0,0 +1,729 @@
|
||||
|
||||
function getCountryName(code) {
|
||||
return countryNames[code] || "Unknown Country";
|
||||
}
|
||||
|
||||
|
||||
async function DecodeWeather(lat, lon) {
|
||||
const apiKey = 'KEYS';
|
||||
const url = `https://api.timezonedb.com/v2.1/get-time-zone?key=${apiKey}&format=json&by=position&lat=${lat}&lng=${lon}`;
|
||||
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
const data = await response.json();
|
||||
|
||||
if (data.status === 'OK') {
|
||||
FetchWeather(lat, lon, data.zoneName)
|
||||
} else {
|
||||
console.error('Error fetching timezone:', data);
|
||||
DecodeWeather(lat, lon)
|
||||
return null;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error:', error);
|
||||
DecodeWeather(lat, lon)
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function FetchWeather(lat, lon, timezone) {
|
||||
showLoader();
|
||||
|
||||
localStorage.setItem('currentLong', lon)
|
||||
localStorage.setItem('currentLat', lat)
|
||||
|
||||
fetch(`https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}¤t=temperature_2m,is_day,apparent_temperature,pressure_msl,relative_humidity_2m,precipitation,weather_code,cloud_cover,wind_speed_10m,wind_direction_10m,wind_gusts_10m&hourly=wind_speed_10m,wind_direction_10m,relative_humidity_2m,pressure_msl,cloud_cover,temperature_2m,dew_point_2m,apparent_temperature,precipitation_probability,precipitation,weather_code,visibility,uv_index&daily=weather_code,temperature_2m_max,temperature_2m_min,sunrise,sunset,daylight_duration,uv_index_max,precipitation_sum,daylight_duration,precipitation_probability_max,precipitation_hours,wind_speed_10m_max,wind_gusts_10m_max&timezone=${timezone}&forecast_days=14&forecast_hours=24`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
|
||||
|
||||
|
||||
// send hour
|
||||
|
||||
if (localStorage.getItem('selectedMainWeatherProvider') === 'Met norway') {
|
||||
FetchWeatherMetNorway(lat, lon)
|
||||
CurrentWeather(data.current, data.daily.sunrise[0], data.daily.sunset[0])
|
||||
localStorage.setItem('DailyWeatherCache', JSON.stringify(data.daily));
|
||||
UvIndex(data.hourly.uv_index[0])
|
||||
DailyWeather(data.daily)
|
||||
saveCache(lat, lon, timezone)
|
||||
localStorage.setItem('CurrentHourlyCache', JSON.stringify(data.hourly))
|
||||
document.querySelector('.data_provider_name_import').innerHTML = 'Data by Met norway';
|
||||
|
||||
} else if(localStorage.getItem('ApiForAccu') && localStorage.getItem('selectedMainWeatherProvider') === 'Accuweather') {
|
||||
FetchWeatherAccuweather(lat, lon)
|
||||
CurrentWeather(data.current, data.daily.sunrise[0], data.daily.sunset[0])
|
||||
localStorage.setItem('DailyWeatherCache', JSON.stringify(data.daily));
|
||||
UvIndex(data.hourly.uv_index[0])
|
||||
DailyWeather(data.daily)
|
||||
saveCache(lat, lon, timezone)
|
||||
localStorage.setItem('CurrentHourlyCache', JSON.stringify(data.hourly))
|
||||
document.querySelector('.data_provider_name_import').innerHTML = 'Data by Accuweather';
|
||||
}
|
||||
else {
|
||||
DailyWeather(data.daily)
|
||||
HourlyWeather(data);
|
||||
localStorage.setItem('DailyWeatherCache', JSON.stringify(data.daily));
|
||||
localStorage.setItem('CurrentHourlyCache', JSON.stringify(data.hourly))
|
||||
saveCache(lat, lon, timezone)
|
||||
CurrentWeather(data.current, data.daily.sunrise[0], data.daily.sunset[0])
|
||||
document.querySelector('.data_provider_name_import').innerHTML = 'Data by Open-Meteo';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
const checkIFitsSavedLocation = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
function isApproxEqual(val1, val2, epsilon = 0.0001) {
|
||||
return Math.abs(val1 - val2) < epsilon;
|
||||
}
|
||||
|
||||
if (checkIFitsSavedLocation) {
|
||||
const savedLat = parseFloat(checkIFitsSavedLocation.lat);
|
||||
const savedLon = parseFloat(checkIFitsSavedLocation.lon);
|
||||
const savedName = checkIFitsSavedLocation.name;
|
||||
|
||||
if ((savedLat !== undefined && savedLon !== undefined && isApproxEqual(lat, savedLat) && isApproxEqual(lon, savedLon))) {
|
||||
cacheOfflineCurrentData(data, data.daily, data.current, data.daily.sunrise[0], data.daily.sunset[0], new Date().toISOString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
FetchAirQuality(lat, lon, timezone)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
MoreDetails(lat, lon)
|
||||
|
||||
|
||||
function MoreDetails(latSum, lonSum) {
|
||||
fetch(`https://api.weatherapi.com/v1/forecast.json?key=KEYS&q=${latSum},${lonSum}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
MoreDetailsRender(data)
|
||||
|
||||
const checkIFitsSavedLocation = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
function isApproxEqual(val1, val2, epsilon = 0.0001) {
|
||||
return Math.abs(val1 - val2) < epsilon;
|
||||
}
|
||||
|
||||
if (checkIFitsSavedLocation) {
|
||||
const savedLat = parseFloat(checkIFitsSavedLocation.lat);
|
||||
const savedLon = parseFloat(checkIFitsSavedLocation.lon);
|
||||
const savedName = checkIFitsSavedLocation.name;
|
||||
|
||||
if ((savedLat !== undefined && savedLon !== undefined && isApproxEqual(lat, savedLat) && isApproxEqual(lon, savedLon))) {
|
||||
localStorage.setItem('OfflineMoreDetailsSummaryData', JSON.stringify(data));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
astronomyData(lat, lon)
|
||||
|
||||
|
||||
function astronomyData(latSum, lonSum) {
|
||||
fetch(`https://api.weatherapi.com/v1/astronomy.json?key=KEYS&q=${latSum},${lonSum}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
|
||||
astronomyDataRender(data)
|
||||
|
||||
|
||||
const checkIFitsSavedLocation = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
function isApproxEqual(val1, val2, epsilon = 0.0001) {
|
||||
return Math.abs(val1 - val2) < epsilon;
|
||||
}
|
||||
|
||||
if (checkIFitsSavedLocation) {
|
||||
const savedLat = parseFloat(checkIFitsSavedLocation.lat);
|
||||
const savedLon = parseFloat(checkIFitsSavedLocation.lon);
|
||||
const savedName = checkIFitsSavedLocation.name;
|
||||
|
||||
if ((savedLat !== undefined && savedLon !== undefined && isApproxEqual(lat, savedLat) && isApproxEqual(lon, savedLon))) {
|
||||
localStorage.setItem('OfflineastronomyData', JSON.stringify(data));
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
FetchAlert(lat, lon)
|
||||
|
||||
|
||||
const weatherCodeGroups = {
|
||||
"0": [0],
|
||||
"1": [1],
|
||||
"2": [2],
|
||||
"3": [3],
|
||||
"45": [45],
|
||||
"48": [48],
|
||||
"51": [51],
|
||||
"53": [53],
|
||||
"55": [55],
|
||||
"56": [56],
|
||||
"57": [57],
|
||||
"61": [61],
|
||||
"63": [63],
|
||||
"65": [65],
|
||||
"66": [66],
|
||||
"67": [67],
|
||||
"71": [71],
|
||||
"73": [73],
|
||||
"75": [75],
|
||||
"77": [77],
|
||||
"80": [80],
|
||||
"81": [81],
|
||||
"82": [82],
|
||||
"85": [85],
|
||||
"86": [86],
|
||||
"95": [95],
|
||||
"96": [96],
|
||||
"99": [99]
|
||||
};
|
||||
|
||||
|
||||
let groupCounts = {};
|
||||
Object.keys(weatherCodeGroups).forEach(group => {
|
||||
groupCounts[group] = 0;
|
||||
});
|
||||
|
||||
data.hourly.weather_code.forEach((code) => {
|
||||
if (groupCounts[code] !== undefined) {
|
||||
groupCounts[code]++;
|
||||
}
|
||||
});
|
||||
|
||||
const mostFrequentGroup = Object.keys(groupCounts).reduce((a, b) => groupCounts[a] > groupCounts[b] ? a : b);
|
||||
const selectedWeatherCode = mostFrequentGroup;
|
||||
|
||||
|
||||
ReportFromhourly(selectedWeatherCode);
|
||||
|
||||
let Visibility;
|
||||
let VisibilityUnit;
|
||||
|
||||
|
||||
if (SelectedVisibiltyUnit === 'mileV') {
|
||||
Visibility = Math.round(data.hourly.visibility[0] / 1609.34);
|
||||
VisibilityUnit = 'miles'
|
||||
} else {
|
||||
Visibility = Math.round(data.hourly.visibility[0] / 1000);
|
||||
VisibilityUnit = 'km'
|
||||
|
||||
}
|
||||
|
||||
|
||||
document.getElementById('unit_visibility').innerHTML = VisibilityUnit
|
||||
document.getElementById('min-temp').innerHTML = Visibility
|
||||
|
||||
let DewPointTemp
|
||||
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
DewPointTemp = Math.round(celsiusToFahrenheit(data.hourly.dew_point_2m[0]))
|
||||
|
||||
} else {
|
||||
DewPointTemp = Math.round(data.hourly.dew_point_2m[0])
|
||||
|
||||
}
|
||||
|
||||
document.getElementById('dew_percentage').innerHTML = DewPointTemp + '°'
|
||||
|
||||
|
||||
hideLoader()
|
||||
}).catch(error =>{
|
||||
ShowError()
|
||||
document.getElementById('error_text_content').innerHTML = error
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
|
||||
// get airquality
|
||||
|
||||
function FetchAirQuality(lat, lon, timezone) {
|
||||
|
||||
fetch(`https://air-quality-api.open-meteo.com/v1/air-quality?latitude=${lat}&longitude=${lon}¤t=us_aqi,pm10,pm2_5,carbon_monoxide,nitrogen_dioxide,sulphur_dioxide,ozone,alder_pollen,birch_pollen,grass_pollen,mugwort_pollen,olive_pollen,ragweed_pollen&timezone=${timezone}&forecast_hours=1`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
|
||||
AirQuaility(data)
|
||||
|
||||
|
||||
const checkIFitsSavedLocation = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
function isApproxEqual(val1, val2, epsilon = 0.0001) {
|
||||
return Math.abs(val1 - val2) < epsilon;
|
||||
}
|
||||
|
||||
if (checkIFitsSavedLocation) {
|
||||
const savedLat = parseFloat(checkIFitsSavedLocation.lat);
|
||||
const savedLon = parseFloat(checkIFitsSavedLocation.lon);
|
||||
const savedName = checkIFitsSavedLocation.name;
|
||||
|
||||
if ((savedLat !== undefined && savedLon !== undefined && isApproxEqual(lat, savedLat) && isApproxEqual(lon, savedLon))) {
|
||||
localStorage.setItem('airQualityData', JSON.stringify(data));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
// selected location toggle
|
||||
|
||||
function seeSelectedLocation(){
|
||||
document.querySelector('selectLocationText').hidden = false;
|
||||
document.querySelector('selectLocationTextOverlay').hidden = false;
|
||||
|
||||
document.querySelector('.header_hold').style.transform = 'scale(1.1)';
|
||||
document.querySelector('.header_hold').style.opacity = '0';
|
||||
|
||||
|
||||
}
|
||||
|
||||
function seeSelectedLocationClose(){
|
||||
document.querySelector('selectLocationTextOverlay').hidden = true;
|
||||
document.querySelector('selectLocationText').hidden = true;
|
||||
document.querySelector('.header_hold').style.transform = '';
|
||||
document.querySelector('.header_hold').style.opacity = '';
|
||||
}
|
||||
|
||||
document.querySelector('selectLocationTextOverlay').addEventListener('click', ()=>{
|
||||
seeSelectedLocationClose()
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
function saveCache(lat, lon, timezone) {
|
||||
|
||||
fetch(`https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}&hourly=relative_humidity_2m,pressure_msl,cloud_cover,temperature_2m,dew_point_2m,apparent_temperature,precipitation_probability,precipitation,weather_code,visibility,uv_index&timezone=${timezone}&forecast_days=14`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
|
||||
|
||||
localStorage.setItem('HourlyWeatherCache', JSON.stringify(data.hourly));
|
||||
|
||||
const checkIFitsSavedLocation = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
function isApproxEqual(val1, val2, epsilon = 0.0001) {
|
||||
return Math.abs(val1 - val2) < epsilon;
|
||||
}
|
||||
|
||||
if (checkIFitsSavedLocation) {
|
||||
const savedLat = parseFloat(checkIFitsSavedLocation.lat);
|
||||
const savedLon = parseFloat(checkIFitsSavedLocation.lon);
|
||||
const savedName = checkIFitsSavedLocation.name;
|
||||
|
||||
if ((savedLat !== undefined && savedLon !== undefined && isApproxEqual(lat, savedLat) && isApproxEqual(lon, savedLon))) {
|
||||
localStorage.setItem('OfflinesaveCache', JSON.stringify(data.hourly));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
// fetch using met-norway
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function FetchWeatherMetNorway(lat, lon) {
|
||||
fetch(`https://api.met.no/weatherapi/locationforecast/2.0/complete?lat=${lat}&lon=${lon}`)
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
const currentData = data.properties.timeseries[0];
|
||||
const hourlyData = data.properties.timeseries.slice(0, 24);
|
||||
const dailyData = data.properties.timeseries.filter((entry, index) => index % 24 === 0);
|
||||
|
||||
renderCurrentDataMetNorway(currentData);
|
||||
renderHourlyDataMetNorway(hourlyData);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// fetch ussing accuweather
|
||||
|
||||
|
||||
|
||||
|
||||
function FetchWeatherAccuweather(lat, lon) {
|
||||
const apiKey = localStorage.getItem('ApiForAccu');
|
||||
|
||||
|
||||
const geoPositionUrl = `https://dataservice.accuweather.com/locations/v1/cities/geoposition/search?apikey=${apiKey}&q=${lat},${lon}`;
|
||||
|
||||
fetch(geoPositionUrl)
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok ' + response.statusText);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(locationData => {
|
||||
const locationKey = locationData.Key;
|
||||
FetchWeatherAccuweatherCurrent(locationKey)
|
||||
const hourlyForecastUrl = `https://dataservice.accuweather.com/forecasts/v1/hourly/12hour/${locationKey}?apikey=${apiKey}&metric=true`;
|
||||
|
||||
return fetch(hourlyForecastUrl);
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(forecastData => {
|
||||
DisplayHourlyAccuweatherData(forecastData)
|
||||
|
||||
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('There was a problem with the fetch operation:', error);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function FetchWeatherAccuweatherCurrent(location_key) {
|
||||
const locationKey = location_key;
|
||||
const apiKey = localStorage.getItem('ApiForAccu');
|
||||
|
||||
const weatherUrl = `https://dataservice.accuweather.com/currentconditions/v1/${locationKey}?apikey=${apiKey}`;
|
||||
|
||||
fetch(weatherUrl)
|
||||
.then(response => {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok ' + response.statusText);
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(data => {
|
||||
DisplayCurrentAccuweatherData(data)
|
||||
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('There was a problem with the fetch operation:', error);
|
||||
ToastAndroidShow.ShowToast('API Error, switching to open-meteo', 'long');
|
||||
localStorage.setItem('selectedMainWeatherProvider', 'open-meteo');
|
||||
setTimeout(()=>{
|
||||
DecodeWeather(lat, lon)
|
||||
}, 200);
|
||||
});
|
||||
}
|
||||
|
||||
// offline caching
|
||||
|
||||
function cacheOfflineCurrentData(hourlyOffline, dailyOffline, dailyCurrent, dailySunrise, dailySunset, timestamp){
|
||||
|
||||
localStorage.setItem('OfflineData', JSON.stringify({ hourlyOffline: hourlyOffline, dailyOffline: dailyOffline, dailyCurrent: dailyCurrent, dailySunrise: dailySunrise, dailySunset: dailySunset, timestamp: timestamp }));
|
||||
|
||||
// create notification for current location
|
||||
|
||||
setTimeout(()=>{
|
||||
sendNotificationData()
|
||||
}, 670);
|
||||
|
||||
|
||||
|
||||
function sendNotificationData() {
|
||||
|
||||
const SelectedTempUnit = localStorage.getItem('SelectedTempUnit');
|
||||
const NotificationlocationName = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
const AirQuailityDataNotification = JSON.parse(localStorage.getItem('airQualityData'))
|
||||
|
||||
let NotificationTemp;
|
||||
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
NotificationTemp = Math.round(celsiusToFahrenheit(dailyCurrent.temperature_2m))
|
||||
} else {
|
||||
NotificationTemp = Math.round(dailyCurrent.temperature_2m)
|
||||
}
|
||||
|
||||
|
||||
let location
|
||||
|
||||
if (NotificationlocationName.name === 'CurrentDeviceLocation') {
|
||||
location = 'Device';
|
||||
} else {
|
||||
location = NotificationlocationName.name;
|
||||
|
||||
}
|
||||
|
||||
let TempMinNoti
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
TempMinNoti = Math.round(celsiusToFahrenheit(dailyOffline.temperature_2m_min[0]))
|
||||
} else {
|
||||
TempMinNoti = Math.round(dailyOffline.temperature_2m_min[0])
|
||||
}
|
||||
|
||||
let TempMaxNoti
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
TempMaxNoti = Math.round(celsiusToFahrenheit(dailyOffline.temperature_2m_max[0]))
|
||||
} else {
|
||||
TempMaxNoti = Math.round(dailyOffline.temperature_2m_max[0])
|
||||
}
|
||||
|
||||
const aqi = AirQuailityDataNotification.current.us_aqi
|
||||
|
||||
|
||||
|
||||
let aqiCategoryLevel;
|
||||
|
||||
if (aqi <= 50) {
|
||||
aqiCategoryLevel = 'Good';
|
||||
} else if (aqi <= 100) {
|
||||
aqiCategoryLevel = 'Fair';
|
||||
} else if (aqi <= 150) {
|
||||
aqiCategoryLevel = 'Moderate';
|
||||
} else if (aqi <= 200) {
|
||||
aqiCategoryLevel = 'Poor';
|
||||
} else {
|
||||
aqiCategoryLevel = 'Very poor';
|
||||
}
|
||||
|
||||
|
||||
createNotification(NotificationTemp, getWeatherLabelInLangNoAnim(dailyCurrent.weather_code, 1, 'en'), location, `Max: ${TempMaxNoti}° Min: ${TempMinNoti}°`, aqiCategoryLevel, dailyCurrent.weather_code, dailyCurrent.is_day)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function renderOfflineData(){
|
||||
const OfflineDataTotal = JSON.parse(localStorage.getItem('OfflineData'))
|
||||
const AirQuailityDataOffline = JSON.parse(localStorage.getItem('airQualityData'))
|
||||
const OfflineMoreDetailsSummaryData = JSON.parse(localStorage.getItem('OfflineMoreDetailsSummaryData'));
|
||||
const OfflineastronomyData = JSON.parse(localStorage.getItem('OfflineastronomyData'));
|
||||
const OfflinesaveCache = JSON.parse(localStorage.getItem('OfflinesaveCache'));
|
||||
|
||||
const offlineDatalocationName = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
|
||||
localStorage.setItem('DailyWeatherCache', JSON.stringify(OfflineDataTotal.dailyOffline));
|
||||
localStorage.setItem('CurrentHourlyCache', JSON.stringify(OfflineDataTotal.hourlyOffline.hourly));
|
||||
localStorage.setItem('HourlyWeatherCache', JSON.stringify(OfflinesaveCache));
|
||||
|
||||
if(offlineDatalocationName.lon && offlineDatalocationName.lat){
|
||||
localStorage.setItem('currentLong', offlineDatalocationName.lon)
|
||||
localStorage.setItem('currentLat', offlineDatalocationName.lat)
|
||||
}
|
||||
|
||||
function timeAgo(timestamp) {
|
||||
const now = new Date();
|
||||
const updatedTime = new Date(timestamp);
|
||||
const diffInSeconds = Math.floor((now - updatedTime) / 1000);
|
||||
|
||||
const units = [
|
||||
{ name: "day", seconds: 86400 },
|
||||
{ name: "hour", seconds: 3600 },
|
||||
{ name: "minute", seconds: 60 },
|
||||
{ name: "second", seconds: 1 }
|
||||
];
|
||||
|
||||
for (let unit of units) {
|
||||
const amount = Math.floor(diffInSeconds / unit.seconds);
|
||||
if (amount >= 1) {
|
||||
return `${amount} ${unit.name}${amount > 1 ? 's' : ''} ago`;
|
||||
}
|
||||
}
|
||||
|
||||
return "just now";
|
||||
}
|
||||
|
||||
setTimeout(()=>{
|
||||
document.getElementById('last_updated').innerHTML = `Updated, ${timeAgo(timestamp)}`;
|
||||
}, 500);
|
||||
|
||||
|
||||
if (offlineDatalocationName.name === 'CurrentDeviceLocation') {
|
||||
document.getElementById('city-name').innerHTML = 'Current location';
|
||||
document.getElementById('SelectedLocationText').innerHTML = 'Current location';
|
||||
document.getElementById('currentLocationName').textContent = 'Current location';
|
||||
} else {
|
||||
document.getElementById('city-name').innerHTML = offlineDatalocationName.name;
|
||||
document.getElementById('SelectedLocationText').innerHTML = offlineDatalocationName.name;
|
||||
document.getElementById('currentLocationName').textContent = offlineDatalocationName.name;
|
||||
}
|
||||
|
||||
HourlyWeather(OfflineDataTotal.hourlyOffline)
|
||||
DailyWeather(OfflineDataTotal.dailyOffline)
|
||||
CurrentWeather(OfflineDataTotal.dailyCurrent, OfflineDataTotal.dailySunrise, OfflineDataTotal.dailySunset)
|
||||
AirQuaility(AirQuailityDataOffline)
|
||||
MoreDetailsRender(OfflineMoreDetailsSummaryData)
|
||||
astronomyDataRender(OfflineastronomyData)
|
||||
|
||||
|
||||
let DewPointTemp
|
||||
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
DewPointTemp = Math.round(celsiusToFahrenheit(OfflineDataTotal.hourlyOffline.hourly.dew_point_2m[0]))
|
||||
|
||||
} else {
|
||||
DewPointTemp = Math.round(OfflineDataTotal.hourlyOffline.hourly.dew_point_2m[0])
|
||||
|
||||
}
|
||||
|
||||
document.getElementById('dew_percentage').innerHTML = DewPointTemp + '°'
|
||||
|
||||
|
||||
const weatherCodeGroups = {
|
||||
"0": [0],
|
||||
"1": [1],
|
||||
"2": [2],
|
||||
"3": [3],
|
||||
"45": [45],
|
||||
"48": [48],
|
||||
"51": [51],
|
||||
"53": [53],
|
||||
"55": [55],
|
||||
"56": [56],
|
||||
"57": [57],
|
||||
"61": [61],
|
||||
"63": [63],
|
||||
"65": [65],
|
||||
"66": [66],
|
||||
"67": [67],
|
||||
"71": [71],
|
||||
"73": [73],
|
||||
"75": [75],
|
||||
"77": [77],
|
||||
"80": [80],
|
||||
"81": [81],
|
||||
"82": [82],
|
||||
"85": [85],
|
||||
"86": [86],
|
||||
"95": [95],
|
||||
"96": [96],
|
||||
"99": [99]
|
||||
};
|
||||
|
||||
|
||||
let groupCounts = {};
|
||||
Object.keys(weatherCodeGroups).forEach(group => {
|
||||
groupCounts[group] = 0;
|
||||
});
|
||||
|
||||
OfflineDataTotal.hourlyOffline.hourly.weather_code.forEach((code) => {
|
||||
if (groupCounts[code] !== undefined) {
|
||||
groupCounts[code]++;
|
||||
}
|
||||
});
|
||||
|
||||
const mostFrequentGroup = Object.keys(groupCounts).reduce((a, b) => groupCounts[a] > groupCounts[b] ? a : b);
|
||||
const selectedWeatherCode = mostFrequentGroup;
|
||||
|
||||
|
||||
ReportFromhourly(selectedWeatherCode);
|
||||
|
||||
let Visibility;
|
||||
let VisibilityUnit;
|
||||
|
||||
|
||||
if (SelectedVisibiltyUnit === 'mileV') {
|
||||
Visibility = Math.round(OfflineDataTotal.hourlyOffline.hourly.visibility[0] / 1609.34);
|
||||
VisibilityUnit = 'miles'
|
||||
} else {
|
||||
Visibility = Math.round(OfflineDataTotal.hourlyOffline.hourly.visibility[0] / 1000);
|
||||
VisibilityUnit = 'km'
|
||||
|
||||
}
|
||||
|
||||
|
||||
document.getElementById('unit_visibility').innerHTML = VisibilityUnit
|
||||
document.getElementById('min-temp').innerHTML = Visibility
|
||||
|
||||
// notification
|
||||
|
||||
sendNotificationData()
|
||||
|
||||
function sendNotificationData() {
|
||||
|
||||
const SelectedTempUnit = localStorage.getItem('SelectedTempUnit');
|
||||
const NotificationlocationName = JSON.parse(localStorage.getItem('DefaultLocation'));
|
||||
const AirQuailityDataNotification = JSON.parse(localStorage.getItem('airQualityData'))
|
||||
|
||||
let NotificationTemp;
|
||||
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
NotificationTemp = Math.round(celsiusToFahrenheit(OfflineDataTotal.dailyCurrent.temperature_2m))
|
||||
} else {
|
||||
NotificationTemp = Math.round(OfflineDataTotal.dailyCurrent.temperature_2m)
|
||||
}
|
||||
|
||||
|
||||
let location
|
||||
|
||||
if (NotificationlocationName.name === 'CurrentDeviceLocation') {
|
||||
location = 'Device';
|
||||
} else {
|
||||
location = NotificationlocationName.name;
|
||||
|
||||
}
|
||||
|
||||
let TempMinNoti
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
TempMinNoti = Math.round(celsiusToFahrenheit(OfflineDataTotal.dailyOffline.temperature_2m_min[0]))
|
||||
} else {
|
||||
TempMinNoti = Math.round(OfflineDataTotal.dailyOffline.temperature_2m_min[0])
|
||||
}
|
||||
|
||||
let TempMaxNoti
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
TempMaxNoti = Math.round(celsiusToFahrenheit(OfflineDataTotal.dailyOffline.temperature_2m_max[0]))
|
||||
} else {
|
||||
TempMaxNoti = Math.round(OfflineDataTotal.dailyOffline.temperature_2m_max[0])
|
||||
}
|
||||
|
||||
const aqi = AirQuailityDataNotification.current.us_aqi
|
||||
|
||||
|
||||
|
||||
let aqiCategoryLevel;
|
||||
|
||||
if (aqi <= 50) {
|
||||
aqiCategoryLevel = 'Good';
|
||||
} else if (aqi <= 100) {
|
||||
aqiCategoryLevel = 'Fair';
|
||||
} else if (aqi <= 150) {
|
||||
aqiCategoryLevel = 'Moderate';
|
||||
} else if (aqi <= 200) {
|
||||
aqiCategoryLevel = 'Poor';
|
||||
} else {
|
||||
aqiCategoryLevel = 'Very poor';
|
||||
}
|
||||
|
||||
|
||||
createNotification(NotificationTemp, getWeatherLabelInLangNoAnim(OfflineDataTotal.dailyCurrent.weather_code, 1, 'en'), location, `Max: ${TempMaxNoti}° Min: ${TempMinNoti}°`, aqiCategoryLevel, OfflineDataTotal.dailyCurrent.weather_code, OfflineDataTotal.dailyCurrent.is_day)
|
||||
}
|
||||
|
||||
hideLoader()
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
|
||||
|
||||
|
||||
|
||||
window.transitionToPage = function(href) {
|
||||
|
||||
document.querySelector('body').style.opacity = '0';
|
||||
|
||||
setTimeout(function() {
|
||||
window.location.href = href
|
||||
|
||||
}, 500);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function(event) {
|
||||
|
||||
document.querySelector('body').style.opacity = '1';
|
||||
|
||||
});
|
||||
@@ -0,0 +1,664 @@
|
||||
const SelectedTempUnit = localStorage.getItem('SelectedTempUnit');
|
||||
const SelectedWindUnit = localStorage.getItem('SelectedWindUnit');
|
||||
const SelectedPrecipitationUnit = localStorage.getItem('selectedPrecipitationUnit');
|
||||
const SelectedPressureUnit = localStorage.getItem('selectedPressureUnit');
|
||||
const cachedData = JSON.parse(localStorage.getItem('DailyWeatherCache'));
|
||||
const cachedDataHourly = JSON.parse(localStorage.getItem('HourlyWeatherCache'));
|
||||
const timeFormat = localStorage.getItem('selectedTimeMode');
|
||||
|
||||
|
||||
// icons
|
||||
|
||||
function GetWeatherIcon(iconCode, isDay) {
|
||||
|
||||
|
||||
if (isDay === 1) {
|
||||
if (iconCode === 0) {
|
||||
return '../weather-icons/clear_day.svg';
|
||||
} else if (iconCode === 1) {
|
||||
return '../weather-icons/mostly_clear_day.svg';
|
||||
} else if (iconCode === 2) {
|
||||
return '../weather-icons/partly_cloudy_day.svg';
|
||||
|
||||
} else if (iconCode === 3) {
|
||||
return '../weather-icons/cloudy.svg';
|
||||
|
||||
} else if (iconCode === 45 || iconCode === 48) {
|
||||
return '../weather-icons/haze_fog_dust_smoke.svg';
|
||||
|
||||
} else if (iconCode === 51 || iconCode === 53 || iconCode === 55) {
|
||||
|
||||
return '../weather-icons/drizzle.svg';
|
||||
|
||||
} else if (iconCode === 56 || iconCode === 57) {
|
||||
|
||||
return '../weather-icons/mixed_rain_hail_sleet.svg';
|
||||
|
||||
} else if (iconCode === 61 || iconCode === 63) {
|
||||
|
||||
return '../weather-icons/showers_rain.svg';
|
||||
|
||||
} else if (iconCode === 65) {
|
||||
|
||||
return '../weather-icons/heavy_rain.svg';
|
||||
|
||||
} else if (iconCode === 66 || iconCode === 67) {
|
||||
|
||||
return '../weather-icons/sleet_hail.svg';
|
||||
|
||||
} else if (iconCode === 71) {
|
||||
|
||||
return '../weather-icons/scattered_snow_showers_day.svg';
|
||||
|
||||
} else if (iconCode === 73) {
|
||||
|
||||
return '../weather-icons/showers_snow.svg';
|
||||
|
||||
} else if (iconCode === 75) {
|
||||
|
||||
return '../weather-icons/heavy_snow.svg';
|
||||
|
||||
} else if (iconCode === 77) {
|
||||
|
||||
return '../weather-icons/flurries.svg';
|
||||
|
||||
} else if (iconCode === 80 || iconCode === 81) {
|
||||
|
||||
return '../weather-icons/showers_rain.svg';
|
||||
|
||||
} else if (iconCode === 82) {
|
||||
|
||||
return '../weather-icons/heavy_rain.svg';
|
||||
|
||||
} else if (iconCode === 85) {
|
||||
|
||||
return '../weather-icons/showers_snow.svg';
|
||||
|
||||
} else if (iconCode === 86) {
|
||||
|
||||
return '../weather-icons/heavy_snow.svg';
|
||||
|
||||
} else if (iconCode === 95) {
|
||||
|
||||
return '../weather-icons/isolated_thunderstorms.svg'
|
||||
|
||||
} else if (iconCode === 96 || iconCode === 99) {
|
||||
|
||||
return '../weather-icons/strong_thunderstorms.svg'
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return iconCode
|
||||
}
|
||||
|
||||
// weather label
|
||||
|
||||
function GetWeatherLabel(iconCode, isDay) {
|
||||
|
||||
|
||||
if (isDay === 1) {
|
||||
if (iconCode === 0) {
|
||||
return 'clear_sky'
|
||||
|
||||
} else if (iconCode === 1) {
|
||||
return 'mostly_clear'
|
||||
|
||||
} else if (iconCode === 2) {
|
||||
return 'partly_cloudy'
|
||||
|
||||
} else if (iconCode === 3) {
|
||||
return 'overcast'
|
||||
|
||||
} else if (iconCode === 45 || iconCode === 48) {
|
||||
return 'fog'
|
||||
|
||||
} else if (iconCode === 51 || iconCode === 53 || iconCode === 55) {
|
||||
return 'drizzle'
|
||||
|
||||
} else if (iconCode === 56 || iconCode === 57) {
|
||||
return 'freezing_drizzle'
|
||||
|
||||
} else if (iconCode === 61 || iconCode === 63) {
|
||||
return 'moderate_rain'
|
||||
|
||||
} else if (iconCode === 65) {
|
||||
return 'heavy_intensity_rain'
|
||||
|
||||
} else if (iconCode === 66 || iconCode === 67) {
|
||||
return 'freezing_rain'
|
||||
|
||||
} else if (iconCode === 71) {
|
||||
return 'slight_snow'
|
||||
|
||||
} else if (iconCode === 73) {
|
||||
return 'moderate_snow'
|
||||
|
||||
} else if (iconCode === 75) {
|
||||
return 'heavy_intensity_snow'
|
||||
|
||||
} else if (iconCode === 77) {
|
||||
return 'snow_grains'
|
||||
|
||||
} else if (iconCode === 80 || iconCode === 81) {
|
||||
return 'rain_showers'
|
||||
|
||||
} else if (iconCode === 82) {
|
||||
return 'heavy_rain_showers'
|
||||
|
||||
} else if (iconCode === 85) {
|
||||
return 'slight_snow_showers'
|
||||
|
||||
} else if (iconCode === 86) {
|
||||
return 'heavy_snow_showers'
|
||||
|
||||
} else if (iconCode === 95) {
|
||||
return 'thunderstorm'
|
||||
|
||||
} else if (iconCode === 96 || iconCode === 99) {
|
||||
return 'strong_thunderstorm'
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getWeatherLabelInLang(iconCode, isDay, langCode) {
|
||||
const translationKey = GetWeatherLabel(iconCode, isDay);
|
||||
|
||||
const translatedLabel = getTranslationByLang(langCode, translationKey);
|
||||
|
||||
return translatedLabel || 'Unknown weather';
|
||||
}
|
||||
|
||||
|
||||
|
||||
// change ids same
|
||||
|
||||
const ConditionIcons = {
|
||||
|
||||
WindSockIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <symbol id="Winda" viewBox="0 0 342 234"> <!-- blow-1 --> <path d="M264.16,21.29A40,40,0,1,1,293,89H9" fill="none" stroke-dasharray="148" stroke="#e2e8f0" stroke-linecap="round" stroke-miterlimit="10" stroke-width="18"> <animate attributeName="stroke-dashoffset" values="0; 2960" dur="6s" repeatCount="indefinite"/> </path> <!-- blow-2 --> <path d="M148.16,212.71A40,40,0,1,0,177,145H9" fill="none" stroke-dasharray="110" stroke="#e2e8f0" stroke-linecap="round" stroke-miterlimit="10" stroke-width="18"> <animate attributeName="stroke-dashoffset" values="0; 1540" dur="6s" repeatCount="indefinite"/> </path> </symbol> </defs> <use width="342" height="234" transform="translate(85 139)" xlink:href="#Winda"/> </svg>',
|
||||
|
||||
PrecipitationAmountIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <linearGradient id="PrecipitationAmountIcona" x1="310.54" y1="152.47" x2="425.46" y2="351.53" gradientUnits="userSpaceOnUse"> <stop offset="0" stop-color="#d4d7dd"/> <stop offset="0.45" stop-color="#d4d7dd"/> <stop offset="1" stop-color="#bec1c6"/> </linearGradient> <clipPath id="PrecipitationAmountIconb"> <path fill="none"> <animate attributeName="d" values=" M168,252H344V380H168Z; M168,220H376V380H168Z; M168,252H344V380H168Z " dur="3s" calcMode="spline" keySplines=".42, 0, .58, 1; .42, 0, .58, 1" repeatCount="indefinite"/> </path> </clipPath> <symbol id="PrecipitationAmountIconc" viewBox="0 0 175 260.88"> <path d="M87.5,13.38c-48.7,72-80,117-80,160.75s35.79,79.25,80,79.25,80-35.47,80-79.25S136.2,85.35,87.5,13.38Z" fill="none" stroke="#2885c7" stroke-miterlimit="10" stroke-width="15"/> </symbol> </defs> <path d="M256,132c-48.7,72-80,117-80,160.75S211.79,372,256,372s80-35.47,80-79.25S304.7,204,256,132Z" fill="none" stroke="#e2e8f0" stroke-miterlimit="10" stroke-width="15"/> <path d="M352,132h32V372H352m8-120h24m-16,56h16M368,188h16" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="6" stroke="url(#PrecipitationAmountIcona)"/> <g clip-path="url(#PrecipitationAmountIconb)"> <use width="175" height="260.88" transform="translate(168.61 119.2)" xlink:href="#PrecipitationAmountIconc"/> </g> </svg>',
|
||||
|
||||
PrecipitationChancesIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <clipPath id="PrecipitationChancesIcona"> <path d="M302,137c-48.7,72-80,117-80,160.75S257.79,377,302,377V512H0V0H302Z" fill="none"> <animateTransform attributeName="transform" additive="sum" type="scale" values="1 1; 1 .95; 1 1" dur="6s" calcMode="spline" keySplines=".42, 0, .58, 1; .42, 0, .58, 1" repeatCount="indefinite"/> </path> </clipPath> <symbol id="PrecipitationChancesIconb" viewBox="0 0 175 260.88"> <path d="M87.5,13.38c-48.7,72-80,117-80,160.75s35.79,79.25,80,79.25,80-35.47,80-79.25S136.2,85.35,87.5,13.38Z" fill="none" stroke="#2885c7" stroke-miterlimit="10" stroke-width="15"/> </symbol> </defs> <use width="175" height="260.88" transform="translate(214.5 123.62)" xlink:href="#PrecipitationChancesIconb"> <animateTransform attributeName="transform" additive="sum" type="scale" values="1 1; 1 .9; 1 1" dur="6s" calcMode="spline" keySplines=".42, 0, .58, 1; .42, 0, .58, 1" repeatCount="indefinite"/> </use> <g clip-path="url(#PrecipitationChancesIcona)"> <use width="175" height="260.88" transform="translate(122.5 123.62)" xlink:href="#PrecipitationChancesIconb"> <animateTransform attributeName="transform" additive="sum" type="scale" values="1 .9; 1 1; 1 .9" dur="6s" calcMode="spline" keySplines=".42, 0, .58, 1; .42, 0, .58, 1" repeatCount="indefinite"/> </use> </g> </svg>',
|
||||
|
||||
PressureIcon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"> <!-- barometer --> <circle cx="256" cy="256" r="144" fill="none" stroke="#475569" stroke-miterlimit="10" stroke-width="12"/> <!-- values --> <path d="M256,200V152M364,256H316m-116,0H152m180-68-24,24m-104,0-24-24M308,300l24,24m-152,0,24-24" fill="none" stroke="#475569" stroke-linecap="round" stroke-linejoin="round" stroke-width="6"/> <!-- pointer-mount --> <circle cx="256" cy="256" r="24" fill="#ef4444"/> <!-- pointer --> <line x1="256" y1="284" x2="256" y2="164" fill="none" stroke="#ef4444" stroke-linecap="round" stroke-miterlimit="10" stroke-width="12"> <animateTransform attributeName="transform" dur="6s" values="-54 256 256; -15 256 256; -36 256 256; 36 256 256; 10 256 256; 115 256 256; -54 256 256" repeatCount="indefinite" type="rotate" calcMode="spline" keySplines=".42, 0, .58, 1; .42, 0, .58, 1; .42, 0, .58, 1; .42, 0, .58, 1; .42, 0, .58, 1; .42, 0, .58, 1" keyTimes="0; .17; .25; .42; .5; .67; 1"/> </line> </svg>',
|
||||
|
||||
CloudCoverIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <symbol id="a" viewBox="0 0 359 231"> <path d="M295.5,223.5a56,56,0,0,0,0-112c-.85,0-1.68.09-2.53.13A83.9,83.9,0,0,0,140.1,47.42,55.91,55.91,0,0,0,55.5,95.5a56.56,56.56,0,0,0,.8,9.08A60,60,0,0,0,67.5,223.5" fill="none" stroke="#e2e8f0" stroke-linecap="round" stroke-linejoin="round" stroke-width="15"/> </symbol> </defs> <use width="359" height="231" transform="translate(76.5 140.5)" xlink:href="#a"> <animateTransform attributeName="transform" additive="sum" type="translate" values="-18 0; 18 0; -18 0" dur="6s" repeatCount="indefinite"/> </use> </svg>',
|
||||
|
||||
HumidityIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <symbol id="HumidityIcona" viewBox="0 0 175 260.88"> <path d="M87.5,13.38c-48.7,72-80,117-80,160.75s35.79,79.25,80,79.25,80-35.47,80-79.25S136.2,85.35,87.5,13.38Z" fill="none" stroke="#2885c7" stroke-miterlimit="10" stroke-width="15"> <animateTransform attributeName="transform" additive="sum" type="scale" values="1 1; 1 .9; 1 1" dur="6s" calcMode="spline" keySplines=".42, 0, .58, 1; .42, 0, .58, 1" repeatCount="indefinite"/> </path> </symbol> </defs> <use width="175" height="260.88" transform="translate(168.4 123.18)" xlink:href="#HumidityIcona"/> <path d="M218.78,250.47q4.78-4.47,13.69-4.47t13.68,4.47q4.78,4.47,4.79,12.4v8q0,7.8-4.79,12.22t-13.68,4.41q-8.9,0-13.69-4.41T214,270.91v-8Q214,254.95,218.78,250.47ZM290,248.94a2.79,2.79,0,0,1-.55,2.61l-53,73.24a9.43,9.43,0,0,1-2.84,2.83,12.29,12.29,0,0,1-4.62.56h-4.34c-1.33,0-2.16-.37-2.5-1.13a2.76,2.76,0,0,1,.61-2.72l53-73.35a7,7,0,0,1,2.67-2.66,12.7,12.7,0,0,1,4.34-.51h4.89C288.91,247.81,289.69,248.18,290,248.94Zm-57.52,7.59q-7.68,0-7.68,6.9v6.79q0,6.9,7.68,6.91t7.68-6.91v-6.79Q240.15,256.53,232.47,256.53Zm33.38,36.39q4.78-4.47,13.69-4.47t13.68,4.47q4.78,4.47,4.78,12.4v8q0,7.81-4.78,12.23T279.54,330q-8.91,0-13.69-4.42t-4.79-12.23v-8Q261.06,297.39,265.85,292.92ZM279.54,299q-7.68,0-7.69,6.92v6.67q0,7,7.69,7t7.67-7v-6.67Q287.21,299,279.54,299Z" fill="var(--On-Surface)"/> </svg>',
|
||||
|
||||
DewPointIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <clipPath id="a"> <path d="M333.92,392c-30.93,0-56-25.45-56-56.84a57,57,0,0,1,24-46.6V152.46a32.23,32.23,0,0,1,32-32.47H167.4V392Zm4-192h28m-28-32h28m-28,64h28" fill="none"/> </clipPath> <symbol id="b" viewBox="0 0 175 260.88"> <path d="M87.5,13.38c-48.7,72-80,117-80,160.75s35.79,79.25,80,79.25,80-35.47,80-79.25S136.2,85.35,87.5,13.38Z" fill="none" stroke="#2885c7" stroke-miterlimit="10" stroke-width="15"/> </symbol> <symbol id="d" viewBox="0 0 72 168"> <circle cx="36" cy="132" r="36" fill="#ef4444"/> <path d="M36,12V132" fill="none" stroke="#ef4444" stroke-linecap="round" stroke-miterlimit="10" stroke-width="24"> <animateTransform attributeName="transform" type="translate" values="0 0; 0 18; 0 0" dur="1s" calcMode="spline" keySplines=".42, 0, .58, 1; .42, 0, .58, 1" repeatCount="indefinite"/> </path> </symbol> <symbol id="e" viewBox="0 0 118 278"> <path d="M115,218.16C115,249.55,89.93,275,59,275S3,249.55,3,218.16a57,57,0,0,1,24-46.6V35.48a32,32,0,1,1,64,0V171.56A57,57,0,0,1,115,218.16ZM63,83H91M63,51H91M63,115H91" fill="none" stroke="#cbd5e1" stroke-linecap="round" stroke-linejoin="round" stroke-width="6"/> </symbol> <symbol id="c" viewBox="0 0 118 278"> <use width="72" height="168" transform="translate(23 87)" xlink:href="#d"/> <use width="118" height="278" xlink:href="#e"/> </symbol> </defs> <g clip-path="url(#a)"> <use width="175" height="260.88" transform="translate(168.43 123.18)" xlink:href="#b"/> </g> <use width="118" height="278" transform="translate(275 117)" xlink:href="#c"/> </svg>',
|
||||
|
||||
SunriseIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <clipPath id="Sunrisea"> <path d="M512,306H304l-35.86-31.38a18.44,18.44,0,0,0-24.28,0L208,306H0V0H512Z" fill="none"/> </clipPath> <symbol id="Sunriseb" viewBox="0 0 375 375"> <!-- sun-core --> <circle cx="187.5" cy="187.5" r="84" fill="none" stroke="#fbbf24" stroke-miterlimit="10" stroke-width="15"/> <!-- sun-rays --> <path d="M187.5,57.16V7.5m0,360V317.84M279.67,95.33l35.11-35.11M60.22,314.78l35.11-35.11m0-184.34L60.22,60.22M314.78,314.78l-35.11-35.11M57.16,187.5H7.5m360,0H317.84" fill="none" stroke="#fbbf24" stroke-linecap="round" stroke-miterlimit="10" stroke-width="15"> <animateTransform attributeName="transform" additive="sum" type="rotate" values="0 187.5 187.5; 45 187.5 187.5" dur="6s" repeatCount="indefinite"/> </path> </symbol> </defs> <g clip-path="url(#Sunrisea)"> <use width="375" height="375" transform="translate(68.5 104.5)" xlink:href="#Sunriseb"/> </g> <polyline points="128 332 216 332 256 296 296 332 384 332" fill="none" stroke="var(--On-Surface-Variant)" stroke-linecap="round" stroke-linejoin="round" stroke-width="18"/> </svg>',
|
||||
|
||||
SunsetIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <clipPath id="Sunseta"> <path d="M512,306H296.08a21.5,21.5,0,0,0-14.16,5.32L256,334l-25.92-22.68A21.5,21.5,0,0,0,215.92,306H0V0H512Z" fill="none"/> </clipPath> <symbol id="Sunsetb" viewBox="0 0 375 375"> <!-- sun-core --> <circle cx="187.5" cy="187.5" r="84" fill="none" stroke="#fbbf24" stroke-miterlimit="10" stroke-width="15"/> <!-- sun-rays --> <path d="M187.5,57.16V7.5m0,360V317.84M279.67,95.33l35.11-35.11M60.22,314.78l35.11-35.11m0-184.34L60.22,60.22M314.78,314.78l-35.11-35.11M57.16,187.5H7.5m360,0H317.84" fill="none" stroke="#fbbf24" stroke-linecap="round" stroke-miterlimit="10" stroke-width="15"> <animateTransform attributeName="transform" additive="sum" type="rotate" values="0 187.5 187.5; 45 187.5 187.5" dur="6s" repeatCount="indefinite"/> </path> </symbol> </defs> <g clip-path="url(#Sunseta)"> <use width="375" height="375" transform="translate(68.5 104.5)" xlink:href="#Sunsetb"/> </g> <polyline points="128 332 216 332 256 368 296 332 384 332" fill="none" stroke="var(--On-Surface-Variant)" stroke-linecap="round" stroke-linejoin="round" stroke-width="18"/> </svg>',
|
||||
|
||||
UVindexIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <clipPath id="UVindexa"> <path d="M64,64H448V256H328a72,72,0,0,0-72,72V448H64Z" fill="none"/> </clipPath> <symbol id="UVindexb" viewBox="0 0 375 375"> <!-- sun-core --> <circle cx="187.5" cy="187.5" r="84" fill="none" stroke="#fbbf24" stroke-miterlimit="10" stroke-width="15"/> <!-- sun-rays --> <path d="M187.5,57.16V7.5m0,360V317.84M279.67,95.33l35.11-35.11M60.22,314.78l35.11-35.11m0-184.34L60.22,60.22M314.78,314.78l-35.11-35.11M57.16,187.5H7.5m360,0H317.84" fill="none" stroke="#fbbf24" stroke-linecap="round" stroke-miterlimit="10" stroke-width="15"> <animateTransform attributeName="transform" additive="sum" type="rotate" values="0 192 192; 45 192 192" dur="6s" repeatCount="indefinite"/> </path> </symbol> </defs> <g clip-path="url(#UVindexa)"> <use width="375" height="375" transform="translate(68.5 68.5)" xlink:href="#UVindexb"/> <path d="M254,338V328a74,74,0,0,1,74-74h10" fill="none" stroke="#fbbf24" stroke-miterlimit="10" stroke-width="15"/> </g> <path d="M337.71,388q-14.4,0-22.14-6.76t-7.74-19.39V316h18.32v45.94q0,11.07,11.65,11.07t11.56-11.07V316h18.32v45.85q0,12.73-7.74,19.44T337.71,388Z" fill="var(--On-Surface)"/> <path d="M413.43,344.51,421.56,316h18.61l-22.53,69.75H398.25L375.71,316h18.81l8.23,28.41,5.39,21.94Z" fill="var(--On-Surface)"/> </svg>',
|
||||
|
||||
MoonRiseIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <clipPath id="Moonrisea"> <path d="M512,306H304l-35.86-31.38a18.44,18.44,0,0,0-24.28,0L208,306H0V0H512Z" fill="none"/> </clipPath> <symbol id="Moonriseb" viewBox="0 0 279 279"> <!-- moon --> <path d="M256.75,173.13c-74.12,0-134.21-59.28-134.21-132.42A130.48,130.48,0,0,1,127,7.5C59.79,14.75,7.5,70.87,7.5,139.08c0,73.13,60.09,132.42,134.21,132.42,62.48,0,114.83-42.18,129.79-99.21A135.56,135.56,0,0,1,256.75,173.13Z" fill="none" stroke="#72b9d5" stroke-linecap="round" stroke-linejoin="round" stroke-width="15"> <animateTransform attributeName="transform" additive="sum" type="rotate" values="-15 135 135; 9 135 135; -15 135 135" dur="6s" repeatCount="indefinite"/> </path> </symbol> </defs> <polyline points="128 332 216 332 256 296 296 332 384 332" fill="none" stroke="var(--On-Surface-Variant)" stroke-linecap="round" stroke-linejoin="round" stroke-width="18"/> <g clip-path="url(#Moonrisea)"> <use width="279" height="279" transform="translate(116.5 116.5)" xlink:href="#Moonriseb"/> </g> </svg>',
|
||||
|
||||
MoonSetIcon: '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 512 512"> <defs> <clipPath id="Moonseta"> <path d="M512,306H296.08a21.5,21.5,0,0,0-14.16,5.32L256,334l-25.92-22.68A21.5,21.5,0,0,0,215.92,306H0V0H512Z" fill="none"/> </clipPath> <symbol id="Moonsetb" viewBox="0 0 279 279" overflow="visible"> <!-- moon --> <path d="M256.75,173.13c-74.12,0-134.21-59.28-134.21-132.42A130.48,130.48,0,0,1,127,7.5C59.79,14.75,7.5,70.87,7.5,139.08c0,73.13,60.09,132.42,134.21,132.42,62.48,0,114.83-42.18,129.79-99.21A135.56,135.56,0,0,1,256.75,173.13Z" fill="none" stroke="#72b9d5" stroke-linecap="round" stroke-linejoin="round" stroke-width="15"> <animateTransform attributeName="transform" additive="sum" type="rotate" values="-15 135 135; 9 135 135; -15 135 135" dur="6s" repeatCount="indefinite"/> </path> </symbol> </defs> <polyline points="128 332 216 332 256 368 296 332 384 332" fill="none" stroke="var(--On-Surface-Variant)" stroke-linecap="round" stroke-linejoin="round" stroke-width="18"/> <g clip-path="url(#Moonseta)"> <use width="279" height="279" transform="translate(116.5 116.5)" xlink:href="#Moonsetb"/> </g> </svg>',
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function getDailyForecast() {
|
||||
if (cachedDataHourly && cachedDataHourly.time && cachedDataHourly.time.length > 0) {
|
||||
const dailyForecast = aggregateHourlyData(cachedDataHourly);
|
||||
displayDailyForecast(cachedData, dailyForecast);
|
||||
} else {
|
||||
console.error('Hourly data is not available.');
|
||||
}
|
||||
}
|
||||
|
||||
function aggregateHourlyData(hourlyData) {
|
||||
const dailyData = {};
|
||||
hourlyData.time.forEach((time, index) => {
|
||||
const date = new Date(time).toISOString().split('T')[0];
|
||||
|
||||
if (hourlyData.temperature_2m && hourlyData.temperature_2m[index] !== undefined) {
|
||||
if (!dailyData[date]) {
|
||||
dailyData[date] = {
|
||||
humidity: 0,
|
||||
cloudCover: 0,
|
||||
dewPoint: 0,
|
||||
pressure: 0,
|
||||
count: 0
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
const dayData = dailyData[date];
|
||||
dayData.humidity += hourlyData.relative_humidity_2m[index];
|
||||
dayData.cloudCover += hourlyData.cloud_cover[index];
|
||||
dayData.dewPoint += hourlyData.dew_point_2m[index];
|
||||
dayData.pressure += hourlyData.pressure_msl[index];
|
||||
dayData.count++;
|
||||
});
|
||||
|
||||
|
||||
for (const date in dailyData) {
|
||||
dailyData[date].humidity = Math.round(dailyData[date].humidity / dailyData[date].count);
|
||||
dailyData[date].cloudCover = Math.round(dailyData[date].cloudCover / dailyData[date].count);
|
||||
dailyData[date].dewPoint = Math.round(dailyData[date].dewPoint / dailyData[date].count);
|
||||
dailyData[date].pressure = Math.round(dailyData[date].pressure / dailyData[date].count);
|
||||
}
|
||||
|
||||
return dailyData;
|
||||
}
|
||||
|
||||
|
||||
function displayDailyForecast(forecast, forecastDaily) {
|
||||
const forecastContainer = document.getElementById('foreCastList');
|
||||
const forecastDateHeader = document.createElement('forecastDateHeader');
|
||||
const forecastMainDetails = document.createElement('forecastMainDetails');
|
||||
|
||||
forecastContainer.innerHTML = '';
|
||||
|
||||
|
||||
const today = new Date();
|
||||
const todayString = today.toISOString().split('T')[0];
|
||||
const sortedDates = Object.keys(forecastDaily)
|
||||
.filter(date => date >= todayString)
|
||||
.sort();
|
||||
|
||||
|
||||
if (sortedDates.length === 0) {
|
||||
forecastContainer.innerHTML = '<p>No upcoming forecast data available.</p>';
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
sortedDates.forEach((date, index) => {
|
||||
|
||||
|
||||
|
||||
|
||||
const dateObj = new Date(date + 'T00:00:00');
|
||||
|
||||
const isToday = date === todayString;
|
||||
const weekday = isToday ? 'today' : dateObj.toLocaleDateString('en-US', { weekday: 'short' }).toLowerCase();
|
||||
|
||||
|
||||
const weekdayLang = getTranslationByLang(localStorage.getItem('AppLanguageCode'), weekday);
|
||||
|
||||
|
||||
const dailyData = forecastDaily[date];
|
||||
|
||||
const formattedDate = new Intl.DateTimeFormat('en-US', { day: 'numeric', month: 'short' }).format(dateObj);
|
||||
|
||||
const rainPercentage = Math.round(forecast.precipitation_probability_max[index]) || '0';
|
||||
|
||||
const convertTo12Hour = (time) => {
|
||||
const date = new Date(time);
|
||||
return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: true });
|
||||
};
|
||||
|
||||
const convertTo24Hour = (time) => {
|
||||
const date = new Date(time);
|
||||
return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
|
||||
};
|
||||
|
||||
let SunriseTime
|
||||
let SunsetTime
|
||||
|
||||
if (timeFormat === '24 hour') {
|
||||
SunriseTime = convertTo24Hour(forecast.sunrise[index])
|
||||
SunsetTime = convertTo24Hour(forecast.sunset[index])
|
||||
} else {
|
||||
SunriseTime = convertTo12Hour(forecast.sunrise[index])
|
||||
SunsetTime = convertTo12Hour(forecast.sunset[index])
|
||||
}
|
||||
const DailyWeatherCode = forecast.weather_code[index];
|
||||
|
||||
const cloudCover = dailyData.cloudCover
|
||||
|
||||
const humidity = dailyData.humidity;
|
||||
|
||||
|
||||
let WindSpeed;
|
||||
|
||||
if (SelectedWindUnit === 'mile') {
|
||||
WindSpeed = Math.round(forecast.wind_speed_10m_max[index] / 1.60934) + ' mph';
|
||||
} else if (SelectedWindUnit === 'M/s') {
|
||||
WindSpeed = (forecast.wind_speed_10m_max[index] / 3.6).toFixed(2) + ' m/s';
|
||||
} else {
|
||||
WindSpeed = Math.round(forecast.wind_speed_10m_max[index]) + ' km/h';
|
||||
}
|
||||
|
||||
|
||||
let TemperatureMax;
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
TemperatureMax = Math.round(forecast.temperature_2m_max[index] * 9 / 5 + 32);
|
||||
} else {
|
||||
TemperatureMax = Math.round(forecast.temperature_2m_max[index]);
|
||||
}
|
||||
|
||||
let TemperatureMin;
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
TemperatureMin = Math.round(forecast.temperature_2m_min[index] * 9 / 5 + 32);
|
||||
} else {
|
||||
TemperatureMin = Math.round(forecast.temperature_2m_min[index]);
|
||||
}
|
||||
|
||||
let dewPointTemp;
|
||||
|
||||
|
||||
if (SelectedTempUnit === 'fahrenheit') {
|
||||
dewPointTemp = Math.round(dailyData.dewPoint * 9 / 5 + 32);
|
||||
} else {
|
||||
dewPointTemp = Math.round(dailyData.dewPoint);
|
||||
}
|
||||
|
||||
let rainAmount;
|
||||
|
||||
if (SelectedPrecipitationUnit === 'in') {
|
||||
rainAmount = forecast.precipitation_sum[index] ? (forecast.precipitation_sum[index] * 0.0393701).toFixed(2) + 'in' : '0.00in';
|
||||
|
||||
} else {
|
||||
rainAmount = forecast.precipitation_sum[index] ? forecast.precipitation_sum[index] + ' mm' : '0.0mm';
|
||||
}
|
||||
|
||||
|
||||
let pressureMain;
|
||||
let pressureMainUnit;
|
||||
|
||||
if (SelectedPressureUnit === 'inHg') {
|
||||
pressureMain = (dailyData.pressure * 0.02953).toFixed(2);
|
||||
pressureMainUnit = 'inHg';
|
||||
} else if (SelectedPressureUnit === 'mmHg') {
|
||||
pressureMain = (dailyData.pressure * 0.750062).toFixed(2);
|
||||
pressureMainUnit = 'mmHg';
|
||||
} else {
|
||||
pressureMain = dailyData.pressure;
|
||||
pressureMainUnit = 'hPa';
|
||||
}
|
||||
|
||||
const uvIndex = Math.round(forecast.uv_index_max[index])
|
||||
|
||||
let UVindexText;
|
||||
|
||||
if (uvIndex >= 0 && uvIndex <= 1) {
|
||||
UVindexText = 'Minimal';
|
||||
} else if (uvIndex > 1 && uvIndex <= 2) {
|
||||
UVindexText = 'Low';
|
||||
|
||||
} else if (uvIndex > 2 && uvIndex <= 3) {
|
||||
UVindexText = 'Low';
|
||||
|
||||
} else if (uvIndex > 3 && uvIndex <= 4) {
|
||||
UVindexText = 'Moderate';
|
||||
|
||||
} else if (uvIndex > 4 && uvIndex <= 5) {
|
||||
UVindexText = 'Moderate';
|
||||
|
||||
} else if (uvIndex > 5 && uvIndex <= 6) {
|
||||
UVindexText = 'Moderate';
|
||||
|
||||
} else if (uvIndex > 6 && uvIndex <= 7) {
|
||||
UVindexText = 'High';
|
||||
|
||||
} else if (uvIndex > 7 && uvIndex <= 8) {
|
||||
UVindexText = 'High';
|
||||
|
||||
} else if (uvIndex > 8 && uvIndex <= 9) {
|
||||
UVindexText = 'Very high';
|
||||
|
||||
} else if (uvIndex > 9 && uvIndex <= 10) {
|
||||
UVindexText = 'Very high';
|
||||
|
||||
} else if (uvIndex > 10 && uvIndex <= 11) {
|
||||
UVindexText = 'Very high';
|
||||
|
||||
} else if (uvIndex > 11 && uvIndex <= 12) {
|
||||
UVindexText = 'Extreme';
|
||||
|
||||
} else if (uvIndex > 12 && uvIndex <= 13) {
|
||||
UVindexText = 'Extreme';
|
||||
|
||||
} else if (uvIndex > 13) {
|
||||
UVindexText = 'Extreme';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
const forecastDateHeaderContent = document.createElement('div');
|
||||
forecastDateHeaderContent.classList.add('forecastDateHeaderContent')
|
||||
forecastDateHeaderContent.dataset.index = index;
|
||||
|
||||
|
||||
forecastDateHeaderContent.innerHTML = `
|
||||
|
||||
<span>${weekdayLang}</span>
|
||||
<img src="${GetWeatherIcon(DailyWeatherCode, 1)}">
|
||||
<div>
|
||||
<p>${TemperatureMax}°<span>/${TemperatureMin}°</span></p>
|
||||
</div>
|
||||
|
||||
<md-ripple style="--md-ripple-pressed-opacity: 0.1;"></md-ripple>
|
||||
|
||||
`
|
||||
// ------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
forecastDateHeader.appendChild(forecastDateHeaderContent);
|
||||
forecastContainer.appendChild(forecastDateHeader)
|
||||
forecastContainer.appendChild(forecastMainDetails)
|
||||
|
||||
|
||||
|
||||
function handleSelection(event) {
|
||||
document.querySelectorAll('.forecastDateHeaderContent').forEach(item => {
|
||||
item.classList.remove('selected');
|
||||
});
|
||||
|
||||
event.currentTarget.classList.add('selected');
|
||||
|
||||
forecastMainDetails.innerHTML = '';
|
||||
|
||||
|
||||
const forecastTempConditionMainContent = document.createElement('div');
|
||||
forecastTempConditionMainContent.classList.add('forecastTempConditionMainContent')
|
||||
|
||||
const selectedIndex = event.currentTarget.dataset.index;
|
||||
const selectedForecast = forecast[selectedIndex];
|
||||
|
||||
forecastTempConditionMainContent.innerHTML = `
|
||||
|
||||
<div class="top-details">
|
||||
<p>${weekdayLang}, ${formattedDate}</p>
|
||||
<div>
|
||||
<tempLarge><p>${TemperatureMax}° </p> <span>/${TemperatureMin}°</span></tempLarge>
|
||||
<img src="${GetWeatherIcon(DailyWeatherCode, 1)}">
|
||||
</div>
|
||||
<weatherConditionText>${getWeatherLabelInLang(DailyWeatherCode, 1, localStorage.getItem('AppLanguageCode'))}</weatherConditionText>
|
||||
</div>
|
||||
|
||||
|
||||
<p class="daily-conditions-title" data-translate="daily_conditions">Daily conditions</p>
|
||||
<div class="daily-conditions">
|
||||
<div class="daily-conditions-wrap">
|
||||
|
||||
<div>
|
||||
<p data-translate="wind_speed">Wind speed</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.WindSockIcon}
|
||||
</conditionIcon>
|
||||
<span>${WindSpeed}</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<p data-translate="humidity">Humidity</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.HumidityIcon}
|
||||
</conditionIcon>
|
||||
<span>${humidity}%</span>
|
||||
</div>
|
||||
|
||||
|
||||
<div>
|
||||
<p data-translate="precipitation_chances">Precipitation chances</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.PrecipitationChancesIcon}
|
||||
</conditionIcon>
|
||||
<span>${rainPercentage}%</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p data-translate="precipitation_amount">Precipitation amount</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.PrecipitationAmountIcon}
|
||||
</conditionIcon>
|
||||
<span>${rainAmount}</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p data-translate="cloudiness">Cloud cover</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.CloudCoverIcon}
|
||||
</conditionIcon>
|
||||
<span>${cloudCover}%</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p data-translate="pressure">Pressure</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.PressureIcon}
|
||||
</conditionIcon>
|
||||
<span>${pressureMain} ${pressureMainUnit}</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p data-translate="dew_point">Dew point</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.DewPointIcon}
|
||||
</conditionIcon>
|
||||
<span>${dewPointTemp}°</span>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<p data-translate="uv_index">UV index</p>
|
||||
<conditionIcon>
|
||||
${ConditionIcons.UVindexIcon}
|
||||
</conditionIcon>
|
||||
<span style="align-items: center; gap: 5px;">${uvIndex} <text style="color: var(--On-Surface-Variant);font-size: 13px;"> ${UVindexText}</text></span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="daily-conditions-title" style="margin-top:10px;"><span data-translate="sunrise">Sunrise</span> & <span data-translate="sunset">sunset</span></p>
|
||||
<div class="sunrise-sunset-forecast">
|
||||
|
||||
<div class="sunrise-sunset-item">
|
||||
<p data-translate="sunrise">Sunrise</p>
|
||||
<div class="sunrise-sunset-img">
|
||||
${ConditionIcons.SunriseIcon}
|
||||
</div>
|
||||
<span>${SunriseTime}</span>
|
||||
</div>
|
||||
|
||||
<div class="sunrise-sunset-item">
|
||||
<p data-translate="sunset">Sunset</p>
|
||||
<div class="sunrise-sunset-img">
|
||||
${ConditionIcons.SunsetIcon}
|
||||
</div>
|
||||
<span>${SunsetTime}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
`
|
||||
|
||||
if (!forecastMainDetails.contains(forecastTempConditionMainContent)) {
|
||||
forecastMainDetails.appendChild(forecastTempConditionMainContent);
|
||||
}
|
||||
|
||||
const AppLanguageCodeValue = localStorage.getItem('AppLanguageCode');
|
||||
if (AppLanguageCodeValue) {
|
||||
applyTranslations(AppLanguageCodeValue);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
forecastDateHeaderContent.addEventListener('click', handleSelection);
|
||||
const clickedForecastItem = localStorage.getItem('ClickedForecastItem') || '0';
|
||||
const selectedForecastIndex = parseInt(clickedForecastItem, 10);
|
||||
|
||||
|
||||
if (selectedForecastIndex >= 0 && selectedForecastIndex <= 13 || index === 0) {
|
||||
if (index === selectedForecastIndex || index === 0) {
|
||||
forecastDateHeaderContent.classList.add('selected');
|
||||
handleSelection({ currentTarget: forecastDateHeaderContent });
|
||||
firstForecastIndex = index;
|
||||
|
||||
setTimeout(() => {
|
||||
forecastDateHeaderContent.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
|
||||
|
||||
setTimeout(() => {
|
||||
if (clickedForecastItem >= 4) {
|
||||
const forecastDateHeader = document.querySelector('forecastDateHeader');
|
||||
forecastDateHeader.scrollBy({
|
||||
top: 0,
|
||||
left: 50,
|
||||
behavior: 'smooth'
|
||||
});
|
||||
}
|
||||
|
||||
}, 600);
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
getDailyForecast()
|
||||
}, 1500);
|
||||
|
||||
|
||||
function convertTo12HourFormat(unixTimestamp) {
|
||||
const date = new Date(unixTimestamp * 1000);
|
||||
let hours = date.getHours();
|
||||
const minutes = date.getMinutes();
|
||||
const ampm = hours >= 12 ? 'PM' : 'AM';
|
||||
hours = hours % 12;
|
||||
hours = hours ? hours : 12;
|
||||
const minutesStr = minutes < 10 ? '0' + minutes : minutes;
|
||||
return `${hours}:${minutesStr} ${ampm}`;
|
||||
}
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
document.querySelector('.loader_holder').style.opacity = '0'
|
||||
}, 2000);
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
document.querySelector('.loader_holder').hidden = true
|
||||
}, 2300);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"featurecla":"Admin-0 country","scalerank":1,"labelrank":2,"sovereignt":"China","sov_a3":"CH1","adm0_dif":1,"level":2,"type":"Country","tlc":"1","admin":"China","adm0_a3":"CHN","geou_dif":0,"geounit":"China","gu_a3":"CHN","su_dif":0,"subunit":"China","su_a3":"CHN","brk_diff":0,"name":"China","name_long":"China","brk_a3":"CHN","brk_name":"China","brk_group":null,"abbrev":"China","postal":"CN","formal_en":"People's Republic of China","formal_fr":null,"name_ciawf":"China","note_adm0":null,"note_brk":null,"name_sort":"China","name_alt":null,"mapcolor7":4,"mapcolor8":4,"mapcolor9":4,"mapcolor13":3,"pop_est":1397715000,"pop_rank":18,"pop_year":2019,"gdp_md":14342903,"gdp_year":2019,"economy":"3. Emerging region: BRIC","income_grp":"3. Upper middle income","fips_10":"CH","iso_a2":"CN","iso_a2_eh":"CN","iso_a3":"CHN","iso_a3_eh":"CHN","iso_n3":"156","iso_n3_eh":"156","un_a3":"156","wb_a2":"CN","wb_a3":"CHN","woe_id":23424781,"woe_id_eh":23424781,"woe_note":"Exact WOE match as country","adm0_iso":"CHN","adm0_diff":null,"adm0_tlc":"CHN","adm0_a3_us":"CHN","adm0_a3_fr":"CHN","adm0_a3_ru":"CHN","adm0_a3_es":"CHN","adm0_a3_cn":"CHN","adm0_a3_tw":"TWN","adm0_a3_in":"CHN","adm0_a3_np":"CHN","adm0_a3_pk":"CHN","adm0_a3_de":"CHN","adm0_a3_gb":"CHN","adm0_a3_br":"CHN","adm0_a3_il":"CHN","adm0_a3_ps":"CHN","adm0_a3_sa":"CHN","adm0_a3_eg":"CHN","adm0_a3_ma":"CHN","adm0_a3_pt":"CHN","adm0_a3_ar":"CHN","adm0_a3_jp":"CHN","adm0_a3_ko":"CHN","adm0_a3_vn":"CHN","adm0_a3_tr":"CHN","adm0_a3_id":"CHN","adm0_a3_pl":"CHN","adm0_a3_gr":"CHN","adm0_a3_it":"CHN","adm0_a3_nl":"CHN","adm0_a3_se":"CHN","adm0_a3_bd":"CHN","adm0_a3_ua":"CHN","adm0_a3_un":-99,"adm0_a3_wb":-99,"continent":"Asia","region_un":"Asia","subregion":"Eastern Asia","region_wb":"East Asia & Pacific","name_len":5,"long_len":5,"abbrev_len":5,"tiny":-99,"homepart":1,"min_zoom":0,"min_label":1.7,"max_label":5.7,"label_x":106.337289,"label_y":32.498178,"ne_id":1159320471,"wikidataid":"Q148","name_ar":"الصين","name_bn":"গণচীন","name_de":"Volksrepublik China","name_en":"People's Republic of China","name_es":"China","name_fa":"جمهوری خلق چین","name_fr":"République populaire de Chine","name_el":"Λαϊκή Δημοκρατία της Κίνας","name_he":"הרפובליקה העממית של סין","name_hi":"चीनी जनवादी गणराज्य","name_hu":"Kína","name_id":"Republik Rakyat Tiongkok","name_it":"Cina","name_ja":"中華人民共和国","name_ko":"중화인민공화국","name_nl":"Volksrepubliek China","name_pl":"Chińska Republika Ludowa","name_pt":"China","name_ru":"Китайская Народная Республика","name_sv":"Kina","name_tr":"Çin Halk Cumhuriyeti","name_uk":"Китайська Народна Республіка","name_ur":"عوامی جمہوریہ چین","name_vi":"Trung Quốc","name_zh":"中华人民共和国","name_zht":"中華人民共和國","fclass_iso":"Admin-0 country","tlc_diff":null,"fclass_tlc":"Admin-0 country","fclass_us":null,"fclass_fr":null,"fclass_ru":null,"fclass_es":null,"fclass_cn":null,"fclass_tw":"Unrecognized","fclass_in":null,"fclass_np":null,"fclass_pk":null,"fclass_de":null,"fclass_gb":null,"fclass_br":null,"fclass_il":null,"fclass_ps":null,"fclass_sa":null,"fclass_eg":null,"fclass_ma":null,"fclass_pt":null,"fclass_ar":null,"fclass_jp":null,"fclass_ko":null,"fclass_vn":null,"fclass_tr":null,"fclass_id":null,"fclass_pl":null,"fclass_gr":null,"fclass_it":null,"fclass_nl":null,"fclass_se":null,"fclass_bd":null,"fclass_ua":null,"filename":"CHN.geojson"},"geometry":{"type":"MultiPolygon","coordinates":[[[[109.47520958866365,18.197700913968575],[108.65520796105616,18.507681993071387],[108.62621748254044,19.367887885001906],[109.11905561730804,19.821038519769345],[110.21159874882281,20.101253973872033],[110.78655073450221,20.077534491450052],[111.01005130416458,19.69592987719072],[110.57064660038677,19.25587921800927],[110.33918786015147,18.678395087147592],[109.47520958866365,18.197700913968575]]],[[[80.2599902688853,42.34999929459906],[80.1801501809943,42.92006785742694],[80.86620649610126,43.18036204688101],[79.96610639844141,44.91751699480463],[81.9470707539181,45.31702749285312],[82.45892581576906,45.539649563166506],[83.18048383986047,47.33003123635086],[85.16429039911324,47.0009557155161],[85.72048383987067,47.452969468773105],[85.7682328633083,48.45575063739699],[86.59877648310336,48.549181626980626],[87.35997033076265,49.21498078062912],[87.75126427607671,49.297197984405486],[88.01383222855173,48.599462795600616],[88.85429772334676,48.069081732772965],[90.28082563676392,47.69354909930793],[90.97080936072501,46.88814606382293],[90.58576826371828,45.71971609148753],[90.9455395853343,45.28607330991028],[92.13389082231822,45.11507599545646],[93.4807336771413,44.975472113619965],[94.68892866412533,44.35233185482842],[95.30687544147153,44.24133087826547],[95.76245486855669,43.319449164394605],[96.Line truncated
|
||||
@@ -0,0 +1,21 @@
|
||||
// tabs-nav
|
||||
let currentTab = 0;
|
||||
showTab(currentTab);
|
||||
function showTab(tabIndex) {
|
||||
document.getElementById(`tab-content-${currentTab}`).style.display = 'none';
|
||||
|
||||
const previousTab = document.querySelector('.tab.active');
|
||||
const previousname = document.querySelector('.label.active-name');
|
||||
|
||||
if (previousTab) {
|
||||
previousTab.classList.remove('active');
|
||||
previousname.classList.remove('active-name');
|
||||
|
||||
}
|
||||
|
||||
document.getElementById(`tab-content-${tabIndex}`).style.display = 'block';
|
||||
|
||||
document.querySelectorAll('.tab')[tabIndex].classList.add('active');
|
||||
document.querySelectorAll('.label')[tabIndex].classList.add('active-name');
|
||||
currentTab = tabIndex;
|
||||
}
|
||||
@@ -0,0 +1,398 @@
|
||||
// 3dot- menu
|
||||
// const Menu = document.getElementById('menu');
|
||||
|
||||
// function toggleMenu(){
|
||||
// Menu.style.display = 'block';
|
||||
// Menu.style.transition = 'none';
|
||||
// Menu.style.opacity = '1';
|
||||
// }
|
||||
|
||||
// window.addEventListener("click", function(event) {
|
||||
// if (event.target == Menu) {
|
||||
// Menu.style.opacity = '0';
|
||||
// Menu.style.transition = 'opacity 0.2s';
|
||||
// setTimeout(() =>{
|
||||
// Menu.style.display = "none";
|
||||
// }, 200);
|
||||
|
||||
// }
|
||||
// });
|
||||
|
||||
// const eq = document.querySelectorAll('.menu-btn');
|
||||
|
||||
|
||||
// eq.forEach(function(eq) {
|
||||
// eq.addEventListener('click', () => {
|
||||
// Menu.style.opacity = '0';
|
||||
// Menu.style.transition = 'opacity 0.2s';
|
||||
// setTimeout(() =>{
|
||||
// Menu.style.display = "none";
|
||||
// }, 200);
|
||||
// });
|
||||
|
||||
|
||||
|
||||
// });
|
||||
|
||||
|
||||
// border-change
|
||||
|
||||
const changeBorderButtons = document.querySelectorAll('.change-border');
|
||||
|
||||
changeBorderButtons.forEach(function(changeBorderButton) {
|
||||
changeBorderButton.addEventListener('touchstart', () => {
|
||||
const borderRadiusStart = changeBorderButton.dataset.borderStart;
|
||||
changeBorderButton.style.borderRadius = `${borderRadiusStart}px`;
|
||||
});
|
||||
|
||||
changeBorderButton.addEventListener('touchend', () => {
|
||||
const borderRadiusEnd = changeBorderButton.dataset.borderEnd;
|
||||
changeBorderButton.style.borderRadius = `${borderRadiusEnd}px`;
|
||||
});
|
||||
});
|
||||
|
||||
changeBorderButtons.forEach(function(changeBorderButtons) {
|
||||
changeBorderButtons.style.transition = 'all 0.25s ease-out';
|
||||
});
|
||||
|
||||
|
||||
|
||||
// dialog
|
||||
|
||||
|
||||
function openModal(modalId) {
|
||||
var modal = document.querySelector('[data-modal-id="' + modalId + '"]');
|
||||
modal.style.display = "flex";
|
||||
modal.style.opacity = "1";
|
||||
}
|
||||
|
||||
|
||||
function closeModal(modalId) {
|
||||
var modal = document.querySelector('[data-modal-id="' + modalId + '"]');
|
||||
|
||||
modal.style.opacity = '0';
|
||||
|
||||
setTimeout(() =>{
|
||||
modal.style.display = "none";
|
||||
}, 200);
|
||||
|
||||
}
|
||||
|
||||
window.onclick = function(event) {
|
||||
var modals = document.getElementsByClassName('modalRegular');
|
||||
for (var i = 0; i < modals.length; i++) {
|
||||
if (event.target === modals[i]) {
|
||||
modals[i].style.opacity = '0';
|
||||
|
||||
|
||||
(function(index) {
|
||||
setTimeout(function() {
|
||||
modals[index].style.display = "none";
|
||||
}, 200);
|
||||
})(i);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
document.addEventListener('click', function(event) {
|
||||
if (event.target.hasAttribute('data-modal-open')) {
|
||||
var modalId = event.target.getAttribute('data-modal-open');
|
||||
openModal(modalId);
|
||||
}
|
||||
|
||||
if (event.target.hasAttribute('data-modal-close')) {
|
||||
var modalId = event.target.getAttribute('data-modal-close');
|
||||
closeModal(modalId);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
//snack-bar
|
||||
|
||||
function ShowSnack(message, timeout, bottom, type, inside, useValue) {
|
||||
|
||||
var snackbarDiv = document.createElement("div");
|
||||
snackbarDiv.id = "snackbar";
|
||||
snackbarDiv.style.opacity = '0';
|
||||
snackbarDiv.style.display = 'flex';
|
||||
snackbarDiv.classList.add(type)
|
||||
|
||||
if(useValue){
|
||||
snackbarDiv.setAttribute('value', useValue)
|
||||
}
|
||||
|
||||
snackbarDiv.style.setProperty('--snackbar-bottom', bottom + '%');
|
||||
|
||||
var snackbarDivP = document.createElement("p");
|
||||
snackbarDivP.innerHTML = message;
|
||||
snackbarDiv.appendChild(snackbarDivP);
|
||||
|
||||
|
||||
var existingSnackbar = document.getElementById("snackbar");
|
||||
if (existingSnackbar) {
|
||||
|
||||
existingSnackbar.parentNode.removeChild(existingSnackbar);
|
||||
}
|
||||
|
||||
var AppendinsideElement = document.getElementById(inside);
|
||||
|
||||
if (AppendinsideElement) {
|
||||
AppendinsideElement.appendChild(snackbarDiv);
|
||||
|
||||
if(snackbarDiv.getAttribute('value') === 'no-up'){
|
||||
|
||||
} else{
|
||||
document.querySelector('.fab_container').classList.add('adjust');
|
||||
}
|
||||
|
||||
} else {
|
||||
document.body.appendChild(snackbarDiv);
|
||||
console.log('body')
|
||||
}
|
||||
|
||||
|
||||
// document.getElementById(inside).appendChild(snackbarDiv);
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
snackbarDiv.style.transition = 'opacity 0.2s, bottom 0.3s ease-in';
|
||||
snackbarDiv.style.opacity = '1';
|
||||
}, 10);
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
snackbarDiv.style.bottom = bottom + '3%';
|
||||
snackbarDiv.style.opacity = '0';
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
|
||||
snackbarDiv.parentNode.removeChild(snackbarDiv);
|
||||
if(snackbarDiv.getAttribute('value') === 'no-up'){
|
||||
|
||||
} else{
|
||||
document.querySelector('.fab_container').classList.remove('adjust');
|
||||
}
|
||||
|
||||
}, 200);
|
||||
}, timeout);
|
||||
}
|
||||
|
||||
|
||||
|
||||
function showSnackbarAction(options) {
|
||||
const existingSnackbar = document.querySelector('.snackbar');
|
||||
|
||||
if (existingSnackbar) {
|
||||
existingSnackbar.remove();
|
||||
}
|
||||
|
||||
const snackbar = document.createElement('div');
|
||||
snackbar.classList.add('snackbar');
|
||||
snackbar.style.setProperty('--snackbaraction-bottom', options.bottomPosition + '%');
|
||||
|
||||
|
||||
const snackbarContent = document.createElement('div');
|
||||
snackbarContent.classList.add('snackbar-content');
|
||||
|
||||
const snackbarText = document.createElement('span');
|
||||
snackbarText.textContent = options.text || '';
|
||||
|
||||
const actionButton = document.createElement('md-text-button');
|
||||
actionButton.style.zIndex = '999'
|
||||
actionButton.classList.add('snackbar-action' );
|
||||
|
||||
actionButton.setAttribute('style', '--md-text-button-label-text-color: var(--Inverse-Primary); --md-text-button-pressed-state-layer-color: var(--Inverse-Primary); --md-text-button-hover-label-text-color: var(--Inverse-Primary); --md-text-button-pressed-label-text-color: var(--Inverse-Primary); --md-text-button-focus-label-text-color: var(--Inverse-Primary);')
|
||||
|
||||
actionButton.textContent = options.actionText || 'Action';
|
||||
actionButton.setAttribute('data-modal-open', options.modalId || '');
|
||||
if (options.onActionClick) {
|
||||
if (typeof options.onActionClick === 'function') {
|
||||
actionButton.onclick = () => {
|
||||
options.onActionClick(snackbar);
|
||||
dismissSnackbar(snackbar);
|
||||
};
|
||||
} else if (typeof options.onActionClick === 'string') {
|
||||
actionButton.setAttribute('onclick', `${options.onActionClick}; dismissSnackbar(this.parentNode.parentNode)`);
|
||||
}
|
||||
}
|
||||
snackbarContent.appendChild(actionButton);
|
||||
snackbarContent.appendChild(snackbarText);
|
||||
|
||||
snackbar.appendChild(snackbarContent);
|
||||
|
||||
document.body.appendChild(snackbar);
|
||||
|
||||
snackbar.style.display = 'flex';
|
||||
|
||||
if (options.manualDismiss) {
|
||||
snackbar.addEventListener('click', () =>{snackbar.remove();})
|
||||
snackbar.dataset.manualDismiss = true;
|
||||
} else {
|
||||
|
||||
setTimeout(() => {
|
||||
snackbar.style.opacity = 0;
|
||||
|
||||
setTimeout(() => {
|
||||
snackbar.remove();
|
||||
}, 300);
|
||||
}, options.timeout || 3000);
|
||||
}
|
||||
}
|
||||
|
||||
function dismissSnackbar(snackbar) {
|
||||
if (snackbar.dataset.manualDismiss === 'true') {
|
||||
snackbar.style.opacity = 0;
|
||||
|
||||
setTimeout(() => {
|
||||
snackbar.remove();
|
||||
}, 300);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// full-activity-large-header
|
||||
|
||||
const LargeActivityContents = document.querySelectorAll('.activity-large-content');
|
||||
const HiddenLabels = document.querySelectorAll('.label-hidden-large');
|
||||
const LargeLabelsMain = document.querySelectorAll('.label-large-main');
|
||||
const LargeActivityLabels = document.querySelectorAll('.header-activity-large');
|
||||
const speedFactor = 2;
|
||||
|
||||
LargeActivityContents.forEach((LargeActivityContent, index) => {
|
||||
let opacity = 0;
|
||||
const triggerHeight = 100;
|
||||
const triggerHeight2 = 100;
|
||||
|
||||
|
||||
let hasTriggered = false;
|
||||
let hasTriggered2 = false;
|
||||
|
||||
|
||||
LargeActivityContent.addEventListener('scroll', () => {
|
||||
const scrollPosition = LargeActivityContent.scrollTop;
|
||||
|
||||
const t = Math.min(1, scrollPosition / triggerHeight);
|
||||
|
||||
const lerp = (start, end, t) => (1 - t) * start + t * end;
|
||||
|
||||
opacity = lerp(0, 1, t);
|
||||
|
||||
const redOpacity = lerp(0, 1, opacity);
|
||||
const redOpacity2 = lerp(0, 0.6, opacity);
|
||||
|
||||
HiddenLabels[index].style.opacity = opacity.toString();
|
||||
LargeLabelsMain[index].style.opacity = (1 - opacity).toString();
|
||||
LargeLabelsMain[index].style.backgroundColor = `rgba(var(--Top-bar), ${redOpacity2})`;
|
||||
|
||||
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
// openActivity
|
||||
|
||||
const BackgroundApp = document.getElementById('App');
|
||||
|
||||
function openActivity(activityNumber, activityContent) {
|
||||
|
||||
closeAllModals();
|
||||
const OpenModal = document.querySelector(`[data-modal-${activityNumber}]`);
|
||||
const OpenedContent = document.querySelector(`[activity-content-${activityContent}]`);
|
||||
|
||||
BackgroundApp.style.transform = 'translateX(-30%)';
|
||||
BackgroundApp.style.opacity = '0';
|
||||
OpenModal.style.display = 'block';
|
||||
OpenModal.style.opacity = '1';
|
||||
OpenModal.style.transform = 'none';
|
||||
OpenedContent.scrollTop = 0;
|
||||
|
||||
}
|
||||
|
||||
function closeActivity(activityNumber) {
|
||||
|
||||
const modal = document.querySelector(`[data-modal-${activityNumber}]`);
|
||||
|
||||
|
||||
modal.style.transform = 'translateX(30%)';
|
||||
modal.style.opacity = '0';
|
||||
BackgroundApp.style.transform = 'none';
|
||||
BackgroundApp.style.opacity = '1';
|
||||
|
||||
|
||||
setTimeout(() => {
|
||||
modal.style.display = 'none';
|
||||
}, 400);
|
||||
}
|
||||
|
||||
function closeAllModals() {
|
||||
|
||||
document.querySelectorAll('.full-activity-large').forEach(modal => {
|
||||
modal.style.display = 'none';
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// buttons
|
||||
|
||||
const ripplebuttonclass = document.querySelectorAll('button-filled, button-outlined, button-tonal, text-button, fab, fab-small, fab-large, button-filled-i, button-outlined-i, button-tonal-i, text-button-i');
|
||||
|
||||
|
||||
ripplebuttonclass.forEach(function(ripplebuttonclass) {
|
||||
|
||||
ripplebuttonclass.classList.add('md-ripples');
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
// loader
|
||||
|
||||
const circleLoaders = document.querySelectorAll('circle-loader');
|
||||
|
||||
circleLoaders.forEach(circleLoader => {
|
||||
const size = circleLoader.getAttribute('data-size');
|
||||
const Swidth = circleLoader.getAttribute('data-thick');
|
||||
|
||||
const svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
||||
svgElement.setAttribute('viewBox', '0 0 32 32');
|
||||
svgElement.setAttribute('height', size);
|
||||
svgElement.setAttribute('width', size);
|
||||
|
||||
|
||||
const circleElement = document.createElementNS("http://www.w3.org/2000/svg", "circle");
|
||||
circleElement.setAttribute('id', 'spinner');
|
||||
circleElement.setAttribute('cx', '16');
|
||||
circleElement.setAttribute('cy', '16');
|
||||
circleElement.setAttribute('r', '14');
|
||||
circleElement.setAttribute('fill', 'none');
|
||||
circleElement.setAttribute('stroke-width', Swidth)
|
||||
|
||||
|
||||
svgElement.appendChild(circleElement);
|
||||
|
||||
circleLoader.appendChild(svgElement);
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Border-change usage ---
|
||||
|
||||
/**
|
||||
* Data-attributes
|
||||
* data-border-start="20" data-border-end="50"
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,303 @@
|
||||
button-filled {
|
||||
color: var(--On-Primary);
|
||||
background-color: var(--Primary);
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
button-outlined {
|
||||
color: var(--Primary);
|
||||
background-color: transparent;
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
border: 1px solid var(--Outline);
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
button-tonal {
|
||||
color: var(--On-Secondary-Container);
|
||||
background-color: var(--Secondary-Container);
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
text-button {
|
||||
color: var(--Primary);
|
||||
background-color: transparent;
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* disabled-form */
|
||||
|
||||
button-filled[disabled],
|
||||
button-tonal[disabled] {
|
||||
opacity: 0.12;
|
||||
background-color: var(--On-Surface);
|
||||
color: var(--Surface);
|
||||
pointer-events: none;
|
||||
|
||||
}
|
||||
|
||||
|
||||
button-outlined[disabled] {
|
||||
opacity: 0.32;
|
||||
border-color: var(--On-Surface);
|
||||
color: var(--On-Surface);
|
||||
pointer-events: none;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* Fab */
|
||||
|
||||
fab {
|
||||
width: 56px;
|
||||
height: 56px;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-family: 'Material icons outlined';
|
||||
background-color: var(--Primary-Container);
|
||||
color: var(--On-Primary-Container);
|
||||
font-size: 30px;
|
||||
border-radius: 18px;
|
||||
}
|
||||
|
||||
|
||||
fab-small {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-family: 'Material icons outlined';
|
||||
background-color: var(--Primary-Container);
|
||||
color: var(--On-Primary-Container);
|
||||
font-size: 24px;
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
fab-large {
|
||||
width: 76px;
|
||||
height: 76px;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-family: 'Material icons outlined';
|
||||
background-color: var(--Primary-Container);
|
||||
color: var(--On-Primary-Container);
|
||||
font-size: 34px;
|
||||
border-radius: 24px;
|
||||
}
|
||||
|
||||
/* icon-btn */
|
||||
|
||||
button-filled-i {
|
||||
color: var(--On-Primary);
|
||||
background-color: var(--Primary);
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
button-filled-i i,
|
||||
button-outlined-i i,
|
||||
button-tonal-i i,
|
||||
text-button-i i {
|
||||
font-family: 'Material icons outlined';
|
||||
margin-right: 8px;
|
||||
font-style: normal !important;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
button-outlined-i {
|
||||
color: var(--Primary);
|
||||
background-color: transparent;
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
border: 1px solid var(--Outline);
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
button-tonal-i {
|
||||
color: var(--On-Secondary-Container);
|
||||
background-color: var(--Secondary-Container);
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
text-button-i {
|
||||
color: var(--Primary);
|
||||
background-color: transparent;
|
||||
height: 45px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 18px;
|
||||
width: max-content;
|
||||
border-radius: 50px;
|
||||
display: flex;
|
||||
font-family: var(--google-normal);
|
||||
min-width: 40px;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* buttons-usage */
|
||||
|
||||
|
||||
|
||||
/* filled--
|
||||
|
||||
<button-filled>Filled Button</button-filled>
|
||||
|
||||
|
||||
--FILLED With ICON--
|
||||
|
||||
<button-filled-i><i>add</i>Add task</button-filled-i>
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* Outlined ---
|
||||
|
||||
<button-outlined>Outlined Button</button-outlined>
|
||||
|
||||
--OUTLINED With ICON--
|
||||
<button-outlined-i><i>add</i>Add task</button-outlined-i>
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
/* Tonal ---
|
||||
|
||||
<button-tonal>Tonal Button</button-tonal>
|
||||
|
||||
|
||||
--TONAL With ICON--
|
||||
<button-tonal-i><i>add</i>Add task</button-tonal-i>
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* Text Btn ---
|
||||
|
||||
<text-button>Text Button</text-button>
|
||||
|
||||
|
||||
|
||||
--TextBtn With ICON--
|
||||
<text-button-i><i>add</i>Text Button</text-button-i>
|
||||
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* fab Btn ---
|
||||
|
||||
<fab>edit</fab>
|
||||
|
||||
--fab-small--
|
||||
|
||||
<fab-small>check</fab-small>
|
||||
|
||||
--fab-large
|
||||
|
||||
<fab-large>add</fab-large>
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,270 @@
|
||||
/* settings-template */
|
||||
|
||||
|
||||
|
||||
.title{
|
||||
color: var(--Primary);
|
||||
font-family: 'Google';
|
||||
margin: 0;
|
||||
margin-top: 20px;
|
||||
font-weight: 900;
|
||||
margin-left: 10px;
|
||||
padding-bottom: 5px;
|
||||
|
||||
}
|
||||
|
||||
.text_content_options{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
margin-left: 40px;
|
||||
|
||||
}
|
||||
|
||||
.text_content_options p{
|
||||
margin: 0;
|
||||
color: var(--On-Surface) ;
|
||||
font-family: 'Google';
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.text_content_options span{
|
||||
margin: 0;
|
||||
font-size: 14.5px;
|
||||
color: var(--Outline) ;
|
||||
margin-top: 3px !important;
|
||||
max-width: 200px;
|
||||
font-family: var(--google-normal);
|
||||
}
|
||||
|
||||
.settings_options{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 0px;
|
||||
padding: 10px;
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
.settings_options.radio{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 0px;
|
||||
padding: 10px;
|
||||
position: relative;
|
||||
margin-bottom: 10px;
|
||||
padding-right: 15px;
|
||||
padding-bottom: 55px;
|
||||
position: relative !important;
|
||||
}
|
||||
|
||||
|
||||
.icon-options{
|
||||
position: absolute;
|
||||
left: 10px;
|
||||
font-size: 23px;
|
||||
font-style: normal;
|
||||
color: var(--On-Surface) ;
|
||||
}
|
||||
|
||||
/* about-app-template */
|
||||
|
||||
.about-div{
|
||||
padding: 10px;
|
||||
align-items: center;
|
||||
color: var(--On-Surface);
|
||||
}
|
||||
|
||||
.about-div li{
|
||||
margin-bottom: 10px;
|
||||
font-family: var(--google-normal);
|
||||
font-size: 18px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.version-area{
|
||||
background-color: rgba(255, 0, 0, 0);
|
||||
padding-bottom: 1px;
|
||||
padding-top: 1px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.made-by{
|
||||
text-align: right;
|
||||
margin-right: 20px;
|
||||
font-family: var(--google-normal);
|
||||
font-size: 20px;
|
||||
color: var(--Primary);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.title-about{
|
||||
color: var(--Primary);
|
||||
font-family: 'Google';
|
||||
margin: 0;
|
||||
margin-top: 20px;
|
||||
font-weight: 500;
|
||||
font-size: 20px;
|
||||
padding-left: 10px;
|
||||
padding-bottom: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border-bottom: 1px solid var(--Outline);
|
||||
}
|
||||
|
||||
.title-about span{
|
||||
font-weight: normal;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
|
||||
/* license */
|
||||
|
||||
.licenses-div{
|
||||
border: 1.5px solid var(--Outline-Variant);
|
||||
margin: 10px;
|
||||
padding: 10px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.licenses-div .name-main{
|
||||
margin: 0;
|
||||
margin-top: 10px !important;
|
||||
margin-bottom: 10px;
|
||||
font-weight: 300;
|
||||
font-family: var(--outfit);
|
||||
color: var(--On-Surface);
|
||||
|
||||
|
||||
}
|
||||
|
||||
.licenses-div .name-label{
|
||||
font-size: 16px;
|
||||
font-family: var(--outfit);
|
||||
color: var(--On-Surface);
|
||||
|
||||
}
|
||||
|
||||
.licenses-div .main-license{
|
||||
line-height: 1.5;
|
||||
font-size: 14px;
|
||||
font-family: var(--outfit);
|
||||
color: var(--On-Surface-Variant);
|
||||
|
||||
}
|
||||
|
||||
.licenses-div .license-label{
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
color: var(--Primary);
|
||||
opacity: 0.7;
|
||||
display: flex;
|
||||
font-weight: 600;
|
||||
font-family: var(--outfit);
|
||||
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* settings-template_usage ----
|
||||
|
||||
switch-option
|
||||
|
||||
<div class="settings_options" >
|
||||
<i class="icon-class-filled icon-options">dark_mode</i>
|
||||
<div class="text_content_options">
|
||||
<p>Dark theme</p>
|
||||
<span>Enables the dark theme for the app</span>
|
||||
</div>
|
||||
<label class="md3 switch theme-switch">
|
||||
<input type="checkbox" name="darkmode" id="toggledark">
|
||||
<span class="slider">
|
||||
<span class="icon-class-outlined icon"></span>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
---LABEL---
|
||||
|
||||
<p class="title" >General</p>
|
||||
|
||||
|
||||
|
||||
---OPENS-Other-Screen ----
|
||||
|
||||
|
||||
<div class="settings_options md-ripples ripples-bounded show-time" id="show_time_toast" onclick="openLicenses()">
|
||||
<i class="icon-class-filled icon-options">verified</i>
|
||||
<div class="text_content_options">
|
||||
<p>Third party licenses</p>
|
||||
<span>Used in the app</span>
|
||||
</div>
|
||||
<i class="icon-class-filled" style="font-size: 24px; color: var(--On-Surface);">chevron_right</i>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
---SHOW-version
|
||||
<div class="settings_options md-ripples ripples-bounded show-time" id="show_time_toast">
|
||||
<i class="icon-class-filled icon-options">info</i>
|
||||
<div class="text_content_options">
|
||||
<p id="themeName"></p>
|
||||
<span>Lollipop (6-14)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* about-temp
|
||||
|
||||
<div class="about-div" >
|
||||
<li>The app is mainly coded in Java, JavaScript, C++.</li>
|
||||
<li>The UI of this app is created using GDK, Material You, and Material 3 components, which are open source and
|
||||
developed by @Google.</li>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
---LABle---
|
||||
|
||||
|
||||
<p class="title-about"><span class="icon-class-outlined">info</span>Language used</p>
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* license
|
||||
|
||||
|
||||
<div class="licenses-div">
|
||||
<h2 class="name-main">Open Sans</h2>
|
||||
<span class="name-label">Steve Matteson</span>
|
||||
|
||||
<p class="main-license">Open Sans is a humanist sans serif typeface designed by Steve Matteson, Type Director of
|
||||
Ascender Corp. This version contains the complete 897 character set, which includes the standard ISO Latin 1,
|
||||
Latin CE, Greek and Cyrillic character sets. Open Sans was designed with an upright stress, open forms and a
|
||||
neutral, yet friendly appearance. It was optimized for print, web, and mobile interfaces, and has excellent
|
||||
legibility characteristics in its letterforms.</p>
|
||||
|
||||
<span class="license-label">Open Font License</span>
|
||||
</div>
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,413 @@
|
||||
.radio-div-set{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.radio-div-set div input{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.radio-div-set div label{
|
||||
color: var(--On-Surface);
|
||||
background-color: rgba(0, 0, 255, 0);
|
||||
border: 1.4px solid var(--Outline);
|
||||
|
||||
|
||||
display: flex;
|
||||
height: 38px;
|
||||
font-family: var(--google-mid);
|
||||
font-size: 16px;
|
||||
position: relative;
|
||||
justify-content: center;
|
||||
|
||||
align-items: center;
|
||||
width: max-content;
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
transition: background-color 0.1s, padding 0.2s;
|
||||
}
|
||||
|
||||
.radio-div-set div:first-child > label{
|
||||
border-bottom-left-radius: 50px;
|
||||
border-top-left-radius: 50px;
|
||||
width: max-content;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-right: 1px solid var(--Outline) !important;
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set div:last-child label{
|
||||
border-bottom-right-radius: 50px;
|
||||
border-top-right-radius: 50px;
|
||||
width: max-content;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-left: 1px solid var(--Outline);
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set div:last-child input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
padding-left: 40px;
|
||||
padding-right: 20px !important;
|
||||
}
|
||||
|
||||
.radio-div-set div:first-child input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
padding-left: 40px;
|
||||
padding-right: 10px !important;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.radio-div-set div input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
padding-left: 35px;
|
||||
padding-right: 10px !important;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.radio-div-set div:first-child input:checked + label::before {
|
||||
content: 'done';
|
||||
position: absolute;
|
||||
font-family: 'Material symbols' !important;
|
||||
left: 13px;
|
||||
color: var(--On-Surface);
|
||||
font-size: 24px;
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set div:last-child input:checked + label::before {
|
||||
content: 'done';
|
||||
position: absolute;
|
||||
font-family: 'Material symbols' !important;
|
||||
left: 10px;
|
||||
color: var(--On-Surface);
|
||||
font-size: 24px;
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set div input:checked + label::before {
|
||||
content: 'done';
|
||||
position: absolute;
|
||||
font-family: 'Material symbols' !important;
|
||||
left: 7px;
|
||||
color: var(--On-Surface);
|
||||
font-size: 24px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* icon-one */
|
||||
|
||||
|
||||
.radio-div-set-icon{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.radio-div-set-icon div input{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.radio-div-set-icon div label{
|
||||
color: var(--On-Surface);
|
||||
background-color: rgba(0, 0, 255, 0);
|
||||
border: 1.4px solid var(--Outline);
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
display: flex;
|
||||
height: 38px;
|
||||
font-family: var(--google-mid);
|
||||
font-size: 15px;
|
||||
position: relative;
|
||||
justify-content: space-around;
|
||||
gap: 5px;
|
||||
align-items: center;
|
||||
width: max-content;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
transition: background-color 0.1s, padding 0.2s;
|
||||
}
|
||||
|
||||
.radio-div-set-icon div:first-child > label{
|
||||
border-bottom-left-radius: 50px;
|
||||
/* padding-left: 45px; */
|
||||
|
||||
border-top-left-radius: 50px;
|
||||
width: max-content;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-right: 1px solid var(--Outline) !important;
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-icon div:last-child label{
|
||||
border-bottom-right-radius: 50px;
|
||||
border-top-right-radius: 50px;
|
||||
width: max-content;
|
||||
display: flex;
|
||||
/* padding-left: 40px; */
|
||||
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-left: 1px solid var(--Outline);
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-icon div:last-child input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-icon div:first-child input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.radio-div-set-icon div input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-icon div label::before {
|
||||
content: attr(data-icon);
|
||||
/* position: absolute; */
|
||||
font-family: 'Material symbols' !important;
|
||||
left: 15px;
|
||||
color: var(--On-Surface);
|
||||
font-size: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.radio-div-set-icon div:last-child label::before {
|
||||
content: attr(data-icon);
|
||||
/* position: absolute; */
|
||||
font-family: 'Material symbols' !important;
|
||||
color: var(--On-Surface);
|
||||
font-size: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.radio-div-set-icon div:first-child label::before {
|
||||
content: attr(data-icon);
|
||||
/* position: absolute; */
|
||||
font-family: 'Material symbols' !important;
|
||||
color: var(--On-Surface);
|
||||
font-size: 20px;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.radio-div-set-icon div:first-child input:checked + label::before {
|
||||
content: 'done';
|
||||
/* position: absolute; */
|
||||
font-family: 'Material symbols' !important;
|
||||
color: var(--On-Secondary-Container);
|
||||
font-size: 22px;
|
||||
width: 20px;
|
||||
height: 24px;
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-icon div:last-child input:checked + label::before {
|
||||
content: 'done';
|
||||
/* position: absolute; */
|
||||
font-family: 'Material symbols' !important;
|
||||
color: var(--On-Secondary-Container);
|
||||
font-size: 22px;
|
||||
width: 20px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.radio-div-set-icon div input:checked + label::before {
|
||||
content: 'done';
|
||||
/* position: absolute; */
|
||||
font-family: 'Material symbols' !important;
|
||||
color: var(--On-Secondary-Container);
|
||||
font-size: 22px;
|
||||
width: 20px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
|
||||
/* regular */
|
||||
|
||||
|
||||
.radio-div-set-regular{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.radio-div-set-regular div input{
|
||||
display: none;
|
||||
}
|
||||
|
||||
.radio-div-set-regular div label{
|
||||
color: var(--On-Surface);
|
||||
background-color: rgba(0, 0, 255, 0);
|
||||
border: 1px solid var(--Outline);
|
||||
|
||||
border-left: none;
|
||||
/* border-right: none; */
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
height: 38px;
|
||||
font-family: var(--google-mid);
|
||||
font-size: 15px;
|
||||
position: relative;
|
||||
justify-content: center;
|
||||
|
||||
align-items: center;
|
||||
width: max-content;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
transition: background-color 0.1s, padding 0.2s;
|
||||
}
|
||||
|
||||
.radio-div-set-regular div:first-child > label{
|
||||
border-bottom-left-radius: 50px;
|
||||
|
||||
border-top-left-radius: 50px;
|
||||
width: max-content;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-right: 1px solid var(--Outline) !important;
|
||||
border-left: 1px solid var(--Outline) !important;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-regular div:last-child label{
|
||||
border-bottom-right-radius: 50px;
|
||||
border-top-right-radius: 50px;
|
||||
width: max-content;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
/* border-left: 1px solid var(--Outline); */
|
||||
border-right: 1px solid var(--Outline) !important;
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-regular div:last-child input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
pointer-events: none;
|
||||
|
||||
}
|
||||
|
||||
.radio-div-set-regular div:first-child input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
|
||||
pointer-events: none;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.radio-div-set-regular div input:checked + label {
|
||||
background-color: var(--Secondary-Container);
|
||||
color: var(--On-Secondary-Container);
|
||||
pointer-events: none;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* usage */
|
||||
|
||||
|
||||
|
||||
|
||||
/* Selected icon only
|
||||
|
||||
|
||||
<!-- <div class="radio-div-set">
|
||||
|
||||
<div class="radio-option-settings">
|
||||
<input type="radio" name="options-1" id="radio1">
|
||||
<label for="radio1" class="md-ripples ripples-bounded">Day</label>
|
||||
</div>
|
||||
|
||||
<div class="radio-option-settings">
|
||||
<input type="radio" name="options-1" id="radio2">
|
||||
<label for="radio2" class="md-ripples ripples-bounded">Month</label>
|
||||
</div>
|
||||
|
||||
<div class="radio-option-settings">
|
||||
<input type="radio" name="options-1" id="radio3">
|
||||
<label for="radio3" class="md-ripples ripples-bounded">Week</label>
|
||||
</div>
|
||||
|
||||
</div> -->
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* Icon Ones
|
||||
|
||||
<!-- <div class="radio-div-set-icon">
|
||||
|
||||
<div class="radio-option-settings-icon">
|
||||
<input type="radio" name="options-1" id="radio1">
|
||||
<label for="radio1" class="md-ripples ripples-bounded" data-icon="event">Day</label>
|
||||
</div>
|
||||
|
||||
<div class="radio-option-settings-icon">
|
||||
<input type="radio" name="options-1" id="radio3">
|
||||
<label for="radio3" class="md-ripples ripples-bounded" data-icon="date_range">Week</label>
|
||||
</div>
|
||||
|
||||
</div> -->
|
||||
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/* Regular no icons
|
||||
|
||||
<div class="radio-div-set-regular">
|
||||
|
||||
<div class="radio-option-settings-regular">
|
||||
<input type="radio" name="options-1" id="radio1">
|
||||
<label for="radio1" class="ripple_btn_low">Day</label>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="radio-option-settings-regular">
|
||||
<input type="radio" name="options-1" id="radio3">
|
||||
<label for="radio3" class="ripple_btn_low">Week</label>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
*/
|
||||
|
After Width: | Height: | Size: 303 KiB |
|
After Width: | Height: | Size: 399 KiB |
@@ -0,0 +1 @@
|
||||
{"v":"5.7.3","fr":25,"ip":0,"op":50,"w":610,"h":495,"nm":"error","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"onda contornos","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[290.23,391.787,0],"ix":2},"a":{"a":0,"k":[215.177,7.452,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":25,"s":[98,98,100]},{"t":50,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[18.019,-3.444],[11.925,3.71],[15.246,-5.628],[13.16,-1.326],[6.095,1.06],[18.549,-4.579],[20.669,-11.401],[0,0]],"o":[[-18.019,3.445],[-11.924,-3.71],[-15.247,5.627],[-13.16,1.325],[-6.094,-1.06],[-18.549,4.579],[0,0],[0,0]],"v":[[172.782,-2.665],[120.58,-2.135],[64.933,1.575],[-12.001,-5.314],[-55.9,2.105],[-108.102,-0.619],[-214.927,4.199],[214.927,4.171]],"c":true},"ix":2},"nm":"Caminho 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.760999971278,0.795999983245,0.917999985639,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[215.177,7.452],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Grupo 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1750,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"mascara contornos","td":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[306.5,443.092,0],"ix":2},"a":{"a":0,"k":[236.75,48.666,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0]],"v":[[236.5,48.416],[-236.5,48.416],[-236.5,-48.416],[236.5,-48.416]],"c":true},"ix":2},"nm":"Caminho 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[236.75,48.666],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Grupo 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1750,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"barco contornos","tt":2,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":25,"s":[1]},{"t":50,"s":[0]}],"ix":10},"p":{"a":1,"k":[{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":0,"s":[298.895,340.028,0],"to":[0,0.995,0],"ti":[0,0,0]},{"i":{"x":0.667,"y":1},"o":{"x":0.333,"y":0},"t":25,"s":[298.895,346,0],"to":[0,0,0],"ti":[0,0.995,0]},{"t":50,"s":[298.895,340.028,0]}],"ix":2},"a":{"a":0,"k":[238.525,103.168,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[34.934,18.014],[0.174,0.101],[0,0],[-20.846,-10.75],[-11.059,-3.23],[0,0]],"o":[[-8.314,-1.72],[-20.869,-10.761],[0,0],[0.173,0.102],[27.561,14.213],[0,0],[0,0]],"v":[[50.064,23.648],[-12.12,-2.247],[-50.064,-23.648],[-48.52,-23.283],[-11.623,-3.201],[48.425,22.504],[48.994,22.88]],"c":true},"ix":2},"nm":"Caminho 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.169000004787,0.161000001197,0.368999974868,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[50.595,73.639],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformar"}],"nm":"Grupo 1","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.734,-5.533],[2.44,-4.275],[0,0],[-0.479,3.608],[0.983,3.414],[0,0]],"o":[[-0.688,5.183],[0,0],[1.73,-2.956],[0.497,-3.745],[0,0],[1.453,5.042]],"v":[[7.355,0.862],[2.555,15.132],[-8.089,9.167],[-4.699,-0.739],[-5.492,-11.566],[6.178,-15.132]],"c":true},"ix":2},"nm":"Caminho 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.910000011968,0.426999978458,0.187999994615,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Preenchimento 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[115.743,122.502],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"Line truncated
|
||||
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 296 KiB |