mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-24 13:32:50 -05:00
109 lines
2.8 KiB
QML
109 lines
2.8 KiB
QML
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.2"
|
|
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");
|
|
}
|
|
}
|
|
}
|
|
}
|