fix(config): handle nix-style atomic config replacements for settings and colors

This commit is contained in:
Lysec
2026-04-06 14:03:29 +02:00
parent c395320426
commit 40e98f1ad0
2 changed files with 66 additions and 9 deletions
+33 -4
View File
@@ -40,6 +40,28 @@ Singleton {
signal settingsSaved
signal settingsReloaded
// Debounce external reload requests (file watcher + directory watcher)
// so atomic replacements only trigger one reload.
Timer {
id: externalReloadTimer
running: false
interval: 200
onTriggered: {
if (settingsFileView.path !== undefined) {
Logger.d("Settings", "Reloading settings after external change detection");
reloadSettings = true;
settingsFileView.reload();
}
}
}
function scheduleExternalReload() {
if (!directoriesCreated || settingsFileView.path === undefined) {
return;
}
externalReloadTimer.restart();
}
// -----------------------------------------------------
// -----------------------------------------------------
// Ensure directories exist before FileView tries to read files
@@ -87,10 +109,7 @@ Singleton {
watchChanges: true
onAdapterUpdated: saveTimer.start()
onFileChanged: {
reloadSettings = true;
reload();
}
onFileChanged: scheduleExternalReload()
// Trigger initial load when path changes from empty to actual path
onPathChanged: {
@@ -142,6 +161,16 @@ Singleton {
}
}
// Watch parent config directory as a fallback for declarative setups where
// settings.json may be replaced atomically (e.g., symlink/store-path swap).
FileView {
id: settingsDirWatcher
path: directoriesCreated ? configDir : undefined
printErrors: false
watchChanges: true
onFileChanged: scheduleExternalReload()
}
// FileView to load default settings for comparison
FileView {
id: defaultSettingsFileView