From 79d8c41654390bf0ed4332cd5de12c911f9f94b6 Mon Sep 17 00:00:00 2001 From: Student Main Date: Sun, 19 Jan 2020 00:23:49 +0800 Subject: [PATCH 1/4] Check program is updated --- shadowsocks-csharp/Model/Configuration.cs | 8 +++++ shadowsocks-csharp/View/MenuViewController.cs | 30 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/shadowsocks-csharp/Model/Configuration.cs b/shadowsocks-csharp/Model/Configuration.cs index e8aad2d5..b0bec8ad 100644 --- a/shadowsocks-csharp/Model/Configuration.cs +++ b/shadowsocks-csharp/Model/Configuration.cs @@ -37,6 +37,10 @@ namespace Shadowsocks.Model public HotkeyConfig hotkey; private static readonly string CONFIG_FILE = "gui-config.json"; + + [JsonIgnore] + public bool updated = false; + [JsonIgnore] public string localHost => GetLocalHost(); private string GetLocalHost() { @@ -78,6 +82,10 @@ namespace Shadowsocks.Model string configContent = File.ReadAllText(CONFIG_FILE); Configuration config = JsonConvert.DeserializeObject(configContent); config.isDefault = false; + if (UpdateChecker.Asset.CompareVersion(UpdateChecker.Version, config.version) > 0) + { + config.updated = true; + } if (config.configs == null) config.configs = new List(); diff --git a/shadowsocks-csharp/View/MenuViewController.cs b/shadowsocks-csharp/View/MenuViewController.cs index 18d0e1b0..3e7c11a5 100644 --- a/shadowsocks-csharp/View/MenuViewController.cs +++ b/shadowsocks-csharp/View/MenuViewController.cs @@ -30,6 +30,7 @@ namespace Shadowsocks.View private bool _isFirstRun; private bool _isStartupChecking; private string _urlToOpen; + private bool _updated; private ContextMenu contextMenu1; private MenuItem disableItem; @@ -113,6 +114,18 @@ namespace Shadowsocks.View _isStartupChecking = true; updateChecker.CheckUpdate(config, 3000); } + + if (config.updated) + { + ShowBalloonTip( + I18N.GetString("Updated"), + I18N.GetString("updated"), + ToolTipIcon.Info, + 0 + ); + config.updated = false; + Configuration.Save(config); + } } private void controller_TrafficChanged(object sender, EventArgs e) @@ -565,9 +578,24 @@ namespace Shadowsocks.View if (_isFirstRun) { CheckUpdateForFirstRun(); - ShowFirstTimeBalloon(); + ShowBalloonTip( + I18N.GetString("Shadowsocks is here"), + I18N.GetString("You can turn on/off Shadowsocks in the context menu"), + ToolTipIcon.Info, + 0 + ); _isFirstRun = false; } + if (_updated) + { + ShowBalloonTip( + I18N.GetString("Updated"), + I18N.GetString("updated"), + ToolTipIcon.Info, + 0 + ); + _updated = false; + } } void proxyForm_FormClosed(object sender, FormClosedEventArgs e) From f12ef1a5be9d81634e60ad6dec29e25f258c0c07 Mon Sep 17 00:00:00 2001 From: Student Main Date: Sun, 19 Jan 2020 19:36:59 +0800 Subject: [PATCH 2/4] replace ShowFirstTimeBalloon with ShowBalloonTip --- shadowsocks-csharp/View/MenuViewController.cs | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/shadowsocks-csharp/View/MenuViewController.cs b/shadowsocks-csharp/View/MenuViewController.cs index 3e7c11a5..79c9d5d3 100644 --- a/shadowsocks-csharp/View/MenuViewController.cs +++ b/shadowsocks-csharp/View/MenuViewController.cs @@ -385,7 +385,7 @@ namespace Shadowsocks.View { string argument = @"/select, " + e.Path; - System.Diagnostics.Process.Start("explorer.exe", argument); + Process.Start("explorer.exe", argument); } void ShowBalloonTip(string title, string content, ToolTipIcon icon, int timeout) @@ -428,10 +428,10 @@ namespace Shadowsocks.View if (updateChecker.NewVersionFound) { updateChecker.NewVersionFound = false; /* Reset the flag */ - if (System.IO.File.Exists(updateChecker.LatestVersionLocalName)) + if (File.Exists(updateChecker.LatestVersionLocalName)) { string argument = "/select, \"" + updateChecker.LatestVersionLocalName + "\""; - System.Diagnostics.Process.Start("explorer.exe", argument); + Process.Start("explorer.exe", argument); } } } @@ -632,14 +632,6 @@ namespace Shadowsocks.View updateChecker.CheckUpdate(config, 3000); } - private void ShowFirstTimeBalloon() - { - _notifyIcon.BalloonTipTitle = I18N.GetString("Shadowsocks is here"); - _notifyIcon.BalloonTipText = I18N.GetString("You can turn on/off Shadowsocks in the context menu"); - _notifyIcon.BalloonTipIcon = ToolTipIcon.Info; - _notifyIcon.ShowBalloonTip(0); - } - private void AboutItem_Click(object sender, EventArgs e) { Process.Start("https://github.com/shadowsocks/shadowsocks-windows"); From 13a3471fa321b1b7a1b98f953543c014e97c04fe Mon Sep 17 00:00:00 2001 From: Student Main Date: Sun, 19 Jan 2020 22:31:57 +0800 Subject: [PATCH 3/4] Invoke EventHandler instead of show balloon tip when updated --- .../Controller/ShadowsocksController.cs | 19 +++++++++++++++ shadowsocks-csharp/Program.cs | 14 +++++++---- shadowsocks-csharp/View/MenuViewController.cs | 23 ------------------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/shadowsocks-csharp/Controller/ShadowsocksController.cs b/shadowsocks-csharp/Controller/ShadowsocksController.cs index 4faf95d4..66a42f6f 100644 --- a/shadowsocks-csharp/Controller/ShadowsocksController.cs +++ b/shadowsocks-csharp/Controller/ShadowsocksController.cs @@ -52,6 +52,12 @@ namespace Shadowsocks.Controller public string Path; } + public class UpdatedEventArgs : EventArgs + { + public string OldVersion; + public string NewVersion; + } + public class TrafficPerSecond { public long inboundCounter; @@ -78,6 +84,9 @@ namespace Shadowsocks.Controller public event ErrorEventHandler Errored; + // Invoked when controller.Start(); + public event EventHandler ProgramUpdated; + public ShadowsocksController() { _config = Configuration.Load(); @@ -90,6 +99,16 @@ namespace Shadowsocks.Controller public void Start(bool regHotkeys = true) { + if (_config.updated && regHotkeys) + { + _config.updated = false; + ProgramUpdated.Invoke(this, new UpdatedEventArgs() + { + OldVersion = _config.version, + NewVersion = UpdateChecker.Version, + }); + Configuration.Save(_config); + } Reload(); if (regHotkeys) { diff --git a/shadowsocks-csharp/Program.cs b/shadowsocks-csharp/Program.cs index 05337551..63485522 100755 --- a/shadowsocks-csharp/Program.cs +++ b/shadowsocks-csharp/Program.cs @@ -25,7 +25,7 @@ namespace Shadowsocks static void Main(string[] args) { // .NET Framework 4.7.2 on Win7 compatibility - System.Net.ServicePointManager.SecurityProtocol |= + System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12; // store args for further use @@ -78,18 +78,22 @@ namespace Shadowsocks return; } Directory.SetCurrentDirectory(Application.StartupPath); -#if DEBUG + Logging.OpenLogFile(); - +#if DEBUG // truncate privoxy log file while debugging string privoxyLogFilename = Utils.GetTempPath("privoxy.log"); if (File.Exists(privoxyLogFilename)) using (new FileStream(privoxyLogFilename, FileMode.Truncate)) { } -#else - Logging.OpenLogFile(); #endif MainController = new ShadowsocksController(); MenuController = new MenuViewController(MainController); + + MainController.ProgramUpdated += (o, e) => + { + Logging.Info($"Updated from {e.OldVersion} to {e.NewVersion}"); + }; + HotKeys.Init(MainController); MainController.Start(); Application.Run(); diff --git a/shadowsocks-csharp/View/MenuViewController.cs b/shadowsocks-csharp/View/MenuViewController.cs index 79c9d5d3..59abf18b 100644 --- a/shadowsocks-csharp/View/MenuViewController.cs +++ b/shadowsocks-csharp/View/MenuViewController.cs @@ -30,7 +30,6 @@ namespace Shadowsocks.View private bool _isFirstRun; private bool _isStartupChecking; private string _urlToOpen; - private bool _updated; private ContextMenu contextMenu1; private MenuItem disableItem; @@ -114,18 +113,6 @@ namespace Shadowsocks.View _isStartupChecking = true; updateChecker.CheckUpdate(config, 3000); } - - if (config.updated) - { - ShowBalloonTip( - I18N.GetString("Updated"), - I18N.GetString("updated"), - ToolTipIcon.Info, - 0 - ); - config.updated = false; - Configuration.Save(config); - } } private void controller_TrafficChanged(object sender, EventArgs e) @@ -586,16 +573,6 @@ namespace Shadowsocks.View ); _isFirstRun = false; } - if (_updated) - { - ShowBalloonTip( - I18N.GetString("Updated"), - I18N.GetString("updated"), - ToolTipIcon.Info, - 0 - ); - _updated = false; - } } void proxyForm_FormClosed(object sender, FormClosedEventArgs e) From a8b11ea30bc8704e8239f411905598e4586fdab0 Mon Sep 17 00:00:00 2001 From: Student Main Date: Tue, 21 Jan 2020 22:06:30 +0800 Subject: [PATCH 4/4] update detector works when update from v4.1.2 and before Configuration.version added in 0e426ffe, only 1 year ago --- shadowsocks-csharp/Model/Configuration.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/shadowsocks-csharp/Model/Configuration.cs b/shadowsocks-csharp/Model/Configuration.cs index b0bec8ad..23523416 100644 --- a/shadowsocks-csharp/Model/Configuration.cs +++ b/shadowsocks-csharp/Model/Configuration.cs @@ -43,7 +43,8 @@ namespace Shadowsocks.Model [JsonIgnore] public string localHost => GetLocalHost(); - private string GetLocalHost() { + private string GetLocalHost() + { return isIPv6Enabled ? "[::1]" : "127.0.0.1"; } public Server GetCurrentServer() @@ -82,9 +83,9 @@ namespace Shadowsocks.Model string configContent = File.ReadAllText(CONFIG_FILE); Configuration config = JsonConvert.DeserializeObject(configContent); config.isDefault = false; - if (UpdateChecker.Asset.CompareVersion(UpdateChecker.Version, config.version) > 0) + if (UpdateChecker.Asset.CompareVersion(UpdateChecker.Version, config.version ?? "0") > 0) { - config.updated = true; + config.updated = true; } if (config.configs == null) @@ -101,7 +102,8 @@ namespace Shadowsocks.Model config.proxy = new ProxyConfig(); if (config.hotkey == null) config.hotkey = new HotkeyConfig(); - if (!System.Net.Sockets.Socket.OSSupportsIPv6) { + if (!System.Net.Sockets.Socket.OSSupportsIPv6) + { config.isIPv6Enabled = false; // disable IPv6 if os not support } //TODO if remote host(server) do not support IPv6 (or DNS resolve AAAA TYPE record) disable IPv6?