diff --git a/allstarr/Controllers/AdminController.cs b/allstarr/Controllers/AdminController.cs index 414a562..d36d0bd 100644 --- a/allstarr/Controllers/AdminController.cs +++ b/allstarr/Controllers/AdminController.cs @@ -693,20 +693,41 @@ public class AdminController : ControllerBase try { + var userId = _jellyfinSettings.UserId; + var url = $"{_jellyfinSettings.Url}/Items/{id}"; + if (!string.IsNullOrEmpty(userId)) + { + url += $"?UserId={userId}"; + } + var request = new HttpRequestMessage(HttpMethod.Get, url); request.Headers.Add("X-Emby-Authorization", GetJellyfinAuthHeader()); + _logger.LogDebug("Fetching Jellyfin track {Id} from {Url}", id, url); + var response = await _jellyfinHttpClient.SendAsync(request); if (!response.IsSuccessStatusCode) { - return StatusCode((int)response.StatusCode, new { error = "Track not found" }); + var errorBody = await response.Content.ReadAsStringAsync(); + _logger.LogWarning("Failed to fetch Jellyfin track {Id}: {StatusCode} - {Error}", + id, response.StatusCode, errorBody); + return StatusCode((int)response.StatusCode, new { error = "Track not found in Jellyfin" }); } var json = await response.Content.ReadAsStringAsync(); using var doc = JsonDocument.Parse(json); var item = doc.RootElement; + + // Verify it's an Audio item + var type = item.TryGetProperty("Type", out var typeEl) ? typeEl.GetString() : ""; + if (type != "Audio") + { + _logger.LogWarning("Item {Id} is not an Audio track, it's a {Type}", id, type); + return BadRequest(new { error = $"Item is not an audio track (it's a {type})" }); + } + var trackId = 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() : ""; @@ -721,6 +742,8 @@ public class AdminController : ControllerBase artist = albumArtistEl.GetString() ?? ""; } + _logger.LogInformation("Found Jellyfin track: {Title} by {Artist}", title, artist); + return Ok(new { id = trackId, title, artist, album }); } catch (Exception ex)