using System; using System.Diagnostics.CodeAnalysis; using System.Windows.Forms; using TweetDuck.Controls; using TweetLib.Core.Systems.Updates; namespace TweetDuck.Browser.Bridge { [SuppressMessage("ReSharper", "UnusedMember.Global")] class UpdateBridge { private readonly UpdateHandler updates; private readonly Control sync; private UpdateInfo nextUpdate = null; public event EventHandler<UpdateInfo> UpdateAccepted; public event EventHandler<UpdateInfo> UpdateDismissed; public UpdateBridge(UpdateHandler updates, Control sync) { this.sync = sync; this.updates = updates; this.updates.CheckFinished += updates_CheckFinished; } internal void Cleanup() { updates.CheckFinished -= updates_CheckFinished; nextUpdate?.DeleteInstaller(); } private void updates_CheckFinished(object sender, UpdateCheckEventArgs e) { UpdateInfo foundUpdate = e.Result.HasValue ? e.Result.Value : null; if (nextUpdate != null && !nextUpdate.Equals(foundUpdate)) { nextUpdate.DeleteInstaller(); } nextUpdate = foundUpdate; } private void HandleInteractionEvent(EventHandler<UpdateInfo> eventHandler) { UpdateInfo tmpInfo = nextUpdate; if (tmpInfo != null) { sync.InvokeAsyncSafe(() => eventHandler?.Invoke(this, tmpInfo)); } } // Bridge methods public void TriggerUpdateCheck() { updates.Check(false); } public void OnUpdateAccepted() { HandleInteractionEvent(UpdateAccepted); } public void OnUpdateDismissed() { HandleInteractionEvent(UpdateDismissed); nextUpdate?.DeleteInstaller(); nextUpdate = null; } } }