diff options
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Services/ChangelogService.qml')
| -rw-r--r-- | raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Services/ChangelogService.qml | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Services/ChangelogService.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Services/ChangelogService.qml new file mode 100644 index 0000000..562a513 --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/Services/ChangelogService.qml @@ -0,0 +1,108 @@ +pragma Singleton +pragma ComponentBehavior: Bound + +import QtCore +import QtQuick +import Quickshell +import Quickshell.Io +import qs.Common + +Singleton { + id: root + + readonly property string currentVersion: "1.4" + readonly property bool changelogEnabled: false + + readonly property string configDir: Paths.strip(StandardPaths.writableLocation(StandardPaths.ConfigLocation)) + "/DankMaterialShell" + readonly property string changelogMarkerPath: configDir + "/.changelog-" + currentVersion + + property bool checkComplete: false + property bool changelogDismissed: false + + readonly property bool shouldShowChangelog: { + if (!checkComplete) + return false; + if (!changelogEnabled) + return false; + if (changelogDismissed) + return false; + if (typeof FirstLaunchService !== "undefined" && FirstLaunchService.isFirstLaunch) + return false; + return true; + } + + signal changelogRequested + signal changelogCompleted + + Component.onCompleted: { + if (!changelogEnabled) + return; + if (FirstLaunchService.checkComplete) + handleFirstLaunchResult(); + } + + function handleFirstLaunchResult() { + if (FirstLaunchService.isFirstLaunch) { + checkComplete = true; + changelogDismissed = true; + touchMarkerProcess.running = true; + } else { + changelogCheckProcess.running = true; + } + } + + Connections { + target: FirstLaunchService + + function onCheckCompleteChanged() { + if (FirstLaunchService.checkComplete && root.changelogEnabled && !root.checkComplete) + root.handleFirstLaunchResult(); + } + } + + function showChangelog() { + changelogRequested(); + } + + function dismissChangelog() { + changelogDismissed = true; + touchMarkerProcess.running = true; + changelogCompleted(); + } + + Process { + id: changelogCheckProcess + + command: ["sh", "-c", "[ -f '" + changelogMarkerPath + "' ] && echo 'seen' || echo 'show'"] + running: false + + stdout: SplitParser { + onRead: data => { + const result = data.trim(); + root.checkComplete = true; + + switch (result) { + case "seen": + root.changelogDismissed = true; + break; + case "show": + root.changelogRequested(); + break; + } + } + } + } + + Process { + id: touchMarkerProcess + + command: ["sh", "-c", "mkdir -p '" + configDir + "' && touch '" + changelogMarkerPath + "'"] + running: false + + onExited: exitCode => { + if (exitCode !== 0) { + console.warn("ChangelogService: Failed to create changelog marker"); + } + } + } +} |