mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
quickshell and hyprland additions
This commit is contained in:
100
.config/quickshell/nucleus-shell/services/UpdateNotifier.qml
Normal file
100
.config/quickshell/nucleus-shell/services/UpdateNotifier.qml
Normal file
@@ -0,0 +1,100 @@
|
||||
import Qt.labs.platform
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
import qs.config
|
||||
|
||||
Item {
|
||||
id: updater
|
||||
// Add 'v' arg to default local version because it is not stored
|
||||
// as vX.Y.Z but X.Y.Z while on github its published as vX.Y.Z
|
||||
|
||||
property string currentVersion: ""
|
||||
property string latestVersion: ""
|
||||
property bool notified: false
|
||||
property string channel: Config.runtime.shell.releaseChannel || "stable"
|
||||
|
||||
function readLocalVersion() {
|
||||
currentVersion = "v" + (Config.runtime.shell.version || "");
|
||||
}
|
||||
|
||||
function fetchLatestVersion() {
|
||||
var xhr = new XMLHttpRequest();
|
||||
xhr.onreadystatechange = function() {
|
||||
if (xhr.readyState === XMLHttpRequest.DONE) {
|
||||
try {
|
||||
const json = JSON.parse(xhr.responseText);
|
||||
|
||||
if (channel === "stable") {
|
||||
// /releases/latest returns a single object
|
||||
if (json.tag_name) {
|
||||
latestVersion = json.tag_name;
|
||||
compareVersions();
|
||||
} else {
|
||||
console.warn("Stable update check returned unexpected response:", json);
|
||||
}
|
||||
} else if (channel === "edge") {
|
||||
// /releases returns an array, newest first
|
||||
for (var i = 0; i < json.length; i++) {
|
||||
if (json[i].prerelease === true) {
|
||||
latestVersion = json[i].tag_name;
|
||||
compareVersions();
|
||||
return;
|
||||
}
|
||||
}
|
||||
console.warn("Edge channel: no pre-release found.");
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn("Update check JSON parse failed:", xhr.responseText);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (channel === "stable") {
|
||||
xhr.open(
|
||||
"GET",
|
||||
"https://api.github.com/repos/xzepyx/nucleus-shell/releases/latest"
|
||||
);
|
||||
} else {
|
||||
xhr.open(
|
||||
"GET",
|
||||
"https://api.github.com/repos/xzepyx/nucleus-shell/releases"
|
||||
);
|
||||
}
|
||||
|
||||
xhr.send();
|
||||
}
|
||||
|
||||
function compareVersions() {
|
||||
if (!currentVersion || !latestVersion)
|
||||
return;
|
||||
|
||||
if (currentVersion !== latestVersion && !notified) {
|
||||
notifyUpdate();
|
||||
notified = true;
|
||||
}
|
||||
}
|
||||
|
||||
function notifyUpdate() {
|
||||
Quickshell.execDetached([
|
||||
"notify-send",
|
||||
"-a", "Nucleus Shell",
|
||||
"Update Available",
|
||||
"Installed: " + currentVersion +
|
||||
"\nLatest (" + channel + "): " + latestVersion
|
||||
]);
|
||||
}
|
||||
|
||||
visible: false
|
||||
|
||||
Timer {
|
||||
interval: 24 * 60 * 60 * 1000 // 24 hours
|
||||
running: true
|
||||
repeat: true
|
||||
triggeredOnStart: true
|
||||
onTriggered: {
|
||||
readLocalVersion();
|
||||
fetchLatestVersion();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user