fix(settings): reload settings after nix-managed config file replacements

This commit is contained in:
Lysec
2026-04-06 13:19:43 +02:00
parent ef147f24f1
commit 17b157d1b6
2 changed files with 35 additions and 5 deletions
+34 -4
View File
@@ -40,6 +40,28 @@ Singleton {
signal settingsSaved
signal settingsReloaded
// Debounce external reload requests (file watcher + parent directory watcher)
// so atomic symlink swaps 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,17 @@ Singleton {
}
}
// Watch parent config directory as a fallback for declarative setups where
// settings.json may be replaced atomically (e.g., new symlink target on nix rebuild).
FileView {
id: settingsDirWatcher
path: directoriesCreated ? configDir : undefined
printErrors: false
watchChanges: true
onFileChanged: scheduleExternalReload()
}
// FileView to load default settings for comparison
FileView {
id: defaultSettingsFileView
+1 -1
View File
@@ -74,7 +74,7 @@ SmartPanel {
id: playerContent
anchors.fill: parent
property real contentPreferredHeight: mainLayout.implicitHeight + Style.margin2L;
property real contentPreferredHeight: mainLayout.implicitHeight + Style.margin2L
property Component visualizerSource: {
switch (root.visualizerType) {