aboutsummaryrefslogtreecommitdiffstats
path: root/internal/notify/service.go
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-09-15 17:59:35 +0200
committerDanilo M. <danix@danix.xyz>2026-09-15 17:59:35 +0200
commit3b8a0e0f4a5c28394ac578e8559bf57ae82d3fd2 (patch)
treefafa293256cca4615e4725553a391bf8dfdee99b /internal/notify/service.go
parenta248608721e813d5e6d19fc79d2505a2a8c2716a (diff)
downloadnotifyd-3b8a0e0f4a5c28394ac578e8559bf57ae82d3fd2.tar.gz
notifyd-3b8a0e0f4a5c28394ac578e8559bf57ae82d3fd2.zip
feat(notify): add the image field and its cleanup
Popup gains image, and the store calls an injected removeImage when an entry is dismissed, evicted, replaced or expired, so a daemon-written PNG does not outlive its balloon. The service decides what is daemon-owned; the store only names the path. NewStore now takes the callback as a third parameter, so the service wires its removeImage in (unlinking only under ImagesDir) and the existing call sites pass nil.
Diffstat (limited to 'internal/notify/service.go')
-rw-r--r--internal/notify/service.go16
1 files changed, 15 insertions, 1 deletions
diff --git a/internal/notify/service.go b/internal/notify/service.go
index 22d7830..d46293f 100644
--- a/internal/notify/service.go
+++ b/internal/notify/service.go
@@ -13,6 +13,8 @@ package notify
import (
"log"
+ "os"
+ "strings"
"sync"
"time"
@@ -45,10 +47,22 @@ func NewService(conn *dbus.Conn, dir string) *Service {
if err := Publish(s.dir, live, history); err != nil {
log.Printf("notifyd: publish: %v", err)
}
- })
+ }, s.removeImage)
return s
}
+// removeImage unlinks only what the daemon wrote, so a client's own image-path
+// is never touched.
+func (s *Service) removeImage(path string) {
+ if path == "" {
+ return
+ }
+ if !strings.HasPrefix(path, ImagesDir(s.dir)+string(os.PathSeparator)) {
+ return
+ }
+ os.Remove(path)
+}
+
// Start exports the interfaces and empties the state. Nothing from a previous
// run is resurrected.
func (s *Service) Start() error {