From 7efe29f29f619941324b36c6cb298d353930a2f2 Mon Sep 17 00:00:00 2001 From: sentriz Date: Wed, 13 Dec 2023 02:16:05 +0000 Subject: [PATCH] refactor(scanner): extract symlink walking --- scanner/scanner.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/scanner/scanner.go b/scanner/scanner.go index 8e4aa98..d9331ce 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -142,7 +142,7 @@ func (s *Scanner) ExecuteWatch(done <-chan struct{}) error { seenTracks: 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) }) if err != nil { @@ -175,7 +175,7 @@ func (s *Scanner) ExecuteWatch(done <-chan struct{}) error { } batchT.Reset(batchInterval) - case err = <-watcher.Errors: + case err := <-watcher.Errors: log.Printf("error from watcher: %v\n", err) case <-done: @@ -192,9 +192,7 @@ func watchCallback(watcher *fsnotify.Watcher, absPath string, d fs.DirEntry, err switch d.Type() { case os.ModeDir: case os.ModeSymlink: - 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 symWalk(absPath, func(subAbs string, d fs.DirEntry, err error) error { return watchCallback(watcher, subAbs, d, err) }) default: @@ -216,9 +214,7 @@ func (s *Scanner) scanCallback(st *State, absPath string, d fs.DirEntry, err err switch d.Type() { case os.ModeDir: case os.ModeSymlink: - 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 symWalk(absPath, func(subAbs string, d fs.DirEntry, err error) error { return s.scanCallback(st, subAbs, d, err) }) default: @@ -732,3 +728,11 @@ func musicDirRelative(musicDirs []string, absPath string) (musicDir, relPath str } 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) + }) +}