From e62e14eefc15f5e92e435a7fa221bd68c7a0150a Mon Sep 17 00:00:00 2001 From: database64128 Date: Fri, 13 Nov 2020 12:51:34 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=9A=20Finish=20cleanup=20and=20add=20m?= =?UTF-8?q?anifest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Settings/ForwardProxySettings.cs | 30 ++++++++ Shadowsocks.Net/Settings/NetSettings.cs | 4 + Shadowsocks.WPF/App.manifest | 76 +++++++++++++++++++ Shadowsocks.WPF/Models/ForwardProxyConfig.cs | 43 ----------- Shadowsocks.WPF/Models/HotKeyConfig.cs | 33 -------- Shadowsocks.WPF/Models/NlogConfig.cs | 12 +-- Shadowsocks.WPF/Services/UpdateChecker.cs | 15 ++-- Shadowsocks.WPF/Shadowsocks.WPF.csproj | 26 ++++--- Shadowsocks.WPF/Utils/SystemProxy.cs | 31 ++++---- .../ViewModels/ForwardProxyViewModel.cs | 61 ++++++--------- .../ViewModels/OnlineConfigViewModel.cs | 10 +-- 11 files changed, 184 insertions(+), 157 deletions(-) create mode 100644 Shadowsocks.Net/Settings/ForwardProxySettings.cs create mode 100644 Shadowsocks.WPF/App.manifest delete mode 100644 Shadowsocks.WPF/Models/ForwardProxyConfig.cs delete mode 100644 Shadowsocks.WPF/Models/HotKeyConfig.cs diff --git a/Shadowsocks.Net/Settings/ForwardProxySettings.cs b/Shadowsocks.Net/Settings/ForwardProxySettings.cs new file mode 100644 index 00000000..2a88fdae --- /dev/null +++ b/Shadowsocks.Net/Settings/ForwardProxySettings.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shadowsocks.Net.Settings +{ + public class ForwardProxySettings + { + public bool NoProxy { get; set; } + public bool UseSocks5Proxy { get; set; } + public bool UseHttpProxy { get; set; } + public string Address { get; set; } + public int Port { get; set; } + public string Username { get; set; } + public string Password { get; set; } + + public ForwardProxySettings() + { + NoProxy = true; + UseSocks5Proxy = false; + UseHttpProxy = false; + Address = ""; + Port = 1088; + Username = ""; + Password = ""; + } + } +} diff --git a/Shadowsocks.Net/Settings/NetSettings.cs b/Shadowsocks.Net/Settings/NetSettings.cs index 7f432a9b..ed7bb67e 100644 --- a/Shadowsocks.Net/Settings/NetSettings.cs +++ b/Shadowsocks.Net/Settings/NetSettings.cs @@ -12,6 +12,8 @@ namespace Shadowsocks.Net.Settings public string HttpListeningAddress { get; set; } public int Socks5ListeningPort { get; set; } public int HttpListeningPort { get; set; } + + public ForwardProxySettings ForwardProxy { get; set; } public NetSettings() { @@ -21,6 +23,8 @@ namespace Shadowsocks.Net.Settings HttpListeningAddress = "::1"; Socks5ListeningPort = 1080; HttpListeningPort = 1080; + + ForwardProxy = new ForwardProxySettings(); } } } diff --git a/Shadowsocks.WPF/App.manifest b/Shadowsocks.WPF/App.manifest new file mode 100644 index 00000000..2359b849 --- /dev/null +++ b/Shadowsocks.WPF/App.manifest @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PerMonitorV2, PerMonitor, System + true + + + + + + + diff --git a/Shadowsocks.WPF/Models/ForwardProxyConfig.cs b/Shadowsocks.WPF/Models/ForwardProxyConfig.cs deleted file mode 100644 index d5210fac..00000000 --- a/Shadowsocks.WPF/Models/ForwardProxyConfig.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; - -namespace Shadowsocks.WPF.Models -{ - [Serializable] - public class ForwardProxyConfig - { - public const int PROXY_SOCKS5 = 0; - public const int PROXY_HTTP = 1; - - public const int MaxProxyTimeoutSec = 10; - private const int DefaultProxyTimeoutSec = 3; - - public bool useProxy; - public int proxyType; - public string proxyServer; - public int proxyPort; - public int proxyTimeout; - public bool useAuth; - public string authUser; - public string authPwd; - - public ForwardProxyConfig() - { - useProxy = false; - proxyType = PROXY_SOCKS5; - proxyServer = ""; - proxyPort = 0; - proxyTimeout = DefaultProxyTimeoutSec; - useAuth = false; - authUser = ""; - authPwd = ""; - } - - public void CheckConfig() - { - if (proxyType < PROXY_SOCKS5 || proxyType > PROXY_HTTP) - { - proxyType = PROXY_SOCKS5; - } - } - } -} diff --git a/Shadowsocks.WPF/Models/HotKeyConfig.cs b/Shadowsocks.WPF/Models/HotKeyConfig.cs deleted file mode 100644 index 36c728af..00000000 --- a/Shadowsocks.WPF/Models/HotKeyConfig.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; - -namespace Shadowsocks.WPF.Models -{ - /* - * Format: - * + - * - */ - - [Serializable] - public class HotkeyConfig - { - public string SwitchSystemProxy; - public string SwitchSystemProxyMode; - public string SwitchAllowLan; - public string ShowLogs; - public string ServerMoveUp; - public string ServerMoveDown; - public bool RegHotkeysAtStartup; - - public HotkeyConfig() - { - SwitchSystemProxy = ""; - SwitchSystemProxyMode = ""; - SwitchAllowLan = ""; - ShowLogs = ""; - ServerMoveUp = ""; - ServerMoveDown = ""; - RegHotkeysAtStartup = false; - } - } -} \ No newline at end of file diff --git a/Shadowsocks.WPF/Models/NlogConfig.cs b/Shadowsocks.WPF/Models/NlogConfig.cs index c2ef4b10..61353793 100644 --- a/Shadowsocks.WPF/Models/NlogConfig.cs +++ b/Shadowsocks.WPF/Models/NlogConfig.cs @@ -36,8 +36,8 @@ namespace Shadowsocks.WPF.Models const string LOGGER_FILE_NAME_ATTRIBUTE = "fileName"; XmlDocument doc = new XmlDocument(); - XmlElement logFileNameElement; - XmlElement logLevelElement; + XmlElement? logFileNameElement; + XmlElement? logLevelElement; /// /// Load the NLog config xml file content @@ -46,8 +46,8 @@ namespace Shadowsocks.WPF.Models { NLogConfig config = new NLogConfig(); config.doc.Load(NLOG_CONFIG_FILE_NAME); - config.logLevelElement = (XmlElement)SelectSingleNode(config.doc, "//nlog:logger[@name='*']"); - config.logFileNameElement = (XmlElement)SelectSingleNode(config.doc, "//nlog:target[@name='file']"); + config.logLevelElement = (XmlElement?)SelectSingleNode(config.doc, "//nlog:logger[@name='*']"); + config.logFileNameElement = (XmlElement?)SelectSingleNode(config.doc, "//nlog:target[@name='file']"); return config; } @@ -105,7 +105,7 @@ namespace Shadowsocks.WPF.Models /// /// /// - private static XmlNode SelectSingleNode(XmlDocument doc, string xpath) + private static XmlNode? SelectSingleNode(XmlDocument doc, string xpath) { XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable); manager.AddNamespace("nlog", "http://www.nlog-project.org/schemas/NLog.xsd"); @@ -121,7 +121,7 @@ namespace Shadowsocks.WPF.Models if (!File.Exists(NLOG_CONFIG_FILE_NAME)) { - File.WriteAllText(NLOG_CONFIG_FILE_NAME, Properties.Resources.NLog_config); + File.WriteAllText(NLOG_CONFIG_FILE_NAME, Properties.Resources.NLog); LogManager.LoadConfiguration(NLOG_CONFIG_FILE_NAME); } } diff --git a/Shadowsocks.WPF/Services/UpdateChecker.cs b/Shadowsocks.WPF/Services/UpdateChecker.cs index 54692664..6084253d 100644 --- a/Shadowsocks.WPF/Services/UpdateChecker.cs +++ b/Shadowsocks.WPF/Services/UpdateChecker.cs @@ -133,12 +133,15 @@ namespace Shadowsocks.WPF.Services var filename = asset.GetProperty("name").GetString(); var browser_download_url = asset.GetProperty("browser_download_url").GetString(); var response = await httpClient.GetAsync(browser_download_url); - using (var downloadedFileStream = File.Create(Utils.Utilities.GetTempPath(filename))) - await response.Content.CopyToAsync(downloadedFileStream); - logger.Info($"Downloaded {filename}."); - // store .zip filename - if (filename.EndsWith(".zip")) - NewReleaseZipFilename = filename; + if (filename is string) + { + using (var downloadedFileStream = File.Create(Utils.Utilities.GetTempPath(filename))) + await response.Content.CopyToAsync(downloadedFileStream); + logger.Info($"Downloaded {filename}."); + // store .zip filename + if (filename.EndsWith(".zip")) + NewReleaseZipFilename = filename; + } } logger.Info("Finished downloading."); // notify user diff --git a/Shadowsocks.WPF/Shadowsocks.WPF.csproj b/Shadowsocks.WPF/Shadowsocks.WPF.csproj index af35c202..158aab7e 100644 --- a/Shadowsocks.WPF/Shadowsocks.WPF.csproj +++ b/Shadowsocks.WPF/Shadowsocks.WPF.csproj @@ -1,17 +1,21 @@ - + Exe net5.0-windows true - clowwindy & community 2020 - Shadowsocks.WPF - Shadowsocks WPF GUI - 5.0.0.0 - 1.0.0 + App.manifest + Shadowsocks for Windows WPF GUI + Clowwindy & The Community + 5.0.0 Assets\shadowsocks.ico - true enable + © 2020 Clowwindy & The Community + LICENSE.txt + https://github.com/shadowsocks/shadowsocks-windows + https://github.com/shadowsocks/shadowsocks-windows + Public + If you want to keep a secret, you must also hide it from yourself. @@ -40,6 +44,10 @@ + + True + + @@ -115,8 +123,4 @@ - - - - \ No newline at end of file diff --git a/Shadowsocks.WPF/Utils/SystemProxy.cs b/Shadowsocks.WPF/Utils/SystemProxy.cs index 82acf36f..62920751 100644 --- a/Shadowsocks.WPF/Utils/SystemProxy.cs +++ b/Shadowsocks.WPF/Utils/SystemProxy.cs @@ -1,15 +1,20 @@ using Shadowsocks.Net.SystemProxy; +using Shadowsocks.PAC; +using Shadowsocks.WPF.Models; using Shadowsocks.WPF.Services.SystemProxy; +using Splat; using System.Windows; namespace Shadowsocks.WPF.Utils { public static class SystemProxy { - public static void Update(Configuration config, bool forceDisable, PACServer pacSrv, bool noRetry = false) + public static void Update(bool forceDisable, bool enabled, bool global) { - bool global = config.global; - bool enabled = config.enabled; + var settings = Locator.Current.GetService(); + var appSettings = settings.App; + var netSettings = settings.Net; + var pacSettings = settings.PAC; if (forceDisable || !WinINet.operational) { @@ -22,20 +27,12 @@ namespace Shadowsocks.WPF.Utils { if (global) { - WinINet.ProxyGlobal("localhost:" + config.localPort.ToString(), ""); + WinINet.ProxyGlobal($"localhost:{netSettings.HttpListeningPort}", ""); } else { - string pacUrl; - if (config.useOnlinePac && !string.IsNullOrEmpty(config.pacUrl)) - { - pacUrl = config.pacUrl; - } - else - { - - pacUrl = pacSrv.PacUrl; - } + var pacUrl = string.IsNullOrEmpty(pacSettings.CustomPACUrl) + ? Locator.Current.GetService().PacUrl : pacSettings.CustomPACUrl; WinINet.ProxyPAC(pacUrl); } } @@ -46,8 +43,8 @@ namespace Shadowsocks.WPF.Utils } catch (ProxyException ex) { - logger.LogUsefulException(ex); - if (ex.Type != ProxyExceptionType.Unspecific && !noRetry) + LogHost.Default.Error(ex, "An error occurred while updating system proxy."); + /*if (ex.Type != ProxyExceptionType.Unspecific && !noRetry) { var ret = MessageBox.Show(I18N.GetString("Error occured when process proxy setting, do you want reset current setting and retry?"), I18N.GetString("Shadowsocks"), MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (ret == DialogResult.Yes) @@ -59,7 +56,7 @@ namespace Shadowsocks.WPF.Utils else { MessageBox.Show(I18N.GetString("Unrecoverable proxy setting error occured, see log for detail"), I18N.GetString("Shadowsocks"), MessageBoxButtons.OK, MessageBoxIcon.Error); - } + }*/ } } } diff --git a/Shadowsocks.WPF/ViewModels/ForwardProxyViewModel.cs b/Shadowsocks.WPF/ViewModels/ForwardProxyViewModel.cs index 0d7e293f..3055f1f2 100644 --- a/Shadowsocks.WPF/ViewModels/ForwardProxyViewModel.cs +++ b/Shadowsocks.WPF/ViewModels/ForwardProxyViewModel.cs @@ -2,7 +2,9 @@ using ReactiveUI; using ReactiveUI.Fody.Helpers; using ReactiveUI.Validation.Extensions; using ReactiveUI.Validation.Helpers; +using Shadowsocks.Net.Settings; using Shadowsocks.WPF.Models; +using Splat; using System.Linq; using System.Reactive; using System.Reactive.Linq; @@ -13,19 +15,18 @@ namespace Shadowsocks.WPF.ViewModels { public ForwardProxyViewModel() { - if (!_config.proxy.useProxy) - NoProxy = true; - else if (_config.proxy.proxyType == 0) - UseSocks5Proxy = true; - else - UseHttpProxy = true; + _forwardProxySettings = Locator.Current.GetService().Net.ForwardProxy; - Address = _config.proxy.proxyServer; - Port = _config.proxy.proxyPort; - Timeout = _config.proxy.proxyTimeout; + NoProxy = _forwardProxySettings.NoProxy; + UseSocks5Proxy = _forwardProxySettings.UseSocks5Proxy; + UseHttpProxy = _forwardProxySettings.UseHttpProxy; - Username = _config.proxy.authUser; - Password = _config.proxy.authPwd; + Address = _forwardProxySettings.Address; + Port = _forwardProxySettings.Port; + Timeout = 5; + + Username = _forwardProxySettings.Username; + Password = _forwardProxySettings.Password; this.WhenAnyValue(x => x.NoProxy, x => !x) .ToPropertyEx(this, x => x.CanModifyDetails); @@ -52,12 +53,13 @@ namespace Shadowsocks.WPF.ViewModels Save = ReactiveCommand.Create(() => { - _controller.SaveProxy(GetForwardProxyConfig()); - _menuViewController.CloseForwardProxyWindow(); + // TODO: save settings }, canSave); - Cancel = ReactiveCommand.Create(_menuViewController.CloseForwardProxyWindow); + //Cancel = ReactiveCommand.Create(_menuViewController.CloseForwardProxyWindow); } + private ForwardProxySettings _forwardProxySettings; + public ValidationHelper AddressRule { get; } public ValidationHelper PortRule { get; } public ValidationHelper TimeoutRule { get; } @@ -93,29 +95,16 @@ namespace Shadowsocks.WPF.ViewModels [Reactive] public string Password { get; set; } - private ForwardProxyConfig GetForwardProxyConfig() - { - var forwardProxyConfig = new ForwardProxyConfig() + private ForwardProxySettings GetForwardProxySettings() + => new ForwardProxySettings() { - proxyServer = Address, - proxyPort = Port, - proxyTimeout = Timeout, - authUser = Username, - authPwd = Password + NoProxy = NoProxy, + UseSocks5Proxy = UseSocks5Proxy, + UseHttpProxy = UseHttpProxy, + Address = Address, + Port = Port, + Username = Username, + Password = Password, }; - if (NoProxy) - forwardProxyConfig.useProxy = false; - else if (UseSocks5Proxy) - { - forwardProxyConfig.useProxy = true; - forwardProxyConfig.proxyType = 0; - } - else - { - forwardProxyConfig.useProxy = true; - forwardProxyConfig.proxyType = 1; - } - return forwardProxyConfig; - } } } diff --git a/Shadowsocks.WPF/ViewModels/OnlineConfigViewModel.cs b/Shadowsocks.WPF/ViewModels/OnlineConfigViewModel.cs index 2682b1b0..13e94090 100644 --- a/Shadowsocks.WPF/ViewModels/OnlineConfigViewModel.cs +++ b/Shadowsocks.WPF/ViewModels/OnlineConfigViewModel.cs @@ -18,7 +18,7 @@ namespace Shadowsocks.WPF.ViewModels { public OnlineConfigViewModel() { - Sources = new ObservableCollection(_config.onlineConfigSource); + Sources = new ObservableCollection(); SelectedSource = ""; Address = ""; @@ -39,8 +39,8 @@ namespace Shadowsocks.WPF.ViewModels address => Uri.IsWellFormedUriString(address, UriKind.Absolute) && (address.StartsWith("https://") || address.StartsWith("http://"))); - Update = ReactiveCommand.CreateFromTask(() => _controller.UpdateOnlineConfig(SelectedSource), canUpdateCopyRemove); - UpdateAll = ReactiveCommand.CreateFromTask(_controller.UpdateAllOnlineConfig, canUpdateAll); + //Update = ReactiveCommand.CreateFromTask(() => _controller.UpdateOnlineConfig(SelectedSource), canUpdateCopyRemove); + //UpdateAll = ReactiveCommand.CreateFromTask(_controller.UpdateAllOnlineConfig, canUpdateAll); CopyLink = ReactiveCommand.Create(() => Clipboard.SetText(SelectedSource), canUpdateCopyRemove); Remove = ReactiveCommand.Create(() => { @@ -50,13 +50,13 @@ namespace Shadowsocks.WPF.ViewModels { result = Sources.Remove(urlToRemove); } while (result); - _controller.RemoveOnlineConfig(urlToRemove); + //_controller.RemoveOnlineConfig(urlToRemove); }, canUpdateCopyRemove); Add = ReactiveCommand.Create(() => { Sources.Add(Address); SelectedSource = Address; - _controller.SaveOnlineConfigSource(Sources.ToList()); + //_controller.SaveOnlineConfigSource(Sources.ToList()); Address = ""; }, canAdd);