diff options
| author | Nippy <nippy@rp1.hu> | 2026-05-09 13:33:09 +0200 |
|---|---|---|
| committer | Nippy <nippy@rp1.hu> | 2026-05-09 13:33:09 +0200 |
| commit | a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5 (patch) | |
| tree | 1a8769217f84bfe9d6216fafaadaf8cdd876d457 /raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/SystemUpdateService.qml | |
| parent | 34b9c34f982b2596cfa9e368a2d7f74e9a17477c (diff) | |
| download | RaveOS-PKGBUILD-a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5.tar.gz RaveOS-PKGBUILD-a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5.zip | |
raveos update
Diffstat (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/SystemUpdateService.qml')
| -rw-r--r-- | raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/SystemUpdateService.qml | 396 |
1 files changed, 0 insertions, 396 deletions
diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/SystemUpdateService.qml b/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/SystemUpdateService.qml deleted file mode 100644 index 53ca7ad..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/quickshell/Services/SystemUpdateService.qml +++ /dev/null @@ -1,396 +0,0 @@ -pragma Singleton -pragma ComponentBehavior: Bound - -import QtQuick -import Quickshell -import Quickshell.Io -import qs.Common - -Singleton { - id: root - - property int refCount: 0 - property var availableUpdates: [] - property bool isChecking: false - property bool hasError: false - property string errorMessage: "" - property string updChecker: "" - property string pkgManager: "" - property string distribution: "" - property bool distributionSupported: false - property string shellVersion: "" - property string shellCodename: "" - property string semverVersion: "" - - function getParsedShellVersion() { - return parseVersion(semverVersion); - } - - readonly property var archBasedUCSettings: { - "listUpdatesSettings": { - "params": [], - "correctExitCodes": [0, 2] // Exit code 0 = updates available, 2 = no updates - }, - "parserSettings": { - "lineRegex": /^(\S+)\s+([^\s]+)\s+->\s+([^\s]+)$/, - "entryProducer": function (match) { - return { - "name": match[1], - "currentVersion": match[2], - "newVersion": match[3], - "description": `${match[1]} ${match[2]} → ${match[3]}` - }; - } - } - } - - readonly property var archBasedPMSettings: function(requiresSudo) { - return { - "listUpdatesSettings": { - "params": ["-Qu"], - "correctExitCodes": [0, 1] // Exit code 0 = updates available, 1 = no updates - }, - "upgradeSettings": { - "params": ["-Syu"], - "requiresSudo": requiresSudo - }, - "parserSettings": { - "lineRegex": /^(\S+)\s+([^\s]+)\s+->\s+([^\s]+)$/, - "entryProducer": function (match) { - return { - "name": match[1], - "currentVersion": match[2], - "newVersion": match[3], - "description": `${match[1]} ${match[2]} → ${match[3]}` - }; - } - } - } - } - - readonly property var fedoraBasedPMSettings: { - "listUpdatesSettings": { - "params": ["list", "--upgrades", "--quiet", "--color=never"], - "correctExitCodes": [0, 1] // Exit code 0 = updates available, 1 = no updates - }, - "upgradeSettings": { - "params": ["upgrade"], - "requiresSudo": true - }, - "parserSettings": { - "lineRegex": /^([^\s]+)\s+([^\s]+)\s+.*$/, - "entryProducer": function (match) { - return { - "name": match[1], - "currentVersion": "", - "newVersion": match[2], - "description": `${match[1]} → ${match[2]}` - }; - } - } - } - - readonly property var updateCheckerParams: { - "checkupdates": archBasedUCSettings - } - readonly property var packageManagerParams: { - "yay": archBasedPMSettings(false), - "paru": archBasedPMSettings(false), - "pacman": archBasedPMSettings(true), - "dnf": fedoraBasedPMSettings - } - readonly property list<string> supportedDistributions: ["arch", "artix", "cachyos", "manjaro", "endeavouros", "fedora"] - readonly property int updateCount: availableUpdates.length - readonly property bool helperAvailable: pkgManager !== "" && distributionSupported - - Process { - id: distributionDetection - command: ["sh", "-c", "cat /etc/os-release | grep '^ID=' | cut -d'=' -f2 | tr -d '\"'"] - running: true - - onExited: exitCode => { - if (exitCode === 0) { - distribution = stdout.text.trim().toLowerCase(); - distributionSupported = supportedDistributions.includes(distribution); - - if (distributionSupported) { - updateFinderDetection.running = true; - pkgManagerDetection.running = true; - checkForUpdates(); - } else { - console.warn("SystemUpdate: Unsupported distribution:", distribution); - } - } else { - console.warn("SystemUpdate: Failed to detect distribution"); - } - } - - stdout: StdioCollector {} - - Component.onCompleted: { - versionDetection.running = true; - } - } - - Process { - id: versionDetection - command: ["sh", "-c", `cd "${Quickshell.shellDir}" && if [ -d .git ]; then echo "(git) $(git rev-parse --short HEAD)"; elif [ -f VERSION ]; then cat VERSION; fi`] - - stdout: StdioCollector { - onStreamFinished: { - shellVersion = text.trim(); - } - } - } - - Process { - id: semverDetection - command: ["sh", "-c", `cd "${Quickshell.shellDir}" && if [ -f VERSION ]; then cat VERSION; fi`] - running: true - - stdout: StdioCollector { - onStreamFinished: { - semverVersion = text.trim(); - } - } - } - - Process { - id: codenameDetection - command: ["sh", "-c", `cd "${Quickshell.shellDir}" && if [ -f CODENAME ]; then cat CODENAME; fi`] - running: true - - stdout: StdioCollector { - onStreamFinished: { - shellCodename = text.trim(); - } - } - } - - Process { - id: updateFinderDetection - command: ["sh", "-c", "which checkupdates"] - - onExited: exitCode => { - if (exitCode === 0) { - const exeFound = stdout.text.trim(); - updChecker = exeFound.split('/').pop(); - } else { - console.warn("SystemUpdate: No update checker found. Will use package manager."); - } - } - - stdout: StdioCollector {} - } - - Process { - id: pkgManagerDetection - command: ["sh", "-c", "which paru || which yay || which pacman || which dnf"] - - onExited: exitCode => { - if (exitCode === 0) { - const exeFound = stdout.text.trim(); - pkgManager = exeFound.split('/').pop(); - } else { - console.warn("SystemUpdate: No package manager found"); - } - } - - stdout: StdioCollector {} - } - - Process { - id: updateChecker - - onExited: exitCode => { - isChecking = false; - const correctExitCodes = updChecker.length > 0 ? [updChecker].concat(updateCheckerParams[updChecker].listUpdatesSettings.correctExitCodes) : [pkgManager].concat(packageManagerParams[pkgManager].listUpdatesSettings.correctExitCodes); - if (correctExitCodes.includes(exitCode)) { - parseUpdates(stdout.text); - hasError = false; - errorMessage = ""; - } else { - hasError = true; - errorMessage = "Failed to check for updates"; - console.warn("SystemUpdate: Update check failed with code:", exitCode); - } - } - - stdout: StdioCollector {} - } - - Process { - id: updater - onExited: exitCode => { - checkForUpdates(); - } - } - - function checkForUpdates() { - if (!distributionSupported || (!pkgManager && !updChecker) || isChecking) - return; - isChecking = true; - hasError = false; - if (pkgManager === "paru" || pkgManager === "yay") { - const repoCmd = updChecker.length > 0 ? updChecker : `${pkgManager} -Qu`; - updateChecker.command = ["sh", "-c", `(${repoCmd} 2>/dev/null; ${pkgManager} -Qua 2>/dev/null) || true`]; - } else if (updChecker.length > 0) { - updateChecker.command = [updChecker].concat(updateCheckerParams[updChecker].listUpdatesSettings.params); - } else { - updateChecker.command = [pkgManager].concat(packageManagerParams[pkgManager].listUpdatesSettings.params); - } - updateChecker.running = true; - } - - function parseUpdates(output) { - const lines = output.trim().split('\n').filter(line => line.trim()); - const updates = []; - - const regex = packageManagerParams[pkgManager].parserSettings.lineRegex; - const entryProducer = packageManagerParams[pkgManager].parserSettings.entryProducer; - - for (const line of lines) { - const match = line.match(regex); - if (match) { - updates.push(entryProducer(match)); - } - } - - availableUpdates = updates; - } - - function runUpdates() { - if (!distributionSupported || !pkgManager || updateCount === 0) - return; - const terminal = Quickshell.env("TERMINAL") || "xterm"; - - if (SettingsData.updaterUseCustomCommand && SettingsData.updaterCustomCommand.length > 0) { - const updateCommand = `${SettingsData.updaterCustomCommand} && echo -n "Updates complete! " ; echo "Press Enter to close..." && read`; - const termClass = SettingsData.updaterTerminalAdditionalParams; - - var finalCommand = [terminal]; - if (termClass.length > 0) { - finalCommand = finalCommand.concat(termClass.split(" ")); - } - finalCommand.push("-e"); - finalCommand.push("sh"); - finalCommand.push("-c"); - finalCommand.push(updateCommand); - updater.command = finalCommand; - } else { - const params = packageManagerParams[pkgManager].upgradeSettings.params.join(" "); - const sudo = packageManagerParams[pkgManager].upgradeSettings.requiresSudo ? "sudo" : ""; - const updateCommand = `${sudo} ${pkgManager} ${params} && echo -n "Updates complete! " ; echo "Press Enter to close..." && read`; - - updater.command = [terminal, "-e", "sh", "-c", updateCommand]; - } - updater.running = true; - } - - Timer { - interval: 30 * 60 * 1000 - repeat: true - running: refCount > 0 && distributionSupported && (pkgManager || updChecker) - onTriggered: checkForUpdates() - } - - IpcHandler { - target: "systemupdater" - - function updatestatus(): string { - if (root.isChecking) { - return "ERROR: already checking"; - } - if (!distributionSupported) { - return "ERROR: distribution not supported"; - } - if (!pkgManager && !updChecker) { - return "ERROR: update checker not available"; - } - root.checkForUpdates(); - return "SUCCESS: Now checking..."; - } - } - - function parseVersion(versionStr) { - if (!versionStr || typeof versionStr !== "string") - return { - major: 0, - minor: 0, - patch: 0 - }; - - let v = versionStr.trim(); - if (v.startsWith("v")) - v = v.substring(1); - - const dashIdx = v.indexOf("-"); - if (dashIdx !== -1) - v = v.substring(0, dashIdx); - - const plusIdx = v.indexOf("+"); - if (plusIdx !== -1) - v = v.substring(0, plusIdx); - - const parts = v.split("."); - return { - major: parseInt(parts[0], 10) || 0, - minor: parseInt(parts[1], 10) || 0, - patch: parseInt(parts[2], 10) || 0 - }; - } - - function compareVersions(v1, v2) { - if (v1.major !== v2.major) - return v1.major - v2.major; - if (v1.minor !== v2.minor) - return v1.minor - v2.minor; - return v1.patch - v2.patch; - } - - function checkVersionRequirement(requirementStr, currentVersion) { - if (!requirementStr || typeof requirementStr !== "string") - return true; - - const req = requirementStr.trim(); - let operator = ""; - let versionPart = req; - - if (req.startsWith(">=")) { - operator = ">="; - versionPart = req.substring(2); - } else if (req.startsWith("<=")) { - operator = "<="; - versionPart = req.substring(2); - } else if (req.startsWith(">")) { - operator = ">"; - versionPart = req.substring(1); - } else if (req.startsWith("<")) { - operator = "<"; - versionPart = req.substring(1); - } else if (req.startsWith("=")) { - operator = "="; - versionPart = req.substring(1); - } else { - operator = ">="; - } - - const reqVersion = parseVersion(versionPart); - const cmp = compareVersions(currentVersion, reqVersion); - - switch (operator) { - case ">=": - return cmp >= 0; - case ">": - return cmp > 0; - case "<=": - return cmp <= 0; - case "<": - return cmp < 0; - case "=": - return cmp === 0; - default: - return cmp >= 0; - } - } -} |