Katteker/Example/MainWindowViewModel.cs

91 lines
2.6 KiB
C#

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Input;
using Katteker;
using MaterialDesignThemes.Wpf;
using Prism.Commands;
using Prism.Mvvm;
namespace Example
{
[JetBrains.Annotations.UsedImplicitly]
public class MainWindowViewModel : BindableBase, IDisposable
{
private bool _showRestartAppDialog;
private readonly UpdateManager _updateManager;
public MainWindowViewModel()
{
UpdateManager.TryCreate(out _updateManager);
UpdateCommand = new DelegateCommand<string>(async x => await UpdateAsync(x).ConfigureAwait(false));
RestartAppDialogCommand = new DelegateCommand<object>(RestartApp);
}
private void RestartApp(object obj)
{
if (obj is bool restart && restart)
{
_updateManager.RestartApp();
}
ShowRestartAppDialog = false;
}
private async Task UpdateAsync(string startup)
{
var openFile = new FolderBrowserDialog();
if (openFile.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(openFile.SelectedPath, "Example Core");
}
var silent = bool.Parse(startup);
try
{
var releases = (await _updateManager.CheckForUpdateAsync().ConfigureAwait(false)).ToList();
if (releases.Any())
{
MessageQueue.Enqueue("Update available", "Update now", ActionHandler);
}
else if (!silent)
{
MessageQueue.Enqueue("No Update available.", true);
}
}
catch (Exception e)
{
if (silent)
{
MessageQueue.Enqueue(e.Message);
}
}
}
private async void ActionHandler()
{
if (await _updateManager.UpdateAppAsync().ConfigureAwait(false))
{
ShowRestartAppDialog = true;
}
}
public ICommand UpdateCommand { get; }
public SnackbarMessageQueue MessageQueue { get; } = new SnackbarMessageQueue();
public bool ShowRestartAppDialog
{
get => _showRestartAppDialog;
set => SetProperty(ref _showRestartAppDialog, value);
}
public ICommand RestartAppDialogCommand { get; }
public void Dispose()
{
MessageQueue?.Dispose();
}
}
}