From 3d49bc312883264a819251051d380190b386ffc0 Mon Sep 17 00:00:00 2001 From: Gang Zhuo Date: Wed, 16 Dec 2015 23:19:07 +0800 Subject: [PATCH] delay check for updates --- .../Controller/Service/UpdateChecker.cs | 38 ++++++++++++++++++- shadowsocks-csharp/View/MenuViewController.cs | 25 +++++++++--- 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/UpdateChecker.cs b/shadowsocks-csharp/Controller/Service/UpdateChecker.cs index 643c7014..45962353 100644 --- a/shadowsocks-csharp/Controller/Service/UpdateChecker.cs +++ b/shadowsocks-csharp/Controller/Service/UpdateChecker.cs @@ -28,12 +28,41 @@ namespace Shadowsocks.Controller public const string Version = "2.5.8"; + private class CheckUpdateTimer : System.Timers.Timer + { + public Configuration config; + + public CheckUpdateTimer(int p) : base(p) + { + } + } + + public void CheckUpdate(Configuration config, int delay) + { + CheckUpdateTimer timer = new CheckUpdateTimer(delay); + timer.AutoReset = false; + timer.Elapsed += Timer_Elapsed; + timer.config = config; + timer.Enabled = true; + } + + private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) + { + CheckUpdateTimer timer = (CheckUpdateTimer)sender; + Configuration config = timer.config; + timer.Elapsed -= Timer_Elapsed; + timer.Enabled = false; + timer.Dispose(); + CheckUpdate(config); + } + public void CheckUpdate(Configuration config) { this.config = config; try { + Logging.Debug("Checking updates..."); WebClient http = CreateWebClient(); http.DownloadStringCompleted += http_DownloadStringCompleted; http.DownloadStringAsync(new Uri(UpdateURL)); @@ -81,9 +110,13 @@ namespace Shadowsocks.Controller startDownload(); } - else if (CheckUpdateCompleted != null) + else { - CheckUpdateCompleted(this, new EventArgs()); + Logging.Debug("No update is available"); + if (CheckUpdateCompleted != null) + { + CheckUpdateCompleted(this, new EventArgs()); + } } } catch (Exception ex) @@ -117,6 +150,7 @@ namespace Shadowsocks.Controller Logging.LogUsefulException(e.Error); return; } + Logging.Debug($"New version {LatestVersionNumber} found: {LatestVersionLocalName}"); if (CheckUpdateCompleted != null) { CheckUpdateCompleted(this, new EventArgs()); diff --git a/shadowsocks-csharp/View/MenuViewController.cs b/shadowsocks-csharp/View/MenuViewController.cs index b19a244f..03bdcb36 100755 --- a/shadowsocks-csharp/View/MenuViewController.cs +++ b/shadowsocks-csharp/View/MenuViewController.cs @@ -66,7 +66,9 @@ namespace Shadowsocks.View UpdateTrayIcon(); _notifyIcon.Visible = true; _notifyIcon.ContextMenu = contextMenu1; + _notifyIcon.BalloonTipClicked += notifyIcon1_BalloonTipClicked; _notifyIcon.MouseDoubleClick += notifyIcon1_DoubleClick; + _notifyIcon.BalloonTipClosed += _notifyIcon_BalloonTipClosed; this.updateChecker = new UpdateChecker(); updateChecker.CheckUpdateCompleted += updateChecker_CheckUpdateCompleted; @@ -78,7 +80,7 @@ namespace Shadowsocks.View if (config.autoCheckUpdate) { _isStartupChecking = true; - updateChecker.CheckUpdate(config); + updateChecker.CheckUpdate(config, 3000); } if (config.isDefault) @@ -256,7 +258,6 @@ namespace Shadowsocks.View if (updateChecker.NewVersionFound) { ShowBalloonTip(String.Format(I18N.GetString("Shadowsocks {0} Update Found"), updateChecker.LatestVersionNumber), I18N.GetString("Click here to update"), ToolTipIcon.Info, 5000); - _notifyIcon.BalloonTipClicked += notifyIcon1_BalloonTipClicked; _isFirstRun = false; } else if (!_isStartupChecking) @@ -269,9 +270,23 @@ namespace Shadowsocks.View void notifyIcon1_BalloonTipClicked(object sender, EventArgs e) { - _notifyIcon.BalloonTipClicked -= notifyIcon1_BalloonTipClicked; - string argument = "/select, \"" + updateChecker.LatestVersionLocalName + "\""; - System.Diagnostics.Process.Start("explorer.exe", argument); + if (updateChecker.NewVersionFound) + { + updateChecker.NewVersionFound = false; /* Reset the flag */ + if (System.IO.File.Exists(updateChecker.LatestVersionLocalName)) + { + string argument = "/select, \"" + updateChecker.LatestVersionLocalName + "\""; + System.Diagnostics.Process.Start("explorer.exe", argument); + } + } + } + + private void _notifyIcon_BalloonTipClosed(object sender, EventArgs e) + { + if (updateChecker.NewVersionFound) + { + updateChecker.NewVersionFound = false; /* Reset the flag */ + } }