From e99e0b3028e1c8a50e1744bb07ecc8e809bdb8e6 Mon Sep 17 00:00:00 2001 From: Stavros Tsioulis Date: Thu, 3 Jul 2025 07:42:55 +0300 Subject: [PATCH] fix: remove associated shares when deleting file/folder --- http/resource.go | 6 ++++++ share/storage.go | 5 +++++ storage/bolt/share.go | 13 +++++++++++++ 3 files changed, 24 insertions(+) diff --git a/http/resource.go b/http/resource.go index f03f17fb..f657856e 100644 --- a/http/resource.go +++ b/http/resource.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "log" "net/http" "net/url" "os" @@ -73,6 +74,11 @@ func resourceDeleteHandler(fileCache FileCache) handleFunc { return errToStatus(err), err } + err = d.store.Share.DeleteWithPathPrefix(file.Path) + if err != nil { + log.Printf("WARNING: Error(s) occurred while deleting associated shares with file: %s", err) + } + // delete thumbnails err = delThumbs(r.Context(), fileCache, file) if err != nil { diff --git a/share/storage.go b/share/storage.go index 4cd263de..398c192d 100644 --- a/share/storage.go +++ b/share/storage.go @@ -15,6 +15,7 @@ type StorageBackend interface { Gets(path string, id uint) ([]*Link, error) Save(s *Link) error Delete(hash string) error + DeleteWithPathPrefix(path string) error } // Storage is a storage. @@ -118,3 +119,7 @@ func (s *Storage) Save(l *Link) error { func (s *Storage) Delete(hash string) error { return s.back.Delete(hash) } + +func (s *Storage) DeleteWithPathPrefix(path string) error { + return s.back.DeleteWithPathPrefix(path) +} diff --git a/storage/bolt/share.go b/storage/bolt/share.go index 6df94f12..373533f1 100644 --- a/storage/bolt/share.go +++ b/storage/bolt/share.go @@ -75,3 +75,16 @@ func (s shareBackend) Delete(hash string) error { } return err } + +func (s shareBackend) DeleteWithPathPrefix(pathPrefix string) error { + var links []share.Link + if err := s.db.Prefix("Path", pathPrefix, &links); err != nil { + return err + } + + var err error + for _, link := range links { + err = errors.Join(err, s.db.DeleteStruct(&share.Link{Hash: link.Hash})) + } + return err +}