[#8] Add auto update checker

This commit is contained in:
2024-03-04 21:19:08 +01:00
parent ac4026571e
commit 7e1843a1b3
11 changed files with 231 additions and 4 deletions

View File

@ -24,6 +24,9 @@ namespace Elwig {
protected static App CurrentApp;
public static int NumWindows => CurrentApp.Windows.Count;
public static bool ForceShutdown { get; private set; } = false;
private readonly DispatcherTimer _autoUpdateTimer = new() { Interval = TimeSpan.FromHours(1) };
public static readonly string DataPath = @"C:\ProgramData\Elwig\";
public static readonly string ExePath = @"C:\Program Files\Elwig\";
@ -111,10 +114,26 @@ namespace Elwig {
BranchNum = branches.Count;
}
Utils.RunBackground("Temp File Cleanup", () => {
Utils.CleanupTempFiles();
return Task.CompletedTask;
});
Utils.RunBackground("HTML Initialization", () => Html.Init(PrintingReadyChanged));
Utils.RunBackground("PDF Initialization", () => Pdf.Init(PrintingReadyChanged));
Utils.RunBackground("JSON Schema Initialization", BillingData.Init);
if (Config.UpdateAuto && Config.UpdateUrl != null) {
if (Utils.HasInternetConnectivity()) {
Utils.RunBackground("Auto Updater", async () => {
await Task.Delay(500);
await CheckForUpdates();
});
}
_autoUpdateTimer.Tick += new EventHandler(OnAutoUpdateTimer);
_autoUpdateTimer.Start();
}
var list = new List<IScale>();
foreach (var s in Config.Scales) {
try {
@ -184,6 +203,29 @@ namespace Elwig {
}
}
private void OnAutoUpdateTimer(object? sender, EventArgs? evt) {
foreach (Window w in CurrentApp.Windows) {
if (w is UpdateDialog) return;
}
if (Utils.HasInternetConnectivity()) {
Utils.RunBackground("Auto Updater", CheckForUpdates);
}
}
public static async Task CheckForUpdates() {
if (Config.UpdateUrl == null) return;
var latest = await Utils.GetLatestInstallerUrl(Config.UpdateUrl);
if (latest != null && latest.Value.Version != Version) {
await MainDispatcher.BeginInvoke(() => {
var d = new UpdateDialog(latest.Value.Version, latest.Value.Url, latest.Value.Size);
if (d.ShowDialog() == true) {
ForceShutdown = true;
Current.Shutdown();
}
});
}
}
private static T FocusWindow<T>(Func<T> constructor, Predicate<T>? selector = null) where T : Window {
foreach (Window w in CurrentApp.Windows) {
if (w is T t && (selector == null || selector(t))) {