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(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, }); } } }