Lucky manta ray

This commit is contained in:
2026-02-02 19:38:02 +02:00
parent c24ef1cc2f
commit d1307a75b9
5 changed files with 363 additions and 25 deletions

View File

@@ -191,6 +191,71 @@ func (s *Store) MarkTriggered(id int) error {
return err
}
// Settings holds all configurable app settings.
type Settings struct {
SnoozeMinutes int
TimeoutMinutes int
DefaultSound string
BlinkOnMs int
BlinkOffMs int
ColorClock string
ColorAlarm string
}
func DefaultSettings() Settings {
return Settings{
SnoozeMinutes: 5,
TimeoutMinutes: 5,
DefaultSound: "default",
BlinkOnMs: 1000,
BlinkOffMs: 500,
ColorClock: "#00FF88",
ColorAlarm: "#FF4444",
}
}
func (s *Store) LoadSettings() Settings {
cfg := DefaultSettings()
cfg.SnoozeMinutes = s.getSettingInt("snooze_minutes", cfg.SnoozeMinutes)
cfg.TimeoutMinutes = s.getSettingInt("timeout_minutes", cfg.TimeoutMinutes)
cfg.DefaultSound = s.GetSetting("default_sound", cfg.DefaultSound)
cfg.BlinkOnMs = s.getSettingInt("blink_on_ms", cfg.BlinkOnMs)
cfg.BlinkOffMs = s.getSettingInt("blink_off_ms", cfg.BlinkOffMs)
cfg.ColorClock = s.GetSetting("color_clock", cfg.ColorClock)
cfg.ColorAlarm = s.GetSetting("color_alarm", cfg.ColorAlarm)
return cfg
}
func (s *Store) SaveSettings(cfg Settings) error {
pairs := map[string]string{
"snooze_minutes": fmt.Sprintf("%d", cfg.SnoozeMinutes),
"timeout_minutes": fmt.Sprintf("%d", cfg.TimeoutMinutes),
"default_sound": cfg.DefaultSound,
"blink_on_ms": fmt.Sprintf("%d", cfg.BlinkOnMs),
"blink_off_ms": fmt.Sprintf("%d", cfg.BlinkOffMs),
"color_clock": cfg.ColorClock,
"color_alarm": cfg.ColorAlarm,
}
for k, v := range pairs {
if err := s.SetSetting(k, v); err != nil {
return err
}
}
return nil
}
func (s *Store) getSettingInt(key string, defaultVal int) int {
val := s.GetSetting(key, "")
if val == "" {
return defaultVal
}
var n int
if _, err := fmt.Sscanf(val, "%d", &n); err != nil {
return defaultVal
}
return n
}
func (s *Store) GetSetting(key, defaultVal string) string {
var val string
err := s.db.QueryRow(`SELECT value FROM settings WHERE key = ?`, key).Scan(&val)