diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 428745e..c2c1d6b 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -21,6 +21,8 @@ C41C1B4D22B0215A00E7CF16 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C1B4C22B0215A00E7CF16 /* Actions.swift */; }; C42295DD2358D02000E263B2 /* Command.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42295DC2358D02000E263B2 /* Command.swift */; }; C4232EE52612526500158FC6 /* Credits.html in Resources */ = {isa = PBXBuildFile; fileRef = C4232EE42612526500158FC6 /* Credits.html */; }; + C42759672627662800093CAE /* NSMenuExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42759662627662800093CAE /* NSMenuExtension.swift */; }; + C42759682627662800093CAE /* NSMenuExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42759662627662800093CAE /* NSMenuExtension.swift */; }; C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; }; C43A8A2025D9D1D700591B77 /* brew.json in Resources */ = {isa = PBXBuildFile; fileRef = C43A8A1F25D9D1D700591B77 /* brew.json */; }; C43A8A2425D9D20D00591B77 /* BrewJsonParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A2325D9D20D00591B77 /* BrewJsonParserTest.swift */; }; @@ -101,6 +103,7 @@ C41C1B4C22B0215A00E7CF16 /* Actions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = ""; }; C42295DC2358D02000E263B2 /* Command.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Command.swift; sourceTree = ""; }; C4232EE42612526500158FC6 /* Credits.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = Credits.html; sourceTree = ""; }; + C42759662627662800093CAE /* NSMenuExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSMenuExtension.swift; sourceTree = ""; }; C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C43A8A1F25D9D1D700591B77 /* brew.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = brew.json; sourceTree = ""; }; C43A8A2325D9D20D00591B77 /* BrewJsonParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewJsonParserTest.swift; sourceTree = ""; }; @@ -291,6 +294,7 @@ C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */, C46FA23E246C358E00944F05 /* StringExtension.swift */, C48D0C9225CC804200CC7490 /* XibLoadable.swift */, + C42759662627662800093CAE /* NSMenuExtension.swift */, ); path = Extensions; sourceTree = ""; @@ -425,6 +429,7 @@ C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */, C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */, C41C1B3722B0097F00E7CF16 /* AppDelegate.swift in Sources */, + C42759672627662800093CAE /* NSMenuExtension.swift in Sources */, C41C1B4B22B019FF00E7CF16 /* PhpInstallation.swift in Sources */, C49EAB46259FC305007F6C3B /* Paths.swift in Sources */, C476FF9822B0DD830098105B /* Alert.swift in Sources */, @@ -451,6 +456,7 @@ C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */, C4F780AE25D80B37000DBC97 /* ExtensionParserTest.swift in Sources */, C4F780C725D80B75000DBC97 /* StatusMenu.swift in Sources */, + C42759682627662800093CAE /* NSMenuExtension.swift in Sources */, C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */, C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */, C4F7809C25D80344000DBC97 /* CommandTest.swift in Sources */, diff --git a/phpmon/Domain/Extensions/NSMenuExtension.swift b/phpmon/Domain/Extensions/NSMenuExtension.swift new file mode 100644 index 0000000..adff639 --- /dev/null +++ b/phpmon/Domain/Extensions/NSMenuExtension.swift @@ -0,0 +1,18 @@ +// +// NSMenuExtension.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 14/04/2021. +// Copyright © 2021 Nico Verbruggen. All rights reserved. +// + +import Cocoa + +extension NSMenu { + + open func addItem(_ newItem: NSMenuItem, withKeyModifier modifier: NSEvent.ModifierFlags) { + newItem.keyEquivalentModifierMask = modifier + self.addItem(newItem) + } + +} diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 35697f0..e9870c1 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -215,12 +215,26 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate { Actions.restartDnsMasq() Actions.restartPhpFpm() Actions.restartNginx() + } completion: { + DispatchQueue.main.async { + LocalNotification.send( + title: "notification.services_restarted".localized, + subtitle: "notification.services_restarted_desc".localized + ) + } } } @objc func stopAllServices() { waitAndExecute { Actions.stopAllServices() + } completion: { + DispatchQueue.main.async { + LocalNotification.send( + title: "notification.services_stopped".localized, + subtitle: "notification.services_stopped_desc".localized + ) + } } } @@ -283,14 +297,12 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate { } @objc func switchToPhpVersion(sender: PhpMenuItem) { - // print("Switching to: PHP \(sender.version)") - setBusyImage() App.shared.busy = true DispatchQueue.global(qos: .userInitiated).async { [unowned self] in // Update the PHP version in the status bar - updatePhpVersionInStatusBar() + updatePhpVersionInStatusBar() // Update the menu update() diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 5d2d7a9..d06b364 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -58,11 +58,15 @@ class StatusMenu : NSMenu { private func addServicesMenuItems() { self.addItem(HeaderView.asMenuItem(text: "mi_active_services".localized)) - let services = NSMenuItem(title: "mi_restart_specific".localized, action: nil, keyEquivalent: "") + let services = NSMenuItem(title: "mi_manage_services".localized, action: nil, keyEquivalent: "") let servicesMenu = NSMenu() servicesMenu.addItem(NSMenuItem(title: "mi_restart_dnsmasq".localized, action: #selector(MainMenu.restartDnsMasq), keyEquivalent: "d")) servicesMenu.addItem(NSMenuItem(title: "mi_restart_php_fpm".localized, action: #selector(MainMenu.restartPhpFpm), keyEquivalent: "p")) servicesMenu.addItem(NSMenuItem(title: "mi_restart_nginx".localized, action: #selector(MainMenu.restartNginx), keyEquivalent: "n")) + servicesMenu.addItem( + NSMenuItem(title: "mi_stop_all_services".localized, action: #selector(MainMenu.stopAllServices), keyEquivalent: "s"), + withKeyModifier: [.command, .shift] + ) for item in servicesMenu.items { item.target = MainMenu.shared } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 70e6987..3bb963c 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -22,7 +22,7 @@ "mi_restart_php_fpm" = "Restart service: php"; "mi_restart_nginx" = "Restart service: nginx"; "mi_restart_dnsmasq" = "Restart service: dnsmasq"; -"mi_restart_specific" = "Restart specific service"; +"mi_manage_services" = "Manage services"; "mi_restart_all_services" = "Restart all services"; "mi_stop_all_services" = "Stop all services"; "mi_force_load_latest" = "Force load latest PHP version"; @@ -60,6 +60,12 @@ "notification.version_changed_title" = "PHP %@ now active"; "notification.version_changed_desc" = "PHP Monitor has finished the switch to PHP %@."; +"notification.services_stopped" = "Valet services stopped"; +"notification.services_stopped_desc" = "All services have been successfully stopped."; + +"notification.services_restarted" = "Valet services restarted"; +"notification.services_restarted_desc" = "All services have been successfully restarted."; + // ALERTS // Force Reload Started