diff --git a/allstarr/Controllers/AdminController.cs b/allstarr/Controllers/AdminController.cs index f0cf7a1..f54c0ea 100644 --- a/allstarr/Controllers/AdminController.cs +++ b/allstarr/Controllers/AdminController.cs @@ -986,14 +986,15 @@ public class AdminController : ControllerBase { // Store external mapping in cache (NO EXPIRATION - manual mappings are permanent) var externalMappingKey = $"spotify:external-map:{decodedName}:{request.SpotifyId}"; - var externalMapping = new { provider = request.ExternalProvider, id = request.ExternalId }; + var normalizedProvider = request.ExternalProvider!.ToLowerInvariant(); // Normalize to lowercase + var externalMapping = new { provider = normalizedProvider, id = request.ExternalId }; await _cache.SetAsync(externalMappingKey, externalMapping); // Also save to file for persistence across restarts - await SaveManualMappingToFileAsync(decodedName, request.SpotifyId, null, request.ExternalProvider!, request.ExternalId!); + await SaveManualMappingToFileAsync(decodedName, request.SpotifyId, null, normalizedProvider, request.ExternalId!); _logger.LogInformation("Manual external mapping saved: {Playlist} - Spotify {SpotifyId} → {Provider} {ExternalId}", - decodedName, request.SpotifyId, request.ExternalProvider, request.ExternalId); + decodedName, request.SpotifyId, normalizedProvider, request.ExternalId); } // Clear all related caches to force rebuild @@ -1083,7 +1084,8 @@ public class AdminController : ControllerBase try { var metadataService = HttpContext.RequestServices.GetRequiredService(); - var externalSong = await metadataService.GetSongAsync(request.ExternalProvider!, request.ExternalId!); + var normalizedProvider = request.ExternalProvider!.ToLowerInvariant(); // Normalize to lowercase + var externalSong = await metadataService.GetSongAsync(normalizedProvider, request.ExternalId!); if (externalSong != null) { @@ -1095,7 +1097,7 @@ public class AdminController : ControllerBase else { _logger.LogWarning("Failed to fetch external track metadata for {Provider} ID {Id}", - request.ExternalProvider, request.ExternalId); + normalizedProvider, request.ExternalId); } } catch (Exception ex) @@ -1141,7 +1143,7 @@ public class AdminController : ControllerBase artist = trackArtist ?? "Unknown", album = trackAlbum ?? "Unknown", isLocal = isLocalMapping, - externalProvider = hasExternalMapping ? request.ExternalProvider : null + externalProvider = hasExternalMapping ? request.ExternalProvider!.ToLowerInvariant() : null }; return Ok(new