mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-12 21:38:38 +00:00
Improve cancelling builds
This commit is contained in:
parent
67a4672c66
commit
7aa9fa1a36
@ -20,6 +20,7 @@ public class WindowsUpdateNotificationProvider : IUpdateNotificationProvider
|
||||
private readonly Func<IScreen, SettingsViewModel> _getSettingsViewModel;
|
||||
private readonly IMainWindowService _mainWindowService;
|
||||
private readonly IUpdateService _updateService;
|
||||
private CancellationTokenSource? _cancellationTokenSource;
|
||||
|
||||
public WindowsUpdateNotificationProvider(IMainWindowService mainWindowService,
|
||||
IUpdateService updateService,
|
||||
@ -46,15 +47,15 @@ public class WindowsUpdateNotificationProvider : IUpdateNotificationProvider
|
||||
await InstallRelease(releaseId, releaseVersion);
|
||||
else if (action == "view-changes")
|
||||
ViewRelease(releaseId);
|
||||
else if (action == "cancel")
|
||||
_cancellationTokenSource?.Cancel();
|
||||
else if (action == "restart-for-update")
|
||||
_updateService.RestartForUpdate(false);
|
||||
}
|
||||
|
||||
public async Task ShowNotification(string releaseId, string releaseVersion)
|
||||
public void ShowNotification(string releaseId, string releaseVersion)
|
||||
{
|
||||
new ToastContentBuilder()
|
||||
.AddArgument("releaseId", releaseId)
|
||||
.AddArgument("releaseVersion", releaseVersion)
|
||||
GetBuilderForRelease(releaseId, releaseVersion)
|
||||
.AddText("Update available")
|
||||
.AddText($"Artemis version {releaseVersion} has been released")
|
||||
.AddButton(new ToastButton()
|
||||
@ -89,9 +90,7 @@ public class WindowsUpdateNotificationProvider : IUpdateNotificationProvider
|
||||
ReleaseInstaller installer = _getReleaseInstaller(releaseId);
|
||||
void InstallerOnPropertyChanged(object? sender, PropertyChangedEventArgs e) => UpdateInstallProgress(releaseId, installer);
|
||||
|
||||
new ToastContentBuilder()
|
||||
.AddArgument("releaseId", releaseId)
|
||||
.AddArgument("releaseVersion", releaseVersion)
|
||||
GetBuilderForRelease(releaseId, releaseVersion)
|
||||
.AddAudio(new ToastAudio {Silent = true})
|
||||
.AddText("Installing Artemis update")
|
||||
.AddVisualChild(new AdaptiveProgressBar()
|
||||
@ -104,19 +103,32 @@ public class WindowsUpdateNotificationProvider : IUpdateNotificationProvider
|
||||
.Show(t =>
|
||||
{
|
||||
t.Tag = releaseId;
|
||||
t.Data = GetInstallerNotificationData(installer);
|
||||
t.Data = GetDataForInstaller(installer);
|
||||
});
|
||||
|
||||
// Wait for Windows animations to catch up to us, we fast!
|
||||
await Task.Delay(2000);
|
||||
_cancellationTokenSource = new CancellationTokenSource();
|
||||
installer.PropertyChanged += InstallerOnPropertyChanged;
|
||||
await installer.InstallAsync(CancellationToken.None);
|
||||
installer.PropertyChanged -= InstallerOnPropertyChanged;
|
||||
try
|
||||
{
|
||||
await installer.InstallAsync(_cancellationTokenSource.Token);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
if (_cancellationTokenSource.IsCancellationRequested)
|
||||
return;
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
installer.PropertyChanged -= InstallerOnPropertyChanged;
|
||||
}
|
||||
|
||||
// Queue an update in case the user interrupts the process after everything has been prepared
|
||||
_updateService.QueueUpdate();
|
||||
|
||||
new ToastContentBuilder()
|
||||
.AddArgument("releaseId", releaseId)
|
||||
.AddArgument("releaseVersion", releaseVersion)
|
||||
|
||||
GetBuilderForRelease(releaseId, releaseVersion)
|
||||
.AddAudio(new ToastAudio {Silent = true})
|
||||
.AddText("Update ready")
|
||||
.AddText($"Artemis version {releaseVersion} is ready to be applied")
|
||||
@ -127,10 +139,15 @@ public class WindowsUpdateNotificationProvider : IUpdateNotificationProvider
|
||||
|
||||
private void UpdateInstallProgress(string releaseId, ReleaseInstaller installer)
|
||||
{
|
||||
ToastNotificationManagerCompat.CreateToastNotifier().Update(GetInstallerNotificationData(installer), releaseId);
|
||||
ToastNotificationManagerCompat.CreateToastNotifier().Update(GetDataForInstaller(installer), releaseId);
|
||||
}
|
||||
|
||||
private NotificationData GetInstallerNotificationData(ReleaseInstaller installer)
|
||||
private ToastContentBuilder GetBuilderForRelease(string releaseId, string releaseVersion)
|
||||
{
|
||||
return new ToastContentBuilder().AddArgument("releaseId", releaseId).AddArgument("releaseVersion", releaseVersion);
|
||||
}
|
||||
|
||||
private NotificationData GetDataForInstaller(ReleaseInstaller installer)
|
||||
{
|
||||
NotificationData data = new()
|
||||
{
|
||||
|
||||
@ -159,12 +159,10 @@ public class ReleaseViewModel : ActivatableViewModelBase
|
||||
_updateService.QueueUpdate();
|
||||
InstallationFinished = true;
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (_installerCts.IsCancellationRequested)
|
||||
return;
|
||||
_windowService.ShowExceptionDialog("Failed to install update", e);
|
||||
}
|
||||
finally
|
||||
|
||||
@ -4,5 +4,5 @@ namespace Artemis.UI.Services.Updating;
|
||||
|
||||
public interface IUpdateNotificationProvider
|
||||
{
|
||||
Task ShowNotification(string releaseId, string releaseVersion);
|
||||
void ShowNotification(string releaseId, string releaseVersion);
|
||||
}
|
||||
@ -56,7 +56,7 @@ public class InAppUpdateNotificationProvider : IUpdateNotificationProvider
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task ShowNotification(string releaseId, string releaseVersion)
|
||||
public void ShowNotification(string releaseId, string releaseVersion)
|
||||
{
|
||||
if (_mainWindowService.IsMainWindowOpen)
|
||||
ShowInAppNotification(releaseId, releaseVersion);
|
||||
|
||||
@ -84,9 +84,9 @@ public class UpdateService : IUpdateService
|
||||
Utilities.ApplyUpdate(false);
|
||||
}
|
||||
|
||||
private async Task ShowUpdateNotification(IGetNextRelease_NextPublishedRelease release)
|
||||
private void ShowUpdateNotification(IGetNextRelease_NextPublishedRelease release)
|
||||
{
|
||||
await _updateNotificationProvider.Value.ShowNotification(release.Id, release.Version);
|
||||
_updateNotificationProvider.Value.ShowNotification(release.Id, release.Version);
|
||||
}
|
||||
|
||||
private async Task AutoInstallUpdate(IGetNextRelease_NextPublishedRelease release)
|
||||
@ -146,7 +146,7 @@ public class UpdateService : IUpdateService
|
||||
|
||||
// If the window is open show the changelog, don't auto-update while the user is busy
|
||||
if (!_autoInstall.Value)
|
||||
await ShowUpdateNotification(CachedLatestRelease);
|
||||
ShowUpdateNotification(CachedLatestRelease);
|
||||
else
|
||||
await AutoInstallUpdate(CachedLatestRelease);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user