mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-10 21:10:08 +02:00
✨ Switch PHP versions (on the main thread)
This commit is contained in:
@@ -13,14 +13,18 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||||||
|
|
||||||
var timer: Timer?
|
var timer: Timer?
|
||||||
var version: PhpVersionExtractor? = nil
|
var version: PhpVersionExtractor? = nil
|
||||||
|
var availablePhpVersions : [String] = []
|
||||||
|
var busy: Bool = false
|
||||||
|
|
||||||
let statusItem = NSStatusBar.system.statusItem(
|
let statusItem = NSStatusBar.system.statusItem(
|
||||||
withLength: 32
|
withLength: 32
|
||||||
)
|
)
|
||||||
|
|
||||||
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||||
|
self.availablePhpVersions = Services.detectPhpVersions()
|
||||||
self.setStatusBarImage(version: "???")
|
self.setStatusBarImage(version: "???")
|
||||||
self.updatePhpVersionInStatusBar()
|
self.updatePhpVersionInStatusBar()
|
||||||
|
print(self.availablePhpVersions)
|
||||||
// Schedule a request to fetch the PHP version every 15 seconds
|
// Schedule a request to fetch the PHP version every 15 seconds
|
||||||
Timer.scheduledTimer(timeInterval: 15, target: self, selector: #selector(updatePhpVersionInStatusBar), userInfo: nil, repeats: true)
|
Timer.scheduledTimer(timeInterval: 15, target: self, selector: #selector(updatePhpVersionInStatusBar), userInfo: nil, repeats: true)
|
||||||
}
|
}
|
||||||
@@ -52,16 +56,34 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
|||||||
}
|
}
|
||||||
menu.addItem(NSMenuItem(title: string, action: nil, keyEquivalent: ""))
|
menu.addItem(NSMenuItem(title: string, action: nil, keyEquivalent: ""))
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
/*
|
if (self.availablePhpVersions.count > 0 && !busy) {
|
||||||
// TODO: Add menu items based on available PHP versions
|
for index in (0..<self.availablePhpVersions.count) {
|
||||||
menu.addItem(NSMenuItem(title: "Switch to PHP 5.6", action: #selector(switchPhpVersion(version:)), keyEquivalent: "1"))
|
let version = self.availablePhpVersions[index]
|
||||||
|
let action = #selector(self.switchToPhpVersion(sender:))
|
||||||
|
let menuItem = NSMenuItem(title: "Switch to PHP \(version)", action: (version == self.version?.short) ? nil : action, keyEquivalent: "\(index + 1)")
|
||||||
|
menuItem.tag = index
|
||||||
|
menu.addItem(menuItem)
|
||||||
|
}
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
*/
|
}
|
||||||
|
if (self.busy) {
|
||||||
|
menu.addItem(NSMenuItem(title: "Switching PHP versions...", action: nil, keyEquivalent: ""))
|
||||||
|
menu.addItem(NSMenuItem.separator())
|
||||||
|
}
|
||||||
menu.addItem(NSMenuItem(title: Services.mysqlIsRunning() ? "You are running MySQL" : "MySQL is not active", action: nil, keyEquivalent: ""))
|
menu.addItem(NSMenuItem(title: Services.mysqlIsRunning() ? "You are running MySQL" : "MySQL is not active", action: nil, keyEquivalent: ""))
|
||||||
menu.addItem(NSMenuItem(title: Services.nginxIsRunning() ? "You are running nginx" : "nginx is not active", action: nil, keyEquivalent: ""))
|
menu.addItem(NSMenuItem(title: Services.nginxIsRunning() ? "You are running nginx" : "nginx is not active", action: nil, keyEquivalent: ""))
|
||||||
menu.addItem(NSMenuItem.separator())
|
menu.addItem(NSMenuItem.separator())
|
||||||
menu.addItem(NSMenuItem(title: "Quit phpmon", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
|
menu.addItem(NSMenuItem(title: "Quit phpmon", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
|
||||||
statusItem.menu = menu
|
statusItem.menu = menu
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@objc func switchToPhpVersion(sender: AnyObject) {
|
||||||
|
let index = sender.tag!
|
||||||
|
let version = self.availablePhpVersions[index]
|
||||||
|
print("User wishes to switch to: \(version)")
|
||||||
|
self.busy = true
|
||||||
|
Services.switchToPhpVersion(version: version, availableVersions: self.availablePhpVersions)
|
||||||
|
self.busy = false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -58,7 +58,7 @@
|
|||||||
<scene sceneID="hIz-AP-VOD">
|
<scene sceneID="hIz-AP-VOD">
|
||||||
<objects>
|
<objects>
|
||||||
<viewController id="XfG-lQ-9wD" customClass="ViewController" customModule="phpmon" customModuleProvider="target" sceneMemberID="viewController">
|
<viewController id="XfG-lQ-9wD" customClass="ViewController" customModule="phpmon" customModuleProvider="target" sceneMemberID="viewController">
|
||||||
<view key="view" id="m2S-Jp-Qdl">
|
<view key="view" identifier="main" id="m2S-Jp-Qdl">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="425" height="264"/>
|
<rect key="frame" x="0.0" y="0.0" width="425" height="264"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</view>
|
</view>
|
||||||
|
@@ -24,4 +24,29 @@ class Services {
|
|||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static func detectPhpVersions() -> [String] {
|
||||||
|
let files = Shell.execute(command: "ls /usr/local/opt | grep php@")
|
||||||
|
var versions = files!.components(separatedBy: "\n")
|
||||||
|
// Remove all empty strings
|
||||||
|
versions.removeAll { (string) -> Bool in
|
||||||
|
return (string == "")
|
||||||
|
}
|
||||||
|
// Get a list of versions only
|
||||||
|
var versionsOnly : [String] = []
|
||||||
|
versions.forEach { (string) in
|
||||||
|
versionsOnly.append(string.components(separatedBy: "php@")[1])
|
||||||
|
}
|
||||||
|
return versionsOnly
|
||||||
|
}
|
||||||
|
|
||||||
|
public static func switchToPhpVersion(version: String, availableVersions: [String]) {
|
||||||
|
availableVersions.forEach { (version) in
|
||||||
|
_ = Shell.execute(command: "brew unlink php@\(version)")
|
||||||
|
}
|
||||||
|
if (availableVersions.contains("7.3")) {
|
||||||
|
_ = Shell.execute(command: "brew link php@7.3")
|
||||||
|
_ = Shell.execute(command: "valet use php@\(version)")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user