feat: update RelayToSubsonic method to return byte array and adjust content handling

This commit is contained in:
V1ck3s
2025-09-21 17:02:31 +02:00
parent 17769e2c28
commit 83fdcd2fcc

View File

@@ -62,13 +62,13 @@ public class SubsonicController : ControllerBase
return parameters; return parameters;
} }
private async Task<(string Body, string? ContentType)> RelayToSubsonic(string endpoint, Dictionary<string, string> parameters) private async Task<(object Body, string? ContentType)> RelayToSubsonic(string endpoint, Dictionary<string, string> parameters)
{ {
var query = string.Join("&", parameters.Select(kv => $"{Uri.EscapeDataString(kv.Key)}={Uri.EscapeDataString(kv.Value)}")); var query = string.Join("&", parameters.Select(kv => $"{Uri.EscapeDataString(kv.Key)}={Uri.EscapeDataString(kv.Value)}"));
var url = $"{_subsonicSettings.Url}/{endpoint}?{query}"; var url = $"{_subsonicSettings.Url}/{endpoint}?{query}";
HttpResponseMessage response = await _httpClient.GetAsync(url); HttpResponseMessage response = await _httpClient.GetAsync(url);
response.EnsureSuccessStatusCode(); response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync(); var body = await response.Content.ReadAsByteArrayAsync();
var contentType = response.Content.Headers.ContentType?.ToString(); var contentType = response.Content.Headers.ContentType?.ToString();
return (body, contentType); return (body, contentType);
} }
@@ -79,7 +79,7 @@ public class SubsonicController : ControllerBase
{ {
var parameters = await ExtractAllParameters(); var parameters = await ExtractAllParameters();
var xml = await RelayToSubsonic("ping", parameters); var xml = await RelayToSubsonic("ping", parameters);
var doc = XDocument.Parse(xml.Body); var doc = XDocument.Parse((string)xml.Body);
var status = doc.Root?.Attribute("status")?.Value; var status = doc.Root?.Attribute("status")?.Value;
return Ok(new { status }); return Ok(new { status });
} }
@@ -94,7 +94,7 @@ public class SubsonicController : ControllerBase
{ {
var result = await RelayToSubsonic(endpoint, parameters); var result = await RelayToSubsonic(endpoint, parameters);
var contentType = result.ContentType ?? $"application/{parameters.GetValueOrDefault("f", "xml")}"; var contentType = result.ContentType ?? $"application/{parameters.GetValueOrDefault("f", "xml")}";
return Content(result.Body, contentType); return File((byte[])result.Body, contentType);
} }
catch (HttpRequestException ex) catch (HttpRequestException ex)
{ {