67 lines
1.9 KiB
C#
67 lines
1.9 KiB
C#
using System.Text.Json;
|
|
using Moonlight.Shared.Http;
|
|
using Moonlight.Shared.Http.Events;
|
|
|
|
namespace Moonlight.Api.Services;
|
|
|
|
public class ContainerHelperService
|
|
{
|
|
private readonly IHttpClientFactory HttpClientFactory;
|
|
|
|
public ContainerHelperService(IHttpClientFactory httpClientFactory)
|
|
{
|
|
HttpClientFactory = httpClientFactory;
|
|
}
|
|
|
|
public async IAsyncEnumerable<RebuildEvent> RebuildAsync()
|
|
{
|
|
var options = new JsonSerializerOptions()
|
|
{
|
|
PropertyNameCaseInsensitive = true
|
|
};
|
|
|
|
options.TypeInfoResolverChain.Add(SerializationContext.Default);
|
|
|
|
var client = HttpClientFactory.CreateClient("ContainerHelper");
|
|
|
|
var response = await client.GetAsync("api/rebuild", HttpCompletionOption.ResponseHeadersRead);
|
|
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
var responseText = await response.Content.ReadAsStringAsync();
|
|
yield return new RebuildEvent()
|
|
{
|
|
Type = RebuildEventType.Failed,
|
|
Data = responseText
|
|
};
|
|
|
|
yield break;
|
|
}
|
|
|
|
await using var responseStream = await response.Content.ReadAsStreamAsync();
|
|
using var streamReader = new StreamReader(responseStream);
|
|
|
|
do
|
|
{
|
|
var line = await streamReader.ReadLineAsync();
|
|
|
|
if(line == null)
|
|
break;
|
|
|
|
if(string.IsNullOrWhiteSpace(line))
|
|
continue;
|
|
|
|
var data = line.Trim("data: ");
|
|
|
|
var deserializedData = JsonSerializer.Deserialize<RebuildEvent>(data, options);
|
|
|
|
yield return deserializedData;
|
|
} while (true);
|
|
|
|
yield return new RebuildEvent()
|
|
{
|
|
Type = RebuildEventType.Succeeded,
|
|
Data = string.Empty
|
|
};
|
|
}
|
|
} |