mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-09 23:55:10 -05:00
Fix GetPlaylists to use pre-built cache with manual mappings for accurate counts
This commit is contained in:
@@ -247,7 +247,47 @@ public class AdminController : ControllerBase
|
|||||||
|
|
||||||
if (jellyfinDoc.RootElement.TryGetProperty("Items", out var items))
|
if (jellyfinDoc.RootElement.TryGetProperty("Items", out var items))
|
||||||
{
|
{
|
||||||
// Build list of local tracks from Jellyfin (match by name only)
|
// Get Spotify tracks to match against
|
||||||
|
var spotifyTracks = await _playlistFetcher.GetPlaylistTracksAsync(config.Name);
|
||||||
|
|
||||||
|
// Try to use the pre-built playlist cache first (includes manual mappings!)
|
||||||
|
var playlistItemsCacheKey = $"spotify:playlist:items:{config.Name}";
|
||||||
|
var cachedPlaylistItems = await _cache.GetAsync<List<Dictionary<string, object?>>>(playlistItemsCacheKey);
|
||||||
|
|
||||||
|
if (cachedPlaylistItems != null && cachedPlaylistItems.Count > 0)
|
||||||
|
{
|
||||||
|
// Use the pre-built cache which respects manual mappings
|
||||||
|
var localCount = 0;
|
||||||
|
var externalCount = 0;
|
||||||
|
|
||||||
|
foreach (var item in cachedPlaylistItems)
|
||||||
|
{
|
||||||
|
// Check if it's a local track (has Path) or external (no Path)
|
||||||
|
if (item.TryGetValue("Path", out var pathObj) && pathObj != null)
|
||||||
|
{
|
||||||
|
localCount++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
externalCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var externalMissingCount = spotifyTracks.Count - cachedPlaylistItems.Count;
|
||||||
|
if (externalMissingCount < 0) externalMissingCount = 0;
|
||||||
|
|
||||||
|
playlistInfo["localTracks"] = localCount;
|
||||||
|
playlistInfo["externalMatched"] = externalCount;
|
||||||
|
playlistInfo["externalMissing"] = externalMissingCount;
|
||||||
|
playlistInfo["externalTotal"] = externalCount + externalMissingCount;
|
||||||
|
playlistInfo["totalInJellyfin"] = cachedPlaylistItems.Count;
|
||||||
|
|
||||||
|
_logger.LogDebug("Playlist {Name} (from cache): {Total} Spotify tracks, {Local} local, {ExtMatched} external matched, {ExtMissing} external missing",
|
||||||
|
config.Name, spotifyTracks.Count, localCount, externalCount, externalMissingCount);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Fallback: Build list of local tracks from Jellyfin (match by name only)
|
||||||
var localTracks = new List<(string Title, string Artist)>();
|
var localTracks = new List<(string Title, string Artist)>();
|
||||||
foreach (var item in items.EnumerateArray())
|
foreach (var item in items.EnumerateArray())
|
||||||
{
|
{
|
||||||
@@ -269,9 +309,6 @@ public class AdminController : ControllerBase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get Spotify tracks to match against
|
|
||||||
var spotifyTracks = await _playlistFetcher.GetPlaylistTracksAsync(config.Name);
|
|
||||||
|
|
||||||
// Get matched external tracks cache once
|
// Get matched external tracks cache once
|
||||||
var matchedTracksKey = $"spotify:matched:ordered:{config.Name}";
|
var matchedTracksKey = $"spotify:matched:ordered:{config.Name}";
|
||||||
var matchedTracks = await _cache.GetAsync<List<MatchedTrack>>(matchedTracksKey);
|
var matchedTracks = await _cache.GetAsync<List<MatchedTrack>>(matchedTracksKey);
|
||||||
@@ -338,8 +375,9 @@ public class AdminController : ControllerBase
|
|||||||
playlistInfo["externalTotal"] = externalMatchedCount + externalMissingCount;
|
playlistInfo["externalTotal"] = externalMatchedCount + externalMissingCount;
|
||||||
playlistInfo["totalInJellyfin"] = localCount + externalMatchedCount;
|
playlistInfo["totalInJellyfin"] = localCount + externalMatchedCount;
|
||||||
|
|
||||||
_logger.LogDebug("Playlist {Name}: {Total} Spotify tracks, {Local} local, {ExtMatched} external matched, {ExtMissing} external missing",
|
_logger.LogDebug("Playlist {Name} (fallback): {Total} Spotify tracks, {Local} local, {ExtMatched} external matched, {ExtMissing} external missing",
|
||||||
config.Name, spotifyTrackCount, localCount, externalMatchedCount, externalMissingCount);
|
config.Name, spotifyTracks.Count, localCount, externalMatchedCount, externalMissingCount);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user