1
0
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:
2019-06-11 20:45:06 +02:00
parent a6d84e196f
commit 5020432bd2
3 changed files with 53 additions and 6 deletions

View File

@ -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
}
}

View File

@ -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>

View File

@ -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)")
}
}
}