From 7709cd9f6c2695f1c3f83a918c291e3d397d47cd Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 19 May 2022 20:12:30 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=91=8C=20Cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 8 +- phpmon/Domain/Menu/MainMenu+Actions.swift | 204 ++++++++++++++++++++++ phpmon/Domain/Menu/MainMenu.swift | 203 --------------------- 3 files changed, 210 insertions(+), 205 deletions(-) create mode 100644 phpmon/Domain/Menu/MainMenu+Actions.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8c19794..a01e18a 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -242,6 +242,7 @@ C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D89BC52783C99400A02B68 /* ComposerJson.swift */; }; C4F30B0B278E203C00755FCE /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */; }; C4F319C927B034A500AFF46F /* Stats.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DEB7D327A5D60B00834718 /* Stats.swift */; }; + C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F361602836BFD9003598CC /* MainMenu+Actions.swift */; }; C4F5FBCD28218CB8001065C5 /* Xdebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42337A2281F19F000459A48 /* Xdebug.swift */; }; C4F7809C25D80344000DBC97 /* CommandTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F7809B25D80344000DBC97 /* CommandTest.swift */; }; C4F780A825D80AE8000DBC97 /* php.ini in Resources */ = {isa = PBXBuildFile; fileRef = C4F780A725D80AE8000DBC97 /* php.ini */; }; @@ -426,6 +427,7 @@ C4F2E4392752F7D00020E974 /* PhpInstallation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpInstallation.swift; sourceTree = ""; }; C4F30B02278E16BA00755FCE /* HomebrewService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewService.swift; sourceTree = ""; }; C4F30B06278E195800755FCE /* brew-services.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "brew-services.json"; sourceTree = ""; }; + C4F361602836BFD9003598CC /* MainMenu+Actions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+Actions.swift"; sourceTree = ""; }; C4F5FBCC28218C93001065C5 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = ""; }; C4F7807925D7F84B000DBC97 /* phpmon-tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "phpmon-tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; C4F7807D25D7F84B000DBC97 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; @@ -738,6 +740,7 @@ C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */, C4CE3BB727B31F2E0086CA49 /* MainMenu+Switcher.swift */, C42C49DA27C2806F0074ABAC /* MainMenu+FixMyValet.swift */, + C4F361602836BFD9003598CC /* MainMenu+Actions.swift */, C47331A1247093B7009A0597 /* StatusMenu.swift */, C48D0C9525CC80B100CC7490 /* HeaderView.swift */, C48D0C9925CC888B00CC7490 /* HeaderView.xib */, @@ -1197,6 +1200,7 @@ C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */, C415D3B72770F294005EF286 /* Actions.swift in Sources */, C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */, + C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */, C44C198D276E3A1C0072762D /* ProgressWindow.swift in Sources */, 54D9E0B827E4F51E003B9AD9 /* KeyCombo.swift in Sources */, C4C0E8E727F88B41002D32A9 /* ProxyScanner.swift in Sources */, @@ -1544,7 +1548,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 790; + CURRENT_PROJECT_VERSION = 795; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -1570,7 +1574,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 790; + CURRENT_PROJECT_VERSION = 795; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift new file mode 100644 index 0000000..e64cc7e --- /dev/null +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -0,0 +1,204 @@ +// +// MainMenu+Actions.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 19/05/2022. +// Copyright © 2022 Nico Verbruggen. All rights reserved. +// + +import Cocoa + +extension MainMenu { + + // MARK: - Actions + + @objc func fixHomebrewPermissions() { + if !BetterAlert() + .withInformation( + title: "alert.fix_homebrew_permissions.title".localized, + subtitle: "alert.fix_homebrew_permissions.subtitle".localized, + description: "alert.fix_homebrew_permissions.desc".localized + ) + .withPrimary(text: "alert.fix_homebrew_permissions.ok".localized) + .withSecondary(text: "alert.fix_homebrew_permissions.cancel".localized) + .didSelectPrimary() { + return + } + + asyncExecution { + try Actions.fixHomebrewPermissions() + } success: { + BetterAlert() + .withInformation( + title: "alert.fix_homebrew_permissions_done.title".localized, + subtitle: "alert.fix_homebrew_permissions_done.subtitle".localized, + description: "alert.fix_homebrew_permissions_done.desc".localized + ) + .withPrimary(text: "OK") + .show() + } failure: { error in + BetterAlert.show(for: error as! HomebrewPermissionError) + } + } + + @objc func restartPhpFpm() { + asyncExecution { + Actions.restartPhpFpm() + } + } + + @objc func restartAllServices() { + asyncExecution { + Actions.restartDnsMasq() + Actions.restartPhpFpm() + Actions.restartNginx() + } success: { + DispatchQueue.main.async { + LocalNotification.send( + title: "notification.services_restarted".localized, + subtitle: "notification.services_restarted_desc".localized + ) + } + } + } + + @objc func stopAllServices() { + asyncExecution { + Actions.stopAllServices() + } success: { + DispatchQueue.main.async { + LocalNotification.send( + title: "notification.services_stopped".localized, + subtitle: "notification.services_stopped_desc".localized + ) + } + } + } + + @objc func restartNginx() { + asyncExecution { + Actions.restartNginx() + } + } + + @objc func restartDnsMasq() { + asyncExecution { + Actions.restartDnsMasq() + } + } + + @objc func disableAllXdebugModes() { + guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else { + Log.info("xdebug.mode could not be found in any .ini file, aborting.") + return + } + + do { + try file.replace(key: "xdebug.mode", value: "off") + + Log.perf("Refreshing menu...") + MainMenu.shared.rebuild() + restartPhpFpm() + } catch { + Log.err("There was an issue replacing `xdebug.mode` in \(file.filePath)") + } + } + + @objc func toggleXdebugMode(sender: XdebugMenuItem) { + Log.info("Switching Xdebug to mode: \(sender.mode)") + + guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else { + return Log.info("xdebug.mode could not be found in any .ini file, aborting.") + } + + do { + var modes = Xdebug.activeModes + + if let index = modes.firstIndex(of: sender.mode) { + modes.remove(at: index) + } else { + modes.append(sender.mode) + } + + var newValue = modes.joined(separator: ",") + if newValue.isEmpty { + newValue = "off" + } + + try file.replace(key: "xdebug.mode", value: newValue) + + Log.perf("Refreshing menu...") + MainMenu.shared.rebuild() + restartPhpFpm() + } catch { + Log.err("There was an issue replacing `xdebug.mode` in \(file.filePath)") + } + } + + @objc func toggleExtension(sender: ExtensionMenuItem) { + asyncExecution { + sender.phpExtension?.toggle() + + if Preferences.isEnabled(.autoServiceRestartAfterExtensionToggle) { + Actions.restartPhpFpm() + } + } + } + + @objc func openPhpInfo() { + var url: URL? + + asyncWithBusyUI { + url = Actions.createTempPhpInfoFile() + } completion: { + if url != nil { NSWorkspace.shared.open(url!) } + } + } + + @objc func updateGlobalComposerDependencies() { + ComposerWindow().updateGlobalDependencies( + notify: true, + completion: { _ in } + ) + } + + @objc func openActiveConfigFolder() { + if PhpEnv.phpInstall.version.error { + Actions.openGenericPhpConfigFolder() + return + } + + Actions.openPhpConfigFolder(version: PhpEnv.phpInstall.version.short) + } + + @objc func openGlobalComposerFolder() { + Actions.openGlobalComposerFolder() + } + + @objc func openValetConfigFolder() { + Actions.openValetConfigFolder() + } + + @objc func switchToPhpVersion(sender: PhpMenuItem) { + self.switchToPhpVersion(sender.version) + } + + @objc func switchToPhpVersion(_ version: String) { + setBusyImage() + PhpEnv.shared.isBusy = true + PhpEnv.shared.delegate = self + PhpEnv.shared.delegate?.switcherDidStartSwitching(to: version) + + DispatchQueue.global(qos: .userInitiated).async { [unowned self] in + updatePhpVersionInStatusBar() + rebuild() + PhpEnv.switcher.performSwitch( + to: version, + completion: { + PhpEnv.shared.delegate?.switcherDidCompleteSwitch(to: version) + } + ) + } + } + +} diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 2f7d00b..1eab055 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -45,29 +45,22 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate Use `rebuild(async:)` to ensure the rebuilding happens in the background. */ private func rebuildMenu() { - // Create a new menu let menu = StatusMenu() - // Add the PHP versions (or error messages) menu.addPhpVersionMenuItems() menu.addItem(NSMenuItem.separator()) - // Add the possible actions menu.addPhpActionMenuItems() menu.addItem(NSMenuItem.separator()) - // Add Valet interactions menu.addValetMenuItems() menu.addItem(NSMenuItem.separator()) - // Add services menu.addRemainingMenuItems() menu.addItem(NSMenuItem.separator()) - // Add about & quit menu items menu.addCoreMenuItems() - // Make sure every item can be interacted with menu.items.forEach({ (item) in item.target = self }) @@ -165,202 +158,6 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate } } - // MARK: - Actions - - @objc func fixHomebrewPermissions() { - if !BetterAlert() - .withInformation( - title: "alert.fix_homebrew_permissions.title".localized, - subtitle: "alert.fix_homebrew_permissions.subtitle".localized, - description: "alert.fix_homebrew_permissions.desc".localized - ) - .withPrimary(text: "alert.fix_homebrew_permissions.ok".localized) - .withSecondary(text: "alert.fix_homebrew_permissions.cancel".localized) - .didSelectPrimary() { - return - } - - asyncExecution { - try Actions.fixHomebrewPermissions() - } success: { - BetterAlert() - .withInformation( - title: "alert.fix_homebrew_permissions_done.title".localized, - subtitle: "alert.fix_homebrew_permissions_done.subtitle".localized, - description: "alert.fix_homebrew_permissions_done.desc".localized - ) - .withPrimary(text: "OK") - .show() - } failure: { error in - BetterAlert.show(for: error as! HomebrewPermissionError) - } - } - - @objc func restartPhpFpm() { - asyncExecution { - Actions.restartPhpFpm() - } - } - - @objc func restartAllServices() { - asyncExecution { - Actions.restartDnsMasq() - Actions.restartPhpFpm() - Actions.restartNginx() - } success: { - DispatchQueue.main.async { - LocalNotification.send( - title: "notification.services_restarted".localized, - subtitle: "notification.services_restarted_desc".localized - ) - } - } - } - - @objc func stopAllServices() { - asyncExecution { - Actions.stopAllServices() - } success: { - DispatchQueue.main.async { - LocalNotification.send( - title: "notification.services_stopped".localized, - subtitle: "notification.services_stopped_desc".localized - ) - } - } - } - - @objc func restartNginx() { - asyncExecution { - Actions.restartNginx() - } - } - - @objc func restartDnsMasq() { - asyncExecution { - Actions.restartDnsMasq() - } - } - - @objc func disableAllXdebugModes() { - guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else { - Log.info("xdebug.mode could not be found in any .ini file, aborting.") - return - } - - do { - try file.replace(key: "xdebug.mode", value: "off") - - Log.perf("Refreshing menu...") - MainMenu.shared.rebuild() - restartPhpFpm() - } catch { - Log.err("There was an issue replacing `xdebug.mode` in \(file.filePath)") - } - } - - @objc func toggleXdebugMode(sender: XdebugMenuItem) { - Log.info("Switching Xdebug to mode: \(sender.mode)") - - guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else { - Log.info("xdebug.mode could not be found in any .ini file, aborting.") - return - } - - do { - // Get the active modes - var modes = Xdebug.activeModes - // Set the new modes - if let index = modes.firstIndex(of: sender.mode) { - modes.remove(at: index) - } else { - modes.append(sender.mode) - } - - // Replace the xdebug mode - var newValue = modes.joined(separator: ",") - if newValue.isEmpty { - newValue = "off" - } - - try file.replace(key: "xdebug.mode", value: newValue) - - Log.perf("Refreshing menu...") - MainMenu.shared.rebuild() - restartPhpFpm() - } catch { - Log.err("There was an issue replacing `xdebug.mode` in \(file.filePath)") - } - } - - @objc func toggleExtension(sender: ExtensionMenuItem) { - asyncExecution { - sender.phpExtension?.toggle() - - if Preferences.isEnabled(.autoServiceRestartAfterExtensionToggle) { - Actions.restartPhpFpm() - } - } - } - - @objc func openPhpInfo() { - var url: URL? - - asyncWithBusyUI { - url = Actions.createTempPhpInfoFile() - } completion: { - if url != nil { NSWorkspace.shared.open(url!) } - } - } - - @objc func updateGlobalComposerDependencies() { - ComposerWindow().updateGlobalDependencies( - notify: true, - completion: { _ in } - ) - } - - @objc func openActiveConfigFolder() { - if PhpEnv.phpInstall.version.error { - // php version was not identified - Actions.openGenericPhpConfigFolder() - return - } - - // php version was identified - Actions.openPhpConfigFolder(version: PhpEnv.phpInstall.version.short) - } - - @objc func openGlobalComposerFolder() { - Actions.openGlobalComposerFolder() - } - - @objc func openValetConfigFolder() { - Actions.openValetConfigFolder() - } - - @objc func switchToPhpVersion(sender: PhpMenuItem) { - self.switchToPhpVersion(sender.version) - } - - @objc func switchToPhpVersion(_ version: String) { - setBusyImage() - PhpEnv.shared.isBusy = true - PhpEnv.shared.delegate = self - PhpEnv.shared.delegate?.switcherDidStartSwitching(to: version) - - DispatchQueue.global(qos: .userInitiated).async { [unowned self] in - updatePhpVersionInStatusBar() - rebuild() - PhpEnv.switcher.performSwitch( - to: version, - completion: { - PhpEnv.shared.delegate?.switcherDidCompleteSwitch(to: version) - } - ) - } - } - // MARK: - Menu Item Functionality @objc func openAbout() {