fix(settings): detect nix-managed settings updates without restart

This commit is contained in:
Lysec
2026-04-06 13:35:26 +02:00
parent 1f9096a46f
commit 353b07380f
+24
View File
@@ -18,6 +18,7 @@ Singleton {
property bool directoriesCreated: false
property bool shouldOpenSetupWizard: false
property bool isFreshInstall: false
property string lastLoadedSettingsText: ""
/*
Shell directories.
@@ -80,6 +81,20 @@ Singleton {
}
}
// Fallback polling for environments where watcher events are missed
// (e.g. atomic symlink/store-path swaps in declarative setups).
Timer {
id: settingsWatchdogTimer
running: false
repeat: true
interval: 5000
onTriggered: {
if (root.isLoaded && settingsFileView.path !== undefined) {
settingsFileView.reload();
}
}
}
FileView {
id: settingsFileView
path: directoriesCreated ? settingsFile : undefined
@@ -95,10 +110,14 @@ Singleton {
// Trigger initial load when path changes from empty to actual path
onPathChanged: {
if (path !== undefined) {
settingsWatchdogTimer.start();
reload();
} else {
settingsWatchdogTimer.stop();
}
}
onLoaded: function () {
var currentText = settingsFileView.text();
if (!isLoaded) {
Logger.i("Settings", "Settings loaded");
@@ -115,6 +134,7 @@ Singleton {
// Finally, update our local settings version
adapter.settingsVersion = settingsVersion;
root.lastLoadedSettingsText = currentText;
// Emit the signal
root.isLoaded = true;
@@ -122,6 +142,10 @@ Singleton {
upgradeSettings();
} else {
if (currentText === root.lastLoadedSettingsText) {
return;
}
root.lastLoadedSettingsText = currentText;
Logger.d("Settings", "Settings reloaded from external file change");
root.settingsReloaded();
}