71 lines
2.2 KiB
C#
71 lines
2.2 KiB
C#
using System.Diagnostics;
|
|
using System.Reflection;
|
|
using Avalonia.Controls;
|
|
using MsBox.Avalonia;
|
|
using MsBox.Avalonia.Enums;
|
|
using Pilz;
|
|
using Pilz.Extensions;
|
|
using Pilz.Runtime;
|
|
using Pilz.Updating.Client;
|
|
|
|
namespace ModpackUpdater.Apps;
|
|
|
|
public class AppUpdates(string updateUrl, Window mainWindow)
|
|
{
|
|
public event EventHandler? OnDownloadProgramUpdate;
|
|
|
|
public bool UsePopups { get; set; }
|
|
|
|
public async Task UpdateApp()
|
|
{
|
|
#if DISABLE_UPDATE
|
|
await Task.CompletedTask;
|
|
#else
|
|
try
|
|
{
|
|
await UpdateAppCore();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
await MessageBoxManager.GetMessageBoxStandard(GeneralMsgBoxLangRes.UpdateAvailable_Title, string.Format(GeneralMsgBoxLangRes.UpdateAvailable, ex.Message), ButtonEnum.YesNo, MsBox.Avalonia.Enums.Icon.Info).ShowWindowAsync();
|
|
mainWindow.IsEnabled = true;
|
|
}
|
|
#endif
|
|
}
|
|
|
|
private async Task UpdateAppCore()
|
|
{
|
|
if (Debugger.IsAttached)
|
|
return;
|
|
|
|
var myAppPath = EnvironmentEx.ProcessPath!;
|
|
var updater = new UpdateClient(updateUrl, Assembly.GetEntryAssembly()!.GetAppVersion(), AppChannel.Stable)
|
|
{
|
|
Distro = RuntimeInformationsEx.GetRuntimeIdentifier(),
|
|
};
|
|
|
|
if (await updater.CheckForUpdate() is not { } packageToInstall || await AskForUpdate() != ButtonResult.Yes)
|
|
return;
|
|
|
|
OnDownloadProgramUpdate?.Invoke(this, EventArgs.Empty);
|
|
mainWindow.IsEnabled = false;
|
|
|
|
if (await updater.DownloadPackageAsync(packageToInstall) && await updater.InstallPackageAsync(packageToInstall, myAppPath))
|
|
{
|
|
mainWindow.IsVisible = false;
|
|
await Process.Start(myAppPath).WaitForExitAsync();
|
|
Environment.Exit(0);
|
|
return;
|
|
}
|
|
|
|
mainWindow.IsEnabled = true;
|
|
}
|
|
|
|
private Task<ButtonResult> AskForUpdate()
|
|
{
|
|
var msgBox = MessageBoxManager.GetMessageBoxStandard(GeneralMsgBoxLangRes.UpdateAvailable_Title, GeneralMsgBoxLangRes.UpdateAvailable, ButtonEnum.YesNo, Icon.Info);
|
|
if (UsePopups)
|
|
return msgBox.ShowAsPopupAsync(mainWindow);
|
|
return msgBox.ShowWindowDialogAsync(mainWindow);
|
|
}
|
|
} |