feat: use storm.Prefix to select all shares with path prefixes instead of listing all files

pull/3896/head
Stavros Tsioulis 2025-07-02 18:48:04 +03:00 committed by Henrique Dias
parent 7398478d29
commit 0ef534d4a6
3 changed files with 9 additions and 47 deletions

View File

@ -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"`

View File

@ -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)
}

View File

@ -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
}