From 35950369ef95b160c6dfa0e2d27abe15ede3e2c1 Mon Sep 17 00:00:00 2001 From: Stavros Tsioulis Date: Wed, 2 Jul 2025 22:29:29 +0300 Subject: [PATCH] fix: handle errors when attempting to delete associated shares --- http/resource.go | 5 ++++- share/storage.go | 6 +++--- storage/bolt/share.go | 12 +++++++++--- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/http/resource.go b/http/resource.go index 0483e8e5..0dd43795 100644 --- a/http/resource.go +++ b/http/resource.go @@ -73,7 +73,10 @@ func resourceDeleteHandler(fileCache FileCache) handleFunc { return errToStatus(err), err } - d.store.Share.DeleteWithPathPrefix(file.Path) + err = d.store.Share.DeleteWithPathPrefix(file.Path) + if err != nil { + fmt.Println("Warning: Error(s) occurred while deleting associated shares with file:" + err.Error()) + } // delete thumbnails err = delThumbs(r.Context(), fileCache, file) diff --git a/share/storage.go b/share/storage.go index 456b8083..398c192d 100644 --- a/share/storage.go +++ b/share/storage.go @@ -15,7 +15,7 @@ type StorageBackend interface { Gets(path string, id uint) ([]*Link, error) Save(s *Link) error Delete(hash string) error - DeleteWithPathPrefix(path string) + DeleteWithPathPrefix(path string) error } // Storage is a storage. @@ -120,6 +120,6 @@ func (s *Storage) Delete(hash string) error { return s.back.Delete(hash) } -func (s *Storage) DeleteWithPathPrefix(path string) { - s.back.DeleteWithPathPrefix(path) +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 e3f38f99..429aef76 100644 --- a/storage/bolt/share.go +++ b/storage/bolt/share.go @@ -76,10 +76,16 @@ func (s shareBackend) Delete(hash string) error { return err } -func (s shareBackend) DeleteWithPathPrefix(pathPrefix string) { +func (s shareBackend) DeleteWithPathPrefix(pathPrefix string) error { var links []share.Link s.db.Prefix("Path", pathPrefix, &links) - for _, link := range links { - s.db.DeleteStruct(&share.Link{Hash: link.Hash}) + 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 }