Katteker/ExampleCore/MainWindowViewModel.cs

86 lines
3.0 KiB
C#

using System;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Input;
using Katteker;
using Prism.Commands;
using Prism.Mvvm;
namespace ExampleCore
{
public class MainWindowViewModel : BindableBase
{
private readonly UpdateManager _updateManager;
public static string WindowTitle { get; } = "Example Core " + Assembly.GetExecutingAssembly().GetName().Version?.ToString(3);
public MainWindowViewModel()
{
UpdateManager.TryCreate(out _updateManager);
UpdateCommand = new DelegateCommand<bool?>(async x => await UpdateAsync(x.GetValueOrDefault()).ConfigureAwait(false));
OpenFolderDialogCommand = new DelegateCommand(OpenFolder);
OpenFileDialogCommand = new DelegateCommand(OpenFile);
}
private static void OpenFile()
{
using var openFile = new OpenFileDialog();
if (openFile.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(openFile.FileName, WindowTitle);
}
}
private static void OpenFolder()
{
using var folderBrowser = new FolderBrowserDialog();
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
MessageBox.Show(folderBrowser.SelectedPath, WindowTitle);
}
}
private async Task UpdateAsync(bool startup)
{
try
{
var updates = await _updateManager.CheckForUpdatesAsync().ConfigureAwait(false);
if (updates.Any())
{
var dialogResult = MessageBox.Show("Update available, update now?", WindowTitle,
MessageBoxButtons.YesNo,
MessageBoxIcon.Information);
if (dialogResult == DialogResult.Yes && await _updateManager.UpdateAppAsync().ConfigureAwait(false))
{
dialogResult = MessageBox.Show("The update is ready to install. Do you want to install it now?",
WindowTitle,
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes) System.Windows.Application.Current.Shutdown();
}
}
else if (!startup)
{
MessageBox.Show("No Update available.", WindowTitle, MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
catch (Exception e)
{
if (startup)
{
MessageBox.Show(e.Message, WindowTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public ICommand UpdateCommand { get; }
public ICommand OpenFolderDialogCommand { get; }
public ICommand OpenFileDialogCommand { get; }
public string CommandLineParameters => Environment.CommandLine;
}
}