refactor(scanner): extract symlink walking

This commit is contained in:
sentriz
2023-12-13 02:16:05 +00:00
parent 9e12394acc
commit 7efe29f29f

View File

@@ -142,7 +142,7 @@ func (s *Scanner) ExecuteWatch(done <-chan struct{}) error {
seenTracks: map[int]struct{}{}, seenTracks: map[int]struct{}{},
seenAlbums: map[int]struct{}{}, seenAlbums: map[int]struct{}{},
} }
err = filepath.WalkDir(absPath, func(absPath string, d fs.DirEntry, err error) error { err := filepath.WalkDir(absPath, func(absPath string, d fs.DirEntry, err error) error {
return watchCallback(watcher, absPath, d, err) return watchCallback(watcher, absPath, d, err)
}) })
if err != nil { if err != nil {
@@ -175,7 +175,7 @@ func (s *Scanner) ExecuteWatch(done <-chan struct{}) error {
} }
batchT.Reset(batchInterval) batchT.Reset(batchInterval)
case err = <-watcher.Errors: case err := <-watcher.Errors:
log.Printf("error from watcher: %v\n", err) log.Printf("error from watcher: %v\n", err)
case <-done: case <-done:
@@ -192,9 +192,7 @@ func watchCallback(watcher *fsnotify.Watcher, absPath string, d fs.DirEntry, err
switch d.Type() { switch d.Type() {
case os.ModeDir: case os.ModeDir:
case os.ModeSymlink: case os.ModeSymlink:
eval, _ := filepath.EvalSymlinks(absPath) return symWalk(absPath, func(subAbs string, d fs.DirEntry, err error) error {
return filepath.WalkDir(eval, func(subAbs string, d fs.DirEntry, err error) error {
subAbs = strings.Replace(subAbs, eval, absPath, 1)
return watchCallback(watcher, subAbs, d, err) return watchCallback(watcher, subAbs, d, err)
}) })
default: default:
@@ -216,9 +214,7 @@ func (s *Scanner) scanCallback(st *State, absPath string, d fs.DirEntry, err err
switch d.Type() { switch d.Type() {
case os.ModeDir: case os.ModeDir:
case os.ModeSymlink: case os.ModeSymlink:
eval, _ := filepath.EvalSymlinks(absPath) return symWalk(absPath, func(subAbs string, d fs.DirEntry, err error) error {
return filepath.WalkDir(eval, func(subAbs string, d fs.DirEntry, err error) error {
subAbs = strings.Replace(subAbs, eval, absPath, 1)
return s.scanCallback(st, subAbs, d, err) return s.scanCallback(st, subAbs, d, err)
}) })
default: default:
@@ -732,3 +728,11 @@ func musicDirRelative(musicDirs []string, absPath string) (musicDir, relPath str
} }
return return
} }
func symWalk(absPath string, fn fs.WalkDirFunc) error {
eval, _ := filepath.EvalSymlinks(absPath)
return filepath.WalkDir(eval, func(subAbs string, d fs.DirEntry, err error) error {
subAbs = strings.Replace(subAbs, eval, absPath, 1)
return fn(subAbs, d, err)
})
}