diff --git a/internal/server/server.go b/internal/server/server.go index 73d9ff8e..af477ac3 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -52,9 +52,11 @@ func (a lidarrUnmonitorAdapter) UnmonitorTrack(ctx context.Context, trackMbid, a } // ScanTrigger is the subset of the scanner the HTTP handler needs. Kept as an -// interface so tests can stub it without touching the DB. +// interface so tests can stub it without touching the DB. The progressCb +// parameter (added in m7-scan-progress) lets the orchestrator drive partial- +// tally writes; the HTTP handler passes nil for fire-and-forget triggers. type ScanTrigger interface { - Scan(ctx context.Context) (library.Stats, error) + Scan(ctx context.Context, progressCb func(library.Stats)) (library.Stats, error) } type Server struct { @@ -151,7 +153,7 @@ func (s *Server) handleHealthz(w http.ResponseWriter, _ *http.Request) { // Kept synchronous for v1: libraries are small and the operator can tell when // it's done. Async jobs with status polling are a later-milestone concern. func (s *Server) handleAdminScan(w http.ResponseWriter, r *http.Request) { - stats, err := s.Scanner.Scan(r.Context()) + stats, err := s.Scanner.Scan(r.Context(), nil) w.Header().Set("Content-Type", "application/json") if err != nil { s.Logger.Error("admin scan failed", "err", err) diff --git a/internal/server/server_test.go b/internal/server/server_test.go index a36db94f..e2f35947 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -247,6 +247,6 @@ func TestRouter_AdminSubtreeNotShadowed(t *testing.T) { // route-presence assertions in this file. type stubScanner struct{} -func (stubScanner) Scan(_ context.Context) (library.Stats, error) { +func (stubScanner) Scan(_ context.Context, _ func(library.Stats)) (library.Stats, error) { panic("stubScanner.Scan called from server_test") }