diff --git a/allstarr/Controllers/AdminController.cs b/allstarr/Controllers/AdminController.cs index e6c1099..414a562 100644 --- a/allstarr/Controllers/AdminController.cs +++ b/allstarr/Controllers/AdminController.cs @@ -615,13 +615,25 @@ public class AdminController : ControllerBase try { + var userId = _jellyfinSettings.UserId; + + // Build URL with UserId if available var url = $"{_jellyfinSettings.Url}/Items?searchTerm={Uri.EscapeDataString(query)}&includeItemTypes=Audio&recursive=true&limit=20"; + if (!string.IsNullOrEmpty(userId)) + { + url += $"&UserId={userId}"; + } + var request = new HttpRequestMessage(HttpMethod.Get, url); request.Headers.Add("X-Emby-Authorization", GetJellyfinAuthHeader()); + _logger.LogDebug("Searching Jellyfin: {Url}", url); + var response = await _jellyfinHttpClient.SendAsync(request); if (!response.IsSuccessStatusCode) { + var errorBody = await response.Content.ReadAsStringAsync(); + _logger.LogWarning("Jellyfin search failed: {StatusCode} - {Error}", response.StatusCode, errorBody); return StatusCode((int)response.StatusCode, new { error = "Failed to search Jellyfin" }); } @@ -633,6 +645,14 @@ public class AdminController : ControllerBase { foreach (var item in items.EnumerateArray()) { + // Verify it's actually an Audio item + var type = item.TryGetProperty("Type", out var typeEl) ? typeEl.GetString() : ""; + if (type != "Audio") + { + _logger.LogDebug("Skipping non-audio item: {Type}", type); + continue; + } + var id = item.TryGetProperty("Id", out var idEl) ? idEl.GetString() : ""; var title = item.TryGetProperty("Name", out var nameEl) ? nameEl.GetString() : ""; var album = item.TryGetProperty("Album", out var albumEl) ? albumEl.GetString() : "";