From b16d16c9c9663215ed268fef91e6677e6c8253bd Mon Sep 17 00:00:00 2001 From: Josh Patra Date: Tue, 3 Feb 2026 17:51:55 -0500 Subject: [PATCH] Fix: Register SpotifyTrackMatchingService as singleton for DI - Register as singleton first, then as hosted service - Allows AdminController to inject and trigger matching manually - Added better logging for Jellyfin playlist fetch failures - Logs when JellyfinId is missing or API calls fail - Helps debug '0 local / 0 missing' issue --- allstarr/Controllers/AdminController.cs | 17 +++++++++++++++++ allstarr/Program.cs | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/allstarr/Controllers/AdminController.cs b/allstarr/Controllers/AdminController.cs index 8dfcc18..65a8900 100644 --- a/allstarr/Controllers/AdminController.cs +++ b/allstarr/Controllers/AdminController.cs @@ -205,6 +205,8 @@ public class AdminController : ControllerBase var request = new HttpRequestMessage(HttpMethod.Get, url); request.Headers.Add("X-Emby-Authorization", GetJellyfinAuthHeader()); + _logger.LogDebug("Fetching Jellyfin playlist items for {Name} from {Url}", config.Name, url); + var response = await _jellyfinHttpClient.SendAsync(request); if (response.IsSuccessStatusCode) { @@ -216,7 +218,18 @@ public class AdminController : ControllerBase var localCount = items.GetArrayLength(); playlistInfo["localTracks"] = localCount; playlistInfo["externalTracks"] = Math.Max(0, spotifyTrackCount - localCount); + _logger.LogDebug("Playlist {Name}: {Local} local tracks, {Missing} missing", + config.Name, localCount, spotifyTrackCount - localCount); } + else + { + _logger.LogWarning("No Items property in Jellyfin response for {Name}", config.Name); + } + } + else + { + _logger.LogWarning("Failed to get Jellyfin playlist {Name}: {StatusCode}", + config.Name, response.StatusCode); } } catch (Exception ex) @@ -224,6 +237,10 @@ public class AdminController : ControllerBase _logger.LogWarning(ex, "Failed to get Jellyfin playlist tracks for {Name}", config.Name); } } + else + { + _logger.LogWarning("Playlist {Name} has no JellyfinId configured", config.Name); + } playlists.Add(playlistInfo); } diff --git a/allstarr/Program.cs b/allstarr/Program.cs index cdba55f..cd39fa0 100644 --- a/allstarr/Program.cs +++ b/allstarr/Program.cs @@ -550,7 +550,8 @@ builder.Services.AddHostedService(sp => sp.GetRequiredService(); // Register Spotify track matching service (pre-matches tracks with rate limiting) -builder.Services.AddHostedService(); +builder.Services.AddSingleton(); +builder.Services.AddHostedService(sp => sp.GetRequiredService()); builder.Services.AddCors(options => {