mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-07 03:50: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 version: PhpVersionExtractor? = nil
|
||||
var availablePhpVersions : [String] = []
|
||||
var busy: Bool = false
|
||||
|
||||
let statusItem = NSStatusBar.system.statusItem(
|
||||
withLength: 32
|
||||
)
|
||||
|
||||
func applicationDidFinishLaunching(_ aNotification: Notification) {
|
||||
self.availablePhpVersions = Services.detectPhpVersions()
|
||||
self.setStatusBarImage(version: "???")
|
||||
self.updatePhpVersionInStatusBar()
|
||||
print(self.availablePhpVersions)
|
||||
// Schedule a request to fetch the PHP version every 15 seconds
|
||||
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.separator())
|
||||
/*
|
||||
// TODO: Add menu items based on available PHP versions
|
||||
menu.addItem(NSMenuItem(title: "Switch to PHP 5.6", action: #selector(switchPhpVersion(version:)), keyEquivalent: "1"))
|
||||
menu.addItem(NSMenuItem.separator())
|
||||
*/
|
||||
if (self.availablePhpVersions.count > 0 && !busy) {
|
||||
for index in (0..<self.availablePhpVersions.count) {
|
||||
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())
|
||||
}
|
||||
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.nginxIsRunning() ? "You are running nginx" : "nginx is not active", action: nil, keyEquivalent: ""))
|
||||
menu.addItem(NSMenuItem.separator())
|
||||
menu.addItem(NSMenuItem(title: "Quit phpmon", action: #selector(NSApplication.terminate(_:)), keyEquivalent: "q"))
|
||||
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">
|
||||
<objects>
|
||||
<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"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</view>
|
||||
|
@ -24,4 +24,29 @@ class Services {
|
||||
}
|
||||
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