mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-06-01 02:34:04 +02:00
Fix a race condition crash in update checker events
This commit is contained in:
parent
1087b5e1d1
commit
4800faa783
@ -104,7 +104,7 @@ public FormBrowser(PluginManager pluginManager, UpdaterSettings updaterSettings)
|
|||||||
Config.MuteToggled += Config_MuteToggled;
|
Config.MuteToggled += Config_MuteToggled;
|
||||||
Config.ZoomLevelChanged += Config_ZoomLevelChanged;
|
Config.ZoomLevelChanged += Config_ZoomLevelChanged;
|
||||||
|
|
||||||
this.updates = new UpdateHandler(browser, this, updaterSettings);
|
this.updates = new UpdateHandler(browser, updaterSettings);
|
||||||
this.updates.UpdateAccepted += updates_UpdateAccepted;
|
this.updates.UpdateAccepted += updates_UpdateAccepted;
|
||||||
this.updates.UpdateDismissed += updates_UpdateDismissed;
|
this.updates.UpdateDismissed += updates_UpdateDismissed;
|
||||||
|
|
||||||
@ -287,24 +287,28 @@ private void plugins_PluginChangedState(object sender, PluginChangedStateEventAr
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updates_UpdateAccepted(object sender, UpdateAcceptedEventArgs e){
|
private void updates_UpdateAccepted(object sender, UpdateAcceptedEventArgs e){
|
||||||
foreach(Form form in Application.OpenForms.Cast<Form>().Reverse()){
|
this.InvokeAsyncSafe(() => {
|
||||||
if (form is FormSettings || form is FormPlugins || form is FormAbout){
|
foreach(Form form in Application.OpenForms.Cast<Form>().Reverse()){
|
||||||
form.Close();
|
if (form is FormSettings || form is FormPlugins || form is FormAbout){
|
||||||
|
form.Close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
updates.BeginUpdateDownload(this, e.UpdateInfo, update => {
|
updates.BeginUpdateDownload(this, e.UpdateInfo, update => {
|
||||||
if (update.DownloadStatus == UpdateDownloadStatus.Done){
|
if (update.DownloadStatus == UpdateDownloadStatus.Done){
|
||||||
UpdateInstallerPath = update.InstallerPath;
|
UpdateInstallerPath = update.InstallerPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
ForceClose();
|
ForceClose();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updates_UpdateDismissed(object sender, UpdateDismissedEventArgs e){
|
private void updates_UpdateDismissed(object sender, UpdateDismissedEventArgs e){
|
||||||
Config.DismissedUpdate = e.VersionTag;
|
this.InvokeAsyncSafe(() => {
|
||||||
Config.Save();
|
Config.DismissedUpdate = e.VersionTag;
|
||||||
|
Config.Save();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void soundNotification_PlaybackError(object sender, PlaybackErrorEventArgs e){
|
private void soundNotification_PlaybackError(object sender, PlaybackErrorEventArgs e){
|
||||||
|
@ -98,13 +98,15 @@ private void btnCheckUpdates_Click(object sender, EventArgs e){
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void updates_CheckFinished(object sender, UpdateCheckEventArgs e){
|
private void updates_CheckFinished(object sender, UpdateCheckEventArgs e){
|
||||||
if (e.EventId == updateCheckEventId){
|
this.InvokeAsyncSafe(() => {
|
||||||
btnCheckUpdates.Enabled = true;
|
if (e.EventId == updateCheckEventId){
|
||||||
|
btnCheckUpdates.Enabled = true;
|
||||||
|
|
||||||
if (!e.UpdateAvailable){
|
if (!e.UpdateAvailable){
|
||||||
MessageBox.Show("Your version of "+Program.BrandName+" is up to date.", "No Updates Available", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
MessageBox.Show("Your version of "+Program.BrandName+" is up to date.", "No Updates Available", MessageBoxButtons.OK, MessageBoxIcon.Information);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void zoomUpdateTimer_Tick(object sender, EventArgs e){
|
private void zoomUpdateTimer_Tick(object sender, EventArgs e){
|
||||||
|
@ -2,7 +2,6 @@
|
|||||||
using CefSharp.WinForms;
|
using CefSharp.WinForms;
|
||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using TweetDuck.Core;
|
|
||||||
using TweetDuck.Core.Controls;
|
using TweetDuck.Core.Controls;
|
||||||
using TweetDuck.Core.Utils;
|
using TweetDuck.Core.Utils;
|
||||||
using TweetDuck.Resources;
|
using TweetDuck.Resources;
|
||||||
@ -13,7 +12,6 @@ sealed class UpdateHandler{
|
|||||||
private static bool IsSystemSupported => true; // Environment.OSVersion.Version >= new Version("6.1"); // 6.1 NT version = Windows 7
|
private static bool IsSystemSupported => true; // Environment.OSVersion.Version >= new Version("6.1"); // 6.1 NT version = Windows 7
|
||||||
|
|
||||||
private readonly ChromiumWebBrowser browser;
|
private readonly ChromiumWebBrowser browser;
|
||||||
private readonly FormBrowser form;
|
|
||||||
private readonly UpdaterSettings settings;
|
private readonly UpdaterSettings settings;
|
||||||
|
|
||||||
public event EventHandler<UpdateAcceptedEventArgs> UpdateAccepted;
|
public event EventHandler<UpdateAcceptedEventArgs> UpdateAccepted;
|
||||||
@ -23,9 +21,8 @@ sealed class UpdateHandler{
|
|||||||
private int lastEventId;
|
private int lastEventId;
|
||||||
private UpdateInfo lastUpdateInfo;
|
private UpdateInfo lastUpdateInfo;
|
||||||
|
|
||||||
public UpdateHandler(ChromiumWebBrowser browser, FormBrowser form, UpdaterSettings settings){
|
public UpdateHandler(ChromiumWebBrowser browser, UpdaterSettings settings){
|
||||||
this.browser = browser;
|
this.browser = browser;
|
||||||
this.form = form;
|
|
||||||
this.settings = settings;
|
this.settings = settings;
|
||||||
|
|
||||||
browser.FrameLoadEnd += browser_FrameLoadEnd;
|
browser.FrameLoadEnd += browser_FrameLoadEnd;
|
||||||
@ -92,27 +89,20 @@ public void CleanupDownload(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void DismissUpdate(string tag){
|
public void DismissUpdate(string tag){
|
||||||
settings.DismissedUpdate = tag;
|
TriggerUpdateDismissedEvent(new UpdateDismissedEventArgs(tag));
|
||||||
UpdateDismissed?.Invoke(this, new UpdateDismissedEventArgs(tag));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TriggerUpdateAcceptedEvent(UpdateAcceptedEventArgs args){
|
private void TriggerUpdateAcceptedEvent(UpdateAcceptedEventArgs args){
|
||||||
if (UpdateAccepted != null){
|
UpdateAccepted?.Invoke(this, args);
|
||||||
form.InvokeAsyncSafe(() => UpdateAccepted(this, args));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TriggerUpdateDismissedEvent(UpdateDismissedEventArgs args){
|
private void TriggerUpdateDismissedEvent(UpdateDismissedEventArgs args){
|
||||||
form.InvokeAsyncSafe(() => {
|
settings.DismissedUpdate = args.VersionTag;
|
||||||
settings.DismissedUpdate = args.VersionTag;
|
UpdateDismissed?.Invoke(this, args);
|
||||||
UpdateDismissed?.Invoke(this, args);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void TriggerCheckFinishedEvent(UpdateCheckEventArgs args){
|
private void TriggerCheckFinishedEvent(UpdateCheckEventArgs args){
|
||||||
if (CheckFinished != null){
|
CheckFinished?.Invoke(this, args);
|
||||||
form.InvokeAsyncSafe(() => CheckFinished(this, args));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Bridge{
|
public class Bridge{
|
||||||
|
Loading…
Reference in New Issue
Block a user