diff --git a/allstarr/Controllers/AdminController.cs b/allstarr/Controllers/AdminController.cs index c957470..abd313a 100644 --- a/allstarr/Controllers/AdminController.cs +++ b/allstarr/Controllers/AdminController.cs @@ -377,14 +377,34 @@ public class AdminController : ControllerBase // Check if it's external by looking for external provider in ProviderIds // External providers: SquidWTF, Deezer, Qobuz, Tidal var isExternal = false; - if (item.TryGetValue("ProviderIds", out var providerIdsObj) && providerIdsObj is Dictionary providerIds) + + if (item.TryGetValue("ProviderIds", out var providerIdsObj) && providerIdsObj != null) { - // Check for external provider keys (not MusicBrainz, ISRC, etc) - isExternal = providerIds.Keys.Any(k => - k.Equals("SquidWTF", StringComparison.OrdinalIgnoreCase) || - k.Equals("Deezer", StringComparison.OrdinalIgnoreCase) || - k.Equals("Qobuz", StringComparison.OrdinalIgnoreCase) || - k.Equals("Tidal", StringComparison.OrdinalIgnoreCase)); + // Handle both Dictionary and JsonElement + Dictionary? providerIds = null; + + if (providerIdsObj is Dictionary dict) + { + providerIds = dict; + } + else if (providerIdsObj is JsonElement jsonEl && jsonEl.ValueKind == JsonValueKind.Object) + { + providerIds = new Dictionary(); + foreach (var prop in jsonEl.EnumerateObject()) + { + providerIds[prop.Name] = prop.Value.GetString() ?? ""; + } + } + + if (providerIds != null) + { + // Check for external provider keys (not MusicBrainz, ISRC, Spotify, etc) + isExternal = providerIds.Keys.Any(k => + k.Equals("SquidWTF", StringComparison.OrdinalIgnoreCase) || + k.Equals("Deezer", StringComparison.OrdinalIgnoreCase) || + k.Equals("Qobuz", StringComparison.OrdinalIgnoreCase) || + k.Equals("Tidal", StringComparison.OrdinalIgnoreCase)); + } } if (isExternal) diff --git a/allstarr/wwwroot/index.html b/allstarr/wwwroot/index.html index 8419f8d..5820ac5 100644 --- a/allstarr/wwwroot/index.html +++ b/allstarr/wwwroot/index.html @@ -1628,7 +1628,8 @@ showToast('File deleted successfully', 'success'); // Remove the row immediately for live update - const row = document.querySelector(`tr[data-path="${CSS.escape(path)}"]`); + const escapedPath = path.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); + const row = document.querySelector(`tr[data-path="${escapedPath}"]`); if (row) { row.remove(); }