From 20f1b7bab5811f2ca4d2b0af93a0318adaf2fcac Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Mon, 19 Oct 2026 09:16:20 +0200 Subject: feat(notifyctl): add reload, re-reading the config file The daemon also reads the file at start. Armed timers keep their lifetime; the next notification gets the new default. Co-Authored-By: Claude Opus 5.5 --- internal/notify/control.go | 7 +++++++ internal/notify/service.go | 11 +++++++++++ 2 files changed, 18 insertions(+) (limited to 'internal/notify') diff --git a/internal/notify/control.go b/internal/notify/control.go index a42a14b..85c4d74 100644 --- a/internal/notify/control.go +++ b/internal/notify/control.go @@ -53,3 +53,10 @@ func (c *control) ClearHistory() *dbus.Error { c.svc.store.ClearHistory() return nil } + +// Reload re-reads ~/.config/notifyd/config.json. The settings page calls it +// after a save; a bad file is logged and read as defaults, never an error. +func (c *control) Reload() *dbus.Error { + c.svc.reload() + return nil +} diff --git a/internal/notify/service.go b/internal/notify/service.go index b29a783..1b1c89b 100644 --- a/internal/notify/service.go +++ b/internal/notify/service.go @@ -77,10 +77,21 @@ func (s *Service) Start() error { if err := os.RemoveAll(ImagesDir(s.dir)); err != nil { log.Printf("notifyd: clear images: %v", err) } + s.reload() s.store.Reset() return nil } +// reload re-reads the config file and applies it. Timers already armed keep +// their old lifetime; the next notification gets the new one. +func (s *Service) reload() { + c := LoadConfig(ConfigPath()) + s.mu.Lock() + s.cfg = c + s.mu.Unlock() + s.store.SetCaps(c.LiveCap, c.HistoryCap) +} + func (s *Service) emitClosed(id, reason uint32) { s.conn.Emit(dbus.ObjectPath(objPath), iface+".NotificationClosed", id, reason) } -- cgit v1.2.3