68 lines
2.2 KiB
C#
68 lines
2.2 KiB
C#
using Elwig.Helpers;
|
|
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Net.Http;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
using System.Windows.Navigation;
|
|
|
|
namespace Elwig.Dialogs {
|
|
public partial class UpdateDialog : Window {
|
|
|
|
public string Version { get; private set; }
|
|
public string Url { get; private set; }
|
|
|
|
private readonly CancellationTokenSource Cancellation;
|
|
|
|
public UpdateDialog(string version, string url, long size) {
|
|
Version = version;
|
|
Url = url;
|
|
Cancellation = new();
|
|
InitializeComponent();
|
|
VersionText.Text = version;
|
|
SizeText.Text = $"{size / 1024 / 1024}";
|
|
}
|
|
|
|
private void OnClosed(object sender, EventArgs evt) {
|
|
Cancellation.Cancel();
|
|
}
|
|
|
|
private async void InstallButton_Click(object sender, RoutedEventArgs evt) {
|
|
Description.Visibility = Visibility.Hidden;
|
|
ProgressBar.Visibility = Visibility.Visible;
|
|
InstallButton.IsEnabled = false;
|
|
await Install();
|
|
Close();
|
|
}
|
|
|
|
public async Task Install() {
|
|
var fileName = Path.Combine(App.TempPath, $"Elwig-{Version}.exe");
|
|
try {
|
|
using var stream = new FileStream(fileName, FileMode.Create);
|
|
using var client = new HttpClient() {
|
|
Timeout = TimeSpan.FromSeconds(5),
|
|
};
|
|
await client.DownloadAsync(Url, stream, new Progress<double>(p => {
|
|
ProgressBar.Value = p * 100.0;
|
|
}), Cancellation.Token);
|
|
} catch (OperationCanceledException) {
|
|
File.Delete(fileName);
|
|
return;
|
|
} catch (Exception exc) {
|
|
MessageBox.Show(exc.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
Process.Start(fileName);
|
|
DialogResult = true;
|
|
}
|
|
|
|
private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) {
|
|
Process.Start(new ProcessStartInfo {
|
|
FileName = e.Uri.ToString(),
|
|
UseShellExecute = true,
|
|
});
|
|
}
|
|
}
|
|
}
|