wabbajack/Wabbajack.App.Blazor/Components/ModlistItem.razor.cs

57 lines
2.1 KiB
C#
Raw Normal View History

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
2022-01-11 15:05:48 +00:00
using Fluxor;
using Microsoft.AspNetCore.Components;
2022-01-11 15:05:48 +00:00
using Wabbajack.App.Blazor.Store;
2022-01-11 16:26:47 +00:00
using Wabbajack.Common;
using Wabbajack.DTOs;
2022-01-11 16:26:47 +00:00
using Wabbajack.Paths.IO;
using Wabbajack.RateLimiter;
using Wabbajack.Services.OSIntegrated.Services;
2022-01-11 16:26:47 +00:00
namespace Wabbajack.App.Blazor.Components
{
public partial class ModlistItem
{
2022-01-11 16:26:47 +00:00
[Inject] private IState<DownloadState> _downloadState { get; set; }
[Inject] private ModListDownloadMaintainer _maintainer { get; set; }
[Inject] private IDispatcher _dispatcher { get; set; }
[Inject] private NavigationManager NavigationManager { get; set; }
[Parameter] public ModlistMetadata Metadata { get; set; }
2022-01-11 15:05:48 +00:00
2022-01-11 16:26:47 +00:00
public Percent DownloadProgress { get; set; }
private async Task Download()
{
await using Timer timer = new(_ => InvokeAsync(StateHasChanged));
2022-01-11 15:05:48 +00:00
timer.Change(TimeSpan.FromMilliseconds(250), TimeSpan.FromMilliseconds(250));
try
{
2022-01-11 16:26:47 +00:00
UpdateDownloadState(DownloadState.DownloadStateEnum.Downloading, Metadata);
(IObservable<Percent> progress, Task task) = _maintainer.DownloadModlist(Metadata);
2022-01-11 16:26:47 +00:00
IDisposable dispose = progress.Subscribe(p => DownloadProgress = p);
await task;
//await _wjClient.SendMetric("downloading", Metadata.Title);
2022-01-11 16:26:47 +00:00
UpdateDownloadState(DownloadState.DownloadStateEnum.Downloaded, Metadata);
dispose.Dispose();
2022-01-11 16:26:47 +00:00
NavigationManager.NavigateTo($"configure/{Metadata.Links.MachineURL}");
}
catch (Exception e)
{
Debug.Print(e.Message);
2022-01-11 16:26:47 +00:00
UpdateDownloadState(DownloadState.DownloadStateEnum.Failure, Metadata);
}
await timer.DisposeAsync();
}
2022-01-11 15:05:48 +00:00
2022-01-11 16:26:47 +00:00
private void UpdateDownloadState(DownloadState.DownloadStateEnum state, ModlistMetadata metadata) =>
_dispatcher.Dispatch(new UpdateDownloadState(state, metadata));
}
}