refactor(scanner): extract symlink walking
This commit is contained in:
@@ -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)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user