From 0ef534d4a6eb74ce9c4ccd25397b09d290ace3c4 Mon Sep 17 00:00:00 2001 From: Stavros Tsioulis Date: Wed, 2 Jul 2025 18:48:04 +0300 Subject: [PATCH] feat: use storm.Prefix to select all shares with path prefixes instead of listing all files --- http/resource.go | 40 +--------------------------------------- share/storage.go | 6 +++--- storage/bolt/share.go | 10 +++++----- 3 files changed, 9 insertions(+), 47 deletions(-) diff --git a/http/resource.go b/http/resource.go index a9f09283..8d1a1ee6 100644 --- a/http/resource.go +++ b/http/resource.go @@ -73,10 +73,7 @@ func resourceDeleteHandler(fileCache FileCache) handleFunc { return errToStatus(err), err } - // delete potential shares for this path - for _, path := range flatListFilePaths(file, d) { - d.store.Share.DeleteWithPath(path) - } + d.store.Share.DeleteWithPath(file.Path) // delete thumbnails err = delThumbs(r.Context(), fileCache, file) @@ -337,41 +334,6 @@ func patchAction(ctx context.Context, action, src, dst string, d *data, fileCach } } -func flatListFilePaths(fileInfo *files.FileInfo, d *data) []string { - var paths []string - - paths = append(paths, fileInfo.Path) - - if (!fileInfo.isDir) { - return paths - } - - for _, item := range fileInfo.Items { - // no need to add the directory's path here as it will provide itself in the next recursion - if (item.IsDir) { - file, err := files.NewFileInfo(&files.FileOptions{ - Fs: item.Fs, - Path: item.Path + "/", // ensure we add the suffix "/" for a directory - Modify: false, - Expand: true, - ReadHeader: false, - Checker: d, - }) - - if (err != nil) { - return paths - } - - deeperFiles := flatListFilePaths(file, d) - paths = append(paths, deeperFiles...) - } else { - paths = append(paths, item.Path) - } - } - - return paths -} - type DiskUsageResponse struct { Total uint64 `json:"total"` Used uint64 `json:"used"` diff --git a/share/storage.go b/share/storage.go index ed685213..da8e75cd 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 - DeleteWithPath(path string) error + DeleteWithPath(path string) } // Storage is a storage. @@ -120,6 +120,6 @@ func (s *Storage) Delete(hash string) error { return s.back.Delete(hash) } -func (s *Storage) DeleteWithPath(path string) error { - return s.back.DeleteWithPath(path) +func (s *Storage) DeleteWithPath(path string) { + s.back.DeleteWithPath(path) } diff --git a/storage/bolt/share.go b/storage/bolt/share.go index b7c77bf8..f524efc2 100644 --- a/storage/bolt/share.go +++ b/storage/bolt/share.go @@ -76,10 +76,10 @@ func (s shareBackend) Delete(hash string) error { return err } -func (s shareBackend) DeleteWithPath(path string) error { - err := s.db.Select(q.Eq("Path", path)).Delete(&share.Link{}) - if errors.Is(err, storm.ErrNotFound) { - return nil +func (s shareBackend) DeleteWithPath(pathPrefix string) { + var links []share.Link + s.db.Prefix("Path", pathPrefix, &links) + for _, link :=range links { + s.db.DeleteStruct(&share.Link{Hash: link.Hash}) } - return err }