diff --git a/internal/server/server.go b/internal/server/server.go index f491cbe7..a55eba19 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -17,6 +17,7 @@ import ( "git.fabledsword.com/bvandeusen/minstrel/internal/auth" "git.fabledsword.com/bvandeusen/minstrel/internal/config" "git.fabledsword.com/bvandeusen/minstrel/internal/library" + "git.fabledsword.com/bvandeusen/minstrel/internal/lidarr" "git.fabledsword.com/bvandeusen/minstrel/internal/lidarrconfig" "git.fabledsword.com/bvandeusen/minstrel/internal/lidarrquarantine" "git.fabledsword.com/bvandeusen/minstrel/internal/lidarrrequests" @@ -59,8 +60,19 @@ func (s *Server) Router() http.Handler { s.EventsCfg.SkipMaxDurationPlayedMs, ) lidarrCfg := lidarrconfig.New(s.Pool) - lidarrReqs := lidarrrequests.NewService(s.Pool, lidarrCfg, nil, nil) - lidarrQuar := lidarrquarantine.NewService(s.Pool, lidarrCfg, nil) + // Per-call client factory: re-reads config so an admin save in + // /admin/integrations takes effect immediately without restart. + // Returns nil when Lidarr is disabled, which the Service-layer + // methods translate to ErrLidarrDisabled. + lidarrClientFn := func() *lidarr.Client { + cfg, err := lidarrCfg.Get(context.Background()) + if err != nil || !cfg.Enabled || cfg.BaseURL == "" || cfg.APIKey == "" { + return nil + } + return lidarr.NewClient(cfg.BaseURL, cfg.APIKey) + } + lidarrReqs := lidarrrequests.NewService(s.Pool, lidarrCfg, lidarrClientFn, nil) + lidarrQuar := lidarrquarantine.NewService(s.Pool, lidarrCfg, lidarrClientFn) api.Mount(r, s.Pool, s.Logger, writer, s.RecommendationCfg, lidarrCfg, lidarrReqs, lidarrQuar) r.Route("/api/admin", func(admin chi.Router) { admin.Use(auth.RequireUser(s.Pool))