mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-08-08 04:20:07 +02:00
♻️ Added logger class
This commit is contained in:
@ -35,6 +35,9 @@
|
|||||||
C40C7F2827721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; };
|
C40C7F2827721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; };
|
||||||
C40C7F2927721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; };
|
C40C7F2927721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; };
|
||||||
C40C7F2B2772201C00DDDCDC /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
C40C7F2B2772201C00DDDCDC /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
||||||
|
C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
||||||
|
C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
||||||
|
C40C7F3227722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; };
|
||||||
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; };
|
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; };
|
||||||
C415D3B72770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
C415D3B72770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
||||||
C415D3B82770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
C415D3B82770F294005EF286 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; };
|
||||||
@ -189,6 +192,7 @@
|
|||||||
C405A4CF24B9B9140062FAFA /* InternetAccessPolicy.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = InternetAccessPolicy.plist; sourceTree = "<group>"; };
|
C405A4CF24B9B9140062FAFA /* InternetAccessPolicy.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = InternetAccessPolicy.plist; sourceTree = "<group>"; };
|
||||||
C40C7F1D2772136000DDDCDC /* PhpSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpSwitcher.swift; sourceTree = "<group>"; };
|
C40C7F1D2772136000DDDCDC /* PhpSwitcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpSwitcher.swift; sourceTree = "<group>"; };
|
||||||
C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = "<group>"; };
|
C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = "<group>"; };
|
||||||
|
C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; };
|
||||||
C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackage.swift; sourceTree = "<group>"; };
|
C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackage.swift; sourceTree = "<group>"; };
|
||||||
C415D3B62770F294005EF286 /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = "<group>"; };
|
C415D3B62770F294005EF286 /* Actions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Actions.swift; sourceTree = "<group>"; };
|
||||||
C415D3D62770F341005EF286 /* phpmon-cli */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "phpmon-cli"; sourceTree = BUILT_PRODUCTS_DIR; };
|
C415D3D62770F341005EF286 /* phpmon-cli */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "phpmon-cli"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@ -354,6 +358,7 @@
|
|||||||
C4B5853D2770FE3900DA4FBE /* Command.swift */,
|
C4B5853D2770FE3900DA4FBE /* Command.swift */,
|
||||||
C4B5853B2770FE3900DA4FBE /* Paths.swift */,
|
C4B5853B2770FE3900DA4FBE /* Paths.swift */,
|
||||||
C4B5853C2770FE3900DA4FBE /* Shell.swift */,
|
C4B5853C2770FE3900DA4FBE /* Shell.swift */,
|
||||||
|
C40C7F2F27722E8D00DDDCDC /* Logger.swift */,
|
||||||
);
|
);
|
||||||
path = Core;
|
path = Core;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@ -745,6 +750,7 @@
|
|||||||
C40C7F2327721F8200DDDCDC /* ActivePhpInstallation.swift in Sources */,
|
C40C7F2327721F8200DDDCDC /* ActivePhpInstallation.swift in Sources */,
|
||||||
C4B585462770FE3900DA4FBE /* Command.swift in Sources */,
|
C4B585462770FE3900DA4FBE /* Command.swift in Sources */,
|
||||||
C40C7F2527721F9800DDDCDC /* HomebrewPackage.swift in Sources */,
|
C40C7F2527721F9800DDDCDC /* HomebrewPackage.swift in Sources */,
|
||||||
|
C40C7F3227722E8D00DDDCDC /* Logger.swift in Sources */,
|
||||||
C40C7F2B2772201C00DDDCDC /* Actions.swift in Sources */,
|
C40C7F2B2772201C00DDDCDC /* Actions.swift in Sources */,
|
||||||
C415D3E12770F34D005EF286 /* AllowedArguments.swift in Sources */,
|
C415D3E12770F34D005EF286 /* AllowedArguments.swift in Sources */,
|
||||||
C40C7F202772136000DDDCDC /* PhpSwitcher.swift in Sources */,
|
C40C7F202772136000DDDCDC /* PhpSwitcher.swift in Sources */,
|
||||||
@ -786,6 +792,7 @@
|
|||||||
C48D0C9325CC804200CC7490 /* XibLoadable.swift in Sources */,
|
C48D0C9325CC804200CC7490 /* XibLoadable.swift in Sources */,
|
||||||
54FCFD2A276C8AA4004CE748 /* CheckboxPreferenceView.swift in Sources */,
|
54FCFD2A276C8AA4004CE748 /* CheckboxPreferenceView.swift in Sources */,
|
||||||
C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */,
|
C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */,
|
||||||
|
C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */,
|
||||||
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */,
|
C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */,
|
||||||
54AB03262763858F00A29D5F /* Timer.swift in Sources */,
|
54AB03262763858F00A29D5F /* Timer.swift in Sources */,
|
||||||
C4C8E81B276F54E5003AC782 /* PhpConfigWatcher.swift in Sources */,
|
C4C8E81B276F54E5003AC782 /* PhpConfigWatcher.swift in Sources */,
|
||||||
@ -846,6 +853,7 @@
|
|||||||
C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */,
|
C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */,
|
||||||
C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */,
|
C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */,
|
||||||
C41E871B2763D42300161EE0 /* SiteListVC+ContextMenu.swift in Sources */,
|
C41E871B2763D42300161EE0 /* SiteListVC+ContextMenu.swift in Sources */,
|
||||||
|
C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */,
|
||||||
C464ADB3275A87CA003FCD53 /* SiteListCell.swift in Sources */,
|
C464ADB3275A87CA003FCD53 /* SiteListCell.swift in Sources */,
|
||||||
C415D3E92770F692005EF286 /* AppDelegate+InterApp.swift in Sources */,
|
C415D3E92770F692005EF286 /* AppDelegate+InterApp.swift in Sources */,
|
||||||
C4AF9F78275447F100D44ED0 /* ValetConfigParserTest.swift in Sources */,
|
C4AF9F78275447F100D44ED0 /* ValetConfigParserTest.swift in Sources */,
|
||||||
|
@ -15,17 +15,25 @@ import Foundation
|
|||||||
// Information about the PHP versions
|
// Information about the PHP versions
|
||||||
// etc.: needs to be stored in a separate object we can instantiate here and in PHP Monitor.
|
// etc.: needs to be stored in a separate object we can instantiate here and in PHP Monitor.
|
||||||
|
|
||||||
print(CommandLine.arguments)
|
var logger = Log.shared
|
||||||
|
logger.verbosity = .warning
|
||||||
|
|
||||||
if CommandLine.arguments.count != 3 {
|
if CommandLine.arguments.count < 3 {
|
||||||
print("You must enter two arguments.")
|
Log.err("You must enter at least two additional arguments.")
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if CommandLine.arguments.contains("-v") || CommandLine.arguments.contains("--verbose") {
|
||||||
|
logger.verbosity = .info
|
||||||
|
}
|
||||||
|
if CommandLine.arguments.contains("-p") || CommandLine.arguments.contains("--performance") {
|
||||||
|
logger.verbosity = .performance
|
||||||
|
}
|
||||||
|
|
||||||
let argument = CommandLine.arguments[1]
|
let argument = CommandLine.arguments[1]
|
||||||
|
|
||||||
if !AllowedArguments.has(argument) {
|
if !AllowedArguments.has(argument) {
|
||||||
print("The supported arguments are: \(AllowedArguments.rawValues)")
|
Log.err("The supported arguments are: \(AllowedArguments.rawValues)")
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,9 +45,9 @@ PhpSwitcher.detectPhpVersions()
|
|||||||
switch action {
|
switch action {
|
||||||
case .use:
|
case .use:
|
||||||
let version = CommandLine.arguments[2]
|
let version = CommandLine.arguments[2]
|
||||||
print("Switching to PHP \(version)...")
|
Log.info("Switching to PHP \(version)...")
|
||||||
break
|
break
|
||||||
case .none:
|
case .none:
|
||||||
print("Action not recognized!")
|
Log.err("Action not recognized!")
|
||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,8 @@ class Actions {
|
|||||||
availableVersions: [String],
|
availableVersions: [String],
|
||||||
completed: @escaping () -> Void
|
completed: @escaping () -> Void
|
||||||
) {
|
) {
|
||||||
print("Switching to \(version) using Valet")
|
Log.info("Switching to \(version) using Valet")
|
||||||
print(valet("use php@\(version)"))
|
Log.info(valet("use php@\(version)"))
|
||||||
completed()
|
completed()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ class Actions {
|
|||||||
availableVersions: [String],
|
availableVersions: [String],
|
||||||
completed: @escaping () -> Void
|
completed: @escaping () -> Void
|
||||||
) {
|
) {
|
||||||
print("Switching to \(version), unlinking all versions...")
|
Log.info("Switching to \(version), unlinking all versions...")
|
||||||
|
|
||||||
let group = DispatchGroup()
|
let group = DispatchGroup()
|
||||||
|
|
||||||
@ -80,14 +80,14 @@ class Actions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
group.notify(queue: .global(qos: .userInitiated)) {
|
group.notify(queue: .global(qos: .userInitiated)) {
|
||||||
print("All versions have been unlinked!")
|
Log.info("All versions have been unlinked!")
|
||||||
print("Linking the new version!")
|
Log.info("Linking the new version!")
|
||||||
|
|
||||||
let formula = (version == PhpSwitcher.brewPhpVersion) ? "php" : "php@\(version)"
|
let formula = (version == PhpSwitcher.brewPhpVersion) ? "php" : "php@\(version)"
|
||||||
brew("link \(formula) --overwrite --force")
|
brew("link \(formula) --overwrite --force")
|
||||||
brew("services start \(formula)", sudo: true)
|
brew("services start \(formula)", sudo: true)
|
||||||
|
|
||||||
print("The new version has been linked!")
|
Log.info("The new version has been linked!")
|
||||||
completed()
|
completed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
52
phpmon-common/Core/Logger.swift
Normal file
52
phpmon-common/Core/Logger.swift
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
//
|
||||||
|
// Logger.swift
|
||||||
|
// PHP Monitor
|
||||||
|
//
|
||||||
|
// Created by Nico Verbruggen on 21/12/2021.
|
||||||
|
// Copyright © 2021 Nico Verbruggen. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
class Log {
|
||||||
|
|
||||||
|
enum Verbosity: Int {
|
||||||
|
case error = 1,
|
||||||
|
info = 2,
|
||||||
|
warning = 3,
|
||||||
|
performance = 4
|
||||||
|
|
||||||
|
public func isApplicable() -> Bool {
|
||||||
|
return Log.shared.verbosity.rawValue >= self.rawValue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static var shared = Log()
|
||||||
|
|
||||||
|
var verbosity: Verbosity = .info
|
||||||
|
|
||||||
|
static func info(_ item: Any) {
|
||||||
|
if Verbosity.info.isApplicable() {
|
||||||
|
print(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static func err(_ item: Any) {
|
||||||
|
if Verbosity.error.isApplicable() {
|
||||||
|
print(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static func warn(_ item: Any) {
|
||||||
|
if Verbosity.warning.isApplicable() {
|
||||||
|
print(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static func perf(_ item: Any) {
|
||||||
|
if Verbosity.performance.isApplicable() {
|
||||||
|
print(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -92,7 +92,7 @@ class PhpExtension {
|
|||||||
let file = try? String(contentsOf: path, encoding: .utf8)
|
let file = try? String(contentsOf: path, encoding: .utf8)
|
||||||
|
|
||||||
if (file == nil) {
|
if (file == nil) {
|
||||||
print("There was an issue reading the file. Assuming no extensions were found.")
|
Log.err("There was an issue reading the file. Assuming no extensions were found.")
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ class PhpSwitcher {
|
|||||||
from: brewPhpAlias.data(using: .utf8)!
|
from: brewPhpAlias.data(using: .utf8)!
|
||||||
).first!
|
).first!
|
||||||
|
|
||||||
print("When on your system, the `php` formula means version \(homebrewPackage.version)!")
|
Log.info("When on your system, the `php` formula means version \(homebrewPackage.version)!")
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Properties
|
// MARK: - Properties
|
||||||
@ -100,7 +100,7 @@ class PhpSwitcher {
|
|||||||
versionsOnly.append(phpAlias)
|
versionsOnly.append(phpAlias)
|
||||||
}
|
}
|
||||||
|
|
||||||
print("The PHP versions that were detected are: \(versionsOnly)")
|
Log.info("The PHP versions that were detected are: \(versionsOnly)")
|
||||||
|
|
||||||
availablePhpVersions = versionsOnly
|
availablePhpVersions = versionsOnly
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ class Utility {
|
|||||||
try FileManager.default.copyItem(at: bundleURL, to: targetURL)
|
try FileManager.default.copyItem(at: bundleURL, to: targetURL)
|
||||||
return targetURL
|
return targetURL
|
||||||
} catch let error {
|
} catch let error {
|
||||||
print("Unable to copy file: \(error)")
|
Log.err("Unable to copy file: \(error)")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,13 +20,13 @@ extension App {
|
|||||||
func loadGlobalHotkey() {
|
func loadGlobalHotkey() {
|
||||||
// Make sure we can retrieve the hotkey from preferences
|
// Make sure we can retrieve the hotkey from preferences
|
||||||
guard let hotkey = Preferences.preferences[.globalHotkey] as? String else {
|
guard let hotkey = Preferences.preferences[.globalHotkey] as? String else {
|
||||||
print("No global hotkey was saved in preferences. None set.")
|
Log.info("No global hotkey was saved in preferences. None set.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make sure we can parse the JSON into the desired format
|
// Make sure we can parse the JSON into the desired format
|
||||||
guard let keybindPref = GlobalKeybindPreference.fromJson(hotkey) else {
|
guard let keybindPref = GlobalKeybindPreference.fromJson(hotkey) else {
|
||||||
print("No global hotkey loaded, could not be parsed!")
|
Log.err("No global hotkey loaded, could not be parsed!")
|
||||||
shortcutHotkey = nil
|
shortcutHotkey = nil
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -18,11 +18,11 @@ extension AppDelegate {
|
|||||||
notificationCenter.delegate = self
|
notificationCenter.delegate = self
|
||||||
notificationCenter.requestAuthorization(options: [.alert], completionHandler: { granted, error in
|
notificationCenter.requestAuthorization(options: [.alert], completionHandler: { granted, error in
|
||||||
if !granted {
|
if !granted {
|
||||||
print("PHP Monitor does not have permission to show notifications.")
|
Log.warn("PHP Monitor does not have permission to show notifications.")
|
||||||
}
|
}
|
||||||
if let error = error {
|
if let error = error {
|
||||||
print("PHP Monitor encounted an error determining notification permissions:")
|
Log.err("PHP Monitor encounted an error determining notification permissions:")
|
||||||
print(error)
|
Log.err(error)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -51,16 +51,19 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele
|
|||||||
*/
|
*/
|
||||||
var switcher: PhpSwitcher! = nil
|
var switcher: PhpSwitcher! = nil
|
||||||
|
|
||||||
|
var logger: Log = Log.shared
|
||||||
|
|
||||||
// MARK: - Initializer
|
// MARK: - Initializer
|
||||||
|
|
||||||
/**
|
/**
|
||||||
When the application initializes, create all singletons.
|
When the application initializes, create all singletons.
|
||||||
*/
|
*/
|
||||||
override init() {
|
override init() {
|
||||||
print("==================================")
|
Log.shared.verbosity = .info
|
||||||
print("PHP MONITOR by Nico Verbruggen")
|
Log.info("==================================")
|
||||||
print("Version \(App.version)")
|
Log.info("PHP MONITOR by Nico Verbruggen")
|
||||||
print("==================================")
|
Log.info("Version \(App.version)")
|
||||||
|
Log.info("==================================")
|
||||||
self.sharedShell = Shell.user
|
self.sharedShell = Shell.user
|
||||||
self.state = App.shared
|
self.state = App.shared
|
||||||
self.menu = MainMenu.shared
|
self.menu = MainMenu.shared
|
||||||
|
@ -77,7 +77,7 @@ class Startup {
|
|||||||
|
|
||||||
if (!failed) {
|
if (!failed) {
|
||||||
initializeSwitcher()
|
initializeSwitcher()
|
||||||
print("PHP Monitor has determined the application has successfully passed all checks.")
|
Log.info("PHP Monitor has determined the application has successfully passed all checks.")
|
||||||
success()
|
success()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ class LocalNotification {
|
|||||||
let notificationCenter = UNUserNotificationCenter.current()
|
let notificationCenter = UNUserNotificationCenter.current()
|
||||||
notificationCenter.add(request) { (error) in
|
notificationCenter.add(request) { (error) in
|
||||||
if error != nil {
|
if error != nil {
|
||||||
print(error!)
|
Log.err(error!)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ class PMWindowController: NSWindowController, NSWindowDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
print("Window controller '\(windowName)' was deinitialized")
|
Log.perf("Window controller '\(windowName)' was deinitialized")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,11 +35,11 @@ class HomebrewDiagnostics {
|
|||||||
let tapAlias = Shell.pipe("\(Paths.brew) info shivammathur/php/php --json")
|
let tapAlias = Shell.pipe("\(Paths.brew) info shivammathur/php/php --json")
|
||||||
|
|
||||||
if tapAlias.contains("brew tap shivammathur/php") || tapAlias.contains("Error") {
|
if tapAlias.contains("brew tap shivammathur/php") || tapAlias.contains("Error") {
|
||||||
print("The user does not appear to have tapped: shivammathur/php")
|
Log.info("The user does not appear to have tapped: shivammathur/php")
|
||||||
return false
|
return false
|
||||||
} else {
|
} else {
|
||||||
print("The user DOES have the following tapped: shivammathur/php")
|
Log.info("The user DOES have the following tapped: shivammathur/php")
|
||||||
print("Checking for `php` formula conflicts...")
|
Log.info("Checking for `php` formula conflicts...")
|
||||||
|
|
||||||
let tapPhp = try! JSONDecoder().decode(
|
let tapPhp = try! JSONDecoder().decode(
|
||||||
[HomebrewPackage].self,
|
[HomebrewPackage].self,
|
||||||
@ -47,22 +47,22 @@ class HomebrewDiagnostics {
|
|||||||
).first!
|
).first!
|
||||||
|
|
||||||
if tapPhp.version != PhpSwitcher.brewPhpVersion {
|
if tapPhp.version != PhpSwitcher.brewPhpVersion {
|
||||||
print("The `php` formula alias seems to be the different between the tap and core. This could be a problem!")
|
Log.warn("The `php` formula alias seems to be the different between the tap and core. This could be a problem!")
|
||||||
print("Determining whether both of these versions are installed...")
|
Log.info("Determining whether both of these versions are installed...")
|
||||||
|
|
||||||
let bothInstalled = PhpSwitcher.shared.availablePhpVersions.contains(tapPhp.version)
|
let bothInstalled = PhpSwitcher.shared.availablePhpVersions.contains(tapPhp.version)
|
||||||
&& PhpSwitcher.shared.availablePhpVersions.contains(PhpSwitcher.brewPhpVersion)
|
&& PhpSwitcher.shared.availablePhpVersions.contains(PhpSwitcher.brewPhpVersion)
|
||||||
|
|
||||||
if bothInstalled {
|
if bothInstalled {
|
||||||
print("Both conflicting aliases seem to be installed, warning the user!")
|
Log.warn("Both conflicting aliases seem to be installed, warning the user!")
|
||||||
} else {
|
} else {
|
||||||
print("Conflicting aliases are not both installed, seems fine!")
|
Log.info("Conflicting aliases are not both installed, seems fine!")
|
||||||
}
|
}
|
||||||
|
|
||||||
return bothInstalled
|
return bothInstalled
|
||||||
}
|
}
|
||||||
|
|
||||||
print("All seems to be OK. No conflicts, both are PHP \(tapPhp.version).")
|
Log.info("All seems to be OK. No conflicts, both are PHP \(tapPhp.version).")
|
||||||
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ class Valet {
|
|||||||
public func startPreloadingSites() {
|
public func startPreloadingSites() {
|
||||||
if self.sites.count <= 10 {
|
if self.sites.count <= 10 {
|
||||||
// Preload the sites and their drivers
|
// Preload the sites and their drivers
|
||||||
print("Fewer than or 11 sites found, preloading list of sites...")
|
Log.info("Fewer than or 11 sites found, preloading list of sites...")
|
||||||
self.reloadSites()
|
self.reloadSites()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -50,17 +50,17 @@ class Valet {
|
|||||||
|
|
||||||
public func validateVersion() -> Void {
|
public func validateVersion() -> Void {
|
||||||
if version == "UNKNOWN" {
|
if version == "UNKNOWN" {
|
||||||
return print("The Valet version could not be extracted... that does not bode well.")
|
return Log.warn("The Valet version could not be extracted... that does not bode well.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if version.versionCompare(Constants.MinimumRecommendedValetVersion) == .orderedAscending {
|
if version.versionCompare(Constants.MinimumRecommendedValetVersion) == .orderedAscending {
|
||||||
let version = version
|
let version = version
|
||||||
print("Valet version \(version) is too old! (recommended: \(Constants.MinimumRecommendedValetVersion))")
|
Log.warn("Valet version \(version) is too old! (recommended: \(Constants.MinimumRecommendedValetVersion))")
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
Alert.notify(message: "alert.min_valet_version.title".localized, info: "alert.min_valet_version.info".localized(version, Constants.MinimumRecommendedValetVersion))
|
Alert.notify(message: "alert.min_valet_version.title".localized, info: "alert.min_valet_version.info".localized(version, Constants.MinimumRecommendedValetVersion))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
print("Valet version \(version) is recent enough, OK (recommended: \(Constants.MinimumRecommendedValetVersion))")
|
Log.info("Valet version \(version) is recent enough, OK (recommended: \(Constants.MinimumRecommendedValetVersion))")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,31 +55,31 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate {
|
|||||||
|
|
||||||
updatePhpVersionInStatusBar()
|
updatePhpVersionInStatusBar()
|
||||||
|
|
||||||
print("Determining broken PHP-FPM...")
|
Log.info("Determining broken PHP-FPM...")
|
||||||
// Attempt to find out if PHP-FPM is broken
|
// Attempt to find out if PHP-FPM is broken
|
||||||
let installation = PhpSwitcher.phpInstall
|
let installation = PhpSwitcher.phpInstall
|
||||||
installation.notifyAboutBrokenPhpFpm()
|
installation.notifyAboutBrokenPhpFpm()
|
||||||
|
|
||||||
// Set up the config watchers on launch (these are automatically updated via delegate methods if the user switches)
|
// Set up the config watchers on launch (these are automatically updated via delegate methods if the user switches)
|
||||||
print("Setting up watchers...")
|
Log.info("Setting up watchers...")
|
||||||
App.shared.handlePhpConfigWatcher()
|
App.shared.handlePhpConfigWatcher()
|
||||||
|
|
||||||
print("Detecting applications...")
|
Log.info("Detecting applications...")
|
||||||
// Attempt to load list of applications
|
// Attempt to load list of applications
|
||||||
App.shared.detectedApplications = Application.detectPresetApplications()
|
App.shared.detectedApplications = Application.detectPresetApplications()
|
||||||
let appNames = App.shared.detectedApplications.map { app in
|
let appNames = App.shared.detectedApplications.map { app in
|
||||||
return app.name
|
return app.name
|
||||||
}
|
}
|
||||||
print("Detected applications: \(appNames)")
|
Log.info("Detected applications: \(appNames)")
|
||||||
|
|
||||||
// Load the global hotkey
|
// Load the global hotkey
|
||||||
App.shared.loadGlobalHotkey()
|
App.shared.loadGlobalHotkey()
|
||||||
|
|
||||||
// Attempt to find out more info about Valet
|
// Attempt to find out more info about Valet
|
||||||
print("PHP Monitor has extracted the version number of Valet: \(Valet.shared.version)")
|
Log.info("PHP Monitor has extracted the version number of Valet: \(Valet.shared.version)")
|
||||||
Valet.shared.validateVersion()
|
Valet.shared.validateVersion()
|
||||||
Valet.shared.startPreloadingSites()
|
Valet.shared.startPreloadingSites()
|
||||||
print("PHP Monitor is ready to serve!")
|
Log.info("PHP Monitor is ready to serve!")
|
||||||
|
|
||||||
// Schedule a request to fetch the PHP version every 60 seconds
|
// Schedule a request to fetch the PHP version every 60 seconds
|
||||||
DispatchQueue.main.async { [self] in
|
DispatchQueue.main.async { [self] in
|
||||||
@ -232,14 +232,14 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate {
|
|||||||
@objc func reloadPhpMonitorMenuInBackground() {
|
@objc func reloadPhpMonitorMenuInBackground() {
|
||||||
waitAndExecute {
|
waitAndExecute {
|
||||||
// This automatically reloads the menu
|
// This automatically reloads the menu
|
||||||
print("Reloading information about the PHP installation (in the background)...")
|
Log.info("Reloading information about the PHP installation (in the background)...")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc func reloadPhpMonitorMenu() {
|
@objc func reloadPhpMonitorMenu() {
|
||||||
waitAndExecute {
|
waitAndExecute {
|
||||||
// This automatically reloads the menu
|
// This automatically reloads the menu
|
||||||
print("Reloading information about the PHP installation...")
|
Log.info("Reloading information about the PHP installation...")
|
||||||
} completion: {
|
} completion: {
|
||||||
// Add a slight delay to make sure it loads the new menu
|
// Add a slight delay to make sure it loads the new menu
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||||
@ -378,13 +378,13 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate {
|
|||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
window?.addToConsole(string)
|
window?.addToConsole(string)
|
||||||
}
|
}
|
||||||
print("\(string.trimmingCharacters(in: .newlines))")
|
Log.perf("\(string.trimmingCharacters(in: .newlines))")
|
||||||
},
|
},
|
||||||
didReceiveStdErrData: { string in
|
didReceiveStdErrData: { string in
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
window?.addToConsole(string)
|
window?.addToConsole(string)
|
||||||
}
|
}
|
||||||
print("\(string.trimmingCharacters(in: .newlines))")
|
Log.perf("\(string.trimmingCharacters(in: .newlines))")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ class Preferences {
|
|||||||
if UserDefaults.standard.bool(forKey: PreferenceName.wasLaunchedBefore.rawValue) {
|
if UserDefaults.standard.bool(forKey: PreferenceName.wasLaunchedBefore.rawValue) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
print("Saving first-time preferences!")
|
Log.info("Saving first-time preferences!")
|
||||||
UserDefaults.standard.setValue(true, forKey: PreferenceName.wasLaunchedBefore.rawValue)
|
UserDefaults.standard.setValue(true, forKey: PreferenceName.wasLaunchedBefore.rawValue)
|
||||||
UserDefaults.standard.synchronize()
|
UserDefaults.standard.synchronize()
|
||||||
}
|
}
|
||||||
|
@ -110,6 +110,6 @@ class PrefsVC: NSViewController {
|
|||||||
// MARK: - Deinitialization
|
// MARK: - Deinitialization
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
print("VC deallocated")
|
Log.perf("PrefsVC deallocated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ class PrefsWC: PMWindowController {
|
|||||||
if let vc = contentViewController as? PrefsVC {
|
if let vc = contentViewController as? PrefsVC {
|
||||||
if vc.listeningForHotkeyView != nil {
|
if vc.listeningForHotkeyView != nil {
|
||||||
if event.keyCode == Keys.Escape || event.keyCode == Keys.Space {
|
if event.keyCode == Keys.Escape || event.keyCode == Keys.Space {
|
||||||
print("A blacklisted key was pressed, canceling listen")
|
Log.info("A blacklisted key was pressed, canceling listen!")
|
||||||
vc.listeningForHotkeyView = nil
|
vc.listeningForHotkeyView = nil
|
||||||
} else {
|
} else {
|
||||||
vc.listeningForHotkeyView!.updateShortcut(event)
|
vc.listeningForHotkeyView!.updateShortcut(event)
|
||||||
|
@ -56,7 +56,7 @@ class ProgressWindowController: NSWindowController, NSWindowDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
// print("Deinitializing Progress Window Controller")
|
Log.perf("Deinitializing ProgressWindowController")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -70,7 +70,7 @@ class ProgressViewController: NSViewController {
|
|||||||
@IBOutlet weak var imageViewType: NSImageView!
|
@IBOutlet weak var imageViewType: NSImageView!
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
// print("Deinitializing Progress View Controller")
|
Log.perf("Deinitializing ProgressViewController")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -268,6 +268,6 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
|
|||||||
// MARK: - Deinitialization
|
// MARK: - Deinitialization
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
print("VC deallocated")
|
Log.perf("SiteListVC deallocated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,16 +11,16 @@ import Foundation
|
|||||||
extension App {
|
extension App {
|
||||||
|
|
||||||
func startWatcher(_ url: URL) {
|
func startWatcher(_ url: URL) {
|
||||||
print("No watcher currently active...")
|
Log.info("No watcher currently active...")
|
||||||
self.watcher = PhpConfigWatcher(for: url)
|
self.watcher = PhpConfigWatcher(for: url)
|
||||||
|
|
||||||
self.watcher.didChange = { url in
|
self.watcher.didChange = { url in
|
||||||
print("Something has changed in: \(url)")
|
Log.info("Something has changed in: \(url)")
|
||||||
|
|
||||||
// Check if the watcher has last updated the menu less than 0.75s ago
|
// Check if the watcher has last updated the menu less than 0.75s ago
|
||||||
let distance = self.watcher.lastUpdate?.distance(to: Date().timeIntervalSince1970)
|
let distance = self.watcher.lastUpdate?.distance(to: Date().timeIntervalSince1970)
|
||||||
if distance == nil || distance != nil && distance! > 0.75 {
|
if distance == nil || distance != nil && distance! > 0.75 {
|
||||||
print("Refreshing menu...")
|
Log.info("Refreshing menu...")
|
||||||
MainMenu.shared.reloadPhpMonitorMenuInBackground()
|
MainMenu.shared.reloadPhpMonitorMenuInBackground()
|
||||||
self.watcher.lastUpdate = Date().timeIntervalSince1970
|
self.watcher.lastUpdate = Date().timeIntervalSince1970
|
||||||
}
|
}
|
||||||
@ -39,7 +39,7 @@ extension App {
|
|||||||
if self.watcher.url != url || forceReload {
|
if self.watcher.url != url || forceReload {
|
||||||
self.watcher.disable()
|
self.watcher.disable()
|
||||||
self.watcher = nil
|
self.watcher = nil
|
||||||
print("Watcher has stopped watching files. Starting new one...")
|
Log.info("Watcher has stopped watching files. Starting new one...")
|
||||||
startWatcher(url)
|
startWatcher(url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,8 @@ class PhpConfigWatcher {
|
|||||||
self.addWatcher(for: self.url.appendingPathComponent("conf.d/\(file)"), eventMask: .write)
|
self.addWatcher(for: self.url.appendingPathComponent("conf.d/\(file)"), eventMask: .write)
|
||||||
}
|
}
|
||||||
|
|
||||||
print("A watcher exists for the following config paths:")
|
Log.info("A watcher exists for the following config paths:")
|
||||||
print(self.watchers.map({ watcher in
|
Log.info(self.watchers.map({ watcher in
|
||||||
return watcher.url.relativePath
|
return watcher.url.relativePath
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
@ -52,14 +52,14 @@ class PhpConfigWatcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func disable() {
|
func disable() {
|
||||||
print("Turning off existing watchers...")
|
Log.info("Turning off existing watchers...")
|
||||||
self.watchers.forEach { (watcher) in
|
self.watchers.forEach { (watcher) in
|
||||||
watcher.stopMonitoring()
|
watcher.stopMonitoring()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
print("An existing config watcher has been deinitialized.")
|
Log.perf("A PhpConfigWatcher has been deinitialized.")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user