Add waveform profile HTTP transport: API endpoint, public proxy, content client method
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
using System.Net;
|
||||
using System.Net.Http.Json;
|
||||
using DeepDrftModels.DTOs;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using NetBlocks.Models;
|
||||
|
||||
@@ -61,4 +64,36 @@ public class TrackMediaClient
|
||||
return ApiResult<TrackMediaResponse>.CreateFailResult(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Fetches a track's stored waveform loudness profile. A 404 means no profile is stored
|
||||
/// (existing tracks predate profiling, or computation failed at upload); callers treat that
|
||||
/// as "render a flat seekbar" rather than an error, so it surfaces as a fail result with a
|
||||
/// stable message rather than throwing.
|
||||
/// </summary>
|
||||
public async Task<ApiResult<WaveformProfileDto>> GetWaveformProfileAsync(string trackId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
try
|
||||
{
|
||||
var response = await _http.GetAsync($"api/track/{trackId}/waveform", cancellationToken);
|
||||
if (response.StatusCode == HttpStatusCode.NotFound)
|
||||
{
|
||||
return ApiResult<WaveformProfileDto>.CreateFailResult("No waveform profile available");
|
||||
}
|
||||
|
||||
response.EnsureSuccessStatusCode();
|
||||
|
||||
var profile = await response.Content.ReadFromJsonAsync<WaveformProfileDto>();
|
||||
if (profile is null)
|
||||
{
|
||||
return ApiResult<WaveformProfileDto>.CreateFailResult("Waveform profile response was empty");
|
||||
}
|
||||
|
||||
return ApiResult<WaveformProfileDto>.CreatePassResult(profile);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return ApiResult<WaveformProfileDto>.CreateFailResult(e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user