summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-06-29 21:00:24 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-06-29 21:00:24 +1000
commit0d7804f67723107f4e78beca8229d2fbb82ce4a3 (patch)
tree6fc32ab28b0e8316030a826948a17eb23c4936de
parenticons: add keyboard bluetooth device (diff)
downloadcaelestia-shell-0d7804f67723107f4e78beca8229d2fbb82ce4a3.tar.gz
caelestia-shell-0d7804f67723107f4e78beca8229d2fbb82ce4a3.tar.bz2
caelestia-shell-0d7804f67723107f4e78beca8229d2fbb82ce4a3.zip
weather: use xmlhttprequest
Remove curl dependency Also add buffer period so it doesnt spam api requests
-rw-r--r--README.md1
-rw-r--r--services/Requests.qml36
-rw-r--r--services/Weather.qml39
3 files changed, 50 insertions, 26 deletions
diff --git a/README.md b/README.md
index 0dcbe6a..467c1d3 100644
--- a/README.md
+++ b/README.md
@@ -45,7 +45,6 @@ Dependencies:
- [`networkmanager`](https://networkmanager.dev)
- [`lm-sensors`](https://github.com/lm-sensors/lm-sensors)
- [`fish`](https://github.com/fish-shell/fish-shell)
-- [`curl`](https://github.com/curl/curl)
- [`aubio`](https://github.com/aubio/aubio)
- [`libpipewire`](https://pipewire.org)
- `glibc`
diff --git a/services/Requests.qml b/services/Requests.qml
new file mode 100644
index 0000000..36e9120
--- /dev/null
+++ b/services/Requests.qml
@@ -0,0 +1,36 @@
+pragma Singleton
+
+import "root:/config"
+import "root:/utils"
+import Quickshell
+
+Singleton {
+ id: root
+
+ function get(url: string, callback: var): void {
+ const xhr = new XMLHttpRequest();
+
+ const cleanup = () => {
+ xhr.abort();
+ xhr.onreadystatechange = null;
+ xhr.onerror = null;
+ };
+
+ xhr.open("GET", url, true);
+ xhr.onreadystatechange = () => {
+ if (xhr.readyState === XMLHttpRequest.DONE) {
+ if (xhr.status === 200)
+ callback(xhr.responseText);
+ else
+ console.warn(`[REQUESTS] GET request to ${url} failed with status ${xhr.status}`);
+ cleanup();
+ }
+ };
+ xhr.onerror = () => {
+ console.warn(`[REQUESTS] GET request to ${url} failed`);
+ cleanup();
+ };
+
+ xhr.send();
+ }
+}
diff --git a/services/Weather.qml b/services/Weather.qml
index 998fdb8..ad80e48 100644
--- a/services/Weather.qml
+++ b/services/Weather.qml
@@ -3,7 +3,6 @@ pragma Singleton
import "root:/config"
import "root:/utils"
import Quickshell
-import Quickshell.Io
import QtQuick
Singleton {
@@ -17,33 +16,23 @@ Singleton {
function reload(): void {
if (Config.dashboard.weatherLocation)
loc = Config.dashboard.weatherLocation;
- else
- ipProc.running = true;
+ else if (!loc || timer.elapsed() > 900)
+ Requests.get("https://ipinfo.io/json", text => {
+ loc = JSON.parse(text).loc ?? "";
+ timer.restart();
+ });
}
- onLocChanged: wttrProc.running = true
- Component.onCompleted: reload()
-
- Process {
- id: ipProc
+ onLocChanged: Requests.get(`https://wttr.in/${loc}?format=j1`, text => {
+ const json = JSON.parse(text).current_condition[0];
+ icon = Icons.getWeatherIcon(json.weatherCode);
+ description = json.weatherDesc[0].value;
+ temperature = parseFloat(json.temp_C);
+ })
- command: ["curl", "ipinfo.io"]
- stdout: StdioCollector {
- onStreamFinished: root.loc = JSON.parse(text).loc ?? ""
- }
- }
-
- Process {
- id: wttrProc
+ Component.onCompleted: reload()
- command: ["curl", `https://wttr.in/${root.loc}?format=j1`]
- stdout: StdioCollector {
- onStreamFinished: {
- const json = JSON.parse(text).current_condition[0];
- root.icon = Icons.getWeatherIcon(json.weatherCode);
- root.description = json.weatherDesc[0].value;
- root.temperature = parseFloat(json.temp_C);
- }
- }
+ ElapsedTimer {
+ id: timer
}
}