From 9736174b5166346c24167405baf756606f73a2e4 Mon Sep 17 00:00:00 2001 From: Marc Brooks Date: Mon, 8 Sep 2025 23:20:54 -0500 Subject: [PATCH] fix/Jiggler settings not saving Ensure the jiggler config loads the defaults so they can be saved. Ensure the file.Sync occurs before acknowledging save. Also fixup the old KeyboardLayout to use en-US not en_US --- config.go | 20 ++++++++++++++++++++ jiggler.go | 14 +++++++++----- ui/src/routes/devices.$id.settings.mouse.tsx | 1 + 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/config.go b/config.go index 1fa56a75..680999a3 100644 --- a/config.go +++ b/config.go @@ -118,6 +118,7 @@ var defaultConfig = &Config{ DisplayMaxBrightness: 64, DisplayDimAfterSec: 120, // 2 minutes DisplayOffAfterSec: 1800, // 30 minutes + JigglerEnabled: false, // This is the "Standard" jiggler option in the UI JigglerConfig: &JigglerConfig{ InactivityLimitSeconds: 60, @@ -205,6 +206,15 @@ func LoadConfig() { loadedConfig.NetworkConfig = defaultConfig.NetworkConfig } + if loadedConfig.JigglerConfig == nil { + loadedConfig.JigglerConfig = defaultConfig.JigglerConfig + } + + // fixup old keyboard layout value + if loadedConfig.KeyboardLayout == "en_US" { + loadedConfig.KeyboardLayout = "en-US" + } + config = &loadedConfig logging.GetRootLogger().UpdateLogLevel(config.DefaultLogLevel) @@ -221,6 +231,11 @@ func SaveConfig() error { logger.Trace().Str("path", configPath).Msg("Saving config") + // fixup old keyboard layout value + if config.KeyboardLayout == "en_US" { + config.KeyboardLayout = "en-US" + } + file, err := os.Create(configPath) if err != nil { return fmt.Errorf("failed to create config file: %w", err) @@ -233,6 +248,11 @@ func SaveConfig() error { return fmt.Errorf("failed to encode config: %w", err) } + if err := file.Sync(); err != nil { + return fmt.Errorf("failed to wite config: %w", err) + } + + logger.Info().Str("path", configPath).Msg("config saved") return nil } diff --git a/jiggler.go b/jiggler.go index 52882c07..b2463e0a 100644 --- a/jiggler.go +++ b/jiggler.go @@ -17,16 +17,20 @@ type JigglerConfig struct { Timezone string `json:"timezone,omitempty"` } -var jigglerEnabled = false var jobDelta time.Duration = 0 var scheduler gocron.Scheduler = nil -func rpcSetJigglerState(enabled bool) { - jigglerEnabled = enabled +func rpcSetJigglerState(enabled bool) error { + config.JigglerEnabled = enabled + err := SaveConfig() + if err != nil { + return fmt.Errorf("failed to save config: %w", err) + } + return nil } func rpcGetJigglerState() bool { - return jigglerEnabled + return config.JigglerEnabled } func rpcGetTimezones() []string { @@ -118,7 +122,7 @@ func runJigglerCronTab() error { } func runJiggler() { - if jigglerEnabled { + if config.JigglerEnabled { if config.JigglerConfig.JitterPercentage != 0 { jitter := calculateJitterDuration(jobDelta) time.Sleep(jitter) diff --git a/ui/src/routes/devices.$id.settings.mouse.tsx b/ui/src/routes/devices.$id.settings.mouse.tsx index f2b169d9..76b0ae27 100644 --- a/ui/src/routes/devices.$id.settings.mouse.tsx +++ b/ui/src/routes/devices.$id.settings.mouse.tsx @@ -90,6 +90,7 @@ export default function SettingsMouseRoute() { send("getJigglerState", {}, (resp: JsonRpcResponse) => { if ("error" in resp) return; const isEnabled = resp.result as boolean; + console.log("Jiggler is enabled:", isEnabled); // If the jiggler is disabled, set the selected option to "disabled" and nothing else if (!isEnabled) return setSelectedJigglerOption("disabled");