using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using Katteker.Gui.Properties; namespace Katteker.Gui { /// /// The wrapper to add Squirrel-capability to older Programs. /// public static class Wrapper { private static UpdateManager _manager; /// /// Checks for Updates. /// /// Task public static Task CheckForUpdateAsync() => CheckForUpdateAsync(false); /// /// Checks for Updates. /// /// Is this Method called on Startup of the Program. /// Task public static async Task CheckForUpdateAsync(bool isStartup) { if (_manager == null && !UpdateManager.TryCreate(out _manager)) { if (!isStartup) { MessageBox.Show(Resources.SquirrelWrapper_CheckForUpdate, Resources.SquirrelWrapper_CheckForUpdate_Error, MessageBoxButtons.OK, MessageBoxIcon.Error); } return; } var releases = (await _manager.CheckForUpdateAsync().ConfigureAwait(false)).ToArray(); if (releases.Any() || !isStartup) { var thread = new Thread(ThreadProcess); thread.SetApartmentState(ApartmentState.STA); thread.Start(releases.LastOrDefault()); thread.Join(); } } private static void ThreadProcess(object argument) { var entry = (ReleaseEntry) argument; using (var window = new UpdateWindow(_manager, entry)) { var dialogResult = window.ShowDialog(); if (dialogResult == DialogResult.OK) { _manager.RestartApp(); } } } } }