diff --git a/scanner/rescanall.go b/scanner/rescanall.go new file mode 100644 index 000000000..4a8bc8d18 --- /dev/null +++ b/scanner/rescanall.go @@ -0,0 +1,33 @@ +//go:build go1.21 + +package scanner + +import ( + "context" + + "github.com/navidrome/navidrome/core" + "github.com/navidrome/navidrome/log" +) + +// TODO: Move this to scanner/scanner.go when we drop support for go 1.20 +func (s *scanner) RescanAll(ctx context.Context, fullRescan bool) error { + ctx = context.WithoutCancel(ctx) + if !isScanning.TryLock() { + log.Debug("Scanner already running, ignoring request for rescan.") + return ErrAlreadyScanning + } + defer isScanning.Unlock() + + var hasError bool + for folder := range s.folders { + err := s.rescan(ctx, folder, fullRescan) + hasError = hasError || err != nil + } + if hasError { + log.Error("Errors while scanning media. Please check the logs") + core.WriteAfterScanMetrics(ctx, s.ds, false) + return ErrScanError + } + core.WriteAfterScanMetrics(ctx, s.ds, true) + return nil +} diff --git a/scanner/rescanall_go1.20.go b/scanner/rescanall_go1.20.go new file mode 100644 index 000000000..d64a8d974 --- /dev/null +++ b/scanner/rescanall_go1.20.go @@ -0,0 +1,33 @@ +//go:build !go1.21 + +package scanner + +import ( + "context" + + "github.com/navidrome/navidrome/core" + "github.com/navidrome/navidrome/log" +) + +// TODO Remove this file when we drop support for go 1.20 +func (s *scanner) RescanAll(ctx context.Context, fullRescan bool) error { + ctx = context.TODO() + if !isScanning.TryLock() { + log.Debug("Scanner already running, ignoring request for rescan.") + return ErrAlreadyScanning + } + defer isScanning.Unlock() + + var hasError bool + for folder := range s.folders { + err := s.rescan(ctx, folder, fullRescan) + hasError = hasError || err != nil + } + if hasError { + log.Error("Errors while scanning media. Please check the logs") + core.WriteAfterScanMetrics(ctx, s.ds, false) + return ErrScanError + } + core.WriteAfterScanMetrics(ctx, s.ds, true) + return nil +} diff --git a/scanner/scanner.go b/scanner/scanner.go index b6b17c8ed..9d43db209 100644 --- a/scanner/scanner.go +++ b/scanner/scanner.go @@ -139,28 +139,6 @@ func (s *scanner) startProgressTracker(mediaFolder string) (chan uint32, context return progress, cancel } -func (s *scanner) RescanAll(ctx context.Context, fullRescan bool) error { - ctx = context.WithoutCancel(ctx) - if !isScanning.TryLock() { - log.Debug("Scanner already running, ignoring request for rescan.") - return ErrAlreadyScanning - } - defer isScanning.Unlock() - - var hasError bool - for folder := range s.folders { - err := s.rescan(ctx, folder, fullRescan) - hasError = hasError || err != nil - } - if hasError { - log.Error("Errors while scanning media. Please check the logs") - core.WriteAfterScanMetrics(ctx, s.ds, false) - return ErrScanError - } - core.WriteAfterScanMetrics(ctx, s.ds, true) - return nil -} - func (s *scanner) getStatus(folder string) (scanStatus, bool) { s.lock.RLock() defer s.lock.RUnlock()