mirror of
https://github.com/SoPat712/allstarr.git
synced 2026-02-09 23:55:10 -05:00
Fix GetJellyfinTrack: add UserId and verify Audio type for URL-based mapping
This commit is contained in:
@@ -693,20 +693,41 @@ public class AdminController : ControllerBase
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var userId = _jellyfinSettings.UserId;
|
||||||
|
|
||||||
var url = $"{_jellyfinSettings.Url}/Items/{id}";
|
var url = $"{_jellyfinSettings.Url}/Items/{id}";
|
||||||
|
if (!string.IsNullOrEmpty(userId))
|
||||||
|
{
|
||||||
|
url += $"?UserId={userId}";
|
||||||
|
}
|
||||||
|
|
||||||
var request = new HttpRequestMessage(HttpMethod.Get, url);
|
var request = new HttpRequestMessage(HttpMethod.Get, url);
|
||||||
request.Headers.Add("X-Emby-Authorization", GetJellyfinAuthHeader());
|
request.Headers.Add("X-Emby-Authorization", GetJellyfinAuthHeader());
|
||||||
|
|
||||||
|
_logger.LogDebug("Fetching Jellyfin track {Id} from {Url}", id, url);
|
||||||
|
|
||||||
var response = await _jellyfinHttpClient.SendAsync(request);
|
var response = await _jellyfinHttpClient.SendAsync(request);
|
||||||
if (!response.IsSuccessStatusCode)
|
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();
|
var json = await response.Content.ReadAsStringAsync();
|
||||||
using var doc = JsonDocument.Parse(json);
|
using var doc = JsonDocument.Parse(json);
|
||||||
|
|
||||||
var item = doc.RootElement;
|
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 trackId = item.TryGetProperty("Id", out var idEl) ? idEl.GetString() : "";
|
||||||
var title = item.TryGetProperty("Name", out var nameEl) ? nameEl.GetString() : "";
|
var title = item.TryGetProperty("Name", out var nameEl) ? nameEl.GetString() : "";
|
||||||
var album = item.TryGetProperty("Album", out var albumEl) ? albumEl.GetString() : "";
|
var album = item.TryGetProperty("Album", out var albumEl) ? albumEl.GetString() : "";
|
||||||
@@ -721,6 +742,8 @@ public class AdminController : ControllerBase
|
|||||||
artist = albumArtistEl.GetString() ?? "";
|
artist = albumArtistEl.GetString() ?? "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_logger.LogInformation("Found Jellyfin track: {Title} by {Artist}", title, artist);
|
||||||
|
|
||||||
return Ok(new { id = trackId, title, artist, album });
|
return Ok(new { id = trackId, title, artist, album });
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
Reference in New Issue
Block a user