wabbajack/Wabbajack.App.Blazor/Components/ModlistItem.razor.cs
Unnoen dc9c327652
Checkbox and Logger components. Layout changes to Configure page.
Also added TODOs and a basic .editorconfig to suppress annoying warnings.
2022-01-18 03:45:52 +11:00

65 lines
2.6 KiB
C#

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using Fluxor;
using Microsoft.AspNetCore.Components;
using Wabbajack.App.Blazor.Store;
using Wabbajack.Common;
using Wabbajack.DTOs;
using Wabbajack.DTOs.JsonConverters;
using Wabbajack.Installer;
using Wabbajack.Paths;
using Wabbajack.Paths.IO;
using Wabbajack.RateLimiter;
using Wabbajack.Services.OSIntegrated.Services;
// TODO: [High] Move logic to Gallery page.
namespace Wabbajack.App.Blazor.Components
{
public partial class ModlistItem
{
[Inject] private IState<DownloadState> _downloadState { get; set; }
[Inject] private IState<InstallState> _installState { 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; }
public Percent DownloadProgress { get; set; }
private async Task Download()
{
await using Timer timer = new(_ => InvokeAsync(StateHasChanged));
timer.Change(TimeSpan.FromMilliseconds(250), TimeSpan.FromMilliseconds(250));
try
{
UpdateDownloadState(DownloadState.DownloadStateEnum.Downloading, Metadata);
(IObservable<Percent> progress, Task task) = _maintainer.DownloadModlist(Metadata);
IDisposable dispose = progress.Subscribe(p => DownloadProgress = p);
await task;
//await _wjClient.SendMetric("downloading", Metadata.Title);
UpdateDownloadState(DownloadState.DownloadStateEnum.Downloaded, Metadata);
dispose.Dispose();
AbsolutePath path = KnownFolders.EntryPoint.Combine("downloaded_mod_lists", Metadata.Links.MachineURL).WithExtension(Ext.Wabbajack);
_dispatcher.Dispatch(new UpdateInstallState(InstallState.InstallStateEnum.Configuration, null, path, null, null));
NavigationManager.NavigateTo("/configure");
}
catch (Exception e)
{
Debug.Print(e.Message);
UpdateDownloadState(DownloadState.DownloadStateEnum.Failure, Metadata);
}
await timer.DisposeAsync();
}
private void UpdateDownloadState(DownloadState.DownloadStateEnum state, ModlistMetadata metadata) =>
_dispatcher.Dispatch(new UpdateDownloadState(state, metadata));
}
}