using Daybreak.Shared.Services.Shell; using Daybreak.Shared.Services.Updater; using System.Extensions; using TrailBlazr.Services; using TrailBlazr.ViewModels; namespace Daybreak.Views; public sealed class VersionManagementViewModel( IViewManager viewManager, IApplicationUpdater applicationUpdater, IShellExecutor shellExecutor) : ViewModelBase { private const string VersionPlaceholder = "{VERSION}"; private const string ReleaseURL = $"https://github.com/AlexMacocian/Daybreak/releases/tag/v{VersionPlaceholder}"; private readonly IViewManager viewManager = viewManager; private readonly IApplicationUpdater applicationUpdater = applicationUpdater; private readonly IShellExecutor shellExecutor = shellExecutor; public List Versions { get; init; } = []; public Version? CurrentVersion { get; set; } public override async ValueTask ParametersSet(VersionManagementView view, CancellationToken cancellationToken) { this.Versions.ClearAnd().AddRange((await this.applicationUpdater.GetVersions(cancellationToken)).OrderDescending()); this.CurrentVersion = this.applicationUpdater.CurrentVersion; } public void DownloadVersion(Version version) { this.viewManager.ShowView((nameof(UpdateConfirmationView.Version), version.ToString())); } public void OpenVersionPage(Version version) { this.shellExecutor.OpenUrl(ReleaseURL.Replace(VersionPlaceholder, version.ToString())); } }