mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
👌 Cleanup
This commit is contained in:
@ -242,6 +242,7 @@
|
|||||||
C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D89BC52783C99400A02B68 /* ComposerJson.swift */; };
|
C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D89BC52783C99400A02B68 /* ComposerJson.swift */; };
|
||||||
C4F30B0B278E203C00755FCE /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.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 */; };
|
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 */; };
|
C4F5FBCD28218CB8001065C5 /* Xdebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42337A2281F19F000459A48 /* Xdebug.swift */; };
|
||||||
C4F7809C25D80344000DBC97 /* CommandTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F7809B25D80344000DBC97 /* CommandTest.swift */; };
|
C4F7809C25D80344000DBC97 /* CommandTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F7809B25D80344000DBC97 /* CommandTest.swift */; };
|
||||||
C4F780A825D80AE8000DBC97 /* php.ini in Resources */ = {isa = PBXBuildFile; fileRef = C4F780A725D80AE8000DBC97 /* php.ini */; };
|
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 = "<group>"; };
|
C4F2E4392752F7D00020E974 /* PhpInstallation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpInstallation.swift; sourceTree = "<group>"; };
|
||||||
C4F30B02278E16BA00755FCE /* HomebrewService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewService.swift; sourceTree = "<group>"; };
|
C4F30B02278E16BA00755FCE /* HomebrewService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewService.swift; sourceTree = "<group>"; };
|
||||||
C4F30B06278E195800755FCE /* brew-services.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "brew-services.json"; sourceTree = "<group>"; };
|
C4F30B06278E195800755FCE /* brew-services.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "brew-services.json"; sourceTree = "<group>"; };
|
||||||
|
C4F361602836BFD9003598CC /* MainMenu+Actions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+Actions.swift"; sourceTree = "<group>"; };
|
||||||
C4F5FBCC28218C93001065C5 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = "<group>"; };
|
C4F5FBCC28218C93001065C5 /* .swiftlint.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = "<group>"; };
|
||||||
C4F7807925D7F84B000DBC97 /* phpmon-tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "phpmon-tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
|
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 = "<group>"; };
|
C4F7807D25D7F84B000DBC97 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
@ -738,6 +740,7 @@
|
|||||||
C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */,
|
C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */,
|
||||||
C4CE3BB727B31F2E0086CA49 /* MainMenu+Switcher.swift */,
|
C4CE3BB727B31F2E0086CA49 /* MainMenu+Switcher.swift */,
|
||||||
C42C49DA27C2806F0074ABAC /* MainMenu+FixMyValet.swift */,
|
C42C49DA27C2806F0074ABAC /* MainMenu+FixMyValet.swift */,
|
||||||
|
C4F361602836BFD9003598CC /* MainMenu+Actions.swift */,
|
||||||
C47331A1247093B7009A0597 /* StatusMenu.swift */,
|
C47331A1247093B7009A0597 /* StatusMenu.swift */,
|
||||||
C48D0C9525CC80B100CC7490 /* HeaderView.swift */,
|
C48D0C9525CC80B100CC7490 /* HeaderView.swift */,
|
||||||
C48D0C9925CC888B00CC7490 /* HeaderView.xib */,
|
C48D0C9925CC888B00CC7490 /* HeaderView.xib */,
|
||||||
@ -1197,6 +1200,7 @@
|
|||||||
C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */,
|
C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */,
|
||||||
C415D3B72770F294005EF286 /* Actions.swift in Sources */,
|
C415D3B72770F294005EF286 /* Actions.swift in Sources */,
|
||||||
C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */,
|
C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */,
|
||||||
|
C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */,
|
||||||
C44C198D276E3A1C0072762D /* ProgressWindow.swift in Sources */,
|
C44C198D276E3A1C0072762D /* ProgressWindow.swift in Sources */,
|
||||||
54D9E0B827E4F51E003B9AD9 /* KeyCombo.swift in Sources */,
|
54D9E0B827E4F51E003B9AD9 /* KeyCombo.swift in Sources */,
|
||||||
C4C0E8E727F88B41002D32A9 /* ProxyScanner.swift in Sources */,
|
C4C0E8E727F88B41002D32A9 /* ProxyScanner.swift in Sources */,
|
||||||
@ -1544,7 +1548,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 790;
|
CURRENT_PROJECT_VERSION = 795;
|
||||||
DEBUG = YES;
|
DEBUG = YES;
|
||||||
DEVELOPMENT_TEAM = 8M54J5J787;
|
DEVELOPMENT_TEAM = 8M54J5J787;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
@ -1570,7 +1574,7 @@
|
|||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
CURRENT_PROJECT_VERSION = 790;
|
CURRENT_PROJECT_VERSION = 795;
|
||||||
DEBUG = NO;
|
DEBUG = NO;
|
||||||
DEVELOPMENT_TEAM = 8M54J5J787;
|
DEVELOPMENT_TEAM = 8M54J5J787;
|
||||||
ENABLE_HARDENED_RUNTIME = YES;
|
ENABLE_HARDENED_RUNTIME = YES;
|
||||||
|
204
phpmon/Domain/Menu/MainMenu+Actions.swift
Normal file
204
phpmon/Domain/Menu/MainMenu+Actions.swift
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -45,29 +45,22 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate
|
|||||||
Use `rebuild(async:)` to ensure the rebuilding happens in the background.
|
Use `rebuild(async:)` to ensure the rebuilding happens in the background.
|
||||||
*/
|
*/
|
||||||
private func rebuildMenu() {
|
private func rebuildMenu() {
|
||||||
// Create a new menu
|
|
||||||
let menu = StatusMenu()
|
let menu = StatusMenu()
|
||||||
|
|
||||||
// Add the PHP versions (or error messages)
|
|
||||||
menu.addPhpVersionMenuItems()
|
menu.addPhpVersionMenuItems()
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
// Add the possible actions
|
|
||||||
menu.addPhpActionMenuItems()
|
menu.addPhpActionMenuItems()
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
// Add Valet interactions
|
|
||||||
menu.addValetMenuItems()
|
menu.addValetMenuItems()
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
// Add services
|
|
||||||
menu.addRemainingMenuItems()
|
menu.addRemainingMenuItems()
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
|
||||||
// Add about & quit menu items
|
|
||||||
menu.addCoreMenuItems()
|
menu.addCoreMenuItems()
|
||||||
|
|
||||||
// Make sure every item can be interacted with
|
|
||||||
menu.items.forEach({ (item) in
|
menu.items.forEach({ (item) in
|
||||||
item.target = self
|
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
|
// MARK: - Menu Item Functionality
|
||||||
|
|
||||||
@objc func openAbout() {
|
@objc func openAbout() {
|
||||||
|
Reference in New Issue
Block a user