diff --git a/ClashX/Basic/Logger.swift b/ClashX/Basic/Logger.swift index 1c0568b..5e9ba47 100644 --- a/ClashX/Basic/Logger.swift +++ b/ClashX/Basic/Logger.swift @@ -48,7 +48,7 @@ class Logger { func logFilePath() -> String { return fileLogger.logFileManager.sortedLogFilePaths.first ?? "" } - + func logFolder() -> String { return fileLogger.logFileManager.logsDirectory } diff --git a/ClashX/Basic/NSView+Layout.swift b/ClashX/Basic/NSView+Layout.swift index 7f27287..125bce1 100644 --- a/ClashX/Basic/NSView+Layout.swift +++ b/ClashX/Basic/NSView+Layout.swift @@ -21,7 +21,7 @@ extension NSView { $0.leftAnchor.constraint(equalTo: $0.superview!.leftAnchor, constant: inset.left), $0.rightAnchor.constraint(equalTo: $0.superview!.rightAnchor, constant: -inset.right), $0.topAnchor.constraint(equalTo: $0.superview!.topAnchor, constant: inset.top), - $0.bottomAnchor.constraint(equalTo: $0.superview!.bottomAnchor, constant: -inset.bottom), + $0.bottomAnchor.constraint(equalTo: $0.superview!.bottomAnchor, constant: -inset.bottom) ] } } @@ -29,7 +29,7 @@ extension NSView { func makeConstraintsBindToCenterOfSuperview() -> Self { return makeConstraints { [ $0.centerXAnchor.constraint(equalTo: $0.superview!.centerXAnchor), - $0.centerYAnchor.constraint(equalTo: $0.superview!.centerYAnchor), + $0.centerYAnchor.constraint(equalTo: $0.superview!.centerYAnchor) ] } } } diff --git a/ClashX/General/Managers/Settings.swift b/ClashX/General/Managers/Settings.swift index 24aec83..2f501f8 100644 --- a/ClashX/General/Managers/Settings.swift +++ b/ClashX/General/Managers/Settings.swift @@ -46,19 +46,19 @@ enum Settings { @UserDefault("apiPortAllowLan", defaultValue: false) static var apiPortAllowLan: Bool - + @UserDefault("disableSSIDList", defaultValue: []) - static var disableSSIDList:[String] - + static var disableSSIDList: [String] + @UserDefault("useSwiftUiMenuBar", defaultValue: true) static var useSwiftUiMenuBar: Bool - + static let apiSecretKey = "api-secret" - - static var isApiSecretSet:Bool { + + static var isApiSecretSet: Bool { return UserDefaults.standard.object(forKey: apiSecretKey) != nil } - + @UserDefault(apiSecretKey, defaultValue: "") static var apiSecret: String diff --git a/ClashX/General/Utils/NetworkChangeNotifier.swift b/ClashX/General/Utils/NetworkChangeNotifier.swift index fc82ad5..39a0486 100644 --- a/ClashX/General/Utils/NetworkChangeNotifier.swift +++ b/ClashX/General/Utils/NetworkChangeNotifier.swift @@ -180,7 +180,7 @@ class NetworkChangeNotifier { } return allowIPV6 ? ipv6 : nil } - + static func getCurrentSSID() -> String? { return CWWiFiClient.shared().interface()?.ssid() } diff --git a/ClashX/General/Utils/SSIDSuspendTool.swift b/ClashX/General/Utils/SSIDSuspendTool.swift index 5f26aa3..d08e7ce 100644 --- a/ClashX/General/Utils/SSIDSuspendTool.swift +++ b/ClashX/General/Utils/SSIDSuspendTool.swift @@ -23,8 +23,7 @@ class SSIDSuspendTool { .bind { [weak self] _ in self?.update() }.disposed(by: disposeBag) - - + ConfigManager.shared .proxyShouldPaused .asObservable() @@ -37,10 +36,10 @@ class SSIDSuspendTool { SystemProxyManager.shared.enableProxy() } }.disposed(by: disposeBag) - + update() } - + func update() { if shouldSuspend() { ConfigManager.shared.proxyShouldPaused.accept(true) @@ -48,7 +47,7 @@ class SSIDSuspendTool { ConfigManager.shared.proxyShouldPaused.accept(false) } } - + func shouldSuspend() -> Bool { if let currentSSID = NetworkChangeNotifier.getCurrentSSID() { return Settings.disableSSIDList.contains(currentSSID) diff --git a/ClashX/ViewControllers/Settings/DebugSettingViewController.swift b/ClashX/ViewControllers/Settings/DebugSettingViewController.swift index 2d528e2..6c01202 100644 --- a/ClashX/ViewControllers/Settings/DebugSettingViewController.swift +++ b/ClashX/ViewControllers/Settings/DebugSettingViewController.swift @@ -28,7 +28,6 @@ class DebugSettingViewController: NSViewController { @IBAction func actionOpenLocalConfig(_ sender: Any) { NSWorkspace.shared.openFile(kConfigFolderPath) - } @IBAction func actionOpenIcloudConfig(_ sender: Any) { if ICloudManager.shared.icloudAvailable { diff --git a/ClashX/ViewControllers/Settings/GeneralSettingViewController.swift b/ClashX/ViewControllers/Settings/GeneralSettingViewController.swift index 42db7fc..0a3acf4 100644 --- a/ClashX/ViewControllers/Settings/GeneralSettingViewController.swift +++ b/ClashX/ViewControllers/Settings/GeneralSettingViewController.swift @@ -20,12 +20,11 @@ class GeneralSettingViewController: NSViewController { @IBOutlet weak var proxyPortTextField: NSTextField! @IBOutlet weak var apiPortTextField: NSTextField! @IBOutlet var ssidSuspendTextField: NSTextView! - + @IBOutlet weak var apiSecretTextField: NSTextField! - + @IBOutlet weak var apiSecretOverrideButton: NSButton! - - + var disposeBag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() @@ -37,7 +36,6 @@ class GeneralSettingViewController: NSViewController { Settings.proxyIgnoreList = arr }.disposed(by: disposeBag) - ssidSuspendTextField.string = Settings.disableSSIDList.joined(separator: ",") ssidSuspendTextField.rx .string.debounce(.milliseconds(500), scheduler: MainScheduler.instance) @@ -46,7 +44,7 @@ class GeneralSettingViewController: NSViewController { Settings.disableSSIDList = arr SSIDSuspendTool.shared.update() }.disposed(by: disposeBag) - + LaunchAtLogin.shared.isEnableVirable .map { $0 ? .on : .off } .bind(to: launchAtLoginButton.rx.state) @@ -78,12 +76,12 @@ class GeneralSettingViewController: NSViewController { } else { apiPortTextField.stringValue = ConfigManager.shared.apiPort } - + apiSecretTextField.stringValue = Settings.apiSecret apiSecretTextField.rx.text.compactMap {$0}.bind { Settings.apiSecret = $0 }.disposed(by: disposeBag) - + apiSecretOverrideButton.state = Settings.overrideConfigSecret ? .on : .off apiSecretOverrideButton.rx.state.bind { state in Settings.overrideConfigSecret = state == .on diff --git a/ClashX/ViewControllers/Settings/GlobalShortCutViewController.swift b/ClashX/ViewControllers/Settings/GlobalShortCutViewController.swift index 303adf2..d1e7a0b 100644 --- a/ClashX/ViewControllers/Settings/GlobalShortCutViewController.swift +++ b/ClashX/ViewControllers/Settings/GlobalShortCutViewController.swift @@ -24,41 +24,40 @@ extension KeyboardShortcuts.Name { } - enum KeyboardShortCutManager { static func setup() { KeyboardShortcuts.onKeyUp(for: .toggleSystemProxyMode) { AppDelegate.shared.actionSetSystemProxy(nil) } - + KeyboardShortcuts.onKeyUp(for: .copyShellCommand) { AppDelegate.shared.actionCopyExportCommand(AppDelegate.shared.copyExportCommandMenuItem) } - + KeyboardShortcuts.onKeyUp(for: .copyExternalShellCommand) { AppDelegate.shared.actionCopyExportCommand(AppDelegate.shared.copyExportCommandExternalMenuItem) } - + KeyboardShortcuts.onKeyUp(for: .modeDirect) { AppDelegate.shared.switchProxyMode(mode: .direct) } - + KeyboardShortcuts.onKeyUp(for: .modeRule) { AppDelegate.shared.switchProxyMode(mode: .rule) } - + KeyboardShortcuts.onKeyUp(for: .modeGlobal) { AppDelegate.shared.switchProxyMode(mode: .global) } - + KeyboardShortcuts.onKeyUp(for: .log) { AppDelegate.shared.actionShowLog(nil) } - + KeyboardShortcuts.onKeyUp(for: .dashboard) { AppDelegate.shared.actionDashboard(nil) } - + KeyboardShortcuts.onKeyUp(for: .openMenu) { AppDelegate.shared.statusItem.button?.performClick(nil) } @@ -66,39 +65,37 @@ enum KeyboardShortCutManager { } class GlobalShortCutViewController: NSViewController { - + @IBOutlet weak var proxyBox: NSBox! @IBOutlet weak var modeBoxView: NSView! @IBOutlet weak var otherBoxView: NSView! - + override func viewDidLoad() { super.viewDidLoad() - + let systemProxy = KeyboardShortcuts.RecorderCocoa(for: .toggleSystemProxyMode) let copyShellCommand = KeyboardShortcuts.RecorderCocoa(for: .copyShellCommand) let copyShellCommandExternal = KeyboardShortcuts.RecorderCocoa(for: .copyExternalShellCommand) addGridView(in: proxyBox.contentView!, with: [ - [NSTextField(labelWithString: NSLocalizedString("System Proxy", comment: "")),systemProxy], - [NSTextField(labelWithString: NSLocalizedString("Copy Shell Command", comment: "")),copyShellCommand], - [NSTextField(labelWithString: NSLocalizedString("Copy Shell Command (External)", comment: "")),copyShellCommandExternal], + [NSTextField(labelWithString: NSLocalizedString("System Proxy", comment: "")), systemProxy], + [NSTextField(labelWithString: NSLocalizedString("Copy Shell Command", comment: "")), copyShellCommand], + [NSTextField(labelWithString: NSLocalizedString("Copy Shell Command (External)", comment: "")), copyShellCommandExternal] ]) - - + addGridView(in: modeBoxView, with: [ - [NSTextField(labelWithString: NSLocalizedString("Direct Mode", comment: "")),KeyboardShortcuts.RecorderCocoa(for: .modeDirect)], - [NSTextField(labelWithString: NSLocalizedString("Rule Mode", comment: "")),KeyboardShortcuts.RecorderCocoa(for: .modeRule)], - [NSTextField(labelWithString: NSLocalizedString("Global Mode", comment: "")),KeyboardShortcuts.RecorderCocoa(for: .modeGlobal)], + [NSTextField(labelWithString: NSLocalizedString("Direct Mode", comment: "")), KeyboardShortcuts.RecorderCocoa(for: .modeDirect)], + [NSTextField(labelWithString: NSLocalizedString("Rule Mode", comment: "")), KeyboardShortcuts.RecorderCocoa(for: .modeRule)], + [NSTextField(labelWithString: NSLocalizedString("Global Mode", comment: "")), KeyboardShortcuts.RecorderCocoa(for: .modeGlobal)] ]) - + addGridView(in: otherBoxView, with: [ - [NSTextField(labelWithString: NSLocalizedString("Open Menu", comment: "")),KeyboardShortcuts.RecorderCocoa(for: .openMenu)], - [NSTextField(labelWithString: NSLocalizedString("Open Log", comment: "")),KeyboardShortcuts.RecorderCocoa(for: .log)], - [NSTextField(labelWithString: NSLocalizedString("Open Dashboard", comment: "")),KeyboardShortcuts.RecorderCocoa(for: .dashboard)], + [NSTextField(labelWithString: NSLocalizedString("Open Menu", comment: "")), KeyboardShortcuts.RecorderCocoa(for: .openMenu)], + [NSTextField(labelWithString: NSLocalizedString("Open Log", comment: "")), KeyboardShortcuts.RecorderCocoa(for: .log)], + [NSTextField(labelWithString: NSLocalizedString("Open Dashboard", comment: "")), KeyboardShortcuts.RecorderCocoa(for: .dashboard)] ]) } - - - func addGridView(in superView:NSView, with views: [[NSView]]) { + + func addGridView(in superView: NSView, with views: [[NSView]]) { let gridView = NSGridView(views: views) gridView.rowSpacing = 10 gridView.rowAlignment = .firstBaseline diff --git a/ClashX/Views/StatusItem/NewStatusItemView.swift b/ClashX/Views/StatusItem/NewStatusItemView.swift index 6ca348f..87a2347 100644 --- a/ClashX/Views/StatusItem/NewStatusItemView.swift +++ b/ClashX/Views/StatusItem/NewStatusItemView.swift @@ -56,10 +56,10 @@ class StatusMenuViewModel: ObservableObject { struct SwiftUIView: View { @ObservedObject var viewModel: StatusMenuViewModel var body: some View { - HStack(alignment:.center) { + HStack(alignment: .center) { Image(nsImage: $viewModel.image.wrappedValue).renderingMode(.template) - .resizable().aspectRatio(contentMode: .fit).frame(width: 16,height: 16) - + .resizable().aspectRatio(contentMode: .fit).frame(width: 16, height: 16) + if $viewModel.showSpeed.wrappedValue { Spacer(minLength: 0) VStack(alignment: .trailing) {