Files
WowUp/WowUp.WPF/ViewModels/ApplicationUpdateControlViewModel.cs
2020-11-23 01:18:31 -06:00

203 lines
6.1 KiB
C#

using Serilog;
using System;
using WowUp.Common.Enums;
using WowUp.Common.Services.Contracts;
using WowUp.WPF.Extensions;
using WowUp.WPF.Services.Contracts;
using WowUp.WPF.Utilities;
namespace WowUp.WPF.ViewModels
{
public class ApplicationUpdateControlViewModel : BaseViewModel
{
private readonly ISessionService _sessionService;
private readonly IWowUpService _wowUpService;
private readonly System.Threading.Timer _timer;
private bool _isUpdateAvailable;
public bool IsUpdateAvailable
{
get => _isUpdateAvailable;
set { SetProperty(ref _isUpdateAvailable, value); }
}
private bool _progressIndeterminate;
public bool ProgressIndeterminate
{
get => _progressIndeterminate;
set { SetProperty(ref _progressIndeterminate, value); }
}
private bool _showUpdaterMissing;
public bool ShowUpdaterMissing
{
get => _showUpdaterMissing;
set { SetProperty(ref _showUpdaterMissing, value); }
}
private bool _showProgress;
public bool ShowProgress
{
get => _showProgress;
set { SetProperty(ref _showProgress, value); }
}
private bool _showDownload;
public bool ShowDownload
{
get => _showDownload;
set { SetProperty(ref _showDownload, value); }
}
private bool _showRestart;
public bool ShowRestart
{
get => _showRestart;
set { SetProperty(ref _showRestart, value); }
}
private string _progressText;
public string ProgressText
{
get => _progressText;
set { SetProperty(ref _progressText, value); }
}
private string _latestVersion;
public string LatestVersion
{
get => _latestVersion;
set { SetProperty(ref _latestVersion, value); }
}
public decimal _progressPercent;
public decimal ProgressPercent
{
get => _progressPercent;
set { SetProperty(ref _progressPercent, value); }
}
private bool _didUpdateError;
private bool _isUpdatePending;
private bool _updaterReady;
public Command DownloadUpdateCommand { get; set; }
public Command RestartAppCommand { get; set; }
public ApplicationUpdateControlViewModel(
ISessionService sessionService,
IWowUpService wowUpService)
{
_sessionService = sessionService;
_wowUpService = wowUpService;
_wowUpService.PreferenceUpdated += WowUpService_PreferenceUpdated;
_sessionService.SessionChanged += SessionService_SessionChanged;
DownloadUpdateCommand = new Command(() => OnDownloadUpdate());
RestartAppCommand = new Command(() => OnRestartApp());
ProgressText = string.Empty;
_timer = new System.Threading.Timer(CheckVersion, null, TimeSpan.Zero, TimeSpan.FromMinutes(10));
}
private void SessionService_SessionChanged(object sender, Common.Models.Events.SessionEventArgs e)
{
_updaterReady = e.SessionState.UpdaterReady;
CheckVersion(null);
}
private void WowUpService_PreferenceUpdated(object sender, Models.WowUp.WowUpPreferenceEventArgs e)
{
if (e.Preference.Key == Constants.Preferences.WowUpReleaseChannelKey)
{
CheckVersion(null);
}
}
private async void CheckVersion(object state)
{
ShowDownload = true;
IsUpdateAvailable = true;
//if (_didUpdateError || _isUpdatePending || !_updaterReady)
//{
// return;
//}
//try
//{
// var latestVersion = await _wowUpService.GetLatestClientVersion();
// LatestVersion = latestVersion.Version;
// ShowDownload = IsUpdateAvailable = await _wowUpService.IsUpdateAvailable();
//}
//catch (Exception ex)
//{
// Log.Error(ex, "Failure during WowUp version check");
// ShowDownload = IsUpdateAvailable = false;
//}
}
private void OnRestartApp()
{
_wowUpService.InstallUpdate();
}
private async void OnDownloadUpdate()
{
new Uri("https://wowup.io").AbsoluteUri.OpenUrlInBrowser();
//ShowDownload = false;
//ShowProgress = true;
//_isUpdatePending = true;
//try
//{
// OnDownloadState(ApplicationUpdateState.Downloading);
// await _wowUpService.DownloadUpdate(progress =>
// {
// ProgressPercent = progress;
// });
// ShowRestart = true;
//}
//catch (Exception)
//{
// _didUpdateError = true;
// _isUpdatePending = false;
//}
//finally
//{
// OnDownloadState(ApplicationUpdateState.Complete);
//}
//ShowProgress = false;
}
private void OnDownloadState(ApplicationUpdateState state)
{
switch (state)
{
case ApplicationUpdateState.CreateBackup:
ProgressIndeterminate = false;
ProgressText = "Creating backup...";
break;
case ApplicationUpdateState.Downloading:
ProgressIndeterminate = false;
ProgressText = "Downloading update...";
break;
case ApplicationUpdateState.Unpacking:
ProgressIndeterminate = true;
ProgressText = "Unpacking...";
break;
case ApplicationUpdateState.Complete:
ShowProgress = false;
break;
}
}
}
}