39 lines
1.3 KiB
C#
39 lines
1.3 KiB
C#
using System.Net.Http.Json;
|
|
using FluentResults;
|
|
using NexusReader.Application.Abstractions.Services;
|
|
using NexusReader.Application.Queries.Reader;
|
|
|
|
namespace NexusReader.Web.Client.Services;
|
|
|
|
public class WasmEpubService : IEpubService
|
|
{
|
|
private readonly HttpClient _httpClient;
|
|
|
|
public WasmEpubService(HttpClient httpClient)
|
|
{
|
|
_httpClient = httpClient;
|
|
}
|
|
|
|
public async Task<Result<ReaderPageViewModel>> GetEpubContentAsync(int chapterIndex)
|
|
{
|
|
try
|
|
{
|
|
var response = await _httpClient.GetAsync($"/api/epub/{chapterIndex}");
|
|
if (response.IsSuccessStatusCode)
|
|
{
|
|
var viewModel = await response.Content.ReadFromJsonAsync<ReaderPageViewModel>();
|
|
return viewModel != null ? Result.Ok(viewModel) : Result.Fail("Failed to deserialize response.");
|
|
}
|
|
|
|
// Try to read the error message from the body
|
|
var errorBody = await response.Content.ReadAsStringAsync();
|
|
return Result.Fail($"Server error ({response.StatusCode}): {errorBody}");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Fallback for network errors or parsing exceptions
|
|
return Result.Fail(new Error($"Network or parsing error: {ex.Message}").CausedBy(ex));
|
|
}
|
|
}
|
|
}
|