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; } } }