diff --git a/ShadowsocksX-NG/AppDelegate.swift b/ShadowsocksX-NG/AppDelegate.swift index dd13c41..bc3df8f 100755 --- a/ShadowsocksX-NG/AppDelegate.swift +++ b/ShadowsocksX-NG/AppDelegate.swift @@ -108,6 +108,10 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele "LocalHTTP.FollowGlobal": false, "ProxyExceptions": "127.0.0.1, localhost, 192.168.0.0/16, 10.0.0.0/8, FE80::/64, ::1, FD00::/8", "ExternalPACURL": "", + "EnableSwitchMode.PAC": true, + "EnableSwitchMode.Global": true, + "EnableSwitchMode.Manual": false, + "EnableSwitchMode.ExternalPAC": false, ]) statusItem = NSStatusBar.system.statusItem(withLength: AppDelegate.StatusItemIconWidth) @@ -148,34 +152,50 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserNotificationCenterDele .subscribe(onNext: { noti in let mode = defaults.string(forKey: "ShadowsocksRunningMode")! - var toastMessage: String!; - switch mode { - case "auto": - defaults.setValue("global", forKey: "ShadowsocksRunningMode") - toastMessage = "Global Mode".localized - case "global": - defaults.setValue("manual", forKey: "ShadowsocksRunningMode") - toastMessage = "Manual Mode".localized - case "manual": - if self.externalPACModeMenuItem.isEnabled { - defaults.setValue("externalPAC", forKey: "ShadowsocksRunningMode") - toastMessage = "Auto Mode By External PAC".localized - } else { - defaults.setValue("auto", forKey: "ShadowsocksRunningMode") - toastMessage = "Auto Mode By PAC".localized - } - case "externalPAC": - defaults.setValue("auto", forKey: "ShadowsocksRunningMode") - toastMessage = "Auto Mode By PAC".localized - default: - defaults.setValue("auto", forKey: "ShadowsocksRunningMode") - toastMessage = "Auto Mode By PAC".localized + var enabledModeList: [String] = [] + if defaults.bool(forKey: "EnableSwitchMode.PAC") { + enabledModeList.append("auto") } + if defaults.bool(forKey: "EnableSwitchMode.Global") { + enabledModeList.append("global") + } + if defaults.bool(forKey: "EnableSwitchMode.Manual") { + enabledModeList.append("manual") + } + if defaults.bool(forKey: "EnableSwitchMode.ExternalPAC") + && self.externalPACModeMenuItem.isEnabled { + enabledModeList.append("externalPAC") + } + + if enabledModeList.isEmpty { + return + } + + var nextMode = "" + if enabledModeList.contains(mode) { + let i = enabledModeList.firstIndex(of: mode)! + if i + 1 == enabledModeList.count { + nextMode = enabledModeList[0] + } else { + nextMode = enabledModeList[i+1] + } + } else { + nextMode = enabledModeList[0] + } + + defaults.setValue(nextMode, forKey: "ShadowsocksRunningMode") self.updateRunningModeMenu() self.applyConfig() - self.makeToast(toastMessage) + // Show toast message + let toastMessages = [ + "auto": "Auto Mode By PAC".localized, + "global": "Global Mode".localized, + "manual": "Manual Mode".localized, + "externalPAC": "Auto Mode By External PAC".localized, + ] + self.makeToast(toastMessages[nextMode]!) }) _ = notifyCenter.rx.notification(NOTIFY_FOUND_SS_URL) diff --git a/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib b/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib index f7c5bd9..2d01adc 100644 --- a/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib +++ b/ShadowsocksX-NG/Base.lproj/PreferencesWinController.xib @@ -1,8 +1,8 @@ - + - + @@ -34,19 +34,19 @@ - + - + - + @@ -54,10 +54,7 @@ - - - - + @@ -74,8 +71,18 @@ + - + @@ -83,9 +90,9 @@ - + - + @@ -100,43 +107,89 @@ - + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -146,7 +199,7 @@ - + @@ -154,7 +207,7 @@ - + @@ -162,7 +215,7 @@ - + @@ -177,7 +230,7 @@ - + @@ -185,7 +238,7 @@ - + @@ -201,7 +254,7 @@ - + - + @@ -230,7 +283,7 @@ - + @@ -238,7 +291,7 @@ - + @@ -256,7 +309,7 @@ - + @@ -272,7 +325,7 @@ - + @@ -287,7 +340,7 @@ - + @@ -295,7 +348,7 @@ - + @@ -307,7 +360,7 @@ - + @@ -316,49 +369,48 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -368,9 +420,9 @@ - + - + @@ -379,7 +431,7 @@ - + @@ -387,7 +439,7 @@ - + @@ -402,9 +454,9 @@ - + - + @@ -421,7 +473,7 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -484,14 +534,14 @@ - + - + @@ -526,7 +576,7 @@ - + @@ -535,9 +585,9 @@ - + - + @@ -548,7 +598,7 @@ - + @@ -575,24 +625,23 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -600,10 +649,10 @@ - - - - + + + +