From b76d394b1681e135ab416c694c75c7a4b3ae9681 Mon Sep 17 00:00:00 2001 From: Thomas Klaehn Date: Fri, 15 Aug 2025 09:03:49 +0200 Subject: [PATCH] app/scheduler: Enhancement: detect date change & update daily runtimes accordingly Signed-off-by: Thomas Klaehn --- src/internal/app/scheduler/scheduler.go | 30 +++++++++++++++++++------ 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/src/internal/app/scheduler/scheduler.go b/src/internal/app/scheduler/scheduler.go index 4490266..8c8d80a 100644 --- a/src/internal/app/scheduler/scheduler.go +++ b/src/internal/app/scheduler/scheduler.go @@ -31,17 +31,17 @@ func init() { app_state_cache.Mode = ModeManual // override defaults with stored values - store.Path = app_state_storage_path + store.SetPath(app_state_storage_path) res, err := store.Read() if err != nil { - logger.Print("unable to read app state cache") + logger.Print(err) return } app_state_mutex.Lock() err = json.Unmarshal(res, &app_state_cache) app_state_mutex.Unlock() if err != nil { - logger.Print("unable to evaluate config data") + logger.Print(err) } } @@ -50,10 +50,13 @@ func SetMode(mode AppMode) { app_state_cache.Mode = mode res, err := json.Marshal(app_state_cache) if err != nil { - logger.Print("unable to store app state cache") + logger.Print(err) return } - store.Write(res) + err = store.Write(res) + if err != nil { + logger.Print(err) + } app_state_mutex.Unlock() } @@ -77,7 +80,7 @@ func app_state_saver() { res, err := json.Marshal(app_state_cache) app_state_mutex.Unlock() if err != nil { - logger.Print("unable to marshal object to json") + logger.Print(err) time.Sleep(time.Minute) continue } @@ -87,6 +90,8 @@ func app_state_saver() { } func poll_auto_off() { + now := time.Now() + today := time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location()) for { app_state_mutex.Lock() for i, od := range app_state_cache.off_devices { @@ -115,6 +120,18 @@ func poll_auto_off() { } } app_state_mutex.Unlock() + + // check date change + now := time.Now() + if now.After(today) { + // reset date + today = time.Date(now.Year(), now.Month(), now.Day(), 23, 59, 59, 0, now.Location()) + for _, od := range app_state_cache.off_devices { + // reset run times + apiservice_state.SetRuntime(od.device.Name, 0) + } + } + time.Sleep(time.Second) } } @@ -123,7 +140,6 @@ func register_off_device(dev apiservice_devices.Device) { for _, od := range app_state_cache.off_devices { if od.device.Name == dev.Name { // device already in off list - // FIXME: update off time return } }