mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
✨ Project structure changes, version change
This commit is contained in:
@@ -16,7 +16,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
)
|
||||
|
||||
var timer: Timer?
|
||||
var version: PHPVersion? = nil
|
||||
var version: PhpVersion? = nil
|
||||
var availablePhpVersions : [String] = []
|
||||
var busy: Bool = false
|
||||
|
||||
@@ -25,7 +25,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
self.setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!)
|
||||
// Perform environment boot checks
|
||||
DispatchQueue.global(qos: .userInitiated).async { [unowned self] in
|
||||
Environment.performBootChecks()
|
||||
BootChecks.perform()
|
||||
self.availablePhpVersions = Services.detectPhpVersions()
|
||||
print("The following PHP versions were detected:")
|
||||
print(self.availablePhpVersions)
|
||||
@@ -57,7 +57,7 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
}
|
||||
|
||||
@objc func updatePhpVersionInStatusBar() {
|
||||
self.version = PHPVersion()
|
||||
self.version = PhpVersion()
|
||||
if (self.busy) {
|
||||
DispatchQueue.main.async {
|
||||
self.setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!)
|
||||
@@ -78,6 +78,12 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
string = "You are running PHP \(self.version!.long)"
|
||||
}
|
||||
menu.addItem(NSMenuItem(title: string, action: nil, keyEquivalent: ""))
|
||||
if (self.version != nil) {
|
||||
// Actions
|
||||
menu.addItem(NSMenuItem.separator())
|
||||
menu.addItem(NSMenuItem(title: "Open php.ini in Finder", action: #selector(self.openActiveConfigFolder), keyEquivalent: ""))
|
||||
// menu.addItem(NSMenuItem(title: "Restart PHP \(self.version!.short) service", action: #selector(self.restartPhp), keyEquivalent: ""))
|
||||
}
|
||||
menu.addItem(NSMenuItem.separator())
|
||||
if (self.availablePhpVersions.count > 0 && !self.busy) {
|
||||
var shortcutKey = 1
|
||||
@@ -108,6 +114,16 @@ class AppDelegate: NSObject, NSApplicationDelegate {
|
||||
NSApplication.shared.orderFrontStandardAboutPanel()
|
||||
}
|
||||
|
||||
@objc public func openActiveConfigFolder()
|
||||
{
|
||||
Services.openPhpConfigFolder(version: self.version!.short)
|
||||
}
|
||||
|
||||
@objc public func restartPhp()
|
||||
{
|
||||
Services.restartPhp(version: self.version!.short)
|
||||
}
|
||||
|
||||
@objc public func switchToPhpVersion(sender: AnyObject) {
|
||||
self.setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!)
|
||||
let index = sender.tag!
|
||||
|
@@ -8,21 +8,23 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
class PHPVersion {
|
||||
class PhpVersion {
|
||||
|
||||
var short : String = "???"
|
||||
var long : String = "???"
|
||||
|
||||
init() {
|
||||
// Get the info about the PHP installation
|
||||
let output = Shell.execute(command: "php -v")
|
||||
// Get everything before "(cli)" (PHP X.X.X (cli) ...)
|
||||
var version = output.components(separatedBy: " (cli)")[0]
|
||||
// Strip away the text before the version number
|
||||
version = version.components(separatedBy: "PHP ")[1]
|
||||
let version = Shell
|
||||
// Get the version directly from PHP
|
||||
.execute(command: "php -r 'print phpversion();'")
|
||||
// also remove any colors
|
||||
.replacingOccurrences(of: "\u{1b}(B\u{1b}[m", with: "")
|
||||
|
||||
// That's the long version
|
||||
self.long = version
|
||||
|
||||
// Next up, let's strip away the minor version number
|
||||
let segments = version.components(separatedBy: ".")
|
||||
let segments = long.components(separatedBy: ".")
|
||||
// Get the first two elements
|
||||
self.short = segments[0...1].joined(separator: ".")
|
||||
}
|
@@ -17,9 +17,11 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.0</string>
|
||||
<string>1.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>4</string>
|
||||
<string>10</string>
|
||||
<key>LSApplicationCategoryType</key>
|
||||
<string>public.app-category.utilities</string>
|
||||
<key>LSMinimumSystemVersion</key>
|
||||
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
|
||||
<key>LSUIElement</key>
|
||||
|
@@ -8,22 +8,9 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
class Environment {
|
||||
class BootChecks {
|
||||
|
||||
public static func presentAlertOnMainThreadIf(_ condition: Bool, messageText: String, informativeText: String)
|
||||
{
|
||||
if (condition) {
|
||||
DispatchQueue.main.async {
|
||||
Alert.present(
|
||||
messageText: messageText,
|
||||
informativeText: informativeText
|
||||
)
|
||||
}
|
||||
// TODO: Quit the app in any of these scenarios?
|
||||
}
|
||||
}
|
||||
|
||||
public static func performBootChecks()
|
||||
public static func perform()
|
||||
{
|
||||
self.presentAlertOnMainThreadIf(
|
||||
!Shell.execute(command: "which php").contains("/usr/local/bin/php"),
|
||||
@@ -43,6 +30,32 @@ class Environment {
|
||||
informativeText: "You must install Valet via brew. Try running `which valet` in Terminal, it should return `/usr/local/bin/valet`. The app will not work correctly until you resolve this issue."
|
||||
)
|
||||
|
||||
// TODO: Add check for /private/etc/sudoers.d/brew || /private/etc/sudoers.d/valet
|
||||
self.presentAlertOnMainThreadIf(
|
||||
!Shell.execute(command: "cat /private/etc/sudoers.d/brew").contains("/usr/local/bin/brew"),
|
||||
messageText: "Brew has not been added to sudoers.d",
|
||||
informativeText: "You must run `sudo valet trust` to ensure Valet can start and stop services without having to use sudo every time. The app will not work correctly until you resolve this issue."
|
||||
)
|
||||
|
||||
self.presentAlertOnMainThreadIf(
|
||||
!Shell.execute(command: "cat /private/etc/sudoers.d/valet").contains("/usr/local/bin/valet"),
|
||||
messageText: "Valet has not been added to sudoers.d",
|
||||
informativeText: "You must run `sudo valet trust` to ensure Valet can start and stop services without having to use sudo every time. The app will not work correctly until you resolve this issue."
|
||||
)
|
||||
}
|
||||
|
||||
private static func presentAlertOnMainThreadIf(
|
||||
_ condition: Bool,
|
||||
messageText: String,
|
||||
informativeText: String
|
||||
)
|
||||
{
|
||||
if (condition) {
|
||||
DispatchQueue.main.async {
|
||||
Alert.present(
|
||||
messageText: messageText,
|
||||
informativeText: informativeText
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@@ -7,6 +7,7 @@
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import AppKit
|
||||
|
||||
class Services {
|
||||
public static func mysqlIsRunning() -> Bool {
|
||||
@@ -43,4 +44,13 @@ class Services {
|
||||
_ = Shell.execute(command: "valet use php@\(version)")
|
||||
}
|
||||
}
|
||||
|
||||
public static func restartPhp(version: String) {
|
||||
_ = Shell.execute(command: "brew services restart php@\(version)")
|
||||
}
|
||||
|
||||
public static func openPhpConfigFolder(version: String) {
|
||||
let files = [NSURL(fileURLWithPath: "/usr/local/etc/php/\(version)/php.ini")];
|
||||
NSWorkspace.shared.activateFileViewerSelecting(files as [URL]);
|
||||
}
|
||||
}
|
@@ -9,6 +9,7 @@
|
||||
import Cocoa
|
||||
|
||||
class Shell {
|
||||
|
||||
public static func execute(command: String) -> String
|
||||
{
|
||||
let task = Process()
|
||||
@@ -20,7 +21,11 @@ class Shell {
|
||||
task.launch()
|
||||
|
||||
let data = pipe.fileHandleForReading.readDataToEndOfFile()
|
||||
let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue)! as String
|
||||
|
||||
let output: String = NSString(
|
||||
data: data,
|
||||
encoding: String.Encoding.utf8.rawValue
|
||||
)! as String
|
||||
|
||||
return output
|
||||
}
|
Reference in New Issue
Block a user