summaryrefslogtreecommitdiff
path: root/internal/service/admin.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/service/admin.go')
-rw-r--r--internal/service/admin.go16
1 files changed, 12 insertions, 4 deletions
diff --git a/internal/service/admin.go b/internal/service/admin.go
index a775bed..673bf37 100644
--- a/internal/service/admin.go
+++ b/internal/service/admin.go
@@ -3,6 +3,7 @@ package service
import (
"context"
"fmt"
+ "time"
"codeberg.org/snonux/player/internal/auth"
"codeberg.org/snonux/player/internal/clock"
@@ -39,10 +40,17 @@ func (s *adminService) TriggerRescan(ctx context.Context) error {
if s.scanner == nil {
return fmt.Errorf("scanner not configured")
}
- // Use a background context so the scan isn't canceled when the HTTP request finishes.
- if err := s.scanner.Scan(context.Background(), s.mediaRoot); err != nil {
- return fmt.Errorf("scan failed: %w", err)
- }
+ // Run the scan in a background goroutine so the HTTP request
+ // returns immediately and the scan continues asynchronously.
+ go func() {
+ ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute)
+ defer cancel()
+ if err := s.scanner.Scan(ctx, s.mediaRoot); err != nil {
+ fmt.Printf("[rescan] scan failed: %v\n", err)
+ } else {
+ fmt.Printf("[rescan] scan completed\n")
+ }
+ }()
return nil
}