config: 0ms bug on save corrected

This commit is contained in:
ATMDA 2025-11-16 09:03:16 -05:00
parent 63d680404f
commit 0d57edcade

View file

@ -30,8 +30,12 @@ Singleton {
// Public save function - call this to persist config changes // Public save function - call this to persist config changes
function save(): void { function save(): void {
saveTimer.restart(); saveTimer.restart();
recentlySaved = true;
recentSaveCooldown.restart();
} }
property bool recentlySaved: false
ElapsedTimer { ElapsedTimer {
id: timer id: timer
} }
@ -41,6 +45,7 @@ Singleton {
interval: 500 interval: 500
onTriggered: { onTriggered: {
timer.restart();
try { try {
// Parse current config to preserve structure and comments if possible // Parse current config to preserve structure and comments if possible
let config = {}; let config = {};
@ -62,6 +67,15 @@ Singleton {
} }
} }
Timer {
id: recentSaveCooldown
interval: 2000
onTriggered: {
recentlySaved = false;
}
}
// Helper function to serialize the config object // Helper function to serialize the config object
function serializeConfig(): var { function serializeConfig(): var {
return { return {
@ -409,16 +423,24 @@ Singleton {
watchChanges: true watchChanges: true
onFileChanged: { onFileChanged: {
// Prevent reload loop - don't reload if we just saved // Prevent reload loop - don't reload if we just saved
if (!saveTimer.running) { if (!recentlySaved) {
timer.restart(); timer.restart();
reload(); reload();
} else {
// Self-initiated save - reload without toast
reload();
} }
} }
onLoaded: { onLoaded: {
try { try {
JSON.parse(text()); JSON.parse(text());
if (adapter.utilities.toasts.configLoaded) const elapsed = timer.elapsedMs();
Toaster.toast(qsTr("Config loaded"), qsTr("Config loaded in %1ms").arg(timer.elapsedMs()), "rule_settings"); // Only show toast for external changes (not our own saves) and when elapsed time is meaningful
if (adapter.utilities.toasts.configLoaded && !recentlySaved && elapsed > 0) {
Toaster.toast(qsTr("Config loaded"), qsTr("Config loaded in %1ms").arg(elapsed), "rule_settings");
} else if (adapter.utilities.toasts.configLoaded && recentlySaved && elapsed > 0) {
Toaster.toast(qsTr("Config saved"), qsTr("Config reloaded in %1ms").arg(elapsed), "rule_settings");
}
} catch (e) { } catch (e) {
Toaster.toast(qsTr("Failed to load config"), e.message, "settings_alert", Toast.Error); Toaster.toast(qsTr("Failed to load config"), e.message, "settings_alert", Toast.Error);
} }