From 7cee0911b656c4f275b22c9f7f6eb6701b09a80f Mon Sep 17 00:00:00 2001 From: Josh Patra Date: Fri, 6 Feb 2026 22:33:08 -0500 Subject: [PATCH] fix: progress bar external detection and download row removal - Handle JsonElement when deserializing ProviderIds from cache - Check for external provider keys (SquidWTF, Deezer, Qobuz, Tidal) - Fix row removal selector to properly escape path - Progress bar now correctly shows local vs external split --- allstarr/Controllers/AdminController.cs | 34 ++++++++++++++++++++----- allstarr/wwwroot/index.html | 3 ++- 2 files changed, 29 insertions(+), 8 deletions(-) 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(); }