Add auto updater

This commit is contained in:
2026-08-08 00:09:06 +02:00
parent c82adcc054
commit 1da9354c67
8 changed files with 249 additions and 0 deletions
+69
View File
@@ -1,3 +1,4 @@
using PamhagenSysCtrl.Dialogs;
using PamhagenSysCtrl.Helpers;
using System.IO;
using System.Reflection;
@@ -10,6 +11,9 @@ namespace PamhagenSysCtrl {
public static PamhagenPlant? Plant;
public static Dispatcher? MainDispatcher;
private readonly DispatcherTimer AutoUpdateTimer = new() { Interval = TimeSpan.FromHours(1) };
private bool IsCheckingForUpdates;
public static readonly string DataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Anlagensteuerung Pamhagen");
public static readonly string ConfigPath = Path.Combine(DataPath, "config.ini");
public static readonly string InstallPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Anlagensteuerung Pamhagen");
@@ -45,6 +49,71 @@ namespace PamhagenSysCtrl {
}
base.OnStartup(evt);
if (Config.UpdateAuto && Config.UpdateUrl != null) {
AutoUpdateTimer.Tick += async (_, _) => await CheckForUpdates();
AutoUpdateTimer.Start();
_ = Dispatcher.BeginInvoke(async () => {
await Task.Delay(1500);
await CheckForUpdates();
});
}
}
public async Task CheckForUpdates(bool showResult = false) {
if (IsCheckingForUpdates) {
if (showResult) {
MessageBox.Show("Es wird bereits nach Updates gesucht.", "Nach Updates suchen", MessageBoxButton.OK, MessageBoxImage.Information);
}
return;
}
if (Config.UpdateUrl == null) {
if (showResult) {
MessageBox.Show("Die automatische Update-Suche ist deaktiviert.", "Nach Updates suchen", MessageBoxButton.OK, MessageBoxImage.Information);
}
return;
}
IsCheckingForUpdates = true;
try {
using var timeout = new CancellationTokenSource(TimeSpan.FromSeconds(15));
var latest = await UpdateService.GetLatestInstallerAsync(Config.UpdateUrl, timeout.Token);
if (latest.Version > Version) {
var dialog = new UpdateDialog(latest) {
Owner = MainWindow,
};
if (dialog.ShowDialog() == true) {
Shutdown();
}
} else if (showResult) {
MessageBox.Show(
$"Die Anlagensteuerung ist auf dem aktuellen Stand. (Version {Version})",
"Nach Updates suchen",
MessageBoxButton.OK,
MessageBoxImage.Information
);
}
} catch (OperationCanceledException) {
if (showResult) {
MessageBox.Show(
"Zeitüberschreitung beim Abrufen der Update-Informationen.",
"Nach Updates suchen",
MessageBoxButton.OK,
MessageBoxImage.Error
);
}
} catch (Exception exc) {
if (showResult) {
MessageBox.Show(
$"Die Update-Informationen konnten nicht abgerufen werden:\n\n{exc.Message}",
"Nach Updates suchen",
MessageBoxButton.OK,
MessageBoxImage.Error
);
}
} finally {
IsCheckingForUpdates = false;
}
}
protected async void Application_Exit(object sender, ExitEventArgs evt) {