filebrowser/backend/files/sync.go

80 lines
1.7 KiB
Go
Raw Permalink Normal View History

package files
import (
2024-11-21 00:15:30 +00:00
"path/filepath"
2025-02-01 13:10:46 +00:00
"github.com/gtsteffaniak/filebrowser/backend/settings"
)
// UpdateFileMetadata updates the FileInfo for the specified directory in the index.
2025-01-05 19:05:33 +00:00
func (idx *Index) UpdateMetadata(info *FileInfo) bool {
idx.mu.Lock()
defer idx.mu.Unlock()
idx.Directories[info.Path] = info
return true
}
// GetMetadataInfo retrieves the FileInfo from the specified directory in the index.
2025-01-05 19:05:33 +00:00
func (idx *Index) GetReducedMetadata(target string, isDir bool) (*FileInfo, bool) {
idx.mu.Lock()
defer idx.mu.Unlock()
checkDir := idx.makeIndexPath(target)
2024-11-21 00:15:30 +00:00
if !isDir {
2025-01-05 19:05:33 +00:00
checkDir = idx.makeIndexPath(filepath.Dir(target))
2024-11-21 00:15:30 +00:00
}
2025-01-05 19:05:33 +00:00
dir, exists := idx.Directories[checkDir]
2024-10-07 22:44:53 +00:00
if !exists {
2024-11-21 00:15:30 +00:00
return nil, false
}
2024-11-26 17:21:41 +00:00
if isDir {
return dir, true
2024-10-07 22:44:53 +00:00
}
2024-11-26 17:21:41 +00:00
// handle file
if checkDir == "/" {
checkDir = ""
}
2024-11-26 17:21:41 +00:00
baseName := filepath.Base(target)
for _, item := range dir.Files {
if item.Name == baseName {
return &FileInfo{
Path: checkDir + "/" + item.Name,
ItemInfo: item,
}, true
}
2024-11-21 00:15:30 +00:00
}
2024-11-26 17:21:41 +00:00
return nil, false
}
2024-11-21 00:15:30 +00:00
// GetMetadataInfo retrieves the FileInfo from the specified directory in the index.
2025-01-05 19:05:33 +00:00
func (idx *Index) GetMetadataInfo(target string, isDir bool) (*FileInfo, bool) {
idx.mu.RLock()
defer idx.mu.RUnlock()
checkDir := idx.makeIndexPath(target)
2024-11-21 00:15:30 +00:00
if !isDir {
2025-01-05 19:05:33 +00:00
checkDir = idx.makeIndexPath(filepath.Dir(target))
2024-11-21 00:15:30 +00:00
}
2025-01-05 19:05:33 +00:00
dir, exists := idx.Directories[checkDir]
2024-09-16 21:01:16 +00:00
return dir, exists
}
2025-01-05 19:05:33 +00:00
func (idx *Index) RemoveDirectory(path string) {
idx.mu.Lock()
defer idx.mu.Unlock()
idx.NumDeleted++
delete(idx.Directories, path)
}
2025-01-05 19:05:33 +00:00
func GetIndex(name string) *Index {
indexesMutex.Lock()
2025-01-05 19:05:33 +00:00
defer indexesMutex.Unlock()
index, ok := indexes[name]
if !ok {
2025-02-01 13:10:46 +00:00
return &Index{
Source: settings.Source{Name: "default", Path: "."},
}
2025-01-05 19:05:33 +00:00
}
return index
}