mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-06 21:57:48 +01:00
Compare commits
196 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f63a5a1d5 | ||
|
|
679704949e | ||
|
|
e46d291c78 | ||
|
|
54b01b302b | ||
|
|
aa1726df05 | ||
|
|
810390c1be | ||
|
|
b7b5e4a117 | ||
|
|
e99a38063c | ||
|
|
dacfc30cea | ||
|
|
7803b815af | ||
|
|
3500c81a1c | ||
|
|
6aa77faea0 | ||
|
|
3ca720953a | ||
|
|
4396d0a5f1 | ||
|
|
87ec2ea20c | ||
|
|
700fb09e64 | ||
|
|
3736194c7c | ||
|
|
08c9379eba | ||
|
|
040e784526 | ||
|
|
443a073ae3 | ||
|
|
b792ba8267 | ||
|
|
349f2a1c66 | ||
|
|
7750a1c1f4 | ||
|
|
631e7adb7c | ||
|
|
9a70bb7e3d | ||
|
|
c08ca4ce44 | ||
|
|
cddf393714 | ||
|
|
fe0eeb5332 | ||
|
|
9ad78f8204 | ||
|
|
87be6b1105 | ||
|
|
fc799000d3 | ||
|
|
d4ee7962ce | ||
|
|
762a02f287 | ||
|
|
cc1f580e46 | ||
|
|
765c6f9b99 | ||
|
|
94f43b1210 | ||
|
|
ba4cbad601 | ||
|
|
ab75534d3e | ||
|
|
a697a6e8d4 | ||
|
|
5c3d7af929 | ||
|
|
5b8d781eb3 | ||
|
|
2c8ab6e9d6 | ||
|
|
fb9dc36226 | ||
|
|
e549fc50af | ||
|
|
1b847136ab | ||
|
|
94e156b078 | ||
|
|
00aacba639 | ||
|
|
7ebd509036 | ||
|
|
b335c9603c | ||
|
|
4e58341443 | ||
|
|
3b0931c012 | ||
|
|
513d187567 | ||
|
|
0d9068c6fa | ||
|
|
1f756c1a67 | ||
|
|
0e18d14eb1 | ||
|
|
ccf8d2c611 | ||
|
|
cad721dee2 | ||
|
|
a3e21e56c0 | ||
|
|
e0213269c0 | ||
|
|
d0f83aa30a | ||
|
|
acbc66f26b | ||
|
|
ee1fc2fa55 | ||
|
|
f0231e17fd | ||
|
|
2182ffb894 | ||
|
|
fbbf007fc7 | ||
|
|
ba87f8b64d | ||
|
|
0ab30b711c | ||
|
|
63de2888c4 | ||
|
|
bdbe81268b | ||
|
|
1dd7947c71 | ||
|
|
43a11eadfc | ||
|
|
3a27486c34 | ||
|
|
54fb201874 | ||
|
|
977c65f911 | ||
|
|
8bdd03a632 | ||
|
|
6f34aaefa4 | ||
|
|
4017997448 | ||
|
|
82c290d5d8 | ||
|
|
4417161e0c | ||
|
|
2b41121a80 | ||
|
|
b1a0b4ebcf | ||
|
|
5a8ae8a626 | ||
|
|
59e966c6dd | ||
|
|
4ff2799c0e | ||
|
|
789831ff57 | ||
|
|
b4602a2e4b | ||
|
|
6722c3712d | ||
|
|
d650d1cae5 | ||
|
|
a8084e9e80 | ||
|
|
458d376ce5 | ||
|
|
4c658cf717 | ||
|
|
8dff267305 | ||
|
|
d69dda762a | ||
|
|
b0b5d8b381 | ||
|
|
1662302b13 | ||
|
|
ae781a942e | ||
|
|
f5f6c57ba8 | ||
|
|
ca6065d428 | ||
|
|
7602ec8479 | ||
|
|
cf4c8885a1 | ||
|
|
644014419c | ||
|
|
922df3288b | ||
|
|
195ebf2067 | ||
|
|
f363f90da5 | ||
|
|
667b88a450 | ||
|
|
3b0e2797ca | ||
|
|
cbded542f9 | ||
|
|
e9610f7c34 | ||
|
|
31fec3cead | ||
|
|
38d81b654e | ||
|
|
17e7d449b0 | ||
|
|
3249e03bf6 | ||
|
|
817e5b630e | ||
|
|
953ade7506 | ||
|
|
a834d2a4e4 | ||
|
|
b419ddde2d | ||
|
|
bb422179e5 | ||
|
|
efa35b4bd4 | ||
|
|
450babf95d | ||
|
|
1452d846e4 | ||
|
|
4c646c660b | ||
|
|
40657049a6 | ||
|
|
0c8fe35af1 | ||
|
|
bf1b874368 | ||
|
|
207bd04489 | ||
|
|
b4ca671902 | ||
|
|
4062671466 | ||
|
|
ecccab9ebf | ||
|
|
5c8b821732 | ||
|
|
2400357666 | ||
|
|
b7e58ae07b | ||
|
|
3f523111b3 | ||
|
|
874a51f56c | ||
|
|
efe763fff8 | ||
|
|
05c0f39354 | ||
|
|
3722caee73 | ||
|
|
303acc24f6 | ||
|
|
4a747f1f93 | ||
|
|
caa97f774e | ||
|
|
805d57bf31 | ||
|
|
3e86920b95 | ||
|
|
da32e54a4b | ||
|
|
d1dce8b605 | ||
|
|
79176852b8 | ||
|
|
c68cc3c8ed | ||
|
|
c8ea72c217 | ||
|
|
1cac02f2c0 | ||
|
|
ca2f0ab229 | ||
|
|
e7db56101b | ||
|
|
f63732fd19 | ||
|
|
bbfe92cda6 | ||
|
|
ff54a8d1c3 | ||
|
|
6f912bfcdc | ||
|
|
7c14e682e7 | ||
|
|
15a0e77450 | ||
|
|
35c6e92799 | ||
|
|
b4682aebd6 | ||
|
|
7f1ea3f67b | ||
|
|
b903240b40 | ||
|
|
a5f4e81d37 | ||
|
|
3466732b8e | ||
|
|
e908bc2078 | ||
|
|
0aa8439301 | ||
|
|
7a69636794 | ||
|
|
e4728e2cc9 | ||
|
|
ca1af07aff | ||
|
|
c4e5574518 | ||
|
|
f34e7c9640 | ||
|
|
17f289b00b | ||
|
|
966dabe3b5 | ||
|
|
c3de335f2d | ||
|
|
155ef11596 | ||
|
|
0083379d96 | ||
|
|
f26af72dbe | ||
|
|
c29e97a738 | ||
|
|
1f5aac7e8f | ||
|
|
34673e9bb5 | ||
|
|
a535d052ec | ||
|
|
f48a214024 | ||
|
|
ce629128e1 | ||
|
|
df72dcfc7f | ||
|
|
b9415b43b0 | ||
|
|
cac21ebd38 | ||
|
|
ccba3d87b0 | ||
|
|
23ba45729e | ||
|
|
04f803676a | ||
|
|
61f77947ac | ||
|
|
a9429e5335 | ||
|
|
952305492c | ||
|
|
b01e6eaf56 | ||
|
|
4a3f836020 | ||
|
|
a9cc0100f6 | ||
|
|
de584eae8f | ||
|
|
92641695ad | ||
|
|
8e40aa1869 | ||
|
|
e606b50cd0 |
15
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
15
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@@ -68,9 +68,20 @@ body:
|
||||
id: browser-logs
|
||||
attributes:
|
||||
label: Browser Logs
|
||||
description: Please review and provide any relevant logs from the browser, if relevant
|
||||
description: Please review and provide any logs from the browser, if relevant
|
||||
- type: textarea
|
||||
id: other
|
||||
attributes:
|
||||
label: Other
|
||||
description: Any other relevant details. E.g. service version or API version, docker version, etc.
|
||||
description: Please include output from your troubleshooting tests, if relevant. Include any other relevant details. E.g. service version or API version, docker version, etc.
|
||||
- type: checkboxes
|
||||
id: pre-flight
|
||||
attributes:
|
||||
label: Before submitting, I have made sure to
|
||||
options:
|
||||
- label: Check [the documentation](https://gethomepage.dev/)
|
||||
required: true
|
||||
- label: Follow [the troubleshooting guide](https://gethomepage.dev/en/more/troubleshooting/) (please include output above if applicable).
|
||||
required: true
|
||||
- label: Search [existing issues](https://github.com/benphelps/homepage/search?q=&type=issues) and [discussions](https://github.com/benphelps/homepage/search?q=&type=discussions).
|
||||
required: true
|
||||
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -41,3 +41,8 @@ next-env.d.ts
|
||||
|
||||
# homepage
|
||||
/config
|
||||
|
||||
# IDEs
|
||||
/.idea/
|
||||
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ pnpm start
|
||||
|
||||
## Configuration
|
||||
|
||||
Configuration files will be genereted and placed on the first request.
|
||||
Configuration files will be generated and placed on the first request.
|
||||
|
||||
Configuration is done in the /config directory using .yaml files. Refer to each config for
|
||||
the specific configuration options.
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"leech": "Leech",
|
||||
"seed": "Seed",
|
||||
"download": "Download",
|
||||
"upload": "Upload"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"seed": "Seed",
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech"
|
||||
},
|
||||
"flood": {
|
||||
"leech": "Leech",
|
||||
"seed": "Seed",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"upload": "Pujada",
|
||||
"leech": "Company"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Descàrrega",
|
||||
"upload": "Pujada",
|
||||
"leech": "Company",
|
||||
"seed": "Llavor"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Descarregar",
|
||||
"upload": "Pujada",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"seed": "Seed",
|
||||
"download": "Download"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"leech": "Leech",
|
||||
"download": "Download",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -88,6 +88,13 @@
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "No Active Streams"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "Rate",
|
||||
"remaining": "Remaining",
|
||||
@@ -126,7 +133,7 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
@@ -199,7 +206,7 @@
|
||||
"processed": "Processed",
|
||||
"errored": "Errored",
|
||||
"saved": "Saved"
|
||||
},
|
||||
},
|
||||
"traefik": {
|
||||
"routers": "Routers",
|
||||
"services": "Services",
|
||||
@@ -388,5 +395,22 @@
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"inbox": "Inbox",
|
||||
"total": "Totalo"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"leech": "Leech",
|
||||
"upload": "Upload",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Semilla"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Descargar",
|
||||
"upload": "Cargar",
|
||||
"leech": "Leech",
|
||||
"seed": "Semilla"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Descargar",
|
||||
"upload": "Subir",
|
||||
@@ -363,21 +357,51 @@
|
||||
"seed": "Seed"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Queue",
|
||||
"processed": "Processed",
|
||||
"saved": "Saved",
|
||||
"errored": "Errored"
|
||||
"queue": "Cola",
|
||||
"processed": "Procesado",
|
||||
"saved": "Guardado",
|
||||
"errored": "Error"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Read",
|
||||
"unread": "Unread"
|
||||
"read": "Leer",
|
||||
"unread": "Sin leer"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
"wait": "Espere, por favor",
|
||||
"no_devices": "No se reciben datos del dispositivo"
|
||||
},
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "AP conectados",
|
||||
"activeUser": "Dispositivos activos",
|
||||
"alerts": "Alertas",
|
||||
"connectedGateway": "Pasarelas conectadas",
|
||||
"connectedSwitches": "Interruptores conectados"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Descargar",
|
||||
"upload": "Subir",
|
||||
"leech": "Sanguijuela",
|
||||
"seed": "Semilla"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "Carga de la CPU",
|
||||
"memoryUsed": "Memoria utilizada",
|
||||
"uptime": "Tiempo en funcionamiento",
|
||||
"numberOfLeases": "Alquileres"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"seed": "Seed",
|
||||
"download": "Download"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedSwitches": "Connected switches",
|
||||
"connectedGateway": "Connected gateways"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Réception",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
@@ -369,15 +363,45 @@
|
||||
"saved": "Enregistré"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Read",
|
||||
"unread": "Unread"
|
||||
"read": "Lu",
|
||||
"unread": "Non lu"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
"wait": "Patientez...",
|
||||
"no_devices": "Aucune donnée d'appareil reçue"
|
||||
},
|
||||
"common": {
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}",
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "APs connectées",
|
||||
"activeUser": "Équipts actifs",
|
||||
"alerts": "Alertes",
|
||||
"connectedGateway": "Passerelles connectées",
|
||||
"connectedSwitches": "Switches connectés"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Récep.",
|
||||
"upload": "Envoi",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "Charge CPU",
|
||||
"memoryUsed": "Mém. Utilisée",
|
||||
"uptime": "Disponibilité",
|
||||
"numberOfLeases": "Baux"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "Tous les flux",
|
||||
"streams_active": "Flux actif",
|
||||
"streams_xepg": "Canal XEPG"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"download": "Download",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Preuzimanje",
|
||||
"upload": "Prijenos",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Preuzimanje",
|
||||
"upload": "Prijenos",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"upload": "Upload",
|
||||
"leech": "Leech"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedAp": "Connected APs",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,18 +5,18 @@
|
||||
"cpu": "CPU",
|
||||
"offline": "Offline",
|
||||
"rx": "RX",
|
||||
"error": "Error",
|
||||
"unknown": "Unknown"
|
||||
"error": "Errore",
|
||||
"unknown": "Sconosciuto"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "In riproduzione",
|
||||
"transcoding": "Transcoding",
|
||||
"transcoding": "Transcodifica",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "Nessuno Stream Attivo"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "In riproduzione",
|
||||
"transcoding": "Transcoding",
|
||||
"transcoding": "Transcodifica",
|
||||
"bitrate": "Bitrate",
|
||||
"no_active": "Nessuno Stream Attivo"
|
||||
},
|
||||
@@ -31,7 +31,7 @@
|
||||
"total": "Totali"
|
||||
},
|
||||
"traefik": {
|
||||
"routers": "Routers",
|
||||
"routers": "Router",
|
||||
"services": "Servizi",
|
||||
"middleware": "Middleware"
|
||||
},
|
||||
@@ -40,9 +40,9 @@
|
||||
"api_error": "Errore API",
|
||||
"status": "Stato",
|
||||
"url": "URL",
|
||||
"information": "Information",
|
||||
"information": "Informazione",
|
||||
"raw_error": "Raw Error",
|
||||
"response_data": "Response Data"
|
||||
"response_data": "Dati risposta"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Cerca…"
|
||||
@@ -105,7 +105,7 @@
|
||||
"pending": "In attesa",
|
||||
"approved": "Approvati",
|
||||
"available": "Disponibili",
|
||||
"processing": "Processing"
|
||||
"processing": "In lavorazione"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Rapporto",
|
||||
@@ -126,13 +126,13 @@
|
||||
},
|
||||
"gotify": {
|
||||
"apps": "Applicazioni",
|
||||
"clients": "Clients",
|
||||
"clients": "Client",
|
||||
"messages": "Messaggi"
|
||||
},
|
||||
"prowlarr": {
|
||||
"enableIndexers": "Indicizzatori",
|
||||
"numberOfGrabs": "Grabs",
|
||||
"numberOfQueries": "Queries",
|
||||
"numberOfQueries": "Interrogazioni",
|
||||
"numberOfFailGrabs": "Grabs Falliti",
|
||||
"numberOfFailQueries": "Queries Fallite"
|
||||
},
|
||||
@@ -153,10 +153,10 @@
|
||||
"lidarr": {
|
||||
"wanted": "Mancanti",
|
||||
"queued": "In coda",
|
||||
"albums": "Albums"
|
||||
"albums": "Album"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Queries",
|
||||
"queries": "Interrogazioni",
|
||||
"blocked": "Bloccati",
|
||||
"filtered": "Filtrati",
|
||||
"latency": "Latenza"
|
||||
@@ -304,12 +304,12 @@
|
||||
"downloads": "Coda",
|
||||
"videos": "Video",
|
||||
"channels": "Canali",
|
||||
"playlists": "Playlists"
|
||||
"playlists": "Playlist"
|
||||
},
|
||||
"truenas": {
|
||||
"load": "Carico di Sistema",
|
||||
"uptime": "Uptime",
|
||||
"alerts": "Alerts",
|
||||
"uptime": "Tempo di attività",
|
||||
"alerts": "Avvisi",
|
||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||
},
|
||||
"navidrome": {
|
||||
@@ -323,26 +323,26 @@
|
||||
"total": "Totale"
|
||||
},
|
||||
"gluetun": {
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region",
|
||||
"country": "Country"
|
||||
"public_ip": "IP pubblico",
|
||||
"region": "Località",
|
||||
"country": "Stato"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
"channels": "Canali",
|
||||
"hd": "HD"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Error",
|
||||
"error": "Errore",
|
||||
"ping": "Ping"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"unknown": "Unknown"
|
||||
"passed": "Passati",
|
||||
"failed": "Falliti",
|
||||
"unknown": "Sconosciuto"
|
||||
},
|
||||
"paperlessngx": {
|
||||
"inbox": "Inbox",
|
||||
"total": "Total"
|
||||
"inbox": "In arrivo",
|
||||
"total": "Totali"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Download",
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -363,21 +357,51 @@
|
||||
"seed": "Seed"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Queue",
|
||||
"processed": "Processed",
|
||||
"errored": "Errored",
|
||||
"saved": "Saved"
|
||||
"queue": "In coda",
|
||||
"processed": "Elaborati",
|
||||
"errored": "Errori",
|
||||
"saved": "Salvati"
|
||||
},
|
||||
"miniflux": {
|
||||
"unread": "Unread",
|
||||
"read": "Read"
|
||||
"unread": "Non letti",
|
||||
"read": "Letti"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
"wait": "Attendi",
|
||||
"no_devices": "Nessun dato del dispositivo ricevuto"
|
||||
},
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "AP Connessi",
|
||||
"activeUser": "Dispositivi attivi",
|
||||
"alerts": "Allarmi",
|
||||
"connectedGateway": "Gateway connessi",
|
||||
"connectedSwitches": "Switch connessi"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "Carico della CPU",
|
||||
"memoryUsed": "Memoria Utilizzata",
|
||||
"uptime": "Tempo di attività",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"upload": "Upload",
|
||||
"download": "Download",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"upload": "Upload",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"leech": "Leech",
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases",
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
@@ -363,21 +357,51 @@
|
||||
"seed": "Seed"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Queue",
|
||||
"processed": "Processed",
|
||||
"errored": "Errored",
|
||||
"saved": "Saved"
|
||||
"queue": "Kolejka",
|
||||
"processed": "Przetworzone",
|
||||
"errored": "Błędne",
|
||||
"saved": "Zapisane"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Read",
|
||||
"unread": "Unread"
|
||||
"read": "Przeczytane",
|
||||
"unread": "Nieprzeczytane"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
"wait": "Proszę czekać",
|
||||
"no_devices": "Nie otrzymano danych urządzenia"
|
||||
},
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedSwitches": "Połączone przełączniki",
|
||||
"connectedAp": "Połączone punkty dostępowe",
|
||||
"activeUser": "Aktywne urządzenia",
|
||||
"alerts": "Alarmy",
|
||||
"connectedGateway": "Połączone bramy"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Pobieranie",
|
||||
"upload": "Wysyłanie",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "Obciążenie procesora",
|
||||
"memoryUsed": "Zuyżyta pamięć",
|
||||
"uptime": "Czas działania",
|
||||
"numberOfLeases": "Dzierżawy"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,12 +363,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Descarregar",
|
||||
"upload": "Carregar",
|
||||
@@ -388,5 +382,35 @@
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"numberOfLeases": "Leases",
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"seed": "Seed",
|
||||
"leech": "Leech"
|
||||
},
|
||||
"flood": {
|
||||
"upload": "Upload",
|
||||
"download": "Download",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedSwitches": "Connected switches",
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"seed": "Seed",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"upload": "Upload",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"upload": "Upload",
|
||||
"leech": "Leech"
|
||||
},
|
||||
"diskstation": {
|
||||
"leech": "Leech",
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases",
|
||||
"memoryUsed": "Memory Used"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
407
public/locales/uk/common.json
Normal file
407
public/locales/uk/common.json
Normal file
@@ -0,0 +1,407 @@
|
||||
{
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"alerts": "Оповіщення",
|
||||
"connectedGateway": "Підключені шлюзи",
|
||||
"connectedSwitches": "Підключені перемикачі",
|
||||
"connectedAp": "Підключені точки доступу",
|
||||
"activeUser": "Активні пристрої"
|
||||
},
|
||||
"sabnzbd": {
|
||||
"rate": "Швидкість",
|
||||
"queue": "Черга",
|
||||
"timeleft": "Залишилось"
|
||||
},
|
||||
"rutorrent": {
|
||||
"active": "Активний",
|
||||
"upload": "Відправлення",
|
||||
"download": "Завантаження"
|
||||
},
|
||||
"deluge": {
|
||||
"download": "Завантаження",
|
||||
"upload": "Відправлення",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"readarr": {
|
||||
"wanted": "Розшукується",
|
||||
"queued": "У черзі",
|
||||
"books": "Книжки"
|
||||
},
|
||||
"wmo": {
|
||||
"55-day": "Heavy Drizzle",
|
||||
"55-night": "Heavy Drizzle",
|
||||
"56-day": "Light Freezing Drizzle",
|
||||
"56-night": "Light Freezing Drizzle",
|
||||
"0-day": "Sunny",
|
||||
"0-night": "Clear",
|
||||
"1-day": "Mainly Sunny",
|
||||
"1-night": "Mainly Clear",
|
||||
"2-day": "Partly Cloudy",
|
||||
"2-night": "Partly Cloudy",
|
||||
"3-day": "Cloudy",
|
||||
"3-night": "Cloudy",
|
||||
"53-day": "Drizzle",
|
||||
"45-day": "Foggy",
|
||||
"45-night": "Foggy",
|
||||
"48-day": "Foggy",
|
||||
"48-night": "Foggy",
|
||||
"51-day": "Light Drizzle",
|
||||
"51-night": "Light Drizzle",
|
||||
"53-night": "Drizzle",
|
||||
"57-day": "Freezing Drizzle",
|
||||
"57-night": "Freezing Drizzle",
|
||||
"61-day": "Light Rain",
|
||||
"61-night": "Light Rain",
|
||||
"63-day": "Rain",
|
||||
"63-night": "Rain",
|
||||
"65-day": "Heavy Rain",
|
||||
"65-night": "Heavy Rain",
|
||||
"66-day": "Freezing Rain",
|
||||
"66-night": "Freezing Rain",
|
||||
"67-day": "Freezing Rain",
|
||||
"67-night": "Freezing Rain",
|
||||
"71-day": "Light Snow",
|
||||
"71-night": "Light Snow",
|
||||
"73-day": "Snow",
|
||||
"73-night": "Snow",
|
||||
"75-day": "Heavy Snow",
|
||||
"75-night": "Heavy Snow",
|
||||
"77-day": "Snow Grains",
|
||||
"77-night": "Snow Grains",
|
||||
"80-day": "Light Showers",
|
||||
"80-night": "Light Showers",
|
||||
"81-day": "Showers",
|
||||
"82-day": "Heavy Showers",
|
||||
"82-night": "Heavy Showers",
|
||||
"81-night": "Showers",
|
||||
"85-day": "Snow Showers",
|
||||
"85-night": "Snow Showers",
|
||||
"86-day": "Snow Showers",
|
||||
"86-night": "Snow Showers",
|
||||
"95-day": "Thunderstorm",
|
||||
"95-night": "Thunderstorm",
|
||||
"96-day": "Thunderstorm With Hail",
|
||||
"96-night": "Thunderstorm With Hail",
|
||||
"99-day": "Thunderstorm With Hail",
|
||||
"99-night": "Thunderstorm With Hail"
|
||||
},
|
||||
"pyload": {
|
||||
"speed": "Speed",
|
||||
"active": "Active",
|
||||
"queue": "Queue",
|
||||
"total": "Total"
|
||||
},
|
||||
"gluetun": {
|
||||
"country": "Country",
|
||||
"public_ip": "Public IP",
|
||||
"region": "Region"
|
||||
},
|
||||
"hdhomerun": {
|
||||
"channels": "Channels",
|
||||
"hd": "HD"
|
||||
},
|
||||
"widget": {
|
||||
"missing_type": "Відсутній тип віджета: {{type}}",
|
||||
"api_error": "Помилка API",
|
||||
"information": "Інформація",
|
||||
"status": "Стан",
|
||||
"url": "URL",
|
||||
"raw_error": "Помилка Raw",
|
||||
"response_data": "Дані відповіді"
|
||||
},
|
||||
"weather": {
|
||||
"current": "Поточне розташування",
|
||||
"allow": "Натисніть, щоб дозволити",
|
||||
"updating": "Оновлення",
|
||||
"wait": "Будь ласка, зачекайте"
|
||||
},
|
||||
"search": {
|
||||
"placeholder": "Пошук…"
|
||||
},
|
||||
"resources": {
|
||||
"cpu": "CPU",
|
||||
"total": "Всього",
|
||||
"free": "Вільно",
|
||||
"used": "Використано",
|
||||
"load": "Навантаження"
|
||||
},
|
||||
"unifi": {
|
||||
"users": "Користувачі",
|
||||
"uptime": "Час роботи системи",
|
||||
"days": "Днів",
|
||||
"wan": "WAN",
|
||||
"lan": "LAN",
|
||||
"wlan": "WLAN",
|
||||
"devices": "Пристрої",
|
||||
"lan_devices": "LAN пристрої",
|
||||
"wlan_devices": "WLAN пристрої",
|
||||
"lan_users": "LAN користувачі",
|
||||
"wlan_users": "WLAN користувачі",
|
||||
"up": "Відправка",
|
||||
"down": "Завантаження",
|
||||
"wait": "Будь ласка, зачекайте"
|
||||
},
|
||||
"docker": {
|
||||
"rx": "RX",
|
||||
"tx": "TX",
|
||||
"mem": "Пам'ять",
|
||||
"cpu": "CPU",
|
||||
"offline": "Офлайн",
|
||||
"error": "Помилка",
|
||||
"unknown": "Невідомий"
|
||||
},
|
||||
"ping": {
|
||||
"error": "Помилка",
|
||||
"ping": "Пінг"
|
||||
},
|
||||
"emby": {
|
||||
"playing": "Відтворення",
|
||||
"transcoding": "Перекодування",
|
||||
"bitrate": "Бітрейт",
|
||||
"no_active": "Немає активних потоків"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Завантаження",
|
||||
"upload": "Відправлення",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"changedetectionio": {
|
||||
"totalObserved": "Всього спостережень",
|
||||
"diffsDetected": "Виявлено відмінності"
|
||||
},
|
||||
"tautulli": {
|
||||
"playing": "Відтворення",
|
||||
"transcoding": "Перекодування",
|
||||
"bitrate": "Бітрейт",
|
||||
"no_active": "Немає активних потоків"
|
||||
},
|
||||
"nzbget": {
|
||||
"rate": "Швидкість",
|
||||
"downloaded": "Завантажено",
|
||||
"remaining": "Залишилося"
|
||||
},
|
||||
"plex": {
|
||||
"streams": "Активні потоки",
|
||||
"movies": "Фільми",
|
||||
"tv": "TБ шоу"
|
||||
},
|
||||
"transmission": {
|
||||
"download": "Завантаження",
|
||||
"upload": "Відправлення",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"qbittorrent": {
|
||||
"download": "Завантаження",
|
||||
"upload": "Відправлення",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Завантаження",
|
||||
"upload": "Відправлення",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"sonarr": {
|
||||
"wanted": "Розшукується",
|
||||
"queued": "У черзі",
|
||||
"series": "Серії"
|
||||
},
|
||||
"radarr": {
|
||||
"wanted": "Розшукується",
|
||||
"missing": "Відсутній",
|
||||
"queued": "У черзі",
|
||||
"movies": "Фільми"
|
||||
},
|
||||
"lidarr": {
|
||||
"wanted": "Розшукується",
|
||||
"queued": "У черзі",
|
||||
"albums": "Альбоми"
|
||||
},
|
||||
"traefik": {
|
||||
"middleware": "Middleware",
|
||||
"routers": "Роутери",
|
||||
"services": "Сервіси"
|
||||
},
|
||||
"navidrome": {
|
||||
"nothing_streaming": "No Active Streams",
|
||||
"please_wait": "Please Wait"
|
||||
},
|
||||
"bazarr": {
|
||||
"missingEpisodes": "Відсутні епізоди",
|
||||
"missingMovies": "Відсутні фільми"
|
||||
},
|
||||
"ombi": {
|
||||
"pending": "В очікуванні",
|
||||
"approved": "Затверджено",
|
||||
"available": "Доступно"
|
||||
},
|
||||
"jellyseerr": {
|
||||
"pending": "В очікуванні",
|
||||
"approved": "Затверджено",
|
||||
"available": "Доступно"
|
||||
},
|
||||
"overseerr": {
|
||||
"pending": "В очікуванні",
|
||||
"processing": "Обробка",
|
||||
"approved": "Затверджено",
|
||||
"available": "Доступно"
|
||||
},
|
||||
"pihole": {
|
||||
"queries": "Запити",
|
||||
"blocked": "Заблоковано",
|
||||
"gravity": "Гравітація"
|
||||
},
|
||||
"adguard": {
|
||||
"queries": "Запити",
|
||||
"blocked": "Заблоковано",
|
||||
"filtered": "Відфільтровано",
|
||||
"latency": "Затримка"
|
||||
},
|
||||
"speedtest": {
|
||||
"upload": "Відправлення",
|
||||
"download": "Завантаження",
|
||||
"ping": "Пінг"
|
||||
},
|
||||
"portainer": {
|
||||
"running": "Запущено",
|
||||
"stopped": "Зупинено",
|
||||
"total": "Всього"
|
||||
},
|
||||
"tdarr": {
|
||||
"queue": "Черга",
|
||||
"processed": "Обробка",
|
||||
"errored": "Помилка",
|
||||
"saved": "Збережено"
|
||||
},
|
||||
"npm": {
|
||||
"enabled": "Enabled",
|
||||
"disabled": "Disabled",
|
||||
"total": "Total"
|
||||
},
|
||||
"coinmarketcap": {
|
||||
"configure": "Configure one or more crypto currencies to track",
|
||||
"1hour": "1 Hour",
|
||||
"1day": "1 Day",
|
||||
"7days": "7 Days",
|
||||
"30days": "30 Days"
|
||||
},
|
||||
"mastodon": {
|
||||
"domain_count": "Domains",
|
||||
"user_count": "Users",
|
||||
"status_count": "Posts"
|
||||
},
|
||||
"miniflux": {
|
||||
"read": "Read",
|
||||
"unread": "Unread"
|
||||
},
|
||||
"gotify": {
|
||||
"apps": "Applications",
|
||||
"clients": "Clients",
|
||||
"messages": "Messages"
|
||||
},
|
||||
"prowlarr": {
|
||||
"enableIndexers": "Indexers",
|
||||
"numberOfGrabs": "Grabs",
|
||||
"numberOfQueries": "Queries",
|
||||
"numberOfFailGrabs": "Fail Grabs",
|
||||
"numberOfFailQueries": "Fail Queries"
|
||||
},
|
||||
"jackett": {
|
||||
"configured": "Configured",
|
||||
"errored": "Errored"
|
||||
},
|
||||
"strelaysrv": {
|
||||
"numActiveSessions": "Sessions",
|
||||
"numConnections": "Connections",
|
||||
"dataRelayed": "Relayed",
|
||||
"transferRate": "Rate"
|
||||
},
|
||||
"authentik": {
|
||||
"users": "Users",
|
||||
"loginsLast24H": "Logins (24h)",
|
||||
"failedLoginsLast24H": "Failed Logins (24h)"
|
||||
},
|
||||
"proxmox": {
|
||||
"mem": "MEM",
|
||||
"cpu": "CPU",
|
||||
"vms": "VMs",
|
||||
"lxc": "LXC"
|
||||
},
|
||||
"glances": {
|
||||
"cpu": "CPU",
|
||||
"mem": "MEM",
|
||||
"wait": "Please wait"
|
||||
},
|
||||
"quicklaunch": {
|
||||
"bookmark": "Bookmark",
|
||||
"service": "Service"
|
||||
},
|
||||
"homebridge": {
|
||||
"available_update": "System",
|
||||
"updates": "Updates",
|
||||
"child_bridges_status": "{{ok}}/{{total}}",
|
||||
"update_available": "Update Available",
|
||||
"up_to_date": "Up to Date",
|
||||
"child_bridges": "Child Bridges"
|
||||
},
|
||||
"watchtower": {
|
||||
"containers_scanned": "Scanned",
|
||||
"containers_updated": "Updated",
|
||||
"containers_failed": "Failed"
|
||||
},
|
||||
"autobrr": {
|
||||
"approvedPushes": "Approved",
|
||||
"rejectedPushes": "Rejected",
|
||||
"filters": "Filters",
|
||||
"indexers": "Indexers"
|
||||
},
|
||||
"tubearchivist": {
|
||||
"downloads": "Queue",
|
||||
"videos": "Videos",
|
||||
"channels": "Channels",
|
||||
"playlists": "Playlists"
|
||||
},
|
||||
"truenas": {
|
||||
"load": "System Load",
|
||||
"uptime": "Uptime",
|
||||
"alerts": "Alerts",
|
||||
"time": "{{value, number(style: unit; unitDisplay: long;)}}"
|
||||
},
|
||||
"scrutiny": {
|
||||
"passed": "Passed",
|
||||
"failed": "Failed",
|
||||
"unknown": "Unknown"
|
||||
},
|
||||
"paperlessngx": {
|
||||
"inbox": "Inbox",
|
||||
"total": "Total"
|
||||
},
|
||||
"nextdns": {
|
||||
"wait": "Please Wait",
|
||||
"no_devices": "No Device Data Received"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases",
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"leech": "Leech",
|
||||
"download": "Download",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -350,12 +350,6 @@
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"diskstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"flood": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
@@ -379,5 +373,35 @@
|
||||
"common": {
|
||||
"bibyterate": "{{value, rate(bits: false; binary: true)}}",
|
||||
"bibitrate": "{{value, rate(bits: true; binary: true)}}"
|
||||
},
|
||||
"omada": {
|
||||
"connectedAp": "Connected APs",
|
||||
"activeUser": "Active devices",
|
||||
"alerts": "Alerts",
|
||||
"connectedGateway": "Connected gateways",
|
||||
"connectedSwitches": "Connected switches"
|
||||
},
|
||||
"downloadstation": {
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"leech": "Leech",
|
||||
"seed": "Seed"
|
||||
},
|
||||
"mikrotik": {
|
||||
"cpuLoad": "CPU Load",
|
||||
"memoryUsed": "Memory Used",
|
||||
"uptime": "Uptime",
|
||||
"numberOfLeases": "Leases"
|
||||
},
|
||||
"xteve": {
|
||||
"streams_all": "All Streams",
|
||||
"streams_active": "Active Streams",
|
||||
"streams_xepg": "XEPG Channels"
|
||||
},
|
||||
"opnsense": {
|
||||
"cpu": "CPU Load",
|
||||
"memory": "Active Memory",
|
||||
"wanUpload": "WAN Upload",
|
||||
"wanDownload": "WAN Download"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ export default function Version() {
|
||||
const revision = process.env.NEXT_PUBLIC_REVISION?.length ? process.env.NEXT_PUBLIC_REVISION : "dev";
|
||||
const version = process.env.NEXT_PUBLIC_VERSION?.length ? process.env.NEXT_PUBLIC_VERSION : "dev";
|
||||
|
||||
const cachedFetcher = (resource) => cachedFetch(resource, 5).then((res) => res.json());
|
||||
const cachedFetcher = (resource) => cachedFetch(resource, 5);
|
||||
|
||||
const { data: releaseData } = useSWR("https://api.github.com/repos/benphelps/homepage/releases", cachedFetcher);
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ const components = {
|
||||
changedetectionio: dynamic(() => import("./changedetectionio/component")),
|
||||
coinmarketcap: dynamic(() => import("./coinmarketcap/component")),
|
||||
deluge: dynamic(() => import("./deluge/component")),
|
||||
diskstation: dynamic(() => import("./diskstation/component")),
|
||||
downloadstation: dynamic(() => import("./downloadstation/component")),
|
||||
docker: dynamic(() => import("./docker/component")),
|
||||
emby: dynamic(() => import("./emby/component")),
|
||||
flood: dynamic(() => import("./flood/component")),
|
||||
@@ -22,11 +22,14 @@ const components = {
|
||||
lidarr: dynamic(() => import("./lidarr/component")),
|
||||
mastodon: dynamic(() => import("./mastodon/component")),
|
||||
miniflux: dynamic(() => import("./miniflux/component")),
|
||||
mikrotik: dynamic(() => import("./mikrotik/component")),
|
||||
navidrome: dynamic(() => import("./navidrome/component")),
|
||||
nextdns: dynamic(() => import("./nextdns/component")),
|
||||
npm: dynamic(() => import("./npm/component")),
|
||||
nzbget: dynamic(() => import("./nzbget/component")),
|
||||
omada: dynamic(() => import("./omada/component")),
|
||||
ombi: dynamic(() => import("./ombi/component")),
|
||||
opnsense: dynamic(() => import("./opnsense/component")),
|
||||
overseerr: dynamic(() => import("./overseerr/component")),
|
||||
paperlessngx: dynamic(() => import("./paperlessngx/component")),
|
||||
pihole: dynamic(() => import("./pihole/component")),
|
||||
@@ -52,6 +55,7 @@ const components = {
|
||||
truenas: dynamic(() => import("./truenas/component")),
|
||||
unifi: dynamic(() => import("./unifi/component")),
|
||||
watchtower: dynamic(() => import("./watchtower/component")),
|
||||
xteve: dynamic(() => import("./xteve/component")),
|
||||
};
|
||||
|
||||
export default components;
|
||||
|
||||
@@ -17,10 +17,10 @@ export default function Component({ service }) {
|
||||
if (!tasks) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="diskstation.leech" />
|
||||
<Block label="diskstation.download" />
|
||||
<Block label="diskstation.seed" />
|
||||
<Block label="diskstation.upload" />
|
||||
<Block label="downloadstation.leech" />
|
||||
<Block label="downloadstation.download" />
|
||||
<Block label="downloadstation.seed" />
|
||||
<Block label="downloadstation.upload" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
@@ -32,10 +32,10 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="diskstation.leech" value={t("common.number", { value: leech })} />
|
||||
<Block label="diskstation.download" value={t("common.bitrate", { value: rateDl })} />
|
||||
<Block label="diskstation.seed" value={t("common.number", { value: completed })} />
|
||||
<Block label="diskstation.upload" value={t("common.bitrate", { value: rateUl })} />
|
||||
<Block label="downloadstation.leech" value={t("common.number", { value: leech })} />
|
||||
<Block label="downloadstation.download" value={t("common.bitrate", { value: rateDl })} />
|
||||
<Block label="downloadstation.seed" value={t("common.number", { value: completed })} />
|
||||
<Block label="downloadstation.upload" value={t("common.bitrate", { value: rateUl })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import createLogger from "utils/logger";
|
||||
import widgets from "widgets/widgets";
|
||||
import getServiceWidget from "utils/config/service-helpers";
|
||||
|
||||
const logger = createLogger("diskstationProxyHandler");
|
||||
const logger = createLogger("downloadstationProxyHandler");
|
||||
const authApi = "{url}/webapi/auth.cgi?api=SYNO.API.Auth&version=2&method=login&account={username}&passwd={password}&session=DownloadStation&format=cookie"
|
||||
|
||||
async function login(widget) {
|
||||
@@ -34,7 +34,7 @@ async function login(widget) {
|
||||
return [status, contentType, data];
|
||||
}
|
||||
|
||||
export default async function diskstationProxyHandler(req, res) {
|
||||
export default async function downloadstationProxyHandler(req, res) {
|
||||
const { group, service, endpoint } = req.query;
|
||||
|
||||
if (!group || !service) {
|
||||
@@ -56,7 +56,7 @@ export default async function diskstationProxyHandler(req, res) {
|
||||
|
||||
const json = JSON.parse(data.toString());
|
||||
if (json?.success !== true) {
|
||||
logger.debug("Logging in to DiskStation");
|
||||
logger.debug("Logging in to DownloadStation");
|
||||
[status, contentType, data] = await login(widget);
|
||||
if (status !== 200) {
|
||||
return res.status(status).end(data)
|
||||
@@ -1,8 +1,8 @@
|
||||
import diskstationProxyHandler from "./proxy";
|
||||
import downloadstationProxyHandler from "./proxy";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/webapi/DownloadStation/task.cgi?api=SYNO.DownloadStation.Task&version=1&method={endpoint}",
|
||||
proxyHandler: diskstationProxyHandler,
|
||||
proxyHandler: downloadstationProxyHandler,
|
||||
|
||||
mappings: {
|
||||
"list": {
|
||||
43
src/widgets/mikrotik/component.jsx
Normal file
43
src/widgets/mikrotik/component.jsx
Normal file
@@ -0,0 +1,43 @@
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
|
||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "system");
|
||||
const { data: leasesData, error: leasesError } = useWidgetAPI(widget, "leases");
|
||||
|
||||
if (statsError || leasesError) {
|
||||
const finalError = statsError ?? leasesError;
|
||||
return <Container error={ finalError } />;
|
||||
}
|
||||
|
||||
if (!statsData || !leasesData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="mikrotik.uptime" />
|
||||
<Block label="mikrotik.cpuLoad" />
|
||||
<Block label="mikrotik.memoryUsed" />
|
||||
<Block label="mikrotik.numberOfLeases" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
const memoryUsed = 100 - (statsData['free-memory'] / statsData['total-memory'])*100
|
||||
|
||||
const numberOfLeases = leasesData.length
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="mikrotik.uptime" value={ statsData.uptime } />
|
||||
<Block label="mikrotik.cpuLoad" value={t("common.percent", { value: statsData['cpu-load'] })} />
|
||||
<Block label="mikrotik.memoryUsed" value={t("common.percent", { value: memoryUsed })} />
|
||||
<Block label="mikrotik.numberOfLeases" value={t("common.number", { value: numberOfLeases })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
24
src/widgets/mikrotik/widget.js
Normal file
24
src/widgets/mikrotik/widget.js
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/rest/{endpoint}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
|
||||
mappings: {
|
||||
system: {
|
||||
endpoint: "system/resource",
|
||||
validate: [
|
||||
"cpu-load",
|
||||
"free-memory",
|
||||
"total-memory",
|
||||
"uptime"
|
||||
]
|
||||
},
|
||||
leases: {
|
||||
endpoint: "ip/dhcp-server/lease",
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
||||
39
src/widgets/omada/component.jsx
Normal file
39
src/widgets/omada/component.jsx
Normal file
@@ -0,0 +1,39 @@
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import useWidgetAPI from "../../utils/proxy/use-widget-api";
|
||||
import Container from "../../components/services/widget/container";
|
||||
import Block from "../../components/services/widget/block";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
|
||||
const { data: omadaData, error: omadaAPIError } = useWidgetAPI(widget, {
|
||||
refreshInterval: 5000,
|
||||
});
|
||||
|
||||
if (omadaAPIError) {
|
||||
return <Container error={omadaAPIError} />;
|
||||
}
|
||||
|
||||
if (!omadaData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="omada.connectedAp" />
|
||||
<Block label="omada.activeUser" />
|
||||
<Block label="omada.alerts" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="omada.connectedAp" value={t( "common.number", { value: omadaData.connectedAp})} />
|
||||
<Block label="omada.activeUser" value={t( "common.number", { value: omadaData.activeUser })} />
|
||||
<Block label="omada.alerts" value={t( "common.number", { value: omadaData.alerts })} />
|
||||
{ omadaData.connectedGateways > 0 && <Block label="omada.connectedGateway" value={t("common.number", { value: omadaData.connectedGateways})} /> }
|
||||
{ omadaData.connectedSwitches > 0 && <Block label="omada.connectedSwitches" value={t("common.number", { value: omadaData.connectedSwitches})} /> }
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
252
src/widgets/omada/proxy.js
Normal file
252
src/widgets/omada/proxy.js
Normal file
@@ -0,0 +1,252 @@
|
||||
|
||||
import { httpProxy } from "utils/proxy/http";
|
||||
import getServiceWidget from "utils/config/service-helpers";
|
||||
import createLogger from "utils/logger";
|
||||
|
||||
const proxyName = "omadaProxyHandler";
|
||||
|
||||
const logger = createLogger(proxyName);
|
||||
|
||||
async function login(loginUrl, username, password, controllerVersionMajor) {
|
||||
const params = {
|
||||
username,
|
||||
password
|
||||
}
|
||||
|
||||
if (controllerVersionMajor === 3) {
|
||||
params.method = "login";
|
||||
params.params = {
|
||||
name: username,
|
||||
password
|
||||
};
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const [status, contentType, data] = await httpProxy(loginUrl, {
|
||||
method: "POST",
|
||||
body: JSON.stringify(params),
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
return [status, JSON.parse(data.toString())];
|
||||
}
|
||||
|
||||
|
||||
export default async function omadaProxyHandler(req, res) {
|
||||
const { group, service } = req.query;
|
||||
|
||||
if (group && service) {
|
||||
const widget = await getServiceWidget(group, service);
|
||||
|
||||
if (widget) {
|
||||
|
||||
const {url} = widget;
|
||||
|
||||
const controllerInfoURL = `${widget.url}/api/info`;
|
||||
|
||||
let [status, contentType, data] = await httpProxy(controllerInfoURL, {
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
|
||||
if (status !== 200) {
|
||||
logger.error("Unable to retrieve Omada controller info");
|
||||
return res.status(status).json({error: {message: `HTTP Error ${status}`, url: controllerInfoURL, data}});
|
||||
}
|
||||
|
||||
let cId;
|
||||
let controllerVersion;
|
||||
|
||||
try {
|
||||
cId = JSON.parse(data).result.omadacId;
|
||||
controllerVersion = JSON.parse(data).result.controllerVer;
|
||||
} catch (e) {
|
||||
controllerVersion = "3.2.x"
|
||||
}
|
||||
|
||||
const controllerVersionMajor = parseInt(controllerVersion.split('.')[0], 10)
|
||||
|
||||
if (![3,4,5].includes(controllerVersionMajor)) {
|
||||
return res.status(500).json({error: {message: "Error determining controller version", data}});
|
||||
}
|
||||
|
||||
let loginUrl;
|
||||
|
||||
switch (controllerVersionMajor) {
|
||||
case 3:
|
||||
loginUrl = `${widget.url}/api/user/login?ajax`;
|
||||
break;
|
||||
case 4:
|
||||
loginUrl = `${widget.url}/api/v2/login`;
|
||||
break;
|
||||
case 5:
|
||||
loginUrl = `${widget.url}/${cId}/api/v2/login`;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
const [loginStatus, loginResponseData] = await login(loginUrl, widget.username, widget.password, controllerVersionMajor);
|
||||
|
||||
if (loginStatus !== 200 || loginResponseData.errorCode > 0) {
|
||||
return res.status(status).json({error: {message: "Error logging in to Oamda controller", url: loginUrl, data: loginResponseData}});
|
||||
}
|
||||
|
||||
const { token } = loginResponseData.result;
|
||||
|
||||
let sitesUrl;
|
||||
let body = {};
|
||||
let params = { token };
|
||||
let headers = { "Csrf-Token": token };
|
||||
let method = "GET";
|
||||
|
||||
switch (controllerVersionMajor) {
|
||||
case 3:
|
||||
sitesUrl = `${widget.url}/web/v1/controller?ajax=&token=${token}`;
|
||||
body = {
|
||||
"method": "getUserSites",
|
||||
"params": {
|
||||
"userName": widget.username
|
||||
}
|
||||
};
|
||||
method = "POST";
|
||||
break;
|
||||
case 4:
|
||||
sitesUrl = `${widget.url}/api/v2/sites?token=${token}¤tPage=1¤tPageSize=1000`;
|
||||
break;
|
||||
case 5:
|
||||
sitesUrl = `${widget.url}/${cId}/api/v2/sites?token=${token}¤tPage=1¤tPageSize=1000`;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
[status, contentType, data] = await httpProxy(sitesUrl, {
|
||||
method,
|
||||
params,
|
||||
body: JSON.stringify(body),
|
||||
headers,
|
||||
});
|
||||
|
||||
const sitesResponseData = JSON.parse(data);
|
||||
|
||||
if (sitesResponseData.errorCode > 0) {
|
||||
logger.debug(`HTTTP ${status} getting sites list: ${sitesResponseData.msg}`);
|
||||
return res.status(status).json({error: {message: "Error getting sites list", url, data: sitesResponseData}});
|
||||
}
|
||||
|
||||
const site = (controllerVersionMajor === 3) ?
|
||||
sitesResponseData.result.siteList.find(s => s.name === widget.site):
|
||||
sitesResponseData.result.data.find(s => s.name === widget.site);
|
||||
|
||||
if (!site) {
|
||||
return res.status(status).json({error: {message: `Site ${widget.site} is not found`, url, data}});
|
||||
}
|
||||
|
||||
let siteResponseData;
|
||||
|
||||
let connectedAp;
|
||||
let activeUser;
|
||||
let connectedSwitches;
|
||||
let connectedGateways;
|
||||
let alerts;
|
||||
|
||||
if (controllerVersionMajor === 3) {
|
||||
// Omada v3 controller requires switching site
|
||||
const switchUrl = `${widget.url}/web/v1/controller?ajax=&token=${token}`;
|
||||
method = "POST";
|
||||
body = {
|
||||
method: "switchSite",
|
||||
params: {
|
||||
siteName: site.siteName,
|
||||
userName: widget.username
|
||||
}
|
||||
};
|
||||
headers = { "Content-Type": "application/json" };
|
||||
params = { token };
|
||||
|
||||
[status, contentType, data] = await httpProxy(switchUrl, {
|
||||
method,
|
||||
params,
|
||||
body: JSON.stringify(body),
|
||||
headers,
|
||||
});
|
||||
|
||||
const switchResponseData = JSON.parse(data);
|
||||
if (status !== 200 || switchResponseData.errorCode > 0) {
|
||||
logger.error(`HTTP ${status} getting sites list: ${data}`);
|
||||
return res.status(status).json({error: {message: "Error switching site", url: switchUrl, data}});
|
||||
}
|
||||
|
||||
const statsUrl = `${widget.url}/web/v1/controller?getGlobalStat=&token=${token}`;
|
||||
[status, contentType, data] = await httpProxy(statsUrl, {
|
||||
method,
|
||||
params,
|
||||
body: JSON.stringify({
|
||||
"method": "getGlobalStat",
|
||||
}),
|
||||
headers
|
||||
});
|
||||
|
||||
siteResponseData = JSON.parse(data);
|
||||
|
||||
if (status !== 200 || siteResponseData.errorCode > 0) {
|
||||
return res.status(status).json({error: {message: "Error getting stats", url: statsUrl, data}});
|
||||
}
|
||||
|
||||
connectedAp = siteResponseData.result.connectedAp;
|
||||
activeUser = siteResponseData.result.activeUser;
|
||||
alerts = siteResponseData.result.alerts;
|
||||
} else if (controllerVersionMajor === 4 || controllerVersionMajor === 5) {
|
||||
const siteName = (controllerVersionMajor === 5) ? site.id : site.key;
|
||||
const siteStatsUrl = (controllerVersionMajor === 4) ?
|
||||
`${url}/api/v2/sites/${siteName}/dashboard/overviewDiagram?token=${token}¤tPage=1¤tPageSize=1000` :
|
||||
`${url}/${cId}/api/v2/sites/${siteName}/dashboard/overviewDiagram?token=${token}¤tPage=1¤tPageSize=1000`;
|
||||
|
||||
[status, contentType, data] = await httpProxy(siteStatsUrl, {
|
||||
headers: {
|
||||
"Csrf-Token": token,
|
||||
},
|
||||
});
|
||||
|
||||
siteResponseData = JSON.parse(data);
|
||||
|
||||
if (status !== 200 || siteResponseData.errorCode > 0) {
|
||||
logger.debug(`HTTP ${status} getting stats for site ${widget.site} with message ${siteResponseData.msg}`);
|
||||
return res.status(500).send(data);
|
||||
}
|
||||
|
||||
const alertUrl = (controllerVersionMajor === 4) ?
|
||||
`${url}/api/v2/sites/${siteName}/alerts/num?token=${token}¤tPage=1¤tPageSize=1000` :
|
||||
`${url}/${cId}/api/v2/sites/${siteName}/alerts/num?token=${token}¤tPage=1¤tPageSize=1000`;
|
||||
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
[status, contentType, data] = await httpProxy(alertUrl, {
|
||||
headers: {
|
||||
"Csrf-Token": token,
|
||||
},
|
||||
});
|
||||
const alertResponseData = JSON.parse(data);
|
||||
|
||||
activeUser = siteResponseData.result.totalClientNum;
|
||||
connectedAp = siteResponseData.result.connectedApNum;
|
||||
connectedGateways = siteResponseData.result.connectedGatewayNum;
|
||||
connectedSwitches = siteResponseData.result.connectedSwitchNum;
|
||||
alerts = alertResponseData.result.alertNum;
|
||||
}
|
||||
|
||||
return res.send(JSON.stringify({
|
||||
connectedAp,
|
||||
activeUser,
|
||||
alerts,
|
||||
connectedGateways,
|
||||
connectedSwitches,
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
return res.status(400).json({ error: "Invalid proxy service type" });
|
||||
}
|
||||
7
src/widgets/omada/widget.js
Normal file
7
src/widgets/omada/widget.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import omadaProxyHandler from "./proxy";
|
||||
|
||||
const widget = {
|
||||
proxyHandler: omadaProxyHandler,
|
||||
};
|
||||
|
||||
export default widget;
|
||||
48
src/widgets/opnsense/component.jsx
Normal file
48
src/widgets/opnsense/component.jsx
Normal file
@@ -0,0 +1,48 @@
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
|
||||
const { data: activityData, error: activityError } = useWidgetAPI(widget, "activity");
|
||||
const { data: interfaceData, error: interfaceError } = useWidgetAPI(widget, "interface");
|
||||
|
||||
if (activityError || interfaceError) {
|
||||
const finalError = activityError ?? interfaceError;
|
||||
return <Container error={ finalError } />;
|
||||
}
|
||||
|
||||
if (!activityData || !interfaceData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="opnsense.cpu" />
|
||||
<Block label="opnsense.memory" />
|
||||
<Block label="opnsense.wanUpload" />
|
||||
<Block label="opnsense.wanDownload" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
const cpuIdle = activityData.headers[2].match(/ ([0-9.]+)% idle/)[1];
|
||||
const cpu = 100 - parseFloat(cpuIdle);
|
||||
const memory = activityData.headers[3].match(/Mem: (.+) Active,/)[1];
|
||||
|
||||
const wanUpload = interfaceData.interfaces.wan['bytes transmitted'];
|
||||
const wanDownload = interfaceData.interfaces.wan['bytes received'];
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="opnsense.cpu" value={t("common.percent", { value: cpu.toFixed(2) })} />
|
||||
<Block label="opnsense.memory" value={memory} />
|
||||
<Block label="opnsense.wanUpload" value={t("common.bytes", { value: wanUpload })} />
|
||||
<Block label="opnsense.wanDownload" value={t("common.bytes", { value: wanDownload })} />
|
||||
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
24
src/widgets/opnsense/widget.js
Normal file
24
src/widgets/opnsense/widget.js
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/api/{endpoint}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
|
||||
mappings: {
|
||||
activity: {
|
||||
endpoint: "diagnostics/activity/getActivity",
|
||||
validate: [
|
||||
"headers"
|
||||
]
|
||||
},
|
||||
interface: {
|
||||
endpoint: "diagnostics/traffic/interface",
|
||||
validate: [
|
||||
"interfaces"
|
||||
]
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
||||
@@ -1,8 +1,11 @@
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
const { widget } = service;
|
||||
|
||||
const { data: statsData, error: statsError } = useWidgetAPI(widget, "request/count");
|
||||
@@ -24,10 +27,10 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="overseerr.pending" value={statsData.pending} />
|
||||
<Block label="overseerr.processing" value={statsData.processing} />
|
||||
<Block label="overseerr.approved" value={statsData.approved} />
|
||||
<Block label="overseerr.available" value={statsData.available} />
|
||||
<Block label="overseerr.pending" value={t("common.number", { value: statsData.pending })} />
|
||||
<Block label="overseerr.processing" value={t("common.number", { value: statsData.processing })} />
|
||||
<Block label="overseerr.approved" value={t("common.number", { value: statsData.approved })} />
|
||||
<Block label="overseerr.available" value={t("common.number", { value: statsData.available })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ export default function Component({ service }) {
|
||||
|
||||
const { widget } = service;
|
||||
|
||||
const { data: piholeData, error: piholeError } = useWidgetAPI(widget, "api.php");
|
||||
const { data: piholeData, error: piholeError } = useWidgetAPI(widget, "summaryRaw");
|
||||
|
||||
if (piholeError) {
|
||||
return <Container error={piholeError} />;
|
||||
@@ -27,9 +27,9 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="pihole.queries" value={t("common.number", { value: piholeData.dns_queries_today })} />
|
||||
<Block label="pihole.blocked" value={t("common.number", { value: piholeData.ads_blocked_today })} />
|
||||
<Block label="pihole.gravity" value={t("common.number", { value: piholeData.domains_being_blocked })} />
|
||||
<Block label="pihole.queries" value={t("common.number", { value: parseInt(piholeData.dns_queries_today, 10) })} />
|
||||
<Block label="pihole.blocked" value={t("common.number", { value: parseInt(piholeData.ads_blocked_today, 10) })} />
|
||||
<Block label="pihole.gravity" value={t("common.number", { value: parseInt(piholeData.domains_being_blocked, 10) })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import genericProxyHandler from "utils/proxy/handlers/generic";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/admin/{endpoint}",
|
||||
api: "{url}/admin/api.php?{endpoint}&auth={key}",
|
||||
proxyHandler: genericProxyHandler,
|
||||
|
||||
mappings: {
|
||||
"api.php": {
|
||||
endpoint: "api.php",
|
||||
"summaryRaw": {
|
||||
endpoint: "summaryRaw",
|
||||
validate: [
|
||||
"dns_queries_today",
|
||||
"ads_blocked_today",
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { useTranslation } from "react-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
const { widget } = service;
|
||||
|
||||
const { data: indexersData, error: indexersError } = useWidgetAPI(widget, "indexer");
|
||||
@@ -40,11 +43,11 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="prowlarr.enableIndexers" value={indexers.length} />
|
||||
<Block label="prowlarr.numberOfGrabs" value={numberOfGrabs} />
|
||||
<Block label="prowlarr.numberOfQueries" value={numberOfQueries} />
|
||||
<Block label="prowlarr.numberOfFailGrabs" value={numberOfFailedGrabs} />
|
||||
<Block label="prowlarr.numberOfFailQueries" value={numberOfFailedQueries} />
|
||||
<Block label="prowlarr.enableIndexers" value={t("common.number", { value: indexers.length })} />
|
||||
<Block label="prowlarr.numberOfGrabs" value={t("common.number", { value: numberOfGrabs })} />
|
||||
<Block label="prowlarr.numberOfQueries" value={t("common.number", { value: numberOfQueries })} />
|
||||
<Block label="prowlarr.numberOfFailGrabs" value={t("common.number", { value: numberOfFailedGrabs })} />
|
||||
<Block label="prowlarr.numberOfFailQueries" value={t("common.number", { value: numberOfFailedQueries })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
const { widget } = service;
|
||||
|
||||
const { data: moviesData, error: moviesError } = useWidgetAPI(widget, "movie");
|
||||
@@ -26,10 +29,10 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="radarr.wanted" value={moviesData.wanted} />
|
||||
<Block label="radarr.missing" value={moviesData.missing} />
|
||||
<Block label="radarr.queued" value={queuedData.totalCount} />
|
||||
<Block label="radarr.movies" value={moviesData.have} />
|
||||
<Block label="radarr.wanted" value={t("common.number", { value: moviesData.wanted })} />
|
||||
<Block label="radarr.missing" value={t("common.number", { value: moviesData.missing })} />
|
||||
<Block label="radarr.queued" value={t("common.number", { value: queuedData.totalCount })} />
|
||||
<Block label="radarr.movies" value={t("common.number", { value: moviesData.have })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
const { widget } = service;
|
||||
|
||||
const { data: wantedData, error: wantedError } = useWidgetAPI(widget, "wanted/missing");
|
||||
@@ -26,9 +29,9 @@ export default function Component({ service }) {
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="sonarr.wanted" value={wantedData.totalRecords} />
|
||||
<Block label="sonarr.queued" value={queuedData.totalRecords} />
|
||||
<Block label="sonarr.series" value={seriesData.total} />
|
||||
<Block label="sonarr.wanted" value={t("common.number", { value: wantedData.totalRecords })} />
|
||||
<Block label="sonarr.queued" value={t("common.number", { value: queuedData.totalRecords })} />
|
||||
<Block label="sonarr.series" value={t("common.number", { value: seriesData.total })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ import bazarr from "./bazarr/widget";
|
||||
import changedetectionio from "./changedetectionio/widget";
|
||||
import coinmarketcap from "./coinmarketcap/widget";
|
||||
import deluge from "./deluge/widget";
|
||||
import diskstation from "./diskstation/widget";
|
||||
import downloadstation from "./downloadstation/widget";
|
||||
import emby from "./emby/widget";
|
||||
import flood from "./flood/widget";
|
||||
import gluetun from "./gluetun/widget";
|
||||
@@ -17,11 +17,14 @@ import jellyseerr from "./jellyseerr/widget";
|
||||
import lidarr from "./lidarr/widget";
|
||||
import mastodon from "./mastodon/widget";
|
||||
import miniflux from "./miniflux/widget";
|
||||
import mikrotik from "./mikrotik/widget";
|
||||
import navidrome from "./navidrome/widget";
|
||||
import nextdns from "./nextdns/widget";
|
||||
import npm from "./npm/widget";
|
||||
import nzbget from "./nzbget/widget";
|
||||
import omada from "./omada/widget";
|
||||
import ombi from "./ombi/widget";
|
||||
import opnsense from "./opnsense/widget";
|
||||
import overseerr from "./overseerr/widget";
|
||||
import paperlessngx from "./paperlessngx/widget";
|
||||
import pihole from "./pihole/widget";
|
||||
@@ -47,6 +50,7 @@ import tubearchivist from "./tubearchivist/widget";
|
||||
import truenas from "./truenas/widget";
|
||||
import unifi from "./unifi/widget";
|
||||
import watchtower from './watchtower/widget'
|
||||
import xteve from './xteve/widget'
|
||||
|
||||
const widgets = {
|
||||
adguard,
|
||||
@@ -56,7 +60,8 @@ const widgets = {
|
||||
changedetectionio,
|
||||
coinmarketcap,
|
||||
deluge,
|
||||
diskstation,
|
||||
diskstation: downloadstation,
|
||||
downloadstation,
|
||||
emby,
|
||||
flood,
|
||||
gluetun,
|
||||
@@ -69,11 +74,14 @@ const widgets = {
|
||||
lidarr,
|
||||
mastodon,
|
||||
miniflux,
|
||||
mikrotik,
|
||||
navidrome,
|
||||
nextdns,
|
||||
npm,
|
||||
nzbget,
|
||||
omada,
|
||||
ombi,
|
||||
opnsense,
|
||||
overseerr,
|
||||
paperlessngx,
|
||||
pihole,
|
||||
@@ -100,6 +108,7 @@ const widgets = {
|
||||
unifi,
|
||||
unifi_console: unifi,
|
||||
watchtower,
|
||||
xteve,
|
||||
};
|
||||
|
||||
export default widgets;
|
||||
|
||||
35
src/widgets/xteve/component.jsx
Normal file
35
src/widgets/xteve/component.jsx
Normal file
@@ -0,0 +1,35 @@
|
||||
import { useTranslation } from "next-i18next";
|
||||
|
||||
import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||
|
||||
export default function Component({ service }) {
|
||||
const { t } = useTranslation();
|
||||
|
||||
const { widget } = service;
|
||||
|
||||
const { data: xteveData, error: xteveError } = useWidgetAPI(widget, "api");
|
||||
|
||||
if (xteveError) {
|
||||
return <Container error={xteveError} />;
|
||||
}
|
||||
|
||||
if (!xteveData) {
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="xteve.streams_all" />
|
||||
<Block label="xteve.streams_active " />
|
||||
<Block label="xteve.streams_xepg" />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<Container service={service}>
|
||||
<Block label="xteve.streams_all" value={t("common.number", { value: xteveData["streams.all"] ?? 0 })} />
|
||||
<Block label="xteve.streams_active" value={t("common.number", { value: xteveData["streams.active"] ?? 0 })} />
|
||||
<Block label="xteve.streams_xepg" value={t("common.number", { value: xteveData["streams.xepg"] ?? 0 })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
63
src/widgets/xteve/proxy.js
Normal file
63
src/widgets/xteve/proxy.js
Normal file
@@ -0,0 +1,63 @@
|
||||
import { formatApiCall } from "utils/proxy/api-helpers";
|
||||
import { httpProxy } from "utils/proxy/http";
|
||||
import createLogger from "utils/logger";
|
||||
import widgets from "widgets/widgets";
|
||||
import getServiceWidget from "utils/config/service-helpers";
|
||||
|
||||
const logger = createLogger("xteveProxyHandler");
|
||||
|
||||
export default async function xteveProxyHandler(req, res) {
|
||||
const { group, service, endpoint } = req.query;
|
||||
|
||||
if (!group || !service) {
|
||||
return res.status(400).json({ error: "Invalid proxy service type" });
|
||||
}
|
||||
|
||||
const widget = await getServiceWidget(group, service);
|
||||
const api = widgets?.[widget.type]?.api;
|
||||
if (!api) {
|
||||
return res.status(403).json({ error: "Service does not support API calls" });
|
||||
}
|
||||
|
||||
const url = formatApiCall(api, { endpoint, ...widget });
|
||||
const method = "POST";
|
||||
const payload = { cmd: "status" };
|
||||
|
||||
if (widget.username && widget.password) {
|
||||
// eslint-disable-next-line no-unused-vars
|
||||
const [status, contentType, data] = await httpProxy(url, {
|
||||
method,
|
||||
body: JSON.stringify({
|
||||
cmd: "login",
|
||||
username: widget.username,
|
||||
password: widget.password,
|
||||
})
|
||||
});
|
||||
|
||||
if (status !== 200) {
|
||||
logger.debug("Error logging into xteve", status, url);
|
||||
return res.status(status).json({error: {message: `HTTP Error ${status} logging into xteve`, url, data}});
|
||||
}
|
||||
|
||||
const json = JSON.parse(data.toString());
|
||||
|
||||
if (json?.status !== true) {
|
||||
return res.status(401).json({error: {message: "Authentication failed", url, data}});
|
||||
}
|
||||
|
||||
payload.token = json.token;
|
||||
}
|
||||
|
||||
const [status, contentType, data] = await httpProxy(url, {
|
||||
method,
|
||||
body: JSON.stringify(payload)
|
||||
});
|
||||
|
||||
if (status !== 200) {
|
||||
logger.debug("Error %d calling xteve endpoint %s", status, url);
|
||||
return res.status(status).json({error: {message: `HTTP Error ${status}`, url, data}});
|
||||
}
|
||||
|
||||
if (contentType) res.setHeader("Content-Type", contentType);
|
||||
return res.status(status).send(data);
|
||||
}
|
||||
14
src/widgets/xteve/widget.js
Normal file
14
src/widgets/xteve/widget.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import xteveProxyHandler from "./proxy";
|
||||
|
||||
const widget = {
|
||||
api: "{url}/{endpoint}",
|
||||
proxyHandler: xteveProxyHandler,
|
||||
|
||||
mappings: {
|
||||
"api": {
|
||||
endpoint: "api/",
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
export default widget;
|
||||
Reference in New Issue
Block a user