From 44800a03a14152ee3e9268a06825eefcfd1477cc Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 11 Jan 2023 22:22:52 +0100 Subject: [PATCH 001/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Allow=20unlinked?= =?UTF-8?q?=20PHP=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Homebrew.swift | 13 +++++----- phpmon/Common/PHP/PHP Version/PhpEnv.swift | 21 +++++++++++----- .../Testables/TestableConfiguration.swift | 1 - phpmon/Domain/App/Startup.swift | 2 +- .../DomainList/Cells/DomainListPhpCell.swift | 6 ++++- .../DomainList/DomainListVC+ContextMenu.swift | 2 +- .../Homebrew/HomebrewDiagnostics.swift | 7 +++++- .../Integrations/Valet/Sites/ValetSite.swift | 12 +++++++--- phpmon/Domain/Menu/MainMenu+Actions.swift | 9 +++++-- phpmon/Domain/Menu/MainMenu+FixMyValet.swift | 6 ++--- phpmon/Domain/Menu/MainMenu+Startup.swift | 2 +- phpmon/Domain/Menu/MainMenu+Switcher.swift | 7 +++++- phpmon/Domain/Menu/MainMenu.swift | 8 ++++++- phpmon/Domain/Menu/StatusMenu+Items.swift | 23 +++++++++++++----- phpmon/Domain/Preferences/Stats.swift | 12 +++++++--- phpmon/Domain/Presets/Preset.swift | 24 ++++++++++++++----- .../SwiftUI/Domains/VersionPopoverView.swift | 2 +- phpmon/Domain/Watcher/App+ConfigWatch.swift | 8 ++++++- phpmon/Localizable.strings | 2 +- 19 files changed, 120 insertions(+), 47 deletions(-) diff --git a/phpmon/Common/Core/Homebrew.swift b/phpmon/Common/Core/Homebrew.swift index a8193e3..510f9f1 100644 --- a/phpmon/Common/Core/Homebrew.swift +++ b/phpmon/Common/Core/Homebrew.swift @@ -9,19 +9,18 @@ import Foundation class Homebrew { - static var fake: Bool = false - struct Formulae { static var php: HomebrewFormula { - if Homebrew.fake { - return HomebrewFormula("php", elevated: true) - } - if PhpEnv.shared.homebrewPackage == nil { fatalError("You must either load the HomebrewPackage object or call `fake` on the Homebrew class.") } - return HomebrewFormula(PhpEnv.phpInstall.formula, elevated: true) + guard let install = PhpEnv.phpInstall else { + Log.info("Assuming the formula is `php` since none seems to be linked.") + return HomebrewFormula("php", elevated: true) + } + + return HomebrewFormula(install.formula, elevated: true) } static var nginx: HomebrewFormula { diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index bbd78e8..0afa4ff 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -45,7 +45,7 @@ class PhpEnv { var cachedPhpInstallations: [String: PhpInstallation] = [:] /** Information about the currently linked PHP installation. */ - var currentInstall: ActivePhpInstallation! + var currentInstall: ActivePhpInstallation? /** The version that the `php` formula via Brew is aliased to on the current system. @@ -57,15 +57,15 @@ class PhpEnv { As such, we take that information from Homebrew. */ static var brewPhpAlias: String { - if Homebrew.fake { return "8.2" } + if PhpEnv.shared.homebrewPackage == nil { return "8.2" } - return Self.shared.homebrewPackage.version + return PhpEnv.shared.homebrewPackage.version } /** The currently linked and active PHP installation. */ - static var phpInstall: ActivePhpInstallation { + static var phpInstall: ActivePhpInstallation? { return Self.shared.currentInstall } @@ -170,7 +170,12 @@ class PhpEnv { Validates whether the currently running version matches the provided version. */ public func validate(_ version: String) -> Bool { - if self.currentInstall.version.short == version { + guard let install = PhpEnv.phpInstall else { + Log.info("It appears as if no PHP installation is currently active.") + return false + } + + if install.version.short == version { Log.info("Switching to version \(version) seems to have succeeded. Validation passed.") Log.info("Keeping track that this is the new version!") Stats.persistCurrentGlobalPhpVersion(version: version) @@ -186,7 +191,11 @@ class PhpEnv { You can then use the configuration file instance to change values. */ public func getConfigFile(forKey key: String) -> PhpConfigurationFile? { - return PhpEnv.phpInstall.iniFiles + guard let install = PhpEnv.phpInstall else { + return nil + } + + return install.iniFiles .reversed() .first(where: { $0.has(key: key) }) } diff --git a/phpmon/Common/Testables/TestableConfiguration.swift b/phpmon/Common/Testables/TestableConfiguration.swift index f3b69c3..f7b2a75 100644 --- a/phpmon/Common/Testables/TestableConfiguration.swift +++ b/phpmon/Common/Testables/TestableConfiguration.swift @@ -17,7 +17,6 @@ public struct TestableConfiguration: Codable { func apply() { Log.separator() Log.info("USING TESTABLE CONFIGURATION...") - Homebrew.fake = true Log.separator() Log.info("Applying fake shell...") ActiveShell.useTestable(shellOutput) diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index f93d7ec..7824ac2 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -261,7 +261,7 @@ class Startup { }, name: "valet version is supported", titleText: "startup.errors.valet_version_not_supported.title".localized, - subtitleText: "startup.errors.valet_version_not_supported.subtitle".localized(Valet.shared.version.text), + subtitleText: "startup.errors.valet_version_not_supported.subtitle".localized, descriptionText: "startup.errors.valet_version_not_supported.desc".localized ) ] diff --git a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift index bc0d039..26107fd 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift @@ -58,8 +58,12 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol { return [] } + guard let install = PhpEnv.phpInstall else { + return [] + } + return PhpEnv.shared.validVersions(for: site.composerPhp).filter({ version in - version.short != PhpEnv.phpInstall.version.short + version.short != install.version.short }) } diff --git a/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift b/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift index 9d4b0c3..740f725 100644 --- a/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift +++ b/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift @@ -133,7 +133,7 @@ extension DomainListVC { if site.isolatedPhpVersion != nil { menu.addItem(NSMenuItem( - title: "domain_list.use_in_terminal".localized(site.servingPhpVersion), + title: "domain_list.use_in_terminal".localized(site.isolatedPhpVersion!.versionNumber.text), action: #selector(self.useInTerminal) )) } diff --git a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift index 83fe469..0ea3552 100644 --- a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift +++ b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift @@ -65,8 +65,13 @@ class HomebrewDiagnostics { public static func checkForPhpFpmPoolConflicts() { Log.info("Checking for PHP-FPM pool conflicts...") + guard let install = PhpEnv.phpInstall else { + Log.info("Will skip check for conflicts if no PHP version is linked.") + return + } + // We'll need to know what the primary PHP version is - let primary = PhpEnv.shared.currentInstall.version.short + let primary = install.version.short // Versions to be handled let switcher = InternalSwitcher() diff --git a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift index 9a0f418..a821b41 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift @@ -56,7 +56,8 @@ class ValetSite: ValetListable { /// Which version of PHP is actually used to serve this site. var servingPhpVersion: String { return self.isolatedPhpVersion?.versionNumber.short - ?? PhpEnv.phpInstall.version.short + ?? PhpEnv.phpInstall?.version.short + ?? "???" } enum VersionSource: String { @@ -143,11 +144,16 @@ class ValetSite: ValetListable { return } + guard let linked = PhpEnv.phpInstall else { + self.composerPhpCompatibleWithLinked = false + return + } + // Split the composer list (on "|") to evaluate multiple constraints // For example, for Laravel 8 projects the value is "^7.3|^8.0" self.composerPhpCompatibleWithLinked = self.composerPhp.split(separator: "|") .map { string in - let origin = self.isolatedPhpVersion?.versionNumber.short ?? PhpEnv.phpInstall.version.long + let origin = self.isolatedPhpVersion?.versionNumber.short ?? linked.version.long return !PhpVersionNumberCollection.make(from: [origin]) .matching(constraint: string.trimmingCharacters(in: .whitespacesAndNewlines)) .isEmpty @@ -251,7 +257,7 @@ class ValetSite: ValetListable { } func getListablePhpVersion() -> String { - return self.servingPhpVersion + return self.servingPhpVersion ?? "—" } func getListableKind() -> String { diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift index bac4889..be57d0f 100644 --- a/phpmon/Domain/Menu/MainMenu+Actions.swift +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -207,12 +207,17 @@ extension MainMenu { } @objc func openActiveConfigFolder() { - if PhpEnv.phpInstall.hasErrorState { + guard let install = PhpEnv.phpInstall else { + // TODO: Can't open the config if no PHP version is active + return + } + + if install.hasErrorState { Actions.openGenericPhpConfigFolder() return } - Actions.openPhpConfigFolder(version: PhpEnv.phpInstall.version.short) + Actions.openPhpConfigFolder(version: install.version.short) } @objc func openPhpMonitorConfigurationFile() { diff --git a/phpmon/Domain/Menu/MainMenu+FixMyValet.swift b/phpmon/Domain/Menu/MainMenu+FixMyValet.swift index fbc36e9..d351c7b 100644 --- a/phpmon/Domain/Menu/MainMenu+FixMyValet.swift +++ b/phpmon/Domain/Menu/MainMenu+FixMyValet.swift @@ -12,7 +12,7 @@ import AppKit extension MainMenu { @MainActor @objc func fixMyValet() { - let previousVersion = PhpEnv.phpInstall.version.short + let previousVersion = PhpEnv.phpInstall?.version.short if !PhpEnv.shared.availablePhpVersions.contains(PhpEnv.brewPhpAlias) { presentAlertForMissingFormula() @@ -34,10 +34,10 @@ extension MainMenu { Task { @MainActor in await Actions.fixMyValet() - if previousVersion == PhpEnv.brewPhpAlias { + if previousVersion == PhpEnv.brewPhpAlias || previousVersion == nil { self.presentAlertForSameVersion() } else { - self.presentAlertForDifferentVersion(version: previousVersion) + self.presentAlertForDifferentVersion(version: previousVersion!) } } } diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 03a4545..ae7c554 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -68,7 +68,7 @@ extension MainMenu { // Attempt to find out if PHP-FPM is broken Log.info("Determining broken PHP-FPM...") let installation = PhpEnv.phpInstall - installation.notifyAboutBrokenPhpFpm() + installation?.notifyAboutBrokenPhpFpm() // Check for other problems WarningManager.shared.evaluateWarnings() diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index b8464b7..3ffabe4 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -118,6 +118,11 @@ extension MainMenu { preference: .notifyAboutVersionChange ) - Task { PhpEnv.phpInstall.notifyAboutBrokenPhpFpm() } + guard let install = PhpEnv.phpInstall else { + Log.err("Cannot notify about version change if PHP is unlinked") + return + } + + Task { install.notifyAboutBrokenPhpFpm() } } } diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 0dc8fef..62cfcd3 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -134,7 +134,13 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate } else { // The dynamic icon has been requested let long = Preferences.preferences[.fullPhpVersionDynamicIcon] as! Bool - setStatusBarImage(version: long ? PhpEnv.phpInstall.version.long : PhpEnv.phpInstall.version.short) + + guard let install = PhpEnv.phpInstall else { + setStatusBarImage(version: "???") + return + } + + setStatusBarImage(version: long ? install.version.long : install.version.short) } } } diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 0d4c189..a174983 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -13,13 +13,13 @@ import Cocoa extension StatusMenu { func addPhpVersionMenuItems() { - if PhpEnv.phpInstall.hasErrorState { + if PhpEnv.phpInstall == nil || PhpEnv.phpInstall!.hasErrorState { let brokenMenuItems = ["mi_php_broken_1", "mi_php_broken_2", "mi_php_broken_3", "mi_php_broken_4"] return addItems(brokenMenuItems.map { NSMenuItem(title: $0.localized) }) } addItem(HeaderView.asMenuItem( - text: "\("mi_php_version".localized) \(PhpEnv.phpInstall.version.long)", + text: "\("mi_php_version".localized) \(PhpEnv.phpInstall!.version.long)", minimumWidth: 280 // this ensures the menu is at least wide enough not to cause clipping )) } @@ -60,9 +60,10 @@ extension StatusMenu { let action = #selector(MainMenu.switchToPhpVersion(sender:)) let brew = (shortVersion == PhpEnv.brewPhpAlias) ? "php" : "php@\(shortVersion)" + let menuItem = PhpMenuItem( title: "\("mi_php_switch".localized) \(versionString) (\(brew))", - action: (shortVersion == PhpEnv.phpInstall.version.short) + action: (shortVersion == PhpEnv.phpInstall?.version.short) ? nil : action, keyEquivalent: "\(shortcutKey)" ) @@ -145,7 +146,12 @@ extension StatusMenu { // MARK: - Stats func addStatsMenuItem() { - guard let stats = PhpEnv.phpInstall.limits else { return } + guard let install = PhpEnv.phpInstall else { + Log.info("Not showing stats menu item if no PHP version is linked.") + return + } + + guard let stats = install.limits else { return } addItem(StatsView.asMenuItem( memory: stats.memory_limit, @@ -157,14 +163,19 @@ extension StatusMenu { // MARK: - Extensions func addExtensionsMenuItems() { + guard let install = PhpEnv.phpInstall else { + Log.info("Not showing extensions menu items if no PHP version is linked.") + return + } + addItem(HeaderView.asMenuItem(text: "mi_detected_extensions".localized)) - if PhpEnv.phpInstall.extensions.isEmpty { + if install.extensions.isEmpty { addItem(NSMenuItem(title: "mi_no_extensions_detected".localized, action: nil, keyEquivalent: "")) } var shortcutKey = 1 - for phpExtension in PhpEnv.phpInstall.extensions { + for phpExtension in install.extensions { addExtensionItem(phpExtension, shortcutKey) shortcutKey += 1 } diff --git a/phpmon/Domain/Preferences/Stats.swift b/phpmon/Domain/Preferences/Stats.swift index 4ceb701..1a5a15d 100644 --- a/phpmon/Domain/Preferences/Stats.swift +++ b/phpmon/Domain/Preferences/Stats.swift @@ -101,8 +101,8 @@ class Stats { */ public static func evaluateSponsorMessageShouldBeDisplayed() { - if Homebrew.fake { - return Log.info("A fake environment is in use, skipping sponsor alert.") + if Shell is TestableShell { + return Log.info("A fake shell is in use, skipping sponsor alert.") } if Bundle.main.bundleIdentifier?.contains("beta") ?? false { @@ -142,7 +142,13 @@ class Stats { } public static func evaluateLastLinkedPhpVersion() { - let currentVersion = PhpEnv.phpInstall.version.short + guard let linked = PhpEnv.phpInstall else { + // TODO: Actually notify the user that no version is linked. + Log.info("No version is currently linked.") + return + } + + let currentVersion = linked.version.short let previousVersion = Stats.lastGlobalPhpVersion // Save the PHP version that is currently in use (only if unknown) diff --git a/phpmon/Domain/Presets/Preset.swift b/phpmon/Domain/Presets/Preset.swift index 7bed7e4..397a187 100644 --- a/phpmon/Domain/Presets/Preset.swift +++ b/phpmon/Domain/Presets/Preset.swift @@ -88,10 +88,14 @@ struct Preset: Codable, Equatable { applyConfigurationValue(key: conf.key, value: conf.value ?? "") } + guard let install = PhpEnv.phpInstall else { + Log.info("Cannot toggle extensions if no PHP version is linked.") + return + } + // Apply the extension changes in-place afterward for ext in extensions { - for foundExt in PhpEnv.phpInstall.extensions - where foundExt.name == ext.key && foundExt.enabled != ext.value { + for foundExt in install.extensions where foundExt.name == ext.key && foundExt.enabled != ext.value { Log.info("Toggling extension \(foundExt.name) in \(foundExt.file)") await foundExt.toggle() break @@ -125,7 +129,7 @@ struct Preset: Codable, Equatable { // MARK: - Apply Functionality private func switchToPhpVersionIfValid() async -> Bool { - if PhpEnv.shared.currentInstall.version.short == self.version! { + if PhpEnv.shared.currentInstall?.version.short == self.version! { Log.info("The version we are supposed to switch to is already active.") return true } @@ -213,8 +217,12 @@ struct Preset: Codable, Equatable { return nil } - if PhpEnv.shared.currentInstall.version.short != version { - return PhpEnv.shared.currentInstall.version.short + guard let install = PhpEnv.phpInstall else { + return nil + } + + if install.version.short != version { + return install.version.short } else { return nil } @@ -226,8 +234,12 @@ struct Preset: Codable, Equatable { private func diffExtensions() -> [String: Bool] { var items: [String: Bool] = [:] + guard let install = PhpEnv.phpInstall else { + fatalError("If no PHP version is linked, diffing extensions is not possible.") + } + for (key, value) in self.extensions { - for foundExt in PhpEnv.phpInstall.extensions + for foundExt in install.extensions where foundExt.name == key && foundExt.enabled != value { // Save the original value of the extension items[foundExt.name] = foundExt.enabled diff --git a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift index e95b03f..afd87c4 100644 --- a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift +++ b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift @@ -97,7 +97,7 @@ struct VersionPopoverView: View { if site.isolatedPhpVersion != nil { information += "alert.composer_php_isolated.desc".localized( site.isolatedPhpVersion!.versionNumber.short, - PhpEnv.phpInstall.version.short + PhpEnv.phpInstall?.version.short ?? "???" ) information += "\n\n" } diff --git a/phpmon/Domain/Watcher/App+ConfigWatch.swift b/phpmon/Domain/Watcher/App+ConfigWatch.swift index 8423d68..66f8e86 100644 --- a/phpmon/Domain/Watcher/App+ConfigWatch.swift +++ b/phpmon/Domain/Watcher/App+ConfigWatch.swift @@ -33,7 +33,13 @@ extension App { return } - let url = URL(fileURLWithPath: "\(Paths.etcPath)/php/\(PhpEnv.phpInstall.version.short)") + guard let install = PhpEnv.phpInstall else { + Log.info("It appears as if no PHP installation is currently active.") + Log.info("The FS watcher will be disabled until a PHP install is active.") + return + } + + let url = URL(fileURLWithPath: "\(Paths.etcPath)/php/\(install.version.short)") // Check whether the watcher exists and schedule on the main thread // if we don't consistently do this, the app will create duplicate watchers diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 6b3f3ff..e84842e 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -525,7 +525,7 @@ If you are seeing this message but are confused why this folder has gone missing // Valet version too new or old "startup.errors.valet_version_not_supported.title" = "This version of Valet is not supported"; -"startup.errors.valet_version_not_supported.subtitle" = "You are running a version of Valet that is currently not supported (%@). PHP Monitor currently works with Valet v2, v3 and v4. In order to avoid causing issues on your system, PHP Monitor cannot start."; +"startup.errors.valet_version_not_supported.subtitle" = "You are running a version of Valet that is currently not supported. PHP Monitor currently works with Valet v2, v3 and v4. In order to avoid causing issues on your system, PHP Monitor cannot start."; "startup.errors.valet_version_not_supported.desc" = "You must install a version of Valet that is compatible with PHP Monitor, or you may need to upgrade to a newer version of PHP Monitor which may include compatibility for this version of Valet (consult the latest release notes for more info)."; /// Brew & sudoers From 17efb5087246b83ee072c095f1a342476823be90 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 12 Jan 2023 00:04:54 +0100 Subject: [PATCH 002/194] =?UTF-8?q?=F0=9F=91=8C=20Allow=20PHP=20Monitor=20?= =?UTF-8?q?to=20run=20without=20linked=20PHP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Homebrew.swift | 1 - phpmon/Common/PHP/ActivePhpInstallation.swift | 11 ++- phpmon/Common/PHP/PHP Version/PhpEnv.swift | 12 ++- phpmon/Domain/App/AppDelegate.swift | 84 +++++++++++++++++++ phpmon/Domain/App/Startup.swift | 4 + phpmon/Domain/Integrations/Valet/Valet.swift | 18 +++- phpmon/Domain/Menu/MainMenu.swift | 2 +- phpmon/Domain/Menu/StatusMenu+Items.swift | 21 ++++- phpmon/Domain/Menu/StatusMenu.swift | 18 ++-- phpmon/Localizable.strings | 3 + 10 files changed, 155 insertions(+), 19 deletions(-) diff --git a/phpmon/Common/Core/Homebrew.swift b/phpmon/Common/Core/Homebrew.swift index 510f9f1..910b716 100644 --- a/phpmon/Common/Core/Homebrew.swift +++ b/phpmon/Common/Core/Homebrew.swift @@ -16,7 +16,6 @@ class Homebrew { } guard let install = PhpEnv.phpInstall else { - Log.info("Assuming the formula is `php` since none seems to be linked.") return HomebrewFormula("php", elevated: true) } diff --git a/phpmon/Common/PHP/ActivePhpInstallation.swift b/phpmon/Common/PHP/ActivePhpInstallation.swift index bd15f09..b8db66c 100644 --- a/phpmon/Common/PHP/ActivePhpInstallation.swift +++ b/phpmon/Common/PHP/ActivePhpInstallation.swift @@ -37,13 +37,20 @@ class ActivePhpInstallation { // MARK: - Initializer + public static func load() -> ActivePhpInstallation? { + if !FileSystem.fileExists(Paths.phpConfig) { + return nil + } + + return ActivePhpInstallation() + } + init() { // Show information about the current version do { try determineVersion() } catch { - // TODO: In future versions of PHP Monitor, this should not crash - fatalError("Could not determine or parse PHP version; aborting") + fatalError("Could not determine or parse PHP version; aborting!") } // Initialize the list of ini files that are loaded diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index 0afa4ff..a51018e 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -13,7 +13,7 @@ class PhpEnv { // MARK: - Initializer init() { - self.currentInstall = ActivePhpInstallation() + self.currentInstall = ActivePhpInstallation.load() } func determinePhpAlias() async { @@ -90,9 +90,17 @@ class PhpEnv { public func detectPhpVersions() async -> [String] { let files = await Shell.pipe("ls \(Paths.optPath) | grep php@").out + let supported: [String] = { + guard let version = Valet.shared.version else { + return [] + } + + return Constants.ValetSupportedPhpVersionMatrix[version.major] ?? [] + }() + var versionsOnly = await extractPhpVersions( from: files.components(separatedBy: "\n"), - supported: Constants.ValetSupportedPhpVersionMatrix[Valet.shared.version.major] ?? [] + supported: supported ) // Make sure the aliased version is detected diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index 4a2d268..ebeed23 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -99,12 +99,96 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele startup procedure. */ func applicationDidFinishLaunching(_ aNotification: Notification) { + self.watchHomebrewBinFolder() + /* // Make sure notifications will work setupNotifications() Task { // Make sure the menu performs its initial checks await paths.loadUser() await menu.startup() } + */ } + func watchHomebrewBinFolder() { + Log.info("Watching Homebrew's bin folder") + FSWatch2.shared = FSWatch2( + for: URL(fileURLWithPath: Paths.binPath), + eventMask: .all, + onChange: { + print("Something has changed") + } + ) + } +} + +class FSWatch2 { + public static var shared: FSWatch2! = nil + + let queue = DispatchQueue(label: "FSWatch2Queue", attributes: .concurrent) + + var lastUpdate: TimeInterval? + var linked: Bool + + private var fileDescriptor: CInt = -1 + private var dispatchSource: DispatchSourceFileSystemObject? + + internal let url: URL + + init(for url: URL, eventMask: DispatchSource.FileSystemEvent, onChange: () -> Void) { + self.url = url + + self.linked = FileSystem.fileExists(Paths.php) + print("Initial PHP linked state: \(linked)") + + fileDescriptor = open(url.path, O_EVTONLY) + + dispatchSource = DispatchSource.makeFileSystemObjectSource( + fileDescriptor: fileDescriptor, + eventMask: eventMask, + queue: self.queue + ) + + dispatchSource?.setEventHandler(handler: { + let distance = self.lastUpdate?.distance(to: Date().timeIntervalSince1970) + + if distance == nil || distance != nil && distance! > 1.00 { + print("FS event fired, checking in 1s, no duplicate FS events will be acted upon") + + self.lastUpdate = Date().timeIntervalSince1970 + + Task { + await delay(seconds: 1) + + let newLinked = FileSystem.fileExists(Paths.php) + + if newLinked != self.linked { + self.linked = newLinked + + Log.info("The status of the PHP binary has changed!") + + if newLinked { + Log.info("php is linked") + } else { + Log.info("php is not linked") + } + } + } + } + }) + + dispatchSource?.setCancelHandler(handler: { [weak self] in + guard let self = self else { return } + + close(self.fileDescriptor) + self.fileDescriptor = -1 + self.dispatchSource = nil + }) + + dispatchSource?.resume() + } + + deinit { + print("deallocing watcher") + } } diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 7824ac2..7699a5d 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -99,6 +99,7 @@ class Startup { buttonText: "alert.homebrew_missing.quit".localized, requiresAppRestart: true ), + /* // ================================================================================= // The PHP binary must exist. // ================================================================================= @@ -109,6 +110,7 @@ class Startup { subtitleText: "startup.errors.php_binary.subtitle".localized, descriptionText: "startup.errors.php_binary.desc".localized(Paths.php) ), + */ // ================================================================================= // Make sure we can detect one or more PHP installations. // ================================================================================= @@ -216,6 +218,7 @@ class Startup { // ================================================================================= // Determine that Valet works correctly (no issues in platform detected) // ================================================================================= + /* EnvironmentCheck( command: { return await Shell.pipe("valet --version").out @@ -264,5 +267,6 @@ class Startup { subtitleText: "startup.errors.valet_version_not_supported.subtitle".localized, descriptionText: "startup.errors.valet_version_not_supported.desc".localized ) + */ ] } diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 0b84e5e..0e9e6e9 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -22,7 +22,7 @@ class Valet { static let shared = Valet() /// The version of Valet that was detected. - var version: VersionNumber! = nil + var version: VersionNumber? = nil /// The Valet configuration file. var config: Valet.Configuration! @@ -142,6 +142,11 @@ class Valet { in use. This allows PHP Monitor to do different things when Valet 3.0 is enabled. */ public func evaluateFeatureSupport() { + guard let version = self.version else { + Log.err("Cannot determine features, as the version was not determined.") + return + } + switch version.major { case 2: Log.info("You are running Valet v2. Support for site isolation is disabled.") @@ -159,12 +164,21 @@ class Valet { installed is not recent enough. */ public func validateVersion() { + guard let version = self.version else { + Log.err("Cannot validate Valet version if no Valet version was determined.") + return + } + + if PhpEnv.phpInstall == nil { + Log.info("Cannot validate Valet version if no PHP version is linked.") + return + } + // 1. Evaluate feature support Valet.shared.evaluateFeatureSupport() // 2. Notify user if the version is too old (but major version is OK) if version.text.versionCompare(Constants.MinimumRecommendedValetVersion) == .orderedAscending { - let version = version! let recommended = Constants.MinimumRecommendedValetVersion Log.warn("Valet version \(version.text) is too old! (recommended: \(recommended))") Task { @MainActor in diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 62cfcd3..fc3893d 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -71,7 +71,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate /** Reloads which PHP versions is currently active. */ @objc func refreshActiveInstallation() { if !PhpEnv.shared.isBusy { - PhpEnv.shared.currentInstall = ActivePhpInstallation() + PhpEnv.shared.currentInstall = ActivePhpInstallation.load() updatePhpVersionInStatusBar() } else { Log.perf("Skipping version refresh due to busy status!") diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index a174983..d37fac2 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -13,7 +13,18 @@ import Cocoa extension StatusMenu { func addPhpVersionMenuItems() { - if PhpEnv.phpInstall == nil || PhpEnv.phpInstall!.hasErrorState { + if PhpEnv.phpInstall == nil { + addItem(HeaderView.asMenuItem(text: "⚠️ " + "mi_no_php_linked".localized, minimumWidth: 280)) + addItems([ + // TODO: Make sure these buttons do something + NSMenuItem.separator(), + NSMenuItem(title: "mi_fix_php_link".localized), + NSMenuItem(title: "mi_no_php_linked_explain".localized) + ]) + return + } + + if PhpEnv.phpInstall!.hasErrorState { let brokenMenuItems = ["mi_php_broken_1", "mi_php_broken_2", "mi_php_broken_3", "mi_php_broken_4"] return addItems(brokenMenuItems.map { NSMenuItem(title: $0.localized) }) } @@ -30,7 +41,13 @@ extension StatusMenu { return } - if PhpEnv.shared.availablePhpVersions.isEmpty { return } + if PhpEnv.shared.availablePhpVersions.isEmpty { + return + } + + if PhpEnv.shared.currentInstall == nil { + return + } addSwitchToPhpMenuItems() self.addItem(NSMenuItem.separator()) diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 2dd9da9..b80fcc8 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -12,27 +12,27 @@ class StatusMenu: NSMenu { addPhpVersionMenuItems() addItem(NSMenuItem.separator()) - if Preferences.isEnabled(.displayGlobalVersionSwitcher) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayGlobalVersionSwitcher) { addPhpActionMenuItems() addItem(NSMenuItem.separator()) } - if Preferences.isEnabled(.displayServicesManager) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayServicesManager) { addServicesManagerMenuItem() addItem(NSMenuItem.separator()) } - if Preferences.isEnabled(.displayValetIntegration) { + if Valet.shared.version != nil && Preferences.isEnabled(.displayValetIntegration) { addValetMenuItems() addItem(NSMenuItem.separator()) } - if Preferences.isEnabled(.displayPhpConfigFinder) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayPhpConfigFinder) { addConfigurationMenuItems() addItem(NSMenuItem.separator()) } - if Preferences.isEnabled(.displayComposerToolkit) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayComposerToolkit) { addComposerMenuItems() addItem(NSMenuItem.separator()) } @@ -41,12 +41,12 @@ class StatusMenu: NSMenu { return } - if Preferences.isEnabled(.displayLimitsWidget) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayLimitsWidget) { addStatsMenuItem() addItem(NSMenuItem.separator()) } - if Preferences.isEnabled(.displayExtensions) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayExtensions) { addExtensionsMenuItems() NSMenuItem.separator() @@ -55,11 +55,11 @@ class StatusMenu: NSMenu { addPhpDoctorMenuItem() - if Preferences.isEnabled(.displayPresets) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayPresets) { addPresetsMenuItem() } - if Preferences.isEnabled(.displayMisc) { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayMisc) { addFirstAidAndServicesMenuItems() } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index e84842e..2b6e52e 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -16,6 +16,9 @@ "mi_php_broken_2" = "Try running `php -v` in your terminal."; "mi_php_broken_3" = "You could also try switching to another version."; "mi_php_broken_4" = "Running `brew reinstall php` (or for the equivalent version) might help."; +"mi_no_php_linked" = "No PHP version linked!"; +"mi_fix_php_link" = "Fix Automatically..."; +"mi_no_php_linked_explain" = "What's This?"; "mi_diagnostics" = "Diagnostics"; "mi_active_services" = "Active Services"; From 3c6d2d74ff7ab52f54f181b066a58aba20208a6c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 12 Jan 2023 17:19:28 +0100 Subject: [PATCH 003/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20concurrency=20cras?= =?UTF-8?q?hes=20with=20@objc=20methods?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Helpers/Application.swift | 4 ++-- phpmon/Domain/DomainList/DomainListVC+Actions.swift | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/phpmon/Common/Helpers/Application.swift b/phpmon/Common/Helpers/Application.swift index 0f1b1fe..b0f0370 100644 --- a/phpmon/Common/Helpers/Application.swift +++ b/phpmon/Common/Helpers/Application.swift @@ -33,8 +33,8 @@ class Application { Attempt to open a specific directory in the app of choice. (This will open the app if it isn't open yet.) */ - @objc public func openDirectory(file: String) async { - return await Shell.quiet("/usr/bin/open -a \"\(name)\" \"\(file)\"") + @objc public func openDirectory(file: String) { + Task { await Shell.quiet("/usr/bin/open -a \"\(name)\" \"\(file)\"") } } /** Checks if the app is installed. */ diff --git a/phpmon/Domain/DomainList/DomainListVC+Actions.swift b/phpmon/Domain/DomainList/DomainListVC+Actions.swift index 877b0b6..f12da19 100644 --- a/phpmon/Domain/DomainList/DomainListVC+Actions.swift +++ b/phpmon/Domain/DomainList/DomainListVC+Actions.swift @@ -30,17 +30,17 @@ extension DomainListVC { NSWorkspace.shared.open(url) } - @objc func openInFinder() async { - await Shell.quiet("open '\(selectedSite!.absolutePath)'") + @objc func openInFinder() { + Task { return await Shell.quiet("open '\(selectedSite!.absolutePath)'") } } - @objc func openInTerminal() async { - await Shell.quiet("open -b com.apple.terminal '\(selectedSite!.absolutePath)'") + @objc func openInTerminal() { + Task { await Shell.quiet("open -b com.apple.terminal '\(selectedSite!.absolutePath)'") } } - @objc func openWithEditor(sender: EditorMenuItem) async { + @objc func openWithEditor(sender: EditorMenuItem) { guard let editor = sender.editor else { return } - await editor.openDirectory(file: selectedSite!.absolutePath) + editor.openDirectory(file: selectedSite!.absolutePath) } // MARK: - UI interaction From 894365488aa46d0d9fdf80eb2169ffe5f7d81902 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 13 Jan 2023 00:22:55 +0100 Subject: [PATCH 004/194] =?UTF-8?q?=F0=9F=9A=9B=20Moved=20some=20files=20a?= =?UTF-8?q?round?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 +++ phpmon/Common/Helpers/FSNotifier.swift | 90 ++++++++++++++++++++++++++ phpmon/Domain/App/AppDelegate.swift | 90 ++++---------------------- 3 files changed, 113 insertions(+), 77 deletions(-) create mode 100644 phpmon/Common/Helpers/FSNotifier.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 9221fca..8b3622e 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -79,6 +79,10 @@ C417DC74277614690015E6EE /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = C417DC73277614690015E6EE /* Helpers.swift */; }; C417DC75277614690015E6EE /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = C417DC73277614690015E6EE /* Helpers.swift */; }; C4181F1128FAF9330042EA28 /* UITestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4181F1028FAF9330042EA28 /* UITestCase.swift */; }; + C41ADCE82970CCC700120423 /* FSNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41ADCE72970CCC700120423 /* FSNotifier.swift */; }; + C41ADCE92970CCC700120423 /* FSNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41ADCE72970CCC700120423 /* FSNotifier.swift */; }; + C41ADCEA2970CCC700120423 /* FSNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41ADCE72970CCC700120423 /* FSNotifier.swift */; }; + C41ADCEB2970CCC700120423 /* FSNotifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41ADCE72970CCC700120423 /* FSNotifier.swift */; }; C41C02A927E61A65009F26CB /* FakeValetSite.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C02A827E61A65009F26CB /* FakeValetSite.swift */; }; C41C02AB27E61CB3009F26CB /* FakeValetSite.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C02A827E61A65009F26CB /* FakeValetSite.swift */; }; C41C1B3722B0097F00E7CF16 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C1B3622B0097F00E7CF16 /* AppDelegate.swift */; }; @@ -760,6 +764,7 @@ C4168F4427ADB4A3003B6C39 /* DEVELOPER.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = DEVELOPER.md; sourceTree = ""; }; C417DC73277614690015E6EE /* Helpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Helpers.swift; sourceTree = ""; }; C4181F1028FAF9330042EA28 /* UITestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UITestCase.swift; sourceTree = ""; }; + C41ADCE72970CCC700120423 /* FSNotifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FSNotifier.swift; sourceTree = ""; }; C41C02A827E61A65009F26CB /* FakeValetSite.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeValetSite.swift; sourceTree = ""; }; C41C1B3322B0097F00E7CF16 /* PHP Monitor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "PHP Monitor.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C41C1B3622B0097F00E7CF16 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; @@ -1403,6 +1408,7 @@ C4B5635D276AB09000F12CCB /* VersionExtractor.swift */, C4D3660A29113F20006BD146 /* System.swift */, C4D36614291160A1006BD146 /* WIP.swift */, + C41ADCE72970CCC700120423 /* FSNotifier.swift */, ); path = Helpers; sourceTree = ""; @@ -1969,6 +1975,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C41ADCE82970CCC700120423 /* FSNotifier.swift in Sources */, C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */, C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */, C4D3661A291173EA006BD146 /* DictionaryExtension.swift in Sources */, @@ -2230,6 +2237,7 @@ C471E88928F9BB650021E251 /* SwiftUIHelper.swift in Sources */, C471E88B28F9BB650021E251 /* HotKey.swift in Sources */, C471E88C28F9BB650021E251 /* HotKeysController.swift in Sources */, + C41ADCEA2970CCC700120423 /* FSNotifier.swift in Sources */, C471E88D28F9BB650021E251 /* Key.swift in Sources */, C471E88E28F9BB650021E251 /* KeyCombo.swift in Sources */, C471E88F28F9BB650021E251 /* ModifierFlagsExtension.swift in Sources */, @@ -2357,6 +2365,7 @@ C471E8C728F9BB8F0021E251 /* Warning.swift in Sources */, C471E8C828F9BB8F0021E251 /* WarningManager.swift in Sources */, C471E8C928F9BB8F0021E251 /* WarningsWindowController.swift in Sources */, + C41ADCEB2970CCC700120423 /* FSNotifier.swift in Sources */, C471E8CA28F9BB8F0021E251 /* OnboardingWindowController.swift in Sources */, C471E8CB28F9BB8F0021E251 /* PreferencesWindowController.swift in Sources */, C471E8CC28F9BB8F0021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, @@ -2495,6 +2504,7 @@ C4D5CFCB27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */, C4068CA827B07A1300544CD5 /* SelectPreferenceView.swift in Sources */, C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */, + C41ADCE92970CCC700120423 /* FSNotifier.swift in Sources */, C40C7F2927721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */, C485707A28BF457800539B36 /* WarningListView.swift in Sources */, C4C0E8E827F88B41002D32A9 /* DomainScanner.swift in Sources */, diff --git a/phpmon/Common/Helpers/FSNotifier.swift b/phpmon/Common/Helpers/FSNotifier.swift new file mode 100644 index 0000000..16294cc --- /dev/null +++ b/phpmon/Common/Helpers/FSNotifier.swift @@ -0,0 +1,90 @@ +// +// FSNotifier.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 13/01/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Cocoa + +class FSNotifier { + enum Kind { + case homebrewLocks, homebrewBinaries + } + + public static var shared: FSNotifier! = nil + + let queue = DispatchQueue(label: "FSWatch2Queue", attributes: .concurrent) + + var lastUpdate: TimeInterval? + var linked: Bool + + private var fileDescriptor: CInt = -1 + private var dispatchSource: DispatchSourceFileSystemObject? + + internal let url: URL + + init(for url: URL, eventMask: DispatchSource.FileSystemEvent, onChange: @escaping () -> Void) { + self.url = url + + self.linked = FileSystem.fileExists(Paths.php) + print("Initial PHP linked state: \(linked)") + + fileDescriptor = open(url.path, O_EVTONLY) + + dispatchSource = DispatchSource.makeFileSystemObjectSource( + fileDescriptor: fileDescriptor, + eventMask: eventMask, + queue: self.queue + ) + + dispatchSource?.setEventHandler(handler: { + let distance = self.lastUpdate?.distance(to: Date().timeIntervalSince1970) + + if distance == nil || distance != nil && distance! > 1.00 { + print("FS event fired, checking in 1s, no duplicate FS events will be acted upon") + + self.lastUpdate = Date().timeIntervalSince1970 + + Task { + await delay(seconds: 1) + + let newLinked = FileSystem.fileExists(Paths.php) + + if newLinked != self.linked { + self.linked = newLinked + + Log.info("The status of the PHP binary has changed!") + + if newLinked { + Log.info("php is linked") + } else { + Log.info("php is not linked") + } + } + + onChange() + } + } + }) + + dispatchSource?.setCancelHandler(handler: { [weak self] in + guard let self = self else { return } + + close(self.fileDescriptor) + self.fileDescriptor = -1 + self.dispatchSource = nil + }) + + dispatchSource?.resume() + } + + func terminate() { + dispatchSource?.cancel() + } + + deinit { + Log.perf("FSNotifier for \(self.url) will be deinitialized.") + } +} diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index ebeed23..da8a5f9 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -50,6 +50,11 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele */ var logger = Log.shared + /** + + */ + var watchers: [FSNotifier.Kind: FSNotifier] = [:] + // MARK: - Initializer /** @@ -99,96 +104,27 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele startup procedure. */ func applicationDidFinishLaunching(_ aNotification: Notification) { - self.watchHomebrewBinFolder() - /* // Make sure notifications will work setupNotifications() + // Make sure the watchers are set up + // TODO: Move to after startup + self.watchHomebrewBinFolder() + Task { // Make sure the menu performs its initial checks await paths.loadUser() await menu.startup() } - */ } func watchHomebrewBinFolder() { - Log.info("Watching Homebrew's bin folder") - FSWatch2.shared = FSWatch2( + self.watchers[.homebrewLocks] = FSNotifier( for: URL(fileURLWithPath: Paths.binPath), eventMask: .all, onChange: { - print("Something has changed") + // Removing requires termination and then removing reference + // self.watchers[.homebrewLocks]?.terminate() + // self.watchers[.homebrewLocks] = nil } ) } } - -class FSWatch2 { - public static var shared: FSWatch2! = nil - - let queue = DispatchQueue(label: "FSWatch2Queue", attributes: .concurrent) - - var lastUpdate: TimeInterval? - var linked: Bool - - private var fileDescriptor: CInt = -1 - private var dispatchSource: DispatchSourceFileSystemObject? - - internal let url: URL - - init(for url: URL, eventMask: DispatchSource.FileSystemEvent, onChange: () -> Void) { - self.url = url - - self.linked = FileSystem.fileExists(Paths.php) - print("Initial PHP linked state: \(linked)") - - fileDescriptor = open(url.path, O_EVTONLY) - - dispatchSource = DispatchSource.makeFileSystemObjectSource( - fileDescriptor: fileDescriptor, - eventMask: eventMask, - queue: self.queue - ) - - dispatchSource?.setEventHandler(handler: { - let distance = self.lastUpdate?.distance(to: Date().timeIntervalSince1970) - - if distance == nil || distance != nil && distance! > 1.00 { - print("FS event fired, checking in 1s, no duplicate FS events will be acted upon") - - self.lastUpdate = Date().timeIntervalSince1970 - - Task { - await delay(seconds: 1) - - let newLinked = FileSystem.fileExists(Paths.php) - - if newLinked != self.linked { - self.linked = newLinked - - Log.info("The status of the PHP binary has changed!") - - if newLinked { - Log.info("php is linked") - } else { - Log.info("php is not linked") - } - } - } - } - }) - - dispatchSource?.setCancelHandler(handler: { [weak self] in - guard let self = self else { return } - - close(self.fileDescriptor) - self.fileDescriptor = -1 - self.dispatchSource = nil - }) - - dispatchSource?.resume() - } - - deinit { - print("deallocing watcher") - } -} From 8d42e27ef6565b41552851137d4e09d7cbed8523 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 13 Jan 2023 19:13:43 +0100 Subject: [PATCH 005/194] =?UTF-8?q?=F0=9F=94=A7=20Keep=20track=20of=20unsu?= =?UTF-8?q?pported=20(but=20installed)=20PHP=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Constants.swift | 13 +++++-- phpmon/Common/PHP/PHP Version/PhpEnv.swift | 36 ++++++++++--------- .../Versions/PhpVersionDetectionTest.swift | 3 +- 3 files changed, 32 insertions(+), 20 deletions(-) diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 1c595ba..7739fea 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -20,9 +20,18 @@ struct Constants { /** * The PHP versions supported by this application. - * Depends on what version of Valet is installed. + * Any other PHP versions are considered invalid. */ - static let ValetSupportedPhpVersionMatrix = [ + static let DetectedPhpVersions: Set = [ + "5.6", + "7.0", "7.1", "7.2", "7.3", "7.4", + "8.0", "8.1", "8.2", "8.3" + ] + + /** + The PHP versions supported by each version of Valet. + */ + static let ValetSupportedPhpVersionMatrix: [Int: Set] = [ 2: // Valet v2 has the broadest legacy support [ "5.6", diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index a51018e..52815a1 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -38,9 +38,12 @@ class PhpEnv { /** Whether the switcher is busy performing any actions. */ var isBusy: Bool = false - /** All available versions of PHP. */ + /** All versions of PHP that are currently supported. */ var availablePhpVersions: [String] = [] + /** All versions of PHP that are currently installed but not compatible. */ + var incompatiblePhpVersions: [String] = [] + /** Cached information about the PHP installations. */ var cachedPhpInstallations: [String: PhpInstallation] = [:] @@ -87,10 +90,12 @@ class PhpEnv { /** Detects which versions of PHP are installed. */ - public func detectPhpVersions() async -> [String] { + public func detectPhpVersions() async -> Set { let files = await Shell.pipe("ls \(Paths.optPath) | grep php@").out - let supported: [String] = { + let versions = await extractPhpVersions(from: files.components(separatedBy: "\n")) + + let supportedByValet: Set = { guard let version = Valet.shared.version else { return [] } @@ -98,10 +103,7 @@ class PhpEnv { return Constants.ValetSupportedPhpVersionMatrix[version.major] ?? [] }() - var versionsOnly = await extractPhpVersions( - from: files.components(separatedBy: "\n"), - supported: supported - ) + var supportedVersions = versions.intersection(supportedByValet) // Make sure the aliased version is detected // The user may have `php` installed, but not e.g. `php@8.0` @@ -109,13 +111,15 @@ class PhpEnv { let phpAlias = homebrewPackage.version // Avoid inserting a duplicate - if !versionsOnly.contains(phpAlias) && FileSystem.fileExists("\(Paths.optPath)/php/bin/php") { - versionsOnly.append(phpAlias) + if !supportedVersions.contains(phpAlias) && FileSystem.fileExists("\(Paths.optPath)/php/bin/php") { + supportedVersions.insert(phpAlias) } - Log.info("The PHP versions that were detected are: \(versionsOnly)") + availablePhpVersions = Array(supportedVersions) + incompatiblePhpVersions = Array(versions.subtracting(supportedByValet)) - availablePhpVersions = versionsOnly + Log.info("The PHP versions that were detected are: \(availablePhpVersions)") + Log.info("The PHP versions that were unsupported are: \(incompatiblePhpVersions)") var mappedVersions: [String: PhpInstallation] = [:] @@ -125,7 +129,7 @@ class PhpEnv { cachedPhpInstallations = mappedVersions - return versionsOnly + return supportedVersions } /** @@ -137,11 +141,11 @@ class PhpEnv { */ public func extractPhpVersions( from versions: [String], - supported: [String], checkBinaries: Bool = true, generateHelpers: Bool = true - ) async -> [String] { - var output: [String] = [] + ) async -> Set { + let supported = Constants.DetectedPhpVersions + var output: Set = [] versions.filter { (version) -> Bool in // Omit everything that doesn't start with php@ // (e.g. something-php@8.0 won't be detected) @@ -153,7 +157,7 @@ class PhpEnv { if !output.contains(version) && supported.contains(version) && (checkBinaries ? FileSystem.fileExists("\(Paths.optPath)/php@\(version)/bin/php") : true) { - output.append(version) + output.insert(version) } } diff --git a/tests/unit/Versions/PhpVersionDetectionTest.swift b/tests/unit/Versions/PhpVersionDetectionTest.swift index a137741..fc77d78 100644 --- a/tests/unit/Versions/PhpVersionDetectionTest.swift +++ b/tests/unit/Versions/PhpVersionDetectionTest.swift @@ -24,11 +24,10 @@ class PhpVersionDetectionTest: XCTestCase { "php@5.6", // should be omitted, not supported "php@5.4" // should be omitted, not supported ], - supported: ["7.0", "8.0", "8.1", "8.2"], checkBinaries: false, generateHelpers: false ) - XCTAssertEqual(outcome, ["8.0", "7.0"]) + XCTAssertEqual(outcome, ["8.0", "7.0", "5.6"]) } } From 7c3f416789ba717a3733fc3985f738d7c643aa14 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 13 Jan 2023 19:46:25 +0100 Subject: [PATCH 006/194] =?UTF-8?q?=E2=9C=A8=20Tell=20users=20about=20olde?= =?UTF-8?q?r=20unsupported=20PHP=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/MainMenu.swift | 18 ++++++++++++++++++ phpmon/Domain/Menu/StatusMenu+Items.swift | 13 +++++++++++-- phpmon/Localizable.strings | 11 ++++++++++- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index fc3893d..e21584a 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -109,6 +109,24 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate } } + @objc func showIncompatiblePhpVersionsAlert() { + Task { @MainActor in + BetterAlert().withInformation( + title: "startup.unsupported_versions_explanation.title".localized, + subtitle: "startup.unsupported_versions_explanation.subtitle".localized( + PhpEnv.shared.incompatiblePhpVersions + .map({ version in + return "• PHP \(version)" + }) + .joined(separator: "\n") + ), + description: "startup.unsupported_versions_explanation.desc".localized + ) + .withPrimary(text: "generic.ok".localized) + .show() + } + } + /** Reloads the menu in the background, using `asyncExecution`. */ @objc func reloadPhpMonitorMenuInBackground() { asyncExecution({ diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index d37fac2..8a26e1e 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -41,7 +41,7 @@ extension StatusMenu { return } - if PhpEnv.shared.availablePhpVersions.isEmpty { + if PhpEnv.shared.availablePhpVersions.isEmpty && PhpEnv.shared.incompatiblePhpVersions.isEmpty { return } @@ -67,7 +67,6 @@ extension StatusMenu { func addSwitchToPhpMenuItems() { var shortcutKey = 1 for index in (0.. Date: Mon, 16 Jan 2023 21:09:25 +0100 Subject: [PATCH 007/194] =?UTF-8?q?=F0=9F=91=8C=20Sort=20PHP=20versions,?= =?UTF-8?q?=20amend=20message?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PHP Version/PhpEnv.swift | 3 +++ phpmon/Domain/Menu/StatusMenu+Items.swift | 2 +- phpmon/Localizable.strings | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index 52815a1..c34c89d 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -116,7 +116,10 @@ class PhpEnv { } availablePhpVersions = Array(supportedVersions) + .sorted(by: { $0.versionCompare($1) == .orderedDescending }) + incompatiblePhpVersions = Array(versions.subtracting(supportedByValet)) + .sorted(by: { $0.versionCompare($1) == .orderedDescending }) Log.info("The PHP versions that were detected are: \(availablePhpVersions)") Log.info("The PHP versions that were unsupported are: \(incompatiblePhpVersions)") diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 8a26e1e..543f4d7 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -66,7 +66,7 @@ extension StatusMenu { func addSwitchToPhpMenuItems() { var shortcutKey = 1 - for index in (0.. Date: Tue, 17 Jan 2023 18:05:22 +0100 Subject: [PATCH 008/194] =?UTF-8?q?=F0=9F=91=8C=20Use=20specific=20theme?= =?UTF-8?q?=20colors=20for=20services=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatusColorGreen.colorset/Contents.json | 38 +++++++++++++++++++ .../StatusColorRed.colorset/Contents.json | 38 +++++++++++++++++++ .../StatusColorYellow.colorset/Contents.json | 38 +++++++++++++++++++ .../Domain/App/Services/ServicesManager.swift | 6 +-- phpmon/Domain/SwiftUI/Menu/ServicesView.swift | 6 +-- 5 files changed, 120 insertions(+), 6 deletions(-) create mode 100644 phpmon/Assets.xcassets/StatusColorGreen.colorset/Contents.json create mode 100644 phpmon/Assets.xcassets/StatusColorRed.colorset/Contents.json create mode 100644 phpmon/Assets.xcassets/StatusColorYellow.colorset/Contents.json diff --git a/phpmon/Assets.xcassets/StatusColorGreen.colorset/Contents.json b/phpmon/Assets.xcassets/StatusColorGreen.colorset/Contents.json new file mode 100644 index 0000000..fdb176a --- /dev/null +++ b/phpmon/Assets.xcassets/StatusColorGreen.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.501", + "green" : "0.697", + "red" : "0.247" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.501", + "green" : "0.765", + "red" : "0.247" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon/Assets.xcassets/StatusColorRed.colorset/Contents.json b/phpmon/Assets.xcassets/StatusColorRed.colorset/Contents.json new file mode 100644 index 0000000..7274621 --- /dev/null +++ b/phpmon/Assets.xcassets/StatusColorRed.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.180", + "green" : "0.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.426", + "green" : "0.363", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon/Assets.xcassets/StatusColorYellow.colorset/Contents.json b/phpmon/Assets.xcassets/StatusColorYellow.colorset/Contents.json new file mode 100644 index 0000000..2705f6e --- /dev/null +++ b/phpmon/Assets.xcassets/StatusColorYellow.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.180", + "green" : "0.841", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.426", + "green" : "0.809", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon/Domain/App/Services/ServicesManager.swift b/phpmon/Domain/App/Services/ServicesManager.swift index 579b78d..e0b3a54 100644 --- a/phpmon/Domain/App/Services/ServicesManager.swift +++ b/phpmon/Domain/App/Services/ServicesManager.swift @@ -66,7 +66,7 @@ class ServicesManager: ObservableObject { public var statusColor: Color { if self.services.isEmpty || !self.firstRunComplete { - return .yellow + return Color("StatusColorYellow") } let statuses = self.services[0...2].map { $0.status } @@ -74,10 +74,10 @@ class ServicesManager: ObservableObject { if statuses.contains(.missing) || statuses.contains(.inactive) || statuses.contains(.error) { - return .red + return Color("StatusColorRed") } - return .green + return Color("StatusColorGreen") } /** diff --git a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift index 99371cd..b08fc6c 100644 --- a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift +++ b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift @@ -143,7 +143,7 @@ struct ServiceView: View { } label: { Text("E") .frame(width: 12.0, height: 12.0) - .foregroundColor(Color("IconColorRed")) + .foregroundColor(Color("StatusColorRed")) } .focusable(false) .frame(width: 25, height: 25) @@ -163,8 +163,8 @@ struct ServiceView: View { .frame(width: 12.0, height: 12.0) .foregroundColor( service.status == .active - ? Color("IconColorGreen") - : Color("IconColorRed") + ? Color("StatusColorGreen") + : Color("StatusColorRed") ) } .focusable(false) From c6f2167c92f6fa5b546ae204d0ff0edadc275df2 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 17 Jan 2023 18:57:21 +0100 Subject: [PATCH 009/194] =?UTF-8?q?=E2=9C=A8=20Added=20environment=20check?= =?UTF-8?q?=20groups?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 16 +- phpmon/Common/Core/Logger.swift | 6 + phpmon/Common/Helpers/FSNotifier.swift | 2 +- phpmon/Domain/App/EnvironmentCheck.swift | 6 + phpmon/Domain/App/Startup.swift | 395 ++++++++++--------- phpmon/Domain/Integrations/Valet/Valet.swift | 6 +- 6 files changed, 229 insertions(+), 202 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8b3622e..c92efae 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -2809,7 +2809,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1020; + CURRENT_PROJECT_VERSION = 1100; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -2821,7 +2821,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 5.7; + MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2838,7 +2838,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1020; + CURRENT_PROJECT_VERSION = 1100; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -2850,7 +2850,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 5.7; + MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3066,7 +3066,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1020; + CURRENT_PROJECT_VERSION = 1100; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3077,7 +3077,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 5.7; + MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; PRODUCT_NAME = "$(TARGET_NAME) DEV"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -3176,7 +3176,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1020; + CURRENT_PROJECT_VERSION = 1100; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3187,7 +3187,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 5.7; + MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/phpmon/Common/Core/Logger.swift b/phpmon/Common/Core/Logger.swift index 7ab6592..f8ab817 100644 --- a/phpmon/Common/Core/Logger.swift +++ b/phpmon/Common/Core/Logger.swift @@ -55,4 +55,10 @@ class Log { } } + static func line(as verbosity: Verbosity = .info) { + if verbosity.isApplicable() { + print("----------------------------------") + } + } + } diff --git a/phpmon/Common/Helpers/FSNotifier.swift b/phpmon/Common/Helpers/FSNotifier.swift index 16294cc..ca4a678 100644 --- a/phpmon/Common/Helpers/FSNotifier.swift +++ b/phpmon/Common/Helpers/FSNotifier.swift @@ -29,7 +29,7 @@ class FSNotifier { self.url = url self.linked = FileSystem.fileExists(Paths.php) - print("Initial PHP linked state: \(linked)") + Log.info("[FSN] Initial PHP linked state: \(linked ? "linked" : "unlinked")") fileDescriptor = open(url.path, O_EVTONLY) diff --git a/phpmon/Domain/App/EnvironmentCheck.swift b/phpmon/Domain/App/EnvironmentCheck.swift index a044ddf..551d2a5 100644 --- a/phpmon/Domain/App/EnvironmentCheck.swift +++ b/phpmon/Domain/App/EnvironmentCheck.swift @@ -43,3 +43,9 @@ struct EnvironmentCheck { return await !self.command() } } + +struct EnvironmentCheckGroup { + let name: String + let condition: () -> Bool + let checks: [EnvironmentCheck] +} diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 7699a5d..bc87e4c 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -21,16 +21,27 @@ class Startup { // Do the important system setup checks Log.info("[ARCH] The user is running PHP Monitor with the architecture: \(App.architecture)") - for check in self.checks { - if await check.succeeds() { - Log.info("[OK] \(check.name)") - continue - } + for group in self.groups { + if group.condition() { + Log.line() + Log.info("Running \(group.name) checks!") + Log.line() + for check in group.checks { + if await check.succeeds() { + Log.info("[OK] \(check.name)") + continue + } - // If we get here, something's gone wrong and the check has failed... - Log.info("[FAIL] \(check.name)") - await showAlert(for: check) - return false + // If we get here, something's gone wrong and the check has failed... + Log.info("[FAIL] \(check.name)") + await showAlert(for: check) + return false + } + } else { + Log.line() + Log.info("Skipping \(group.name) checks!") + Log.line() + } } // If we get here, nothing has gone wrong. That's what we want! @@ -81,192 +92,192 @@ class Startup { // MARK: - Check (List) - public var checks: [EnvironmentCheck] = [ - // ================================================================================= - // The Homebrew binary must exist. - // ================================================================================= - EnvironmentCheck( - command: { return !FileSystem.fileExists(Paths.brew) }, - name: "`\(Paths.brew)` exists", - titleText: "alert.homebrew_missing.title".localized, - subtitleText: "alert.homebrew_missing.subtitle".localized, - descriptionText: "alert.homebrew_missing.info".localized( - App.architecture - .replacingOccurrences(of: "x86_64", with: "Intel") - .replacingOccurrences(of: "arm64", with: "Apple Silicon"), - Paths.brew + public var groups: [EnvironmentCheckGroup] = [ + EnvironmentCheckGroup(name: "core", condition: { return true }, checks: [ + // ================================================================================= + // The Homebrew binary must exist. + // ================================================================================= + EnvironmentCheck( + command: { return !FileSystem.fileExists(Paths.brew) }, + name: "`\(Paths.brew)` exists", + titleText: "alert.homebrew_missing.title".localized, + subtitleText: "alert.homebrew_missing.subtitle".localized, + descriptionText: "alert.homebrew_missing.info".localized( + App.architecture + .replacingOccurrences(of: "x86_64", with: "Intel") + .replacingOccurrences(of: "arm64", with: "Apple Silicon"), + Paths.brew + ), + buttonText: "alert.homebrew_missing.quit".localized, + requiresAppRestart: true ), - buttonText: "alert.homebrew_missing.quit".localized, - requiresAppRestart: true - ), - /* - // ================================================================================= - // The PHP binary must exist. - // ================================================================================= - EnvironmentCheck( - command: { return !FileSystem.fileExists(Paths.php) }, - name: "`\(Paths.php)` exists", - titleText: "startup.errors.php_binary.title".localized, - subtitleText: "startup.errors.php_binary.subtitle".localized, - descriptionText: "startup.errors.php_binary.desc".localized(Paths.php) - ), - */ - // ================================================================================= - // Make sure we can detect one or more PHP installations. - // ================================================================================= - EnvironmentCheck( - command: { - return await !Shell.pipe("ls \(Paths.optPath) | grep php").out.contains("php") - }, - name: "`ls \(Paths.optPath) | grep php` returned php result", - titleText: "startup.errors.php_opt.title".localized, - subtitleText: "startup.errors.php_opt.subtitle".localized( - Paths.optPath + // ================================================================================= + // The PHP binary must exist. + // ================================================================================= + EnvironmentCheck( + command: { return !FileSystem.fileExists(Paths.php) }, + name: "`\(Paths.php)` exists", + titleText: "startup.errors.php_binary.title".localized, + subtitleText: "startup.errors.php_binary.subtitle".localized, + descriptionText: "startup.errors.php_binary.desc".localized(Paths.php) ), - descriptionText: "startup.errors.php_opt.desc".localized - ), - // ================================================================================= - // The Valet binary must exist. - // ================================================================================= - EnvironmentCheck( - command: { - return !(FileSystem.fileExists(Paths.valet) || FileSystem.fileExists("~/.composer/vendor/bin/valet")) - }, - name: "`valet` binary exists", - titleText: "startup.errors.valet_executable.title".localized, - subtitleText: "startup.errors.valet_executable.subtitle".localized, - descriptionText: "startup.errors.valet_executable.desc".localized( - Paths.valet - ) - ), - // ================================================================================= - // Check if Valet and Homebrew need manual password intervention. If they do, then - // PHP Monitor will be unable to run these commands, which prevents PHP Monitor from - // functioning correctly. Let the user know that they need to run `valet trust`. - // ================================================================================= - EnvironmentCheck( - command: { return await !Shell.pipe("cat /private/etc/sudoers.d/brew").out.contains(Paths.brew) }, - name: "`/private/etc/sudoers.d/brew` contains brew", - titleText: "startup.errors.sudoers_brew.title".localized, - subtitleText: "startup.errors.sudoers_brew.subtitle".localized, - descriptionText: "startup.errors.sudoers_brew.desc".localized - ), - EnvironmentCheck( - command: { return await !Shell.pipe("cat /private/etc/sudoers.d/valet").out.contains(Paths.valet) }, - name: "`/private/etc/sudoers.d/valet` contains valet", - titleText: "startup.errors.sudoers_valet.title".localized, - subtitleText: "startup.errors.sudoers_valet.subtitle".localized, - descriptionText: "startup.errors.sudoers_valet.desc".localized - ), - // ================================================================================= - // Verify if the Homebrew services are running (as root). - // ================================================================================= - EnvironmentCheck( - command: { - await HomebrewDiagnostics.loadInstalledTaps() - return await HomebrewDiagnostics.cannotLoadService("dnsmasq") - }, - name: "`sudo \(Paths.brew) services info` JSON loaded", - titleText: "startup.errors.services_json_error.title".localized, - subtitleText: "startup.errors.services_json_error.subtitle".localized, - descriptionText: "startup.errors.services_json_error.desc".localized - ), - // ================================================================================= - // Determine that Valet is installed - // ================================================================================= - EnvironmentCheck( - command: { - return !FileSystem.directoryExists("~/.config/valet") - }, - name: "`.config/valet` not empty (Valet installed)", - titleText: "startup.errors.valet_not_installed.title".localized, - subtitleText: "startup.errors.valet_not_installed.subtitle".localized, - descriptionText: "startup.errors.valet_not_installed.desc".localized - ), - // ================================================================================= - // Determine that the Valet configuration JSON file is valid. - // ================================================================================= - EnvironmentCheck( - command: { - // Detect additional binaries (e.g. Composer) - Paths.shared.detectBinaryPaths() - // Load the configuration file (config.json) - Valet.shared.loadConfiguration() - // This check fails when the config is nil - return Valet.shared.config == nil - }, - name: "`config.json` was valid", - titleText: "startup.errors.valet_json_invalid.title".localized, - subtitleText: "startup.errors.valet_json_invalid.subtitle".localized, - descriptionText: "startup.errors.valet_json_invalid.desc".localized - ), - // ================================================================================= - // Check for `which` alias issue - // ================================================================================= - EnvironmentCheck( - command: { - let nodePath = await Shell.pipe("which node").out - return App.architecture == "x86_64" + // ================================================================================= + // Make sure we can detect one or more PHP installations. + // ================================================================================= + EnvironmentCheck( + command: { + return await !Shell.pipe("ls \(Paths.optPath) | grep php").out.contains("php") + }, + name: "`ls \(Paths.optPath) | grep php` returned php result", + titleText: "startup.errors.php_opt.title".localized, + subtitleText: "startup.errors.php_opt.subtitle".localized( + Paths.optPath + ), + descriptionText: "startup.errors.php_opt.desc".localized + ), + ]), + EnvironmentCheckGroup(name: "valet", condition: { return Valet.installed() }, checks: [ + // ================================================================================= + // The Valet binary must exist. + // ================================================================================= + EnvironmentCheck( + command: { + return !(FileSystem.fileExists(Paths.valet) || FileSystem.fileExists("~/.composer/vendor/bin/valet")) + }, + name: "`valet` binary exists", + titleText: "startup.errors.valet_executable.title".localized, + subtitleText: "startup.errors.valet_executable.subtitle".localized, + descriptionText: "startup.errors.valet_executable.desc".localized( + Paths.valet + ) + ), + // ================================================================================= + // Check if Valet and Homebrew need manual password intervention. If they do, then + // PHP Monitor will be unable to run these commands, which prevents PHP Monitor from + // functioning correctly. Let the user know that they need to run `valet trust`. + // ================================================================================= + EnvironmentCheck( + command: { return await !Shell.pipe("cat /private/etc/sudoers.d/brew").out.contains(Paths.brew) }, + name: "`/private/etc/sudoers.d/brew` contains brew", + titleText: "startup.errors.sudoers_brew.title".localized, + subtitleText: "startup.errors.sudoers_brew.subtitle".localized, + descriptionText: "startup.errors.sudoers_brew.desc".localized + ), + EnvironmentCheck( + command: { return await !Shell.pipe("cat /private/etc/sudoers.d/valet").out.contains(Paths.valet) }, + name: "`/private/etc/sudoers.d/valet` contains valet", + titleText: "startup.errors.sudoers_valet.title".localized, + subtitleText: "startup.errors.sudoers_valet.subtitle".localized, + descriptionText: "startup.errors.sudoers_valet.desc".localized + ), + // ================================================================================= + // Determine that Valet is installed + // ================================================================================= + EnvironmentCheck( + command: { + return !FileSystem.directoryExists("~/.config/valet") + }, + name: "`.config/valet` not empty (Valet installed)", + titleText: "startup.errors.valet_not_installed.title".localized, + subtitleText: "startup.errors.valet_not_installed.subtitle".localized, + descriptionText: "startup.errors.valet_not_installed.desc".localized + ), + // ================================================================================= + // Determine that the Valet configuration JSON file is valid. + // ================================================================================= + EnvironmentCheck( + command: { + // Detect additional binaries (e.g. Composer) + Paths.shared.detectBinaryPaths() + // Load the configuration file (config.json) + Valet.shared.loadConfiguration() + // This check fails when the config is nil + return Valet.shared.config == nil + }, + name: "`config.json` was valid", + titleText: "startup.errors.valet_json_invalid.title".localized, + subtitleText: "startup.errors.valet_json_invalid.subtitle".localized, + descriptionText: "startup.errors.valet_json_invalid.desc".localized + ), + // ================================================================================= + // Verify if the Homebrew services are running (as root). + // ================================================================================= + EnvironmentCheck( + command: { + await HomebrewDiagnostics.loadInstalledTaps() + return await HomebrewDiagnostics.cannotLoadService("dnsmasq") + }, + name: "`sudo \(Paths.brew) services info` JSON loaded", + titleText: "startup.errors.services_json_error.title".localized, + subtitleText: "startup.errors.services_json_error.subtitle".localized, + descriptionText: "startup.errors.services_json_error.desc".localized + ), + // ================================================================================= + // Check for `which` alias issue + // ================================================================================= + EnvironmentCheck( + command: { + let nodePath = await Shell.pipe("which node").out + return App.architecture == "x86_64" && FileSystem.fileExists("/usr/local/bin/which") && nodePath.contains("env: node: No such file or directory") - }, - name: "`env: node` issue does not apply", - titleText: "startup.errors.which_alias_issue.title".localized, - subtitleText: "startup.errors.which_alias_issue.subtitle".localized, - descriptionText: "startup.errors.which_alias_issue.desc".localized - ), - // ================================================================================= - // Determine that Valet works correctly (no issues in platform detected) - // ================================================================================= - /* - EnvironmentCheck( - command: { - return await Shell.pipe("valet --version").out - .contains("Composer detected issues in your platform") - }, - name: "`no global composer issues", - titleText: "startup.errors.global_composer_platform_issues.title".localized, - subtitleText: "startup.errors.global_composer_platform_issues.subtitle".localized, - descriptionText: "startup.errors.global_composer_platform_issues.desc".localized - ), - // ================================================================================= - // Determine the Valet version and ensure it isn't unknown. - // ================================================================================= - EnvironmentCheck( - command: { - let output = await Shell.pipe("valet --version").out - // Failure condition #1: does not contain Laravel Valet - if !output.contains("Laravel Valet") { - return true - } - // Failure condition #2: version cannot be parsed - let versionString = output - .trimmingCharacters(in: .whitespacesAndNewlines) - .components(separatedBy: "Laravel Valet")[1] - .trimmingCharacters(in: .whitespaces) - // Extract the version number - Valet.shared.version = try! VersionNumber.parse(VersionExtractor.from(output)!) - // Get the actual version - return Valet.shared.version == nil - }, - name: "`valet --version` was loaded", - titleText: "startup.errors.valet_version_unknown.title".localized, - subtitleText: "startup.errors.valet_version_unknown.subtitle".localized, - descriptionText: "startup.errors.valet_version_unknown.desc".localized - ), - // ================================================================================= - // Ensure the Valet version is supported. - // ================================================================================= - EnvironmentCheck( - command: { - // We currently support Valet 2, 3 or 4. Any other version should get an alert. - return ![2, 3, 4].contains(Valet.shared.version.major) - }, - name: "valet version is supported", - titleText: "startup.errors.valet_version_not_supported.title".localized, - subtitleText: "startup.errors.valet_version_not_supported.subtitle".localized, - descriptionText: "startup.errors.valet_version_not_supported.desc".localized - ) - */ + }, + name: "`env: node` issue does not apply", + titleText: "startup.errors.which_alias_issue.title".localized, + subtitleText: "startup.errors.which_alias_issue.subtitle".localized, + descriptionText: "startup.errors.which_alias_issue.desc".localized + ), + // ================================================================================= + // Determine that Valet works correctly (no issues in platform detected) + // ================================================================================= + EnvironmentCheck( + command: { + return await Shell.pipe("valet --version").out + .contains("Composer detected issues in your platform") + }, + name: "`no global composer issues", + titleText: "startup.errors.global_composer_platform_issues.title".localized, + subtitleText: "startup.errors.global_composer_platform_issues.subtitle".localized, + descriptionText: "startup.errors.global_composer_platform_issues.desc".localized + ), + // ================================================================================= + // Determine the Valet version and ensure it isn't unknown. + // ================================================================================= + EnvironmentCheck( + command: { + let output = await Shell.pipe("valet --version").out + // Failure condition #1: does not contain Laravel Valet + if !output.contains("Laravel Valet") { + return true + } + // Failure condition #2: version cannot be parsed + let versionString = output + .trimmingCharacters(in: .whitespacesAndNewlines) + .components(separatedBy: "Laravel Valet")[1] + .trimmingCharacters(in: .whitespaces) + // Extract the version number + Valet.shared.version = try! VersionNumber.parse(VersionExtractor.from(output)!) + // Get the actual version + return Valet.shared.version == nil + }, + name: "`valet --version` was loaded", + titleText: "startup.errors.valet_version_unknown.title".localized, + subtitleText: "startup.errors.valet_version_unknown.subtitle".localized, + descriptionText: "startup.errors.valet_version_unknown.desc".localized + ), + // ================================================================================= + // Ensure the Valet version is supported. + // ================================================================================= + EnvironmentCheck( + command: { + // We currently support Valet 2, 3 or 4. Any other version should get an alert. + return ![2, 3, 4].contains(Valet.shared.version?.major) + }, + name: "valet version is supported", + titleText: "startup.errors.valet_version_not_supported.title".localized, + subtitleText: "startup.errors.valet_version_not_supported.subtitle".localized, + descriptionText: "startup.errors.valet_version_not_supported.desc".localized + ) + ]) ] } diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 0e9e6e9..788d088 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -22,7 +22,7 @@ class Valet { static let shared = Valet() /// The version of Valet that was detected. - var version: VersionNumber? = nil + var version: VersionNumber? /// The Valet configuration file. var config: Valet.Configuration! @@ -57,6 +57,10 @@ class Valet { } } + public static func installed() -> Bool { + return FileSystem.fileExists(Paths.binPath.appending("/valet")) + } + /** Check if a particular feature is enabled. */ From 89642de12e4fd618767b58c1e7db6d9c55e9f240 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 17 Jan 2023 19:16:36 +0100 Subject: [PATCH 010/194] =?UTF-8?q?=E2=9C=A8=20Add=20testable=20configurat?= =?UTF-8?q?ion=20for=20Valet-free=20env?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/PHP Monitor DEV.xcscheme | 4 + phpmon/Common/PHP/PHP Version/PhpEnv.swift | 4 +- .../Testables/TestableConfiguration.swift | 15 +- phpmon/Domain/App/EnvironmentManager.swift | 18 +-- phpmon/Domain/App/Startup.swift | 2 +- phpmon/Domain/Integrations/Valet/Valet.swift | 19 ++- tests/Shared/TestableConfigurations.swift | 136 ++++++++++++++++++ .../Testables/TestableConfigurationTest.swift | 11 ++ 8 files changed, 181 insertions(+), 28 deletions(-) diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 8642ae0..33c1688 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -93,6 +93,10 @@ argument = "--configuration:~/.phpmon_fconf_working.json" isEnabled = "NO"> + + diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index c34c89d..286119d 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -97,13 +97,13 @@ class PhpEnv { let supportedByValet: Set = { guard let version = Valet.shared.version else { - return [] + return Constants.DetectedPhpVersions } return Constants.ValetSupportedPhpVersionMatrix[version.major] ?? [] }() - var supportedVersions = versions.intersection(supportedByValet) + var supportedVersions = Valet.installed ? versions.intersection(supportedByValet) : versions // Make sure the aliased version is detected // The user may have `php` installed, but not e.g. `php@8.0` diff --git a/phpmon/Common/Testables/TestableConfiguration.swift b/phpmon/Common/Testables/TestableConfiguration.swift index f7b2a75..af7bc43 100644 --- a/phpmon/Common/Testables/TestableConfiguration.swift +++ b/phpmon/Common/Testables/TestableConfiguration.swift @@ -24,12 +24,15 @@ public struct TestableConfiguration: Codable { ActiveFileSystem.useTestable(filesystem) Log.info("Applying fake commands...") ActiveCommand.useTestable(commandOutput) - Log.info("Applying fake scanner...") - ValetScanner.useFake() - Log.info("Applying fake services manager...") - ServicesManager.useFake() - Log.info("Applying fake Valet domain interactor...") - ValetInteractor.useFake() + + if Valet.shared.installed { + Log.info("Applying fake scanner...") + ValetScanner.useFake() + Log.info("Applying fake services manager...") + ServicesManager.useFake() + Log.info("Applying fake Valet domain interactor...") + ValetInteractor.useFake() + } } func toJson(pretty: Bool = false) -> String { diff --git a/phpmon/Domain/App/EnvironmentManager.swift b/phpmon/Domain/App/EnvironmentManager.swift index 52f3ca7..5eef699 100644 --- a/phpmon/Domain/App/EnvironmentManager.swift +++ b/phpmon/Domain/App/EnvironmentManager.swift @@ -9,24 +9,10 @@ import Foundation public class EnvironmentManager { - var values: [EnvironmentProperty: Bool] = [:] + static var values: [EnvironmentProperty: Bool] = [:] public func process() async { - self.values[.hasValetInstalled] = await !{ - let output = await Shell.pipe("valet --version").out - - // Failure condition #1: does not contain Laravel Valet - if !output.contains("Laravel Valet") { - return true - } - - // Extract the version number - Valet.shared.version = try! VersionNumber.parse(VersionExtractor.from(output)!) - - // Get the actual version - return Valet.shared.version == nil - - }() // returns true if none of the failure conditions are met + Self.values[.hasValetInstalled] = Valet.shared.installed } } diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index bc87e4c..681aa8c 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -136,7 +136,7 @@ class Startup { descriptionText: "startup.errors.php_opt.desc".localized ), ]), - EnvironmentCheckGroup(name: "valet", condition: { return Valet.installed() }, checks: [ + EnvironmentCheckGroup(name: "valet", condition: { return Valet.shared.installed }, checks: [ // ================================================================================= // The Valet binary must exist. // ================================================================================= diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 788d088..9c89fe6 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -57,10 +57,17 @@ class Valet { } } - public static func installed() -> Bool { - return FileSystem.fileExists(Paths.binPath.appending("/valet")) + static var installed: Bool { + return self.shared.installed } + lazy var installed: Bool = { + return false + + // TODO: Make this lazy + // return FileSystem.fileExists(Paths.binPath.appending("/valet")) + }() + /** Check if a particular feature is enabled. */ @@ -79,6 +86,10 @@ class Valet { Notify the user about a non-default TLD being set. */ public static func notifyAboutUnsupportedTLD() { + if !Valet.shared.installed { + return + } + if Valet.shared.config.tld != "test" && Preferences.isEnabled(.warnAboutNonStandardTLD) { Task { @MainActor in BetterAlert().withInformation( @@ -121,7 +132,9 @@ class Valet { handle all PHP versions including isolation, it needs to know about all sites. */ public func startPreloadingSites() async { - await self.reloadSites() + if Valet.shared.installed { + await self.reloadSites() + } } /** diff --git a/tests/Shared/TestableConfigurations.swift b/tests/Shared/TestableConfigurations.swift index 6bdfd63..0b9fe81 100644 --- a/tests/Shared/TestableConfigurations.swift +++ b/tests/Shared/TestableConfigurations.swift @@ -173,6 +173,142 @@ class TestableConfigurations { ] ) } + + /** A functional, working system setup (but without Valet). */ + static var workingWithoutValet: TestableConfiguration { + return TestableConfiguration( + architecture: "arm64", + filesystem: [ + "/usr/local/bin/" + : .fake(.directory, readOnly: true), + "/usr/local/bin/composer" + : .fake(.binary), + "/opt/homebrew/bin/brew" + : .fake(.binary), + "/opt/homebrew/bin/php" + : .fake(.binary), + "/opt/homebrew/opt/php" + : .fake(.symlink, "/opt/homebrew/Cellar/php/8.2.0"), + "/opt/homebrew/opt/php@8.2/bin/php" + : .fake(.symlink, "/opt/homebrew/Cellar/php/8.2.0/bin/php"), + "/opt/homebrew/Cellar/php/8.2.0/bin/php" + : .fake(.binary), + "/opt/homebrew/Cellar/php/8.2.0/bin/php-config" + : .fake(.binary), + "/opt/homebrew/etc/php/8.2/php-fpm.d/www.conf" + : .fake(.text), + "/opt/homebrew/etc/php/8.2/php.ini" + : .fake(.text), + "/opt/homebrew/etc/php/8.2/conf.d/php-memory-limits.ini" + : .fake(.text) + ], + shellOutput: [ + "sysctl -n sysctl.proc_translated" + : .instant("0"), + "id -un" + : .instant("user"), + "which node" + : .instant("/opt/homebrew/bin/node"), + "php -v" + : .instant(""" + PHP 8.2.0 (cli) (built: Dec XX 20XX XX:XX:XX) (NTS) + Copyright (c) The PHP Group + Zend Engine vX.X, Copyright (c) Zend Technologies + with Zend OPcache vX.X, Copyright (c), by Zend Technologies + """), + "ls /opt/homebrew/opt | grep php" + : .instant("php"), + "ls /opt/homebrew/opt | grep php@" + : .instant("php@8.2"), + "sudo /opt/homebrew/bin/brew services info dnsmasq --json" + : .delayed(0.2, """ + [ + { + "name": "nginx", + "service_name": "homebrew.mxcl.nginx", + "running": true, + "loaded": true, + "schedulable": false, + "pid": 133, + "exit_code": 0, + "user": "root", + "status": "started", + "file": "/Library/LaunchDaemons/homebrew.mxcl.nginx.plist", + "command": "/opt/homebrew/opt/nginx/bin/nginx -g daemon off;", + "working_dir": "/opt/homebrew", + "root_dir": null, + "log_path": null, + "error_log_path": null, + "interval": null, + "cron": null + } + ] + """), + "/opt/homebrew/bin/brew tap" + : .instant(""" + homebrew/cask + homebrew/core + homebrew/services + nicoverbruggen/cask + shivammathur/php + """), + "chmod +x /Users/nicoverbruggen/.config/phpmon/bin/pm82" + : .instant(""), + "mkdir -p ~/.config/phpmon" + : .instant(""), + "mkdir -p ~/.config/phpmon/bin" + : .instant(""), + "brew info shivammathur/php/php --json" + : .instant("Error: No available formula with the name \"shivammathur/php/php\"."), + "/usr/bin/open -Ra \"PhpStorm\"" + : .instant("Unable to find application named 'PhpStorm'", .stdErr), + "/usr/bin/open -Ra \"Visual Studio Code\"" + : .instant("Unable to find application named 'Visual Studio Code'", .stdErr), + "/usr/bin/open -Ra \"Sublime Text\"" + : .instant("Unable to find application named 'Sublime Text'", .stdErr), + "/usr/bin/open -Ra \"Sublime Merge\"" + : .instant("Unable to find application named 'Sublime Merge'", .stdErr), + "/usr/bin/open -Ra \"iTerm\"" + : .instant("Unable to find application named 'iTerm'", .stdErr), + "/opt/homebrew/bin/brew info php --json" + : .instant(ShellStrings.shared.brewJson), + "sudo /opt/homebrew/bin/brew services info --all --json" + : .instant(ShellStrings.shared.brewServicesAsRoot), + "/opt/homebrew/bin/brew services info --all --json" + : .instant(ShellStrings.shared.brewServicesAsUser), + "curl -s --max-time 5 '\(Constants.Urls.StableBuildCaskFile.absoluteString)' | grep version" + : .instant("version '5.6.2_976'"), + "/opt/homebrew/bin/brew unlink php" + : .delayed(0.2, "OK"), + "/opt/homebrew/bin/brew unlink php@8.2" + : .delayed(0.2, "OK"), + "/opt/homebrew/bin/brew link php --overwrite --force" + : .delayed(0.2, "OK"), + "sudo /opt/homebrew/bin/brew services stop php" + : .delayed(0.2, "OK"), + "sudo /opt/homebrew/bin/brew services start php" + : .delayed(0.2, "OK"), + "sudo /opt/homebrew/bin/brew services stop nginx" + : .delayed(0.2, "OK"), + "sudo /opt/homebrew/bin/brew services start nginx" + : .delayed(0.2, "OK"), + "sudo /opt/homebrew/bin/brew services stop dnsmasq" + : .delayed(0.2, "OK"), + "sudo /opt/homebrew/bin/brew services start dnsmasq" + : .delayed(0.2, "OK"), + ], + commandOutput: [ + "/opt/homebrew/bin/php-config --version": "8.2.0", + "/opt/homebrew/bin/php -r echo ini_get('memory_limit');": "512M", + "/opt/homebrew/bin/php -r echo ini_get('upload_max_filesize');": "512M", + "/opt/homebrew/bin/php -r echo ini_get('post_max_size');": "512M", + "/opt/homebrew/bin/php -r echo php_ini_scanned_files();" + : """ + /opt/homebrew/etc/php/8.2/conf.d/php-memory-limits.ini, + """ + ] + ) + } } class ShellStrings { diff --git a/tests/unit/Testables/TestableConfigurationTest.swift b/tests/unit/Testables/TestableConfigurationTest.swift index 97ec216..4e6bbb6 100644 --- a/tests/unit/Testables/TestableConfigurationTest.swift +++ b/tests/unit/Testables/TestableConfigurationTest.swift @@ -10,6 +10,7 @@ import XCTest class TestableConfigurationTest: XCTestCase { func test_configuration_can_be_saved_as_json() async { + // WORKING var configuration = TestableConfigurations.working try! configuration.toJson().write( @@ -18,6 +19,16 @@ class TestableConfigurationTest: XCTestCase { encoding: .utf8 ) + // WORKING (WITHOUT VALET) + let valetFreeConfiguration = TestableConfigurations.workingWithoutValet + + try! valetFreeConfiguration.toJson().write( + toFile: NSHomeDirectory() + "/.phpmon_fconf_working_no_valet.json", + atomically: true, + encoding: .utf8 + ) + + // NOT WORKING configuration.filesystem["/opt/homebrew/bin/php"] = nil try! configuration.toJson().write( From 0f62b1f1d006d3ff3f416d763f0915bacbe6000c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 18 Jan 2023 19:10:43 +0100 Subject: [PATCH 011/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updated README * Updated SECURITY * Revert the minimum Valet version to v2.16 --- README.md | 34 +++++++++++++++++++++--------- SECURITY.md | 4 +++- phpmon/Common/Core/Constants.swift | 4 ++-- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 222e1a0..392146d 100644 --- a/README.md +++ b/README.md @@ -27,22 +27,36 @@ PHP Monitor is a universal application that runs natively on Apple Silicon **and * macOS 11 Big Sur or later * Homebrew is installed in `/usr/local/homebrew` or `/opt/homebrew` * Homebrew `php` formula is installed -* Laravel Valet 3 recommended (but compatible with Valet 2) +* Laravel Valet (works with Valet v2, v3 and v4) _You may need to update your Valet installation to keep everything working if a major version update of PHP has been released. You can do this by running `composer global update && valet install`. Some features are not supported when running Valet 2._ +For more information, please see [SECURITY.md](./SECURITY.md) to find out which version of the app is currently supported. + ## 🚀 How to install -Again, make sure you have **Laravel Valet** installed first. Once that's done, you can install via Homebrew (recommended), or may download the latest release on GitHub. +Again, make sure you have **[Laravel Valet](https://laravel.com/docs/master/valet)** installed first: + +```sh +composer global require laravel/valet +valet install +valet trust +``` + +Once that's done, you can install PHP Monitor via Homebrew (recommended), or (alternatively) you may download the latest release on GitHub. To install via Homebrew, run: - brew tap nicoverbruggen/homebrew-cask - brew install --cask phpmon +```sh +brew tap nicoverbruggen/homebrew-cask +brew install --cask phpmon +``` To upgrade your existing installation, run: - brew upgrade phpmon +```sh +brew upgrade phpmon +``` (You may need to run `brew update` or `brew update-reset` first in order to update the cask file if you ran a Homebrew operation recently.) @@ -127,12 +141,12 @@ brew tap shivammathur/php You may find that this tap is already in use: if you've used Valet before, it automatically uses this tap for legacy versions of PHP. -You can then install those older versions: - ```sh -brew install php@7.0 -brew install php@7.1 -... +brew install shivammathur/php/php@7.4 +brew install shivammathur/php/php@7.3 +brew install shivammathur/php/php@7.2 +brew install shivammathur/php/php@7.1 +brew install shivammathur/php/php@7.0 ``` **Always make sure to restart PHP Monitor after installing or upgrading PHP versions!** diff --git a/SECURITY.md b/SECURITY.md index 4543d3e..3e50d8b 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,9 @@ Generally speaking, only the latest version of **PHP Monitor** is supported, exc | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Recommended Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- -| 6.x | ✅ Universal binary | ✅ Yes | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.4-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | +| 5.7 | ✅ Universal binary | ✅ Yes | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.4-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | + +(*) Preliminary listing. Valet 4 hasn't been released yet and the versions of PHP Valet can work with might still change. ## Legacy versions diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 7739fea..090d195 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -14,9 +14,9 @@ struct Constants { If the installed version is older, a notification will be shown every time the app launches (with a recommendation to upgrade). - See also: https://github.com/laravel/valet/releases/tag/v3.1.10 + See also: https://github.com/laravel/valet/releases/tag/v2.16.2 */ - static let MinimumRecommendedValetVersion = "3.1.10" + static let MinimumRecommendedValetVersion = "2.16.2" /** * The PHP versions supported by this application. From 1ef4f0bb81c58f9dc30e40c3e1c79d13316ffee8 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 18 Jan 2023 19:18:25 +0100 Subject: [PATCH 012/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20information=20a?= =?UTF-8?q?bout=20supported=20PHP=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 392146d..14a8148 100644 --- a/README.md +++ b/README.md @@ -93,36 +93,14 @@ If you're still having issues, here's a few common questions & answers, as well
Which versions of PHP are supported? -The following versions of PHP are officially supported: +All stable and supported PHP versions are also supported by PHP Monitor. However, depending on which version of Valet you have installed, which versions of PHP that are made available for switching purposes may differ. -
    -
  • PHP 7.4
  • -
  • PHP 8.0
  • -
  • PHP 8.1
  • -
  • PHP 8.2
  • -
- -The following versions have some support via backport and/or dev version: - -
    -
  • PHP 5.6 (Valet 2 only)
  • -
  • PHP 7.0 (Valet 2 and 3 only)
  • -
  • PHP 7.1 (Valet 2 and 3 only)
  • -
  • PHP 7.2 (Valet 2 and 3 only)
  • -
  • PHP 7.3 (Valet 2 and 3 only)
  • -
- -Additionally, the following dev version is also available: - -
    -
  • PHP 8.3-dev (experimental)
  • -
- -For more details, consult the [constants file](https://github.com/nicoverbruggen/phpmon/blob/main/phpmon/Common/Core/Constants.swift#L16) file to see which versions are supported. +> **Note** +> If you have versions of PHP installed that can be detected by PHP Monitor but is *not* supported by the currently active version of Valet, you will be alerted by an item in the menu with an exclamation mark emoji. (⚠️) Backports are available via [this tap](https://github.com/shivammathur/homebrew-php). For more information about those backports, please see the next FAQ entry. -For maximum compatibility with older PHP versions, you may wish to keep using Valet 2 or 3. +For maximum compatibility with older PHP versions, you may wish to keep using Valet 2 or 3. For more information, please see [SECURITY.md](./SECURITY.md) to find out which versions of PHP are supported with different versions of Valet.
From 90c8bcc0df1f221070c6294a68c8ce265541a315 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 18 Jan 2023 19:22:45 +0100 Subject: [PATCH 013/194] =?UTF-8?q?=F0=9F=93=9D=20TL=20QC=20Pass=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Localizable.strings | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index ffbb7e8..fd4d4c6 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -10,7 +10,7 @@ "mi_busy" = "PHP Monitor is busy..."; "mi_unsure" = "We are not sure what version of PHP you are running."; -"mi_php_version" = "Global PHP version: PHP"; +"mi_php_version" = "Global version: PHP"; "mi_php_switch" = "Switch to PHP"; "mi_php_unsupported" = "Some installed PHP versions are not displayed."; "mi_php_broken_1" = "Oof! It appears your PHP installation is broken..."; @@ -565,13 +565,13 @@ If you are seeing this message but are confused why this folder has gone missing "startup.version_mismatch.button_stay" = "Keep using PHP %@"; // Warning about unsupported PHP versions -"startup.unsupported_versions_explanation.title" = "One or more PHP installed versions are not supported."; -"startup.unsupported_versions_explanation.subtitle" = "The following versions of PHP are installed on your system but are not supported by this version of Valet. +"startup.unsupported_versions_explanation.title" = "PHP installation(s) not supported by Valet detected!"; +"startup.unsupported_versions_explanation.subtitle" = "The following PHP versions are installed on your system but are not supported by this version of Valet. %@ Valet might break if you link these PHP versions so PHP Monitor won't let you switch to them."; -"startup.unsupported_versions_explanation.desc" = "If you need support for older versions of PHP, you may need to downgrade to an older versions of Valet. Otherwise, it might be a good idea to uninstall any outdated versions that are not in use. This message will only be removed after restarting PHP Monitor."; +"startup.unsupported_versions_explanation.desc" = "If you need support for older versions of PHP, you may need to downgrade to an older versions of Valet. Otherwise, it might be a good idea to uninstall any outdated versions that are not in use. It can also be that this version of Valet is too old. This message will only be removed after restarting PHP Monitor."; // Sponsor encouragement "startup.sponsor_encouragement.title" = "If PHP Monitor has been useful to you or your company, please consider leaving a tip."; From d9f4a19b9245d9c069ad3e11cf43d9213b71a814 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 18 Jan 2023 19:56:54 +0100 Subject: [PATCH 014/194] =?UTF-8?q?=F0=9F=91=8C=20More=20compact=20`Servic?= =?UTF-8?q?esView`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets.xcassets/AppColor.colorset/Contents.json | 2 +- phpmon/Domain/SwiftUI/Menu/ServicesView.swift | 13 +++++-------- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/phpmon/Assets.xcassets/AppColor.colorset/Contents.json b/phpmon/Assets.xcassets/AppColor.colorset/Contents.json index 4759aba..4fc8e42 100644 --- a/phpmon/Assets.xcassets/AppColor.colorset/Contents.json +++ b/phpmon/Assets.xcassets/AppColor.colorset/Contents.json @@ -7,7 +7,7 @@ "alpha" : "1.000", "blue" : "0.988", "green" : "0.580", - "red" : "0.277" + "red" : "0.278" } }, "idiom" : "universal" diff --git a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift index b08fc6c..8f71fc6 100644 --- a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift +++ b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift @@ -35,8 +35,8 @@ struct ServicesView: View { var perRow: Int var rowCount: Int var rowSpacing: Int = 0 - var rowHeight: Int = 50 - var statusHeight: Int = 30 + var rowHeight: Int = 48 + var statusHeight: Int = 20 var allRowHeight: CGFloat var height: CGFloat @@ -66,15 +66,14 @@ struct ServicesView: View { } .frame(height: CGFloat(self.height - CGFloat(self.statusHeight))) .frame(maxWidth: .infinity, alignment: .center) - // .background(Color.red) VStack(alignment: .center) { HStack { Circle() - .frame(width: 12, height: 12) + .frame(width: 10, height: 10) .foregroundColor(self.manager.statusColor) Text(self.manager.statusMessage) - .font(.system(size: 12)) + .font(.system(size: 11)) if self.manager.statusColor == .red { HelpButton { let type = manager.hasError @@ -108,8 +107,6 @@ struct ServiceView: View { Text(service.name.uppercased()) .font(.system(size: 10)) .frame(minWidth: 70, alignment: .center) - .padding(.top, 4) - .padding(.bottom, 2) if isBusy { ProgressView() .scaleEffect(x: 0.4, y: 0.4, anchor: .center) @@ -163,7 +160,7 @@ struct ServiceView: View { .frame(width: 12.0, height: 12.0) .foregroundColor( service.status == .active - ? Color("StatusColorGreen") + ? Color.primary : Color("StatusColorRed") ) } From 70ebb2ef59b9cbb6ea7a0760d796db1664859c5d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 18 Jan 2023 20:27:02 +0100 Subject: [PATCH 015/194] =?UTF-8?q?=F0=9F=91=8C=20Fixed=20onboarding=20for?= =?UTF-8?q?=20initial=20launch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEVELOPER.md | 10 ++++++++++ phpmon/Common/PHP/Homebrew/HomebrewService.swift | 4 ++-- phpmon/Domain/App/Services/FakeServicesManager.swift | 7 ++++++- phpmon/Domain/Menu/MainMenu+Startup.swift | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/DEVELOPER.md b/DEVELOPER.md index f8a7396..ff43b26 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -14,6 +14,16 @@ It also automatically runs when you try to build the project. You'll get a warni swiftlint --fix ``` +## ⚙️ Preferences + +You can find the persisted configuration file in `~/Library/Preferences/com.nicoverbruggen.phpmon.plist` + +These values are cached by the OS. You can clear this cache by running: + +``` +defaults delete com.nicoverbruggen.phpmon && killall cfprefsd +``` + ## 🔧 Build instructions build button in Xcode diff --git a/phpmon/Common/PHP/Homebrew/HomebrewService.swift b/phpmon/Common/PHP/Homebrew/HomebrewService.swift index 028dfe0..d46cbc7 100644 --- a/phpmon/Common/PHP/Homebrew/HomebrewService.swift +++ b/phpmon/Common/PHP/Homebrew/HomebrewService.swift @@ -44,7 +44,7 @@ final class HomebrewService: Sendable, Decodable { /** Dummy data for preview purposes. */ - public static func dummy(named service: String, enabled: Bool) -> HomebrewService { + public static func dummy(named service: String, enabled: Bool, status: String? = nil) -> HomebrewService { return HomebrewService( name: service, service_name: service, @@ -52,7 +52,7 @@ final class HomebrewService: Sendable, Decodable { loaded: enabled, pid: nil, user: nil, - status: nil, + status: status, log_path: nil, error_log_path: nil ) diff --git a/phpmon/Domain/App/Services/FakeServicesManager.swift b/phpmon/Domain/App/Services/FakeServicesManager.swift index e522ac3..b18998f 100644 --- a/phpmon/Domain/App/Services/FakeServicesManager.swift +++ b/phpmon/Domain/App/Services/FakeServicesManager.swift @@ -41,9 +41,14 @@ class FakeServicesManager: ServicesManager { private func reapplyServices() { let services = self.formulae.map { + let dummy = HomebrewService.dummy( + named: $0.name, + enabled: self.fixedStatus == .active, + status: self.fixedStatus == .error ? "error" : nil + ) let wrapper = Service( formula: $0, - service: HomebrewService.dummy(named: $0.name, enabled: self.fixedStatus == .active) + service: dummy ) return wrapper } diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index ae7c554..1d1e7f9 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -111,7 +111,7 @@ extension MainMenu { #endif // Present first launch screen if needed - if Stats.successfulLaunchCount == 0 && !isRunningSwiftUIPreview { + if Stats.successfulLaunchCount == 1 && !isRunningSwiftUIPreview { Log.info("Should present the first launch screen!") Task { @MainActor in OnboardingWindowController.show() From 5c62f744adf922688b3c675a58c67b2ca05523b5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 18 Jan 2023 20:42:24 +0100 Subject: [PATCH 016/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20onboarding?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/MainMenu+Startup.swift | 24 +++++++------------ .../SwiftUI/Onboarding/OnboardingView.swift | 4 +++- phpmon/Localizable.strings | 4 ++-- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 1d1e7f9..791e39a 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -101,25 +101,19 @@ extension MainMenu { // Start the background refresh timer startSharedTimer() - // Update the stats - Stats.incrementSuccessfulLaunchCount() - - #if SPONSOR - Log.info("Sponsor encouragement messages are omitted in SE builds.") - #else + if !isRunningSwiftUIPreview { + Stats.incrementSuccessfulLaunchCount() Stats.evaluateSponsorMessageShouldBeDisplayed() - #endif - // Present first launch screen if needed - if Stats.successfulLaunchCount == 1 && !isRunningSwiftUIPreview { - Log.info("Should present the first launch screen!") - Task { @MainActor in - OnboardingWindowController.show() + if Stats.successfulLaunchCount == 1 { + Log.info("Should present the first launch screen!") + Task { @MainActor in + OnboardingWindowController.show() + } } - } - // Check for updates - await AppUpdateChecker.checkIfNewerVersionIsAvailable() + await AppUpdateChecker.checkIfNewerVersionIsAvailable() + } // Check if the linked version has changed between launches of phpmon Stats.evaluateLastLinkedPhpVersion() diff --git a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift index 80df681..36ff786 100644 --- a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift +++ b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift @@ -101,11 +101,13 @@ struct OnboardingView: View { } VStack { Text("onboarding.tour.once".localized) + .fixedSize(horizontal: false, vertical: true) .font(.subheadline) .foregroundColor(.gray) .padding(.top, 5) .padding(.bottom, 5) - .lineLimit(5) + .lineLimit(3) + .frame(height: 35) Button("onboarding.tour.close".localized) { App.shared.onboardingWindowController?.close() } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index fd4d4c6..eb2ff9e 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -661,7 +661,7 @@ COMMON TROUBLESHOOTING TIPS "onboarding.title" = "Welcome Tour"; "onboarding.welcome" = "Welcome to PHP Monitor!"; -"onboarding.explore" = "Learn more about some of the features that PHP Monitor has to offer. You can find a more comprehensive list of features on GitHub."; +"onboarding.explore" = "Congrats, you now have access to PHP Monitor's entire suite of functionality. You can learn more about some of the features that PHP Monitor has to offer on this screen."; "onboarding.tour.menu_bar.title" = "Power In Your Menu Bar"; "onboarding.tour.menu_bar" = "PHP Monitor lives in your menu bar. From this menu, you can access most of PHP Monitor's key functionality, including switching the globally linked PHP version, locating config files, and much more."; "onboarding.tour.faq_hint" = "I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; @@ -671,5 +671,5 @@ COMMON TROUBLESHOOTING TIPS "onboarding.tour.domains" = "By opening the Domains window via the menu bar item, you can view which domains are linked and parked, as well as active nginx proxies."; "onboarding.tour.isolation.title" = "Isolate Domains"; "onboarding.tour.isolation" = "If you have Valet 3 installed, you can even use domain isolation by right-clicking on a given domain in the Domains window. This allows you to pick a specific version of PHP to use for that domain, and that domain only."; -"onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (under First Aid & Services)."; +"onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (available in the menu, under First Aid & Services)."; "onboarding.tour.close" = "Close Tour"; From b8e7397233fe87605415e7ce4b8f0c4a16dd981f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 19 Jan 2023 17:30:21 +0100 Subject: [PATCH 017/194] =?UTF-8?q?=F0=9F=91=8C=20Adjust=20SECURITY=20and?= =?UTF-8?q?=20support=20matrix=20for=20Valet=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit ensures that PHP Monitor knows about which versions of PHP are supported by the upcoming Valet 4.0: PHP 7.1 and higher. Ensures compatibility with https://github.com/laravel/valet/pull/1318 --- SECURITY.md | 3 ++- phpmon/Common/Core/Constants.swift | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 3e50d8b..0f1912e 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ Generally speaking, only the latest version of **PHP Monitor** is supported, exc | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Recommended Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- -| 5.7 | ✅ Universal binary | ✅ Yes | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.4-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | +| 6.0 | ✅ Universal binary | ✅ Yes | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | (*) Preliminary listing. Valet 4 hasn't been released yet and the versions of PHP Valet can work with might still change. @@ -16,6 +16,7 @@ These versions of PHP Monitor are no longer supported, but if you’re using an | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Minimum Required Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- +| 5.7 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | | 5.6 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0)* | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x) | 3.0 recommended
2.16.2 minimum | | 4.1 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0) | macOS 11+ | PHP 5.6—PHP 8.2 | 2.16.2 | | 4.0 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0) | macOS 10.14+ | PHP 5.6—PHP 8.2 | 2.13 | diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 090d195..d85c135 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -41,12 +41,14 @@ struct Constants { 3: // Valet v3 dropped support for v5.6 [ "7.0", "7.1", "7.2", "7.3", "7.4", - "8.0", "8.1", "8.2", "8.3" + "8.0", "8.1", "8.2", + "8.3" // dev ], - 4: // Valet v4 dropped support for Date: Thu, 19 Jan 2023 18:11:04 +0100 Subject: [PATCH 018/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20bug=20related=20to?= =?UTF-8?q?=20"=3F"=20not=20showing=20up?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/SwiftUI/Common/HelpButton.swift | 11 ++++++++++- phpmon/Domain/SwiftUI/Menu/ServicesView.swift | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/SwiftUI/Common/HelpButton.swift b/phpmon/Domain/SwiftUI/Common/HelpButton.swift index 8fea3d0..5c9dc85 100644 --- a/phpmon/Domain/SwiftUI/Common/HelpButton.swift +++ b/phpmon/Domain/SwiftUI/Common/HelpButton.swift @@ -14,8 +14,17 @@ struct HelpButton: View { var body: some View { Button(action: action, label: { - Text("?").font(.system(size: 12, weight: .medium)) + ZStack { + Circle() + .strokeBorder(Color(NSColor.separatorColor), lineWidth: 0.5) + .background(Circle().foregroundColor(Color(NSColor.controlColor)).opacity(0.7)) + .shadow(color: Color(NSColor.separatorColor).opacity(0.3), radius: 1) + .frame(width: 14, height: 14) + Text("?").font(.system(size: 12, weight: .medium)) + .foregroundColor(Color(NSColor.labelColor)) + } }) + .buttonStyle(BorderlessButtonStyle()) .focusable(false) } diff --git a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift index 8f71fc6..b9fcd13 100644 --- a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift +++ b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift @@ -74,7 +74,7 @@ struct ServicesView: View { .foregroundColor(self.manager.statusColor) Text(self.manager.statusMessage) .font(.system(size: 11)) - if self.manager.statusColor == .red { + if self.manager.statusColor == Color("StatusColorRed") { HelpButton { let type = manager.hasError ? "key_service_has_error" From 5923be099fa5e60901920c3620b9f595bb0d214e Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 19 Jan 2023 18:09:42 +0100 Subject: [PATCH 019/194] =?UTF-8?q?=F0=9F=91=8C=20Update=20copyright=20mes?= =?UTF-8?q?sage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- phpmon/Common/Command/ActiveCommand.swift | 2 +- phpmon/Common/Command/CommandProtocol.swift | 2 +- phpmon/Common/Command/RealCommand.swift | 2 +- phpmon/Common/Core/Actions.swift | 2 +- phpmon/Common/Core/Constants.swift | 2 +- phpmon/Common/Core/Events.swift | 2 +- phpmon/Common/Core/Helpers.swift | 2 +- phpmon/Common/Core/Homebrew.swift | 2 +- phpmon/Common/Core/Logger.swift | 2 +- phpmon/Common/Core/Paths.swift | 2 +- phpmon/Common/Core/Process.swift | 2 +- phpmon/Common/Errors/AlertableError.swift | 2 +- phpmon/Common/Errors/Errors.swift | 2 +- phpmon/Common/Extensions/ArrayExtension.swift | 2 +- phpmon/Common/Extensions/DataExtension.swift | 2 +- phpmon/Common/Extensions/DateExtension.swift | 2 +- phpmon/Common/Extensions/DictionaryExtension.swift | 2 +- phpmon/Common/Extensions/NSMenuExtension.swift | 2 +- phpmon/Common/Extensions/NSMenuItemExtension.swift | 2 +- phpmon/Common/Extensions/NSWindowExtension.swift | 2 +- phpmon/Common/Extensions/StringExtension.swift | 2 +- phpmon/Common/Extensions/TimeIntervalExtension.swift | 2 +- phpmon/Common/Extensions/XibLoadable.swift | 2 +- phpmon/Common/Filesystem/ActiveFileSystem.swift | 2 +- phpmon/Common/Filesystem/FileSystemProtocol.swift | 2 +- phpmon/Common/Filesystem/RealFileSystem.swift | 2 +- phpmon/Common/Helpers/Alert.swift | 2 +- phpmon/Common/Helpers/Application.swift | 2 +- phpmon/Common/Helpers/LocalNotification.swift | 2 +- phpmon/Common/Helpers/MenuBarImageGenerator.swift | 2 +- phpmon/Common/Helpers/PMWindowController.swift | 2 +- phpmon/Common/Helpers/System.swift | 2 +- phpmon/Common/Helpers/VersionExtractor.swift | 2 +- phpmon/Common/Helpers/WIP.swift | 2 +- phpmon/Common/PHP/ActivePhpInstallation.swift | 2 +- phpmon/Common/PHP/Extensions/Xdebug.swift | 2 +- phpmon/Common/PHP/Homebrew/HomebrewPackage.swift | 2 +- phpmon/Common/PHP/Homebrew/HomebrewService.swift | 2 +- phpmon/Common/PHP/PHP Version/PhpEnv.swift | 2 +- phpmon/Common/PHP/PHP Version/PhpHelper.swift | 2 +- phpmon/Common/PHP/PHP Version/VersionNumber.swift | 2 +- phpmon/Common/PHP/PhpConfigurationFile.swift | 2 +- phpmon/Common/PHP/PhpExtension.swift | 2 +- phpmon/Common/PHP/PhpInstallation.swift | 2 +- phpmon/Common/PHP/Switcher/InternalSwitcher.swift | 2 +- phpmon/Common/PHP/Switcher/PhpSwitcher.swift | 2 +- phpmon/Common/Protocols/CreatedFromFile.swift | 2 +- phpmon/Common/Shell/ActiveShell.swift | 2 +- phpmon/Common/Shell/RealShell.swift | 2 +- phpmon/Common/Shell/ShellProtocol.swift | 2 +- phpmon/Common/Testables/TestableCommand.swift | 2 +- phpmon/Common/Testables/TestableConfiguration.swift | 2 +- phpmon/Common/Testables/TestableFileSystem.swift | 2 +- phpmon/Common/Testables/TestableShell.swift | 2 +- phpmon/Domain/App/App+ActivationPolicy.swift | 2 +- phpmon/Domain/App/App+GlobalHotkey.swift | 2 +- phpmon/Domain/App/App.swift | 2 +- phpmon/Domain/App/AppDelegate+InterApp.swift | 2 +- phpmon/Domain/App/AppDelegate+MenuOutlets.swift | 2 +- phpmon/Domain/App/AppDelegate+Notifications.swift | 2 +- phpmon/Domain/App/AppDelegate.swift | 2 +- phpmon/Domain/App/AppUpdateChecker.swift | 2 +- phpmon/Domain/App/AppVersion.swift | 2 +- phpmon/Domain/App/EnvironmentCheck.swift | 2 +- phpmon/Domain/App/EnvironmentManager.swift | 2 +- phpmon/Domain/App/InterAppHandler.swift | 2 +- phpmon/Domain/App/Services/FakeServicesManager.swift | 2 +- phpmon/Domain/App/Services/Service.swift | 2 +- phpmon/Domain/App/Services/ServicesManager.swift | 2 +- phpmon/Domain/App/Services/ValetServicesManager.swift | 2 +- phpmon/Domain/App/Startup.swift | 2 +- phpmon/Domain/DomainList/AddProxyVC.swift | 2 +- phpmon/Domain/DomainList/AddSiteVC.swift | 2 +- phpmon/Domain/DomainList/Cells/DomainListCellProtocol.swift | 2 +- phpmon/Domain/DomainList/Cells/DomainListKindCell.swift | 2 +- phpmon/Domain/DomainList/Cells/DomainListNameCell.swift | 2 +- phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift | 2 +- phpmon/Domain/DomainList/Cells/DomainListTLSCell.swift | 2 +- phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift | 2 +- phpmon/Domain/DomainList/DomainListVC+Actions.swift | 2 +- phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift | 2 +- phpmon/Domain/DomainList/DomainListVC.swift | 2 +- phpmon/Domain/DomainList/DomainListWindowController.swift | 2 +- phpmon/Domain/DomainList/PMTableView.swift | 2 +- phpmon/Domain/DomainList/SelectionVC.swift | 2 +- phpmon/Domain/Integrations/Composer/ComposerJson.swift | 2 +- phpmon/Domain/Integrations/Composer/ComposerWindow.swift | 2 +- phpmon/Domain/Integrations/Composer/PhpFrameworks.swift | 2 +- phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift | 2 +- phpmon/Domain/Integrations/Nginx/NginxConfigurationFile.swift | 2 +- .../Domain/Integrations/Valet/Domains/FakeValetInteractor.swift | 2 +- phpmon/Domain/Integrations/Valet/Domains/ValetInteractor.swift | 2 +- phpmon/Domain/Integrations/Valet/Domains/ValetListable.swift | 2 +- phpmon/Domain/Integrations/Valet/Proxies/FakeValetProxy.swift | 2 +- phpmon/Domain/Integrations/Valet/Proxies/ValetProxy.swift | 2 +- phpmon/Domain/Integrations/Valet/Scanners/DomainScanner.swift | 2 +- .../Domain/Integrations/Valet/Scanners/FakeDomainScanner.swift | 2 +- .../Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift | 2 +- phpmon/Domain/Integrations/Valet/Scanners/ValetScanners.swift | 2 +- phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift | 2 +- phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift | 2 +- phpmon/Domain/Integrations/Valet/Valet.swift | 2 +- phpmon/Domain/Menu/MainMenu+Actions.swift | 2 +- phpmon/Domain/Menu/MainMenu+Async.swift | 2 +- phpmon/Domain/Menu/MainMenu+FixMyValet.swift | 2 +- phpmon/Domain/Menu/MainMenu+Startup.swift | 2 +- phpmon/Domain/Menu/MainMenu+Switcher.swift | 2 +- phpmon/Domain/Menu/MainMenu.swift | 2 +- phpmon/Domain/Menu/StatusMenu+Items.swift | 2 +- phpmon/Domain/Menu/StatusMenu.swift | 2 +- phpmon/Domain/Notice/BetterAlert.swift | 2 +- phpmon/Domain/Notice/BetterAlertVC.swift | 2 +- phpmon/Domain/Onboarding/OnboardingWindowController.swift | 2 +- phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift | 2 +- phpmon/Domain/Preferences/CustomPrefs.swift | 2 +- .../Domain/Preferences/Keybinds/GlobalKeybindPreference.swift | 2 +- phpmon/Domain/Preferences/Keys.swift | 2 +- phpmon/Domain/Preferences/MenuBarIcons.swift | 2 +- phpmon/Domain/Preferences/PreferenceName.swift | 2 +- phpmon/Domain/Preferences/Preferences.swift | 2 +- .../Domain/Preferences/PreferencesWindowController+Hotkey.swift | 2 +- phpmon/Domain/Preferences/PreferencesWindowController.swift | 2 +- phpmon/Domain/Preferences/PrefsVC.swift | 2 +- phpmon/Domain/Preferences/Stats.swift | 2 +- phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift | 2 +- phpmon/Domain/Preferences/Views/HotkeyPreferenceView.swift | 2 +- phpmon/Domain/Preferences/Views/SelectPreferenceView.swift | 2 +- phpmon/Domain/Presets/Preset.swift | 2 +- phpmon/Domain/Presets/PresetHelper.swift | 2 +- phpmon/Domain/Progress/ProgressVC.swift | 2 +- phpmon/Domain/Progress/TerminalProgressWindowController.swift | 2 +- phpmon/Domain/SwiftUI/Common/SwiftUIHelper.swift | 2 +- phpmon/Domain/SwiftUI/Domains/NoDomainResultsView.swift | 2 +- phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift | 2 +- phpmon/Domain/SwiftUI/Menu/HeaderView.swift | 2 +- phpmon/Domain/SwiftUI/Menu/SectionHeaderView.swift | 2 +- phpmon/Domain/SwiftUI/Menu/ServicesView.swift | 2 +- phpmon/Domain/SwiftUI/Menu/StatsView.swift | 2 +- phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift | 2 +- phpmon/Domain/SwiftUI/Warning/NoWarningsView.swift | 2 +- phpmon/Domain/SwiftUI/Warning/WarningListView.swift | 2 +- phpmon/Domain/SwiftUI/Warning/WarningView.swift | 2 +- phpmon/Domain/Warnings/Warning.swift | 2 +- phpmon/Domain/Warnings/WarningManager.swift | 2 +- phpmon/Domain/Warnings/WarningsWindowController.swift | 2 +- phpmon/Domain/Watcher/App+ConfigWatch.swift | 2 +- phpmon/Domain/Watcher/PhpConfigWatcher.swift | 2 +- phpmon/Localizable.strings | 2 +- tests/Shared/TestableConfigurations.swift | 2 +- tests/Shared/Utility.swift | 2 +- tests/Shared/XCPMApplication.swift | 2 +- tests/feature/FeatureTestCase.swift | 2 +- tests/feature/InternalSwitcherTest.swift | 2 +- tests/ui/DomainsListTest.swift | 2 +- tests/ui/StartupTest.swift | 2 +- tests/ui/UITestCase.swift | 2 +- tests/unit/Commands/CommandTest.swift | 2 +- tests/unit/Parsers/HomebrewPackageTest.swift | 2 +- tests/unit/Parsers/NginxConfigurationTest.swift | 2 +- tests/unit/Parsers/PhpConfigurationTest.swift | 2 +- tests/unit/Parsers/PhpExtensionTest.swift | 2 +- tests/unit/Parsers/ValetConfigurationTest.swift | 2 +- tests/unit/Testables/Filesystem/RealFileSystemTest.swift | 2 +- tests/unit/Testables/Filesystem/TestableFileSystemTest.swift | 2 +- tests/unit/Testables/Shell/RealShellTest.swift | 2 +- tests/unit/Testables/Shell/TestableShellTest.swift | 2 +- tests/unit/Testables/TestableConfigurationTest.swift | 2 +- tests/unit/Versions/AppUpdaterCheckTest.swift | 2 +- tests/unit/Versions/AppVersionTest.swift | 2 +- tests/unit/Versions/PhpVersionDetectionTest.swift | 2 +- tests/unit/Versions/PhpVersionNumberTest.swift | 2 +- tests/unit/Versions/ValetVersionExtractorTest.swift | 2 +- tests/unit/Versions/VersionExtractorTest.swift | 2 +- 174 files changed, 174 insertions(+), 174 deletions(-) diff --git a/LICENSE b/LICENSE index 07b0628..3f2c5e4 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2019-2022 Nico Verbruggen +Copyright (c) 2019-2023 Nico Verbruggen Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/phpmon/Common/Command/ActiveCommand.swift b/phpmon/Common/Command/ActiveCommand.swift index 190e4e7..79ae17b 100644 --- a/phpmon/Common/Command/ActiveCommand.swift +++ b/phpmon/Common/Command/ActiveCommand.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 12/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Command/CommandProtocol.swift b/phpmon/Common/Command/CommandProtocol.swift index 49411f0..9784ae8 100644 --- a/phpmon/Common/Command/CommandProtocol.swift +++ b/phpmon/Common/Command/CommandProtocol.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 12/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Command/RealCommand.swift b/phpmon/Common/Command/RealCommand.swift index f9a0001..36cde64 100644 --- a/phpmon/Common/Command/RealCommand.swift +++ b/phpmon/Common/Command/RealCommand.swift @@ -2,7 +2,7 @@ // Command.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Core/Actions.swift b/phpmon/Common/Core/Actions.swift index 28ed5c3..da87c12 100644 --- a/phpmon/Common/Core/Actions.swift +++ b/phpmon/Common/Core/Actions.swift @@ -2,7 +2,7 @@ // Services.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index d85c135..85fe851 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -2,7 +2,7 @@ // Constants.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Core/Events.swift b/phpmon/Common/Core/Events.swift index d15270a..972f019 100644 --- a/phpmon/Common/Core/Events.swift +++ b/phpmon/Common/Core/Events.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Core/Helpers.swift b/phpmon/Common/Core/Helpers.swift index a53c14f..e35af77 100644 --- a/phpmon/Common/Core/Helpers.swift +++ b/phpmon/Common/Core/Helpers.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 24/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // // MARK: Common Shell Commands diff --git a/phpmon/Common/Core/Homebrew.swift b/phpmon/Common/Core/Homebrew.swift index 910b716..72bd71b 100644 --- a/phpmon/Common/Core/Homebrew.swift +++ b/phpmon/Common/Core/Homebrew.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Core/Logger.swift b/phpmon/Common/Core/Logger.swift index f8ab817..fd939c8 100644 --- a/phpmon/Common/Core/Logger.swift +++ b/phpmon/Common/Core/Logger.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Core/Paths.swift b/phpmon/Common/Core/Paths.swift index 9cb8c2d..3c25bb4 100644 --- a/phpmon/Common/Core/Paths.swift +++ b/phpmon/Common/Core/Paths.swift @@ -2,7 +2,7 @@ // Paths.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Core/Process.swift b/phpmon/Common/Core/Process.swift index 68e9de3..24b6ec4 100644 --- a/phpmon/Common/Core/Process.swift +++ b/phpmon/Common/Core/Process.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Errors/AlertableError.swift b/phpmon/Common/Errors/AlertableError.swift index f32540b..d05e8a8 100644 --- a/phpmon/Common/Errors/AlertableError.swift +++ b/phpmon/Common/Errors/AlertableError.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 06/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Errors/Errors.swift b/phpmon/Common/Errors/Errors.swift index 5cdad29..74ce17b 100644 --- a/phpmon/Common/Errors/Errors.swift +++ b/phpmon/Common/Errors/Errors.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Extensions/ArrayExtension.swift b/phpmon/Common/Extensions/ArrayExtension.swift index e2f067d..cad6c96 100644 --- a/phpmon/Common/Extensions/ArrayExtension.swift +++ b/phpmon/Common/Extensions/ArrayExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 11/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Extensions/DataExtension.swift b/phpmon/Common/Extensions/DataExtension.swift index ce241b7..b4c38e9 100644 --- a/phpmon/Common/Extensions/DataExtension.swift +++ b/phpmon/Common/Extensions/DataExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Extensions/DateExtension.swift b/phpmon/Common/Extensions/DateExtension.swift index 5481ecb..6321c15 100644 --- a/phpmon/Common/Extensions/DateExtension.swift +++ b/phpmon/Common/Extensions/DateExtension.swift @@ -2,7 +2,7 @@ // Date.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Extensions/DictionaryExtension.swift b/phpmon/Common/Extensions/DictionaryExtension.swift index d7a2f14..65e357a 100644 --- a/phpmon/Common/Extensions/DictionaryExtension.swift +++ b/phpmon/Common/Extensions/DictionaryExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 01/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Extensions/NSMenuExtension.swift b/phpmon/Common/Extensions/NSMenuExtension.swift index 198daab..33142ee 100644 --- a/phpmon/Common/Extensions/NSMenuExtension.swift +++ b/phpmon/Common/Extensions/NSMenuExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 14/04/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Extensions/NSMenuItemExtension.swift b/phpmon/Common/Extensions/NSMenuItemExtension.swift index ed655cd..9a5461e 100644 --- a/phpmon/Common/Extensions/NSMenuItemExtension.swift +++ b/phpmon/Common/Extensions/NSMenuItemExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 18/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Extensions/NSWindowExtension.swift b/phpmon/Common/Extensions/NSWindowExtension.swift index 1556eff..73b4782 100644 --- a/phpmon/Common/Extensions/NSWindowExtension.swift +++ b/phpmon/Common/Extensions/NSWindowExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 17/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Extensions/StringExtension.swift b/phpmon/Common/Extensions/StringExtension.swift index 38ac652..d98ac58 100644 --- a/phpmon/Common/Extensions/StringExtension.swift +++ b/phpmon/Common/Extensions/StringExtension.swift @@ -2,7 +2,7 @@ // StringExtension.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation import SwiftUI diff --git a/phpmon/Common/Extensions/TimeIntervalExtension.swift b/phpmon/Common/Extensions/TimeIntervalExtension.swift index 19d3854..bbf8990 100644 --- a/phpmon/Common/Extensions/TimeIntervalExtension.swift +++ b/phpmon/Common/Extensions/TimeIntervalExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 29/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Extensions/XibLoadable.swift b/phpmon/Common/Extensions/XibLoadable.swift index e1cdbf9..c799567 100644 --- a/phpmon/Common/Extensions/XibLoadable.swift +++ b/phpmon/Common/Extensions/XibLoadable.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 04/02/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Filesystem/ActiveFileSystem.swift b/phpmon/Common/Filesystem/ActiveFileSystem.swift index 295ebc7..1e16355 100644 --- a/phpmon/Common/Filesystem/ActiveFileSystem.swift +++ b/phpmon/Common/Filesystem/ActiveFileSystem.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Filesystem/FileSystemProtocol.swift b/phpmon/Common/Filesystem/FileSystemProtocol.swift index fbf54b9..98e6b0e 100644 --- a/phpmon/Common/Filesystem/FileSystemProtocol.swift +++ b/phpmon/Common/Filesystem/FileSystemProtocol.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Filesystem/RealFileSystem.swift b/phpmon/Common/Filesystem/RealFileSystem.swift index 221ecd9..e7b87f3 100644 --- a/phpmon/Common/Filesystem/RealFileSystem.swift +++ b/phpmon/Common/Filesystem/RealFileSystem.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Helpers/Alert.swift b/phpmon/Common/Helpers/Alert.swift index 4f46ec2..bc6c8c1 100644 --- a/phpmon/Common/Helpers/Alert.swift +++ b/phpmon/Common/Helpers/Alert.swift @@ -2,7 +2,7 @@ // Alert.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Helpers/Application.swift b/phpmon/Common/Helpers/Application.swift index b0f0370..37a8858 100644 --- a/phpmon/Common/Helpers/Application.swift +++ b/phpmon/Common/Helpers/Application.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 07/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Helpers/LocalNotification.swift b/phpmon/Common/Helpers/LocalNotification.swift index 0c61e40..6e4f7bc 100644 --- a/phpmon/Common/Helpers/LocalNotification.swift +++ b/phpmon/Common/Helpers/LocalNotification.swift @@ -2,7 +2,7 @@ // LocalNotification.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Helpers/MenuBarImageGenerator.swift b/phpmon/Common/Helpers/MenuBarImageGenerator.swift index 97843dc..f699c42 100644 --- a/phpmon/Common/Helpers/MenuBarImageGenerator.swift +++ b/phpmon/Common/Helpers/MenuBarImageGenerator.swift @@ -2,7 +2,7 @@ // ImageGenerator.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Helpers/PMWindowController.swift b/phpmon/Common/Helpers/PMWindowController.swift index 24684dc..e35ae7e 100644 --- a/phpmon/Common/Helpers/PMWindowController.swift +++ b/phpmon/Common/Helpers/PMWindowController.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 05/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Common/Helpers/System.swift b/phpmon/Common/Helpers/System.swift index 92b8ba2..332bba2 100644 --- a/phpmon/Common/Helpers/System.swift +++ b/phpmon/Common/Helpers/System.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 01/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Helpers/VersionExtractor.swift b/phpmon/Common/Helpers/VersionExtractor.swift index 3f6cb06..00e865b 100644 --- a/phpmon/Common/Helpers/VersionExtractor.swift +++ b/phpmon/Common/Helpers/VersionExtractor.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Helpers/WIP.swift b/phpmon/Common/Helpers/WIP.swift index dbe89f4..9e425d8 100644 --- a/phpmon/Common/Helpers/WIP.swift +++ b/phpmon/Common/Helpers/WIP.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 01/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/ActivePhpInstallation.swift b/phpmon/Common/PHP/ActivePhpInstallation.swift index b8db66c..00c5f44 100644 --- a/phpmon/Common/PHP/ActivePhpInstallation.swift +++ b/phpmon/Common/PHP/ActivePhpInstallation.swift @@ -2,7 +2,7 @@ // ActivePhpInstallation.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/Extensions/Xdebug.swift b/phpmon/Common/PHP/Extensions/Xdebug.swift index 3ef19c8..615d71e 100644 --- a/phpmon/Common/PHP/Extensions/Xdebug.swift +++ b/phpmon/Common/PHP/Extensions/Xdebug.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 01/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift b/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift index 79bebaa..100a6a3 100644 --- a/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift +++ b/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift @@ -2,7 +2,7 @@ // HomebrewPackage.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/Homebrew/HomebrewService.swift b/phpmon/Common/PHP/Homebrew/HomebrewService.swift index d46cbc7..aa85404 100644 --- a/phpmon/Common/PHP/Homebrew/HomebrewService.swift +++ b/phpmon/Common/PHP/Homebrew/HomebrewService.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 11/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index 286119d..198687e 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/PHP Version/PhpHelper.swift b/phpmon/Common/PHP/PHP Version/PhpHelper.swift index 1ed99e1..75aa912 100644 --- a/phpmon/Common/PHP/PHP Version/PhpHelper.swift +++ b/phpmon/Common/PHP/PHP Version/PhpHelper.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 17/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/PHP Version/VersionNumber.swift b/phpmon/Common/PHP/PHP Version/VersionNumber.swift index 3b07c52..b01e6c0 100644 --- a/phpmon/Common/PHP/PHP Version/VersionNumber.swift +++ b/phpmon/Common/PHP/PHP Version/VersionNumber.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/PhpConfigurationFile.swift b/phpmon/Common/PHP/PhpConfigurationFile.swift index 8f789ea..9ce7907 100644 --- a/phpmon/Common/PHP/PhpConfigurationFile.swift +++ b/phpmon/Common/PHP/PhpConfigurationFile.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 04/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/PhpExtension.swift b/phpmon/Common/PHP/PhpExtension.swift index d20330a..44b8360 100644 --- a/phpmon/Common/PHP/PhpExtension.swift +++ b/phpmon/Common/PHP/PhpExtension.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 31/01/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/PhpInstallation.swift b/phpmon/Common/PHP/PhpInstallation.swift index f044be9..4b19881 100644 --- a/phpmon/Common/PHP/PhpInstallation.swift +++ b/phpmon/Common/PHP/PhpInstallation.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 28/11/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift index 76669a9..9526b93 100644 --- a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift +++ b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 24/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/PHP/Switcher/PhpSwitcher.swift b/phpmon/Common/PHP/Switcher/PhpSwitcher.swift index c706fe7..d0ffe8e 100644 --- a/phpmon/Common/PHP/Switcher/PhpSwitcher.swift +++ b/phpmon/Common/PHP/Switcher/PhpSwitcher.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 24/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Protocols/CreatedFromFile.swift b/phpmon/Common/Protocols/CreatedFromFile.swift index 0fb46b5..c36e16c 100644 --- a/phpmon/Common/Protocols/CreatedFromFile.swift +++ b/phpmon/Common/Protocols/CreatedFromFile.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 15/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Shell/ActiveShell.swift b/phpmon/Common/Shell/ActiveShell.swift index 99a50a0..e0aa4b3 100644 --- a/phpmon/Common/Shell/ActiveShell.swift +++ b/phpmon/Common/Shell/ActiveShell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 20/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Shell/RealShell.swift b/phpmon/Common/Shell/RealShell.swift index d8b5a2b..28fd203 100644 --- a/phpmon/Common/Shell/RealShell.swift +++ b/phpmon/Common/Shell/RealShell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Shell/ShellProtocol.swift b/phpmon/Common/Shell/ShellProtocol.swift index 7cb77c6..14927a5 100644 --- a/phpmon/Common/Shell/ShellProtocol.swift +++ b/phpmon/Common/Shell/ShellProtocol.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Testables/TestableCommand.swift b/phpmon/Common/Testables/TestableCommand.swift index a8295fb..b7e8503 100644 --- a/phpmon/Common/Testables/TestableCommand.swift +++ b/phpmon/Common/Testables/TestableCommand.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 12/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Testables/TestableConfiguration.swift b/phpmon/Common/Testables/TestableConfiguration.swift index af7bc43..5b5b545 100644 --- a/phpmon/Common/Testables/TestableConfiguration.swift +++ b/phpmon/Common/Testables/TestableConfiguration.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Testables/TestableFileSystem.swift b/phpmon/Common/Testables/TestableFileSystem.swift index 9492260..f0fe533 100644 --- a/phpmon/Common/Testables/TestableFileSystem.swift +++ b/phpmon/Common/Testables/TestableFileSystem.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 04/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Common/Testables/TestableShell.swift b/phpmon/Common/Testables/TestableShell.swift index f982b30..696f9f3 100644 --- a/phpmon/Common/Testables/TestableShell.swift +++ b/phpmon/Common/Testables/TestableShell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/App+ActivationPolicy.swift b/phpmon/Domain/App/App+ActivationPolicy.swift index 31db8d6..8f01606 100644 --- a/phpmon/Domain/App/App+ActivationPolicy.swift +++ b/phpmon/Domain/App/App+ActivationPolicy.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 05/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/App/App+GlobalHotkey.swift b/phpmon/Domain/App/App+GlobalHotkey.swift index 5f3e237..8e2e129 100644 --- a/phpmon/Domain/App/App+GlobalHotkey.swift +++ b/phpmon/Domain/App/App+GlobalHotkey.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 05/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/App/App.swift b/phpmon/Domain/App/App.swift index 42f27d7..bfb5659 100644 --- a/phpmon/Domain/App/App.swift +++ b/phpmon/Domain/App/App.swift @@ -2,7 +2,7 @@ // StateManager.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/App/AppDelegate+InterApp.swift b/phpmon/Domain/App/AppDelegate+InterApp.swift index 715502b..7296e76 100644 --- a/phpmon/Domain/App/AppDelegate+InterApp.swift +++ b/phpmon/Domain/App/AppDelegate+InterApp.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 20/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/App/AppDelegate+MenuOutlets.swift b/phpmon/Domain/App/AppDelegate+MenuOutlets.swift index 0d30925..52fb01a 100644 --- a/phpmon/Domain/App/AppDelegate+MenuOutlets.swift +++ b/phpmon/Domain/App/AppDelegate+MenuOutlets.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 05/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/AppDelegate+Notifications.swift b/phpmon/Domain/App/AppDelegate+Notifications.swift index 50dc36b..f97e9e3 100644 --- a/phpmon/Domain/App/AppDelegate+Notifications.swift +++ b/phpmon/Domain/App/AppDelegate+Notifications.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 06/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index da8a5f9..05b192e 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -2,7 +2,7 @@ // AppDelegate.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/App/AppUpdateChecker.swift b/phpmon/Domain/App/AppUpdateChecker.swift index 0018989..0593b2b 100644 --- a/phpmon/Domain/App/AppUpdateChecker.swift +++ b/phpmon/Domain/App/AppUpdateChecker.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 09/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/AppVersion.swift b/phpmon/Domain/App/AppVersion.swift index 928858a..62231b4 100644 --- a/phpmon/Domain/App/AppVersion.swift +++ b/phpmon/Domain/App/AppVersion.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/EnvironmentCheck.swift b/phpmon/Domain/App/EnvironmentCheck.swift index 551d2a5..e3b4b2b 100644 --- a/phpmon/Domain/App/EnvironmentCheck.swift +++ b/phpmon/Domain/App/EnvironmentCheck.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/EnvironmentManager.swift b/phpmon/Domain/App/EnvironmentManager.swift index 5eef699..3d5788c 100644 --- a/phpmon/Domain/App/EnvironmentManager.swift +++ b/phpmon/Domain/App/EnvironmentManager.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 14/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/InterAppHandler.swift b/phpmon/Domain/App/InterAppHandler.swift index dd2816b..8bf4bbc 100644 --- a/phpmon/Domain/App/InterAppHandler.swift +++ b/phpmon/Domain/App/InterAppHandler.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 28/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/Services/FakeServicesManager.swift b/phpmon/Domain/App/Services/FakeServicesManager.swift index b18998f..68a4a30 100644 --- a/phpmon/Domain/App/Services/FakeServicesManager.swift +++ b/phpmon/Domain/App/Services/FakeServicesManager.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/12/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/Services/Service.swift b/phpmon/Domain/App/Services/Service.swift index f6bd7ea..9b82261 100644 --- a/phpmon/Domain/App/Services/Service.swift +++ b/phpmon/Domain/App/Services/Service.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/12/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/Services/ServicesManager.swift b/phpmon/Domain/App/Services/ServicesManager.swift index e0b3a54..d2d51f4 100644 --- a/phpmon/Domain/App/Services/ServicesManager.swift +++ b/phpmon/Domain/App/Services/ServicesManager.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 11/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/Services/ValetServicesManager.swift b/phpmon/Domain/App/Services/ValetServicesManager.swift index d018b3c..3496e17 100644 --- a/phpmon/Domain/App/Services/ValetServicesManager.swift +++ b/phpmon/Domain/App/Services/ValetServicesManager.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/12/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 681aa8c..24d34d5 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -2,7 +2,7 @@ // Environment.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/DomainList/AddProxyVC.swift b/phpmon/Domain/DomainList/AddProxyVC.swift index d113deb..697e30c 100644 --- a/phpmon/Domain/DomainList/AddProxyVC.swift +++ b/phpmon/Domain/DomainList/AddProxyVC.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 24/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/DomainList/AddSiteVC.swift b/phpmon/Domain/DomainList/AddSiteVC.swift index 9e72f32..a6f3bb7 100644 --- a/phpmon/Domain/DomainList/AddSiteVC.swift +++ b/phpmon/Domain/DomainList/AddSiteVC.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 24/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/DomainList/Cells/DomainListCellProtocol.swift b/phpmon/Domain/DomainList/Cells/DomainListCellProtocol.swift index e5a3bab..7da9234 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListCellProtocol.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListCellProtocol.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 03/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/Cells/DomainListKindCell.swift b/phpmon/Domain/DomainList/Cells/DomainListKindCell.swift index 7a6b65e..359574f 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListKindCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListKindCell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/Cells/DomainListNameCell.swift b/phpmon/Domain/DomainList/Cells/DomainListNameCell.swift index a9ee4d5..663e885 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListNameCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListNameCell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift index 26107fd..8cfd95f 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/Cells/DomainListTLSCell.swift b/phpmon/Domain/DomainList/Cells/DomainListTLSCell.swift index a4e27af..54d261e 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListTLSCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListTLSCell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift b/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift index 3dec51b..cc384ab 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/DomainListVC+Actions.swift b/phpmon/Domain/DomainList/DomainListVC+Actions.swift index f12da19..16aa9a9 100644 --- a/phpmon/Domain/DomainList/DomainListVC+Actions.swift +++ b/phpmon/Domain/DomainList/DomainListVC+Actions.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift b/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift index 740f725..6ec9b9a 100644 --- a/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift +++ b/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/DomainListVC.swift b/phpmon/Domain/DomainList/DomainListVC.swift index 43d6632..82a3516 100644 --- a/phpmon/Domain/DomainList/DomainListVC.swift +++ b/phpmon/Domain/DomainList/DomainListVC.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 30/03/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/DomainListWindowController.swift b/phpmon/Domain/DomainList/DomainListWindowController.swift index e3717d4..fe846ee 100644 --- a/phpmon/Domain/DomainList/DomainListWindowController.swift +++ b/phpmon/Domain/DomainList/DomainListWindowController.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 03/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/PMTableView.swift b/phpmon/Domain/DomainList/PMTableView.swift index 99d214d..7080bd2 100644 --- a/phpmon/Domain/DomainList/PMTableView.swift +++ b/phpmon/Domain/DomainList/PMTableView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 05/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/DomainList/SelectionVC.swift b/phpmon/Domain/DomainList/SelectionVC.swift index 80c2323..f5ea23a 100644 --- a/phpmon/Domain/DomainList/SelectionVC.swift +++ b/phpmon/Domain/DomainList/SelectionVC.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 14/04/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Composer/ComposerJson.swift b/phpmon/Domain/Integrations/Composer/ComposerJson.swift index 83ca5bc..deb4b6d 100644 --- a/phpmon/Domain/Integrations/Composer/ComposerJson.swift +++ b/phpmon/Domain/Integrations/Composer/ComposerJson.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 04/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Composer/ComposerWindow.swift b/phpmon/Domain/Integrations/Composer/ComposerWindow.swift index 754b2e3..7434fc5 100644 --- a/phpmon/Domain/Integrations/Composer/ComposerWindow.swift +++ b/phpmon/Domain/Integrations/Composer/ComposerWindow.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift b/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift index dd66bdc..2dfd435 100644 --- a/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift +++ b/phpmon/Domain/Integrations/Composer/PhpFrameworks.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 26/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift index 0ea3552..39a5bc3 100644 --- a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift +++ b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 28/11/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Nginx/NginxConfigurationFile.swift b/phpmon/Domain/Integrations/Nginx/NginxConfigurationFile.swift index 3ea9eee..fc16072 100644 --- a/phpmon/Domain/Integrations/Nginx/NginxConfigurationFile.swift +++ b/phpmon/Domain/Integrations/Nginx/NginxConfigurationFile.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 15/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift b/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift index 336da7a..9817111 100644 --- a/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift +++ b/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 13/12/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Domains/ValetInteractor.swift b/phpmon/Domain/Integrations/Valet/Domains/ValetInteractor.swift index fb1ae3c..7cc2c26 100644 --- a/phpmon/Domain/Integrations/Valet/Domains/ValetInteractor.swift +++ b/phpmon/Domain/Integrations/Valet/Domains/ValetInteractor.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Domains/ValetListable.swift b/phpmon/Domain/Integrations/Valet/Domains/ValetListable.swift index fb63faa..8846b09 100644 --- a/phpmon/Domain/Integrations/Valet/Domains/ValetListable.swift +++ b/phpmon/Domain/Integrations/Valet/Domains/ValetListable.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 12/04/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Proxies/FakeValetProxy.swift b/phpmon/Domain/Integrations/Valet/Proxies/FakeValetProxy.swift index 6591cda..8b1740a 100644 --- a/phpmon/Domain/Integrations/Valet/Proxies/FakeValetProxy.swift +++ b/phpmon/Domain/Integrations/Valet/Proxies/FakeValetProxy.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/12/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Proxies/ValetProxy.swift b/phpmon/Domain/Integrations/Valet/Proxies/ValetProxy.swift index e9cfbe1..43b909f 100644 --- a/phpmon/Domain/Integrations/Valet/Proxies/ValetProxy.swift +++ b/phpmon/Domain/Integrations/Valet/Proxies/ValetProxy.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 30/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Scanners/DomainScanner.swift b/phpmon/Domain/Integrations/Valet/Scanners/DomainScanner.swift index a4a16d8..557402c 100644 --- a/phpmon/Domain/Integrations/Valet/Scanners/DomainScanner.swift +++ b/phpmon/Domain/Integrations/Valet/Scanners/DomainScanner.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 02/04/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Scanners/FakeDomainScanner.swift b/phpmon/Domain/Integrations/Valet/Scanners/FakeDomainScanner.swift index 386edc5..b77b818 100644 --- a/phpmon/Domain/Integrations/Valet/Scanners/FakeDomainScanner.swift +++ b/phpmon/Domain/Integrations/Valet/Scanners/FakeDomainScanner.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 02/04/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // class FakeDomainScanner: DomainScanner { diff --git a/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift b/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift index 5cc0e98..c8dcbf5 100644 --- a/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift +++ b/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 02/04/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Scanners/ValetScanners.swift b/phpmon/Domain/Integrations/Valet/Scanners/ValetScanners.swift index 6db3a1f..501ce6c 100644 --- a/phpmon/Domain/Integrations/Valet/Scanners/ValetScanners.swift +++ b/phpmon/Domain/Integrations/Valet/Scanners/ValetScanners.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 01/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift index 6cb22a8..0acdf18 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 19/03/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift index a821b41..ae4e032 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 22/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 9c89fe6..8b7057e 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 29/11/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift index be57d0f..f27cea2 100644 --- a/phpmon/Domain/Menu/MainMenu+Actions.swift +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 19/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Menu/MainMenu+Async.swift b/phpmon/Domain/Menu/MainMenu+Async.swift index 013913a..e81e688 100644 --- a/phpmon/Domain/Menu/MainMenu+Async.swift +++ b/phpmon/Domain/Menu/MainMenu+Async.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 06/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Menu/MainMenu+FixMyValet.swift b/phpmon/Domain/Menu/MainMenu+FixMyValet.swift index d351c7b..709856f 100644 --- a/phpmon/Domain/Menu/MainMenu+FixMyValet.swift +++ b/phpmon/Domain/Menu/MainMenu+FixMyValet.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 20/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 791e39a..97cb19c 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 03/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index 3ffabe4..f2e0c75 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index e21584a..f8fd480 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -2,7 +2,7 @@ // MainMenu.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 543f4d7..8b49aeb 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 18/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index b80fcc8..1701e94 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -2,7 +2,7 @@ // MainMenuBuilder.swift // PHP Monitor // -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Notice/BetterAlert.swift b/phpmon/Domain/Notice/BetterAlert.swift index a4b8d2c..33ad04c 100644 --- a/phpmon/Domain/Notice/BetterAlert.swift +++ b/phpmon/Domain/Notice/BetterAlert.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Notice/BetterAlertVC.swift b/phpmon/Domain/Notice/BetterAlertVC.swift index c3d58e1..a1d5251 100644 --- a/phpmon/Domain/Notice/BetterAlertVC.swift +++ b/phpmon/Domain/Notice/BetterAlertVC.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Onboarding/OnboardingWindowController.swift b/phpmon/Domain/Onboarding/OnboardingWindowController.swift index 0f73b9b..5b65200 100644 --- a/phpmon/Domain/Onboarding/OnboardingWindowController.swift +++ b/phpmon/Domain/Onboarding/OnboardingWindowController.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 25/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift b/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift index 65dfeb9..010dcbc 100644 --- a/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift +++ b/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 21/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/CustomPrefs.swift b/phpmon/Domain/Preferences/CustomPrefs.swift index 6ca241e..eaa9c0f 100644 --- a/phpmon/Domain/Preferences/CustomPrefs.swift +++ b/phpmon/Domain/Preferences/CustomPrefs.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 03/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/Keybinds/GlobalKeybindPreference.swift b/phpmon/Domain/Preferences/Keybinds/GlobalKeybindPreference.swift index 7d3dccc..f12b0e2 100644 --- a/phpmon/Domain/Preferences/Keybinds/GlobalKeybindPreference.swift +++ b/phpmon/Domain/Preferences/Keybinds/GlobalKeybindPreference.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 15/04/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/Keys.swift b/phpmon/Domain/Preferences/Keys.swift index 0216aa3..366a6ff 100644 --- a/phpmon/Domain/Preferences/Keys.swift +++ b/phpmon/Domain/Preferences/Keys.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 25/07/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/MenuBarIcons.swift b/phpmon/Domain/Preferences/MenuBarIcons.swift index dbe516a..0cb95a1 100644 --- a/phpmon/Domain/Preferences/MenuBarIcons.swift +++ b/phpmon/Domain/Preferences/MenuBarIcons.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 06/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/PreferenceName.swift b/phpmon/Domain/Preferences/PreferenceName.swift index 656d22c..9a94b54 100644 --- a/phpmon/Domain/Preferences/PreferenceName.swift +++ b/phpmon/Domain/Preferences/PreferenceName.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 07/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // /** diff --git a/phpmon/Domain/Preferences/Preferences.swift b/phpmon/Domain/Preferences/Preferences.swift index 504c870..6d63ae1 100644 --- a/phpmon/Domain/Preferences/Preferences.swift +++ b/phpmon/Domain/Preferences/Preferences.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 30/03/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/PreferencesWindowController+Hotkey.swift b/phpmon/Domain/Preferences/PreferencesWindowController+Hotkey.swift index 7ddd785..f5d7338 100644 --- a/phpmon/Domain/Preferences/PreferencesWindowController+Hotkey.swift +++ b/phpmon/Domain/Preferences/PreferencesWindowController+Hotkey.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 25/07/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Preferences/PreferencesWindowController.swift b/phpmon/Domain/Preferences/PreferencesWindowController.swift index 2a3a90c..20f135d 100644 --- a/phpmon/Domain/Preferences/PreferencesWindowController.swift +++ b/phpmon/Domain/Preferences/PreferencesWindowController.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 02/04/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Preferences/PrefsVC.swift b/phpmon/Domain/Preferences/PrefsVC.swift index 3e1542f..4bb5ab4 100644 --- a/phpmon/Domain/Preferences/PrefsVC.swift +++ b/phpmon/Domain/Preferences/PrefsVC.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 30/03/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Preferences/Stats.swift b/phpmon/Domain/Preferences/Stats.swift index 1a5a15d..c892413 100644 --- a/phpmon/Domain/Preferences/Stats.swift +++ b/phpmon/Domain/Preferences/Stats.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 29/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift index 6f4ea52..d70c7f2 100644 --- a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift +++ b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 17/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/Views/HotkeyPreferenceView.swift b/phpmon/Domain/Preferences/Views/HotkeyPreferenceView.swift index 51ab865..1c77d7a 100644 --- a/phpmon/Domain/Preferences/Views/HotkeyPreferenceView.swift +++ b/phpmon/Domain/Preferences/Views/HotkeyPreferenceView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 17/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Preferences/Views/SelectPreferenceView.swift b/phpmon/Domain/Preferences/Views/SelectPreferenceView.swift index 0f7c508..b8158ea 100644 --- a/phpmon/Domain/Preferences/Views/SelectPreferenceView.swift +++ b/phpmon/Domain/Preferences/Views/SelectPreferenceView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 06/02/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Presets/Preset.swift b/phpmon/Domain/Presets/Preset.swift index 397a187..b40dc2e 100644 --- a/phpmon/Domain/Presets/Preset.swift +++ b/phpmon/Domain/Presets/Preset.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 31/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Presets/PresetHelper.swift b/phpmon/Domain/Presets/PresetHelper.swift index 6ff1242..1693182 100644 --- a/phpmon/Domain/Presets/PresetHelper.swift +++ b/phpmon/Domain/Presets/PresetHelper.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 02/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Progress/ProgressVC.swift b/phpmon/Domain/Progress/ProgressVC.swift index 9fc8f2c..74829cd 100644 --- a/phpmon/Domain/Progress/ProgressVC.swift +++ b/phpmon/Domain/Progress/ProgressVC.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 26/07/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Progress/TerminalProgressWindowController.swift b/phpmon/Domain/Progress/TerminalProgressWindowController.swift index 96e232f..80298f8 100644 --- a/phpmon/Domain/Progress/TerminalProgressWindowController.swift +++ b/phpmon/Domain/Progress/TerminalProgressWindowController.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 18/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/SwiftUI/Common/SwiftUIHelper.swift b/phpmon/Domain/SwiftUI/Common/SwiftUIHelper.swift index e553b7e..70f9ae9 100644 --- a/phpmon/Domain/SwiftUI/Common/SwiftUIHelper.swift +++ b/phpmon/Domain/SwiftUI/Common/SwiftUIHelper.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/SwiftUI/Domains/NoDomainResultsView.swift b/phpmon/Domain/SwiftUI/Domains/NoDomainResultsView.swift index 3644fc1..ee591e0 100644 --- a/phpmon/Domain/SwiftUI/Domains/NoDomainResultsView.swift +++ b/phpmon/Domain/SwiftUI/Domains/NoDomainResultsView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 15/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift index afd87c4..39eb12d 100644 --- a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift +++ b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Menu/HeaderView.swift b/phpmon/Domain/SwiftUI/Menu/HeaderView.swift index b61f08f..4534aab 100644 --- a/phpmon/Domain/SwiftUI/Menu/HeaderView.swift +++ b/phpmon/Domain/SwiftUI/Menu/HeaderView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Menu/SectionHeaderView.swift b/phpmon/Domain/SwiftUI/Menu/SectionHeaderView.swift index e163b2d..e4feba5 100644 --- a/phpmon/Domain/SwiftUI/Menu/SectionHeaderView.swift +++ b/phpmon/Domain/SwiftUI/Menu/SectionHeaderView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift index b9fcd13..4ca1000 100644 --- a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift +++ b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/SwiftUI/Menu/StatsView.swift b/phpmon/Domain/SwiftUI/Menu/StatsView.swift index fdc5301..fd6a00f 100644 --- a/phpmon/Domain/SwiftUI/Menu/StatsView.swift +++ b/phpmon/Domain/SwiftUI/Menu/StatsView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 09/06/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift index 36ff786..7cb5fe5 100644 --- a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift +++ b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 08/07/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Warning/NoWarningsView.swift b/phpmon/Domain/SwiftUI/Warning/NoWarningsView.swift index 4c22bf0..fd810a4 100644 --- a/phpmon/Domain/SwiftUI/Warning/NoWarningsView.swift +++ b/phpmon/Domain/SwiftUI/Warning/NoWarningsView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 15/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift index 87a55a4..0c24b8b 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 09/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/SwiftUI/Warning/WarningView.swift b/phpmon/Domain/SwiftUI/Warning/WarningView.swift index ec47af2..446e4f5 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningView.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 31/07/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import SwiftUI diff --git a/phpmon/Domain/Warnings/Warning.swift b/phpmon/Domain/Warnings/Warning.swift index e363e4f..8bf3ec2 100644 --- a/phpmon/Domain/Warnings/Warning.swift +++ b/phpmon/Domain/Warnings/Warning.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 09/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Warnings/WarningManager.swift b/phpmon/Domain/Warnings/WarningManager.swift index ff2c3d5..d001dab 100644 --- a/phpmon/Domain/Warnings/WarningManager.swift +++ b/phpmon/Domain/Warnings/WarningManager.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 09/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Warnings/WarningsWindowController.swift b/phpmon/Domain/Warnings/WarningsWindowController.swift index 4fda741..4cc87e4 100644 --- a/phpmon/Domain/Warnings/WarningsWindowController.swift +++ b/phpmon/Domain/Warnings/WarningsWindowController.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 09/08/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Cocoa diff --git a/phpmon/Domain/Watcher/App+ConfigWatch.swift b/phpmon/Domain/Watcher/App+ConfigWatch.swift index 66f8e86..ac7bf95 100644 --- a/phpmon/Domain/Watcher/App+ConfigWatch.swift +++ b/phpmon/Domain/Watcher/App+ConfigWatch.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 30/03/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Domain/Watcher/PhpConfigWatcher.swift b/phpmon/Domain/Watcher/PhpConfigWatcher.swift index 9758a78..5634ac6 100644 --- a/phpmon/Domain/Watcher/PhpConfigWatcher.swift +++ b/phpmon/Domain/Watcher/PhpConfigWatcher.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 30/03/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index eb2ff9e..7954e8f 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -3,7 +3,7 @@ PHP Monitor Created by Nico Verbruggen on 16/05/2020. - Copyright © 2022 Nico Verbruggen. All rights reserved. + Copyright © 2023 Nico Verbruggen. All rights reserved. */ // MENU ITEMS (MI) diff --git a/tests/Shared/TestableConfigurations.swift b/tests/Shared/TestableConfigurations.swift index 0b9fe81..a7b6173 100644 --- a/tests/Shared/TestableConfigurations.swift +++ b/tests/Shared/TestableConfigurations.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 04/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/tests/Shared/Utility.swift b/tests/Shared/Utility.swift index 3caa4ec..55096ad 100644 --- a/tests/Shared/Utility.swift +++ b/tests/Shared/Utility.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 14/02/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import Foundation diff --git a/tests/Shared/XCPMApplication.swift b/tests/Shared/XCPMApplication.swift index e96029a..5a7f443 100644 --- a/tests/Shared/XCPMApplication.swift +++ b/tests/Shared/XCPMApplication.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/feature/FeatureTestCase.swift b/tests/feature/FeatureTestCase.swift index 3900120..a7282af 100644 --- a/tests/feature/FeatureTestCase.swift +++ b/tests/feature/FeatureTestCase.swift @@ -3,7 +3,7 @@ // Feature Tests // // Created by Nico Verbruggen on 07/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/feature/InternalSwitcherTest.swift b/tests/feature/InternalSwitcherTest.swift index 14028ef..9b89eff 100644 --- a/tests/feature/InternalSwitcherTest.swift +++ b/tests/feature/InternalSwitcherTest.swift @@ -3,7 +3,7 @@ // Feature Tests // // Created by Nico Verbruggen on 14/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/ui/DomainsListTest.swift b/tests/ui/DomainsListTest.swift index 292ae63..adbb62d 100644 --- a/tests/ui/DomainsListTest.swift +++ b/tests/ui/DomainsListTest.swift @@ -3,7 +3,7 @@ // UI Tests // // Created by Nico Verbruggen on 14/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/ui/StartupTest.swift b/tests/ui/StartupTest.swift index 090f2c9..369cf26 100644 --- a/tests/ui/StartupTest.swift +++ b/tests/ui/StartupTest.swift @@ -3,7 +3,7 @@ // UI Tests // // Created by Nico Verbruggen on 14/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/ui/UITestCase.swift b/tests/ui/UITestCase.swift index ee2d8cf..e34f9b1 100644 --- a/tests/ui/UITestCase.swift +++ b/tests/ui/UITestCase.swift @@ -3,7 +3,7 @@ // UI Tests // // Created by Nico Verbruggen on 15/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Commands/CommandTest.swift b/tests/unit/Commands/CommandTest.swift index 1241bf2..ed6fe2e 100644 --- a/tests/unit/Commands/CommandTest.swift +++ b/tests/unit/Commands/CommandTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 13/02/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Parsers/HomebrewPackageTest.swift b/tests/unit/Parsers/HomebrewPackageTest.swift index 2ca09f5..a622070 100644 --- a/tests/unit/Parsers/HomebrewPackageTest.swift +++ b/tests/unit/Parsers/HomebrewPackageTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 14/02/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Parsers/NginxConfigurationTest.swift b/tests/unit/Parsers/NginxConfigurationTest.swift index b09175c..5306072 100644 --- a/tests/unit/Parsers/NginxConfigurationTest.swift +++ b/tests/unit/Parsers/NginxConfigurationTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 29/11/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Parsers/PhpConfigurationTest.swift b/tests/unit/Parsers/PhpConfigurationTest.swift index 95d413c..749c8ac 100644 --- a/tests/unit/Parsers/PhpConfigurationTest.swift +++ b/tests/unit/Parsers/PhpConfigurationTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 04/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Parsers/PhpExtensionTest.swift b/tests/unit/Parsers/PhpExtensionTest.swift index 2647559..94f7f04 100644 --- a/tests/unit/Parsers/PhpExtensionTest.swift +++ b/tests/unit/Parsers/PhpExtensionTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 13/02/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Parsers/ValetConfigurationTest.swift b/tests/unit/Parsers/ValetConfigurationTest.swift index 5b57fe9..1c08b72 100644 --- a/tests/unit/Parsers/ValetConfigurationTest.swift +++ b/tests/unit/Parsers/ValetConfigurationTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 29/11/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Testables/Filesystem/RealFileSystemTest.swift b/tests/unit/Testables/Filesystem/RealFileSystemTest.swift index 8e9b9a0..8831dc2 100644 --- a/tests/unit/Testables/Filesystem/RealFileSystemTest.swift +++ b/tests/unit/Testables/Filesystem/RealFileSystemTest.swift @@ -3,7 +3,7 @@ // Unit Tests // // Created by Nico Verbruggen on 02/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Testables/Filesystem/TestableFileSystemTest.swift b/tests/unit/Testables/Filesystem/TestableFileSystemTest.swift index 698e9ba..1ec44fb 100644 --- a/tests/unit/Testables/Filesystem/TestableFileSystemTest.swift +++ b/tests/unit/Testables/Filesystem/TestableFileSystemTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 01/11/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Testables/Shell/RealShellTest.swift b/tests/unit/Testables/Shell/RealShellTest.swift index 8c57917..685b0b6 100644 --- a/tests/unit/Testables/Shell/RealShellTest.swift +++ b/tests/unit/Testables/Shell/RealShellTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 28/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Testables/Shell/TestableShellTest.swift b/tests/unit/Testables/Shell/TestableShellTest.swift index d2a819a..c12afac 100644 --- a/tests/unit/Testables/Shell/TestableShellTest.swift +++ b/tests/unit/Testables/Shell/TestableShellTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 20/09/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Testables/TestableConfigurationTest.swift b/tests/unit/Testables/TestableConfigurationTest.swift index 4e6bbb6..511cde4 100644 --- a/tests/unit/Testables/TestableConfigurationTest.swift +++ b/tests/unit/Testables/TestableConfigurationTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/10/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Versions/AppUpdaterCheckTest.swift b/tests/unit/Versions/AppUpdaterCheckTest.swift index c70d5a2..463635e 100644 --- a/tests/unit/Versions/AppUpdaterCheckTest.swift +++ b/tests/unit/Versions/AppUpdaterCheckTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Versions/AppVersionTest.swift b/tests/unit/Versions/AppVersionTest.swift index 040f819..c2ac087 100644 --- a/tests/unit/Versions/AppVersionTest.swift +++ b/tests/unit/Versions/AppVersionTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 10/05/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Versions/PhpVersionDetectionTest.swift b/tests/unit/Versions/PhpVersionDetectionTest.swift index fc77d78..b496495 100644 --- a/tests/unit/Versions/PhpVersionDetectionTest.swift +++ b/tests/unit/Versions/PhpVersionDetectionTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 01/04/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Versions/PhpVersionNumberTest.swift b/tests/unit/Versions/PhpVersionNumberTest.swift index a9f3e4b..e2744b0 100644 --- a/tests/unit/Versions/PhpVersionNumberTest.swift +++ b/tests/unit/Versions/PhpVersionNumberTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 23/01/2022. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Versions/ValetVersionExtractorTest.swift b/tests/unit/Versions/ValetVersionExtractorTest.swift index 9e7673e..a36f334 100644 --- a/tests/unit/Versions/ValetVersionExtractorTest.swift +++ b/tests/unit/Versions/ValetVersionExtractorTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 29/11/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest diff --git a/tests/unit/Versions/VersionExtractorTest.swift b/tests/unit/Versions/VersionExtractorTest.swift index 6b44657..b0f07d4 100644 --- a/tests/unit/Versions/VersionExtractorTest.swift +++ b/tests/unit/Versions/VersionExtractorTest.swift @@ -3,7 +3,7 @@ // PHP Monitor // // Created by Nico Verbruggen on 16/12/2021. -// Copyright © 2022 Nico Verbruggen. All rights reserved. +// Copyright © 2023 Nico Verbruggen. All rights reserved. // import XCTest From c3261b8873c5b129ef9524ced2b734896022da5f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 20 Jan 2023 16:36:56 +0100 Subject: [PATCH 020/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Parsing=20.valetr?= =?UTF-8?q?c=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Integrations/Valet/Sites/ValetSite.swift | 47 +++++++++++++++---- phpmon/Localizable.strings | 1 + 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift index ae4e032..b152c0a 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift @@ -65,6 +65,7 @@ class ValetSite: ValetListable { case require case platform case valetphprc + case valetrc } init( @@ -215,21 +216,49 @@ class ValetSite: ValetListable { Checks the contents of the .valetphprc file and determine the version, if possible. */ private func determineValetPhpFileInfo() { - let path = "\(absolutePath)/.valetphprc" + let files = [ + (".valetphprc", VersionSource.valetphprc), + (".valetrc", VersionSource.valetrc) + ] - do { - if FileSystem.fileExists(path) { - let contents = try String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8) - if let version = VersionExtractor.from(contents) { - self.composerPhp = version - self.composerPhpSource = .valetphprc + for (suffix, source) in files { + do { + let path = "\(absolutePath)/\(suffix)" + if FileSystem.fileExists(path) { + try self.handleValetFile(path, source) } + } catch { + Log.err("Something went wrong parsing the '\(suffix)' file") } - } catch { - Log.err("Something went wrong parsing the .valetphprc file") } } + /** + Parse a Valet file (either .valetphprc or .valetrc). + */ + private func handleValetFile(_ path: String, _ source: VersionSource) throws { + let contents = try String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8) + switch source { + case .valetphprc: + if let version = VersionExtractor.from(contents) { + self.composerPhp = version + self.composerPhpSource = source + } + case .valetrc: + self.parseValetRcFile(contents) + default: + return + } + } + + /** + Specifically extract PHP information from a .valetrc file. + */ + private func parseValetRcFile(_ text: String) { + // TODO: Implement this + fatalError("A .valetrc file was found, needs to be parsed!") + } + // MARK: - File Parsing public static func isolatedVersion(_ filePath: String) -> String? { diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 7954e8f..97054c1 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -388,6 +388,7 @@ problem manually, using your own Terminal app (this just shows you the output)." "alert.composer_php_requirement.type.require" = "This required PHP version was determined by checking the `require` field in the `composer.json` file when the site list was last refreshed."; "alert.composer_php_requirement.type.platform" = "This required PHP version was determined by checking the `platform` field in the `composer.json` file when the site list was last refreshed."; "alert.composer_php_requirement.type.valetphprc" = "This required PHP version was determined by checking the .valetphprc file in your project's directory."; +"alert.composer_php_requirement.type.valetrc" = "This required PHP version was determined by checking the .valetrc file in your project's directory."; "alert.unable_to_determine_is_fine" = "If you have a simple project, there may not be a specified PHP version set as a requirement. In that case, you are free to ignore this warning."; "alert.php_version_ideal" = "The currently active PHP version is ideal for this site."; "alert.php_version_incorrect" = "The currently active PHP version does not match the required constraint set for this site."; From 7936d14440627871205242e86bdf243c748427ca Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 20 Jan 2023 16:42:50 +0100 Subject: [PATCH 021/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Add=20test=20for?= =?UTF-8?q?=20feature=20to=20be=20implemented?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++++ tests/unit/Parsers/ValetRcTest.swift | 30 +++++++++++++++++++ tests/unit/Test Files/valet/valetrc.rc | 3 ++ tests/unit/Test Files/valet/valetrc_broken.rc | 6 ++++ 4 files changed, 51 insertions(+) create mode 100644 tests/unit/Parsers/ValetRcTest.swift create mode 100644 tests/unit/Test Files/valet/valetrc.rc create mode 100644 tests/unit/Test Files/valet/valetrc_broken.rc diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index c92efae..eff4c14 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -147,6 +147,9 @@ C451AFF72969E40F0078E617 /* HelpButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C451AFF52969E40F0078E617 /* HelpButton.swift */; }; C451AFF82969E40F0078E617 /* HelpButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C451AFF52969E40F0078E617 /* HelpButton.swift */; }; C451AFF92969E40F0078E617 /* HelpButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C451AFF52969E40F0078E617 /* HelpButton.swift */; }; + C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4551656297AED18009B8466 /* ValetRcTest.swift */; }; + C4551659297AED7D009B8466 /* valetrc.rc in Resources */ = {isa = PBXBuildFile; fileRef = C4551658297AED7D009B8466 /* valetrc.rc */; }; + C455165B297AEDB5009B8466 /* valetrc_broken.rc in Resources */ = {isa = PBXBuildFile; fileRef = C455165A297AEDB5009B8466 /* valetrc_broken.rc */; }; C4570C3A28FC355300D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; C4570C3B28FC355300D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; C4570C3C28FC355400D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; @@ -811,6 +814,9 @@ C44F868D2835BD8D005C353A /* phpmon-config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "phpmon-config.json"; sourceTree = ""; }; C450C8C528C919EC002A2B4B /* PreferenceName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferenceName.swift; sourceTree = ""; }; C451AFF52969E40F0078E617 /* HelpButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpButton.swift; sourceTree = ""; }; + C4551656297AED18009B8466 /* ValetRcTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetRcTest.swift; sourceTree = ""; }; + C4551658297AED7D009B8466 /* valetrc.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc.rc; sourceTree = ""; }; + C455165A297AEDB5009B8466 /* valetrc_broken.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc_broken.rc; sourceTree = ""; }; C459B4BC27F6093700E9B4B4 /* nginx-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-proxy.test"; sourceTree = ""; }; C45B9148295607F400F4EC78 /* Service.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; C45B914D295608E300F4EC78 /* ValetServicesManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetServicesManager.swift; sourceTree = ""; }; @@ -1292,6 +1298,8 @@ C459B4C027F6096300E9B4B4 /* valet */ = { isa = PBXGroup; children = ( + C455165A297AEDB5009B8466 /* valetrc_broken.rc */, + C4551658297AED7D009B8466 /* valetrc.rc */, C4AF9F70275445FF00D44ED0 /* valet-config.json */, ); path = valet; @@ -1565,6 +1573,7 @@ C46FA98A2822F08F00D78807 /* PhpConfigurationTest.swift */, C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */, C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */, + C4551656297AED18009B8466 /* ValetRcTest.swift */, ); path = Parsers; sourceTree = ""; @@ -1926,6 +1935,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C4551659297AED7D009B8466 /* valetrc.rc in Resources */, C4570C3C28FC355400D18420 /* Localizable.strings in Resources */, 54FCFD27276C883F004CE748 /* SelectPreferenceView.xib in Resources */, 54FCFD2E276C8D67004CE748 /* HotkeyPreferenceView.xib in Resources */, @@ -1939,6 +1949,7 @@ C44C1992276E44CB0072762D /* ProgressWindow.storyboard in Resources */, C42F26762805FEE200938AC7 /* nginx-secure-proxy.test in Resources */, C4F30B08278E195800755FCE /* brew-services.json in Resources */, + C455165B297AEDB5009B8466 /* valetrc_broken.rc in Resources */, 54A18D40282A566E000A0D81 /* nginx-secure-proxy-custom-tld.test in Resources */, C42CFB1627DFDE7900862737 /* nginx-site.test in Resources */, C459B4BD27F6093700E9B4B4 /* nginx-proxy.test in Resources */, @@ -2638,6 +2649,7 @@ C4A81CA528C67101008DD9D1 /* PMTableView.swift in Sources */, C45E76152854A65300B4FE0C /* ServicesManager.swift in Sources */, C4D36602291132B7006BD146 /* ValetScanners.swift in Sources */, + C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */, C464ADAD275A7A3F003FCD53 /* DomainListWindowController.swift in Sources */, C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */, C464ADB0275A7A6A003FCD53 /* DomainListVC.swift in Sources */, diff --git a/tests/unit/Parsers/ValetRcTest.swift b/tests/unit/Parsers/ValetRcTest.swift new file mode 100644 index 0000000..222b91a --- /dev/null +++ b/tests/unit/Parsers/ValetRcTest.swift @@ -0,0 +1,30 @@ +// +// ValetRcTest.swift +// Unit Tests +// +// Created by Nico Verbruggen on 20/01/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import XCTest + +class ValetRcTest: XCTestCase { + + // MARK: - Test Files + + static var path: URL { + return Bundle(for: Self.self) + .url(forResource: "valetrc", withExtension: "rc")! + } + + // MARK: - Tests + + func test_can_extract_fields_from_valetrc_file() throws { + // TODO: Load the path and get the fields + } + + func test_skip_invalid_fields_valetrc_file() throws { + // TODO: Load the path and throw error + } + +} diff --git a/tests/unit/Test Files/valet/valetrc.rc b/tests/unit/Test Files/valet/valetrc.rc new file mode 100644 index 0000000..8e9c64b --- /dev/null +++ b/tests/unit/Test Files/valet/valetrc.rc @@ -0,0 +1,3 @@ +PHP=php@8.2 +OTHER=thing +PHPMON_WATCH=true \ No newline at end of file diff --git a/tests/unit/Test Files/valet/valetrc_broken.rc b/tests/unit/Test Files/valet/valetrc_broken.rc new file mode 100644 index 0000000..6f0715c --- /dev/null +++ b/tests/unit/Test Files/valet/valetrc_broken.rc @@ -0,0 +1,6 @@ +fdsgdfg +dgdfg + +PHP=fsdfs + +;PHP=8.2 From 25f824defd35667f9094bf5c658fb57bb0e4318c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 24 Jan 2023 19:47:28 +0100 Subject: [PATCH 022/194] =?UTF-8?q?=E2=9C=A8=20Correctly=20parse=20.valetr?= =?UTF-8?q?c=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 34 +++++++++---- .../Domain/Integrations/Common/RCFile.swift | 48 +++++++++++++++++++ .../Integrations/Valet/Sites/ValetSite.swift | 28 +++++++---- tests/unit/Parsers/ValetRcTest.swift | 34 ++++++++++--- .../{valetrc_broken.rc => valetrc.broken} | 0 tests/unit/Test Files/valet/valetrc.rc | 3 -- tests/unit/Test Files/valet/valetrc.valid | 6 +++ 7 files changed, 127 insertions(+), 26 deletions(-) create mode 100644 phpmon/Domain/Integrations/Common/RCFile.swift rename tests/unit/Test Files/valet/{valetrc_broken.rc => valetrc.broken} (100%) delete mode 100644 tests/unit/Test Files/valet/valetrc.rc create mode 100644 tests/unit/Test Files/valet/valetrc.valid diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index eff4c14..bd8d7eb 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -122,6 +122,10 @@ C44067FB27E25FD70045BD4E /* DomainListTLSCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067FA27E25FD70045BD4E /* DomainListTLSCell.swift */; }; C44264BE2850B86C007400F1 /* SwiftUIHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44264BD2850B86C007400F1 /* SwiftUIHelper.swift */; }; C44264C02850BD2A007400F1 /* VersionPopoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44264BF2850BD2A007400F1 /* VersionPopoverView.swift */; }; + C4463FCC29804BCB007B93D5 /* RCFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4463FCB29804BCB007B93D5 /* RCFile.swift */; }; + C4463FCD29804BCB007B93D5 /* RCFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4463FCB29804BCB007B93D5 /* RCFile.swift */; }; + C4463FCE29804BCB007B93D5 /* RCFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4463FCB29804BCB007B93D5 /* RCFile.swift */; }; + C4463FCF29804BCB007B93D5 /* RCFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4463FCB29804BCB007B93D5 /* RCFile.swift */; }; C449B4F027EE7FB800C47E8A /* DomainListTLSCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067FA27E25FD70045BD4E /* DomainListTLSCell.swift */; }; C449B4F127EE7FC200C47E8A /* DomainListNameCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F427E2582B0045BD4E /* DomainListNameCell.swift */; }; C449B4F227EE7FC400C47E8A /* DomainListPhpCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F627E258410045BD4E /* DomainListPhpCell.swift */; }; @@ -148,8 +152,8 @@ C451AFF82969E40F0078E617 /* HelpButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C451AFF52969E40F0078E617 /* HelpButton.swift */; }; C451AFF92969E40F0078E617 /* HelpButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C451AFF52969E40F0078E617 /* HelpButton.swift */; }; C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4551656297AED18009B8466 /* ValetRcTest.swift */; }; - C4551659297AED7D009B8466 /* valetrc.rc in Resources */ = {isa = PBXBuildFile; fileRef = C4551658297AED7D009B8466 /* valetrc.rc */; }; - C455165B297AEDB5009B8466 /* valetrc_broken.rc in Resources */ = {isa = PBXBuildFile; fileRef = C455165A297AEDB5009B8466 /* valetrc_broken.rc */; }; + C4551659297AED7D009B8466 /* valetrc.valid in Resources */ = {isa = PBXBuildFile; fileRef = C4551658297AED7D009B8466 /* valetrc.valid */; }; + C455165B297AEDB5009B8466 /* valetrc.broken in Resources */ = {isa = PBXBuildFile; fileRef = C455165A297AEDB5009B8466 /* valetrc.broken */; }; C4570C3A28FC355300D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; C4570C3B28FC355300D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; C4570C3C28FC355400D18420 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = C473319E2470923A009A0597 /* Localizable.strings */; }; @@ -804,6 +808,7 @@ C44067FA27E25FD70045BD4E /* DomainListTLSCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainListTLSCell.swift; sourceTree = ""; }; C44264BD2850B86C007400F1 /* SwiftUIHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIHelper.swift; sourceTree = ""; }; C44264BF2850BD2A007400F1 /* VersionPopoverView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionPopoverView.swift; sourceTree = ""; }; + C4463FCB29804BCB007B93D5 /* RCFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RCFile.swift; sourceTree = ""; }; C44A874728905BB000498BC4 /* ProgressVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressVC.swift; sourceTree = ""; }; C44AD3F62912EF7100997FF4 /* RealFileSystemTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealFileSystemTest.swift; sourceTree = ""; }; C44B3A4528E5C70100718CB1 /* TimeIntervalExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeIntervalExtension.swift; sourceTree = ""; }; @@ -815,8 +820,8 @@ C450C8C528C919EC002A2B4B /* PreferenceName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferenceName.swift; sourceTree = ""; }; C451AFF52969E40F0078E617 /* HelpButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpButton.swift; sourceTree = ""; }; C4551656297AED18009B8466 /* ValetRcTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetRcTest.swift; sourceTree = ""; }; - C4551658297AED7D009B8466 /* valetrc.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc.rc; sourceTree = ""; }; - C455165A297AEDB5009B8466 /* valetrc_broken.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc_broken.rc; sourceTree = ""; }; + C4551658297AED7D009B8466 /* valetrc.valid */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc.valid; sourceTree = ""; }; + C455165A297AEDB5009B8466 /* valetrc.broken */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = valetrc.broken; sourceTree = ""; }; C459B4BC27F6093700E9B4B4 /* nginx-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-proxy.test"; sourceTree = ""; }; C45B9148295607F400F4EC78 /* Service.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = ""; }; C45B914D295608E300F4EC78 /* ValetServicesManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetServicesManager.swift; sourceTree = ""; }; @@ -1237,6 +1242,14 @@ path = Cells; sourceTree = ""; }; + C4463FD029804C13007B93D5 /* Common */ = { + isa = PBXGroup; + children = ( + C4463FCB29804BCB007B93D5 /* RCFile.swift */, + ); + path = Common; + sourceTree = ""; + }; C44A874628905B8500498BC4 /* Onboarding */ = { isa = PBXGroup; children = ( @@ -1298,8 +1311,8 @@ C459B4C027F6096300E9B4B4 /* valet */ = { isa = PBXGroup; children = ( - C455165A297AEDB5009B8466 /* valetrc_broken.rc */, - C4551658297AED7D009B8466 /* valetrc.rc */, + C455165A297AEDB5009B8466 /* valetrc.broken */, + C4551658297AED7D009B8466 /* valetrc.valid */, C4AF9F70275445FF00D44ED0 /* valet-config.json */, ); path = valet; @@ -1447,6 +1460,7 @@ C4AF9F6B275445D300D44ED0 /* Integrations */ = { isa = PBXGroup; children = ( + C4463FD029804C13007B93D5 /* Common */, C4C0E8DA27F887CC002D32A9 /* Nginx */, C4D89BC42783C98800A02B68 /* Composer */, C4AF9F6C275445D900D44ED0 /* Homebrew */, @@ -1935,7 +1949,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4551659297AED7D009B8466 /* valetrc.rc in Resources */, + C4551659297AED7D009B8466 /* valetrc.valid in Resources */, C4570C3C28FC355400D18420 /* Localizable.strings in Resources */, 54FCFD27276C883F004CE748 /* SelectPreferenceView.xib in Resources */, 54FCFD2E276C8D67004CE748 /* HotkeyPreferenceView.xib in Resources */, @@ -1949,7 +1963,7 @@ C44C1992276E44CB0072762D /* ProgressWindow.storyboard in Resources */, C42F26762805FEE200938AC7 /* nginx-secure-proxy.test in Resources */, C4F30B08278E195800755FCE /* brew-services.json in Resources */, - C455165B297AEDB5009B8466 /* valetrc_broken.rc in Resources */, + C455165B297AEDB5009B8466 /* valetrc.broken in Resources */, 54A18D40282A566E000A0D81 /* nginx-secure-proxy-custom-tld.test in Resources */, C42CFB1627DFDE7900862737 /* nginx-site.test in Resources */, C459B4BD27F6093700E9B4B4 /* nginx-proxy.test in Resources */, @@ -2027,6 +2041,7 @@ C4E2E85C28FC282B003B070C /* TestableConfiguration.swift in Sources */, C4C0E8DF27F88AEB002D32A9 /* FakeDomainScanner.swift in Sources */, C44B3A4628E5C70100718CB1 /* TimeIntervalExtension.swift in Sources */, + C4463FCC29804BCB007B93D5 /* RCFile.swift in Sources */, C44264BE2850B86C007400F1 /* SwiftUIHelper.swift in Sources */, C4E9D2C02878B336008FFDAD /* OnboardingView.swift in Sources */, C4F2E4372752F0870020E974 /* HomebrewDiagnostics.swift in Sources */, @@ -2208,6 +2223,7 @@ C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, C471E86428F9BB650021E251 /* Warning.swift in Sources */, C40175BA2903108900763A68 /* ValetInteractor.swift in Sources */, + C4463FCE29804BCB007B93D5 /* RCFile.swift in Sources */, C45B9150295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C471E86528F9BB650021E251 /* WarningManager.swift in Sources */, C471E86628F9BB650021E251 /* WarningsWindowController.swift in Sources */, @@ -2442,6 +2458,7 @@ C4D3660E29113F20006BD146 /* System.swift in Sources */, C471E80428F9BAD40021E251 /* PhpExtension.swift in Sources */, C471E7F728F9BACB0021E251 /* PhpSwitcher.swift in Sources */, + C4463FCF29804BCB007B93D5 /* RCFile.swift in Sources */, C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, C471E82828F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */, C471E81E28F9BB260021E251 /* BetterAlert.swift in Sources */, @@ -2624,6 +2641,7 @@ C44AD3F72912EF7100997FF4 /* RealFileSystemTest.swift in Sources */, C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */, C4C0E8E027F88AEB002D32A9 /* FakeDomainScanner.swift in Sources */, + C4463FCD29804BCB007B93D5 /* RCFile.swift in Sources */, C4AF9F7D275454A900D44ED0 /* ValetVersionExtractorTest.swift in Sources */, C4B56362276AB0A500F12CCB /* VersionExtractorTest.swift in Sources */, C4B585452770FE3900DA4FBE /* RealCommand.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Common/RCFile.swift b/phpmon/Domain/Integrations/Common/RCFile.swift new file mode 100644 index 0000000..52a34e4 --- /dev/null +++ b/phpmon/Domain/Integrations/Common/RCFile.swift @@ -0,0 +1,48 @@ +// +// RCFile.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 24/01/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +struct RCFile { + let path: String? + let fields: [String: String] + + static func fromPath(_ path: String) -> RCFile? { + do { + let text = try String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8) + return RCFile(path: path, contents: text) + } catch { + return nil + } + } + + init(path: String? = nil, contents: String) { + var fields: [String: String] = [:] + + contents + .split(separator: "\n") + .forEach({ line in + if line.contains("=") { + let content = line.split(separator: "=") + let key = String(content[0]) + .trimmingCharacters(in: .whitespaces) + .replacingOccurrences(of: "\"", with: "") + if key.starts(with: "#") { + return + } + let value = String(content[1]) + .trimmingCharacters(in: .whitespaces) + .replacingOccurrences(of: "\"", with: "") + fields[key] = value + } + }) + + self.path = path + self.fields = fields + } +} diff --git a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift index b152c0a..bf97e94 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift @@ -213,19 +213,20 @@ class ValetSite: ValetListable { } /** - Checks the contents of the .valetphprc file and determine the version, if possible. + Checks the contents of the .valetphprc file and determine the version. + The first file found takes precendence over all others. */ private func determineValetPhpFileInfo() { let files = [ - (".valetphprc", VersionSource.valetphprc), - (".valetrc", VersionSource.valetrc) + (".valetrc", VersionSource.valetrc), + (".valetphprc", VersionSource.valetphprc) ] for (suffix, source) in files { do { let path = "\(absolutePath)/\(suffix)" if FileSystem.fileExists(path) { - try self.handleValetFile(path, source) + return try self.handleValetFile(path, source) } } catch { Log.err("Something went wrong parsing the '\(suffix)' file") @@ -245,7 +246,7 @@ class ValetSite: ValetListable { self.composerPhpSource = source } case .valetrc: - self.parseValetRcFile(contents) + self.parseValetRcFile(path, contents) default: return } @@ -254,9 +255,20 @@ class ValetSite: ValetListable { /** Specifically extract PHP information from a .valetrc file. */ - private func parseValetRcFile(_ text: String) { - // TODO: Implement this - fatalError("A .valetrc file was found, needs to be parsed!") + private func parseValetRcFile(_ path: String, _ text: String) { + let valetRc = RCFile(path: path, contents: text) + + guard let versionString = valetRc.fields["PHP"] else { + if valetRc.path != nil { + Log.perf("\(self.name)'s .valetrc file at '\(valetRc.path!)' lacks a 'PHP' entry.") + } + return + } + + if let version = VersionExtractor.from(versionString) { + self.composerPhp = version + self.composerPhpSource = .valetrc + } } // MARK: - File Parsing diff --git a/tests/unit/Parsers/ValetRcTest.swift b/tests/unit/Parsers/ValetRcTest.swift index 222b91a..a89c028 100644 --- a/tests/unit/Parsers/ValetRcTest.swift +++ b/tests/unit/Parsers/ValetRcTest.swift @@ -12,19 +12,39 @@ class ValetRcTest: XCTestCase { // MARK: - Test Files - static var path: URL { + static var validPath: URL { return Bundle(for: Self.self) - .url(forResource: "valetrc", withExtension: "rc")! + .url(forResource: "valetrc", withExtension: "valid")! } + static var brokenPath: URL { + return Bundle(for: Self.self) + .url(forResource: "valetrc", withExtension: "broken")! + } + + // MARK: - Tests func test_can_extract_fields_from_valetrc_file() throws { - // TODO: Load the path and get the fields - } + let fakeFile = RCFile.fromPath("/Users/fake/file.rc") + XCTAssertNil(fakeFile) - func test_skip_invalid_fields_valetrc_file() throws { - // TODO: Load the path and throw error - } + // Can parse the file + let validFile = RCFile.fromPath(ValetRcTest.validPath.path) + XCTAssertNotNil(validFile) + let fields = validFile!.fields + + // Correctly parses and trims (and omits double quotes) per line + XCTAssertEqual(fields["PHP"], "php@8.2") + XCTAssertEqual(fields["OTHER"], "thing") + XCTAssertEqual(fields["PHPMON_WATCH"], "true") + XCTAssertEqual(fields["SYNTAX"], "variable") + + // Ignores entries prefixed with # + XCTAssertTrue(!fields.keys.contains("#PHP")) + + // Ignores invalid lines + XCTAssertTrue(!fields.keys.contains("OOF")) + } } diff --git a/tests/unit/Test Files/valet/valetrc_broken.rc b/tests/unit/Test Files/valet/valetrc.broken similarity index 100% rename from tests/unit/Test Files/valet/valetrc_broken.rc rename to tests/unit/Test Files/valet/valetrc.broken diff --git a/tests/unit/Test Files/valet/valetrc.rc b/tests/unit/Test Files/valet/valetrc.rc deleted file mode 100644 index 8e9c64b..0000000 --- a/tests/unit/Test Files/valet/valetrc.rc +++ /dev/null @@ -1,3 +0,0 @@ -PHP=php@8.2 -OTHER=thing -PHPMON_WATCH=true \ No newline at end of file diff --git a/tests/unit/Test Files/valet/valetrc.valid b/tests/unit/Test Files/valet/valetrc.valid new file mode 100644 index 0000000..1ac4bcd --- /dev/null +++ b/tests/unit/Test Files/valet/valetrc.valid @@ -0,0 +1,6 @@ +PHP=php@8.2 +#PHP=php +OTHER=thing +PHPMON_WATCH=true +SYNTAX = "variable" +OOF:NICE From 24aecb314814c2a5f28f794f41d77e01af9a0040 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 26 Jan 2023 20:29:56 +0100 Subject: [PATCH 023/194] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 18 +-- .../DomainList/Cells/DomainListPhpCell.swift | 10 +- .../DomainList/Cells/DomainListTypeCell.swift | 2 +- .../Integrations/Composer/ComposerJson.swift | 2 +- .../Valet/Sites/FakeValetSite.swift | 13 ++- .../Valet/Sites/PhpVersionSource.swift | 17 +++ .../Integrations/Valet/Sites/ValetSite.swift | 106 ++++++++---------- .../SwiftUI/Domains/VersionPopoverView.swift | 10 +- 8 files changed, 95 insertions(+), 83 deletions(-) create mode 100644 phpmon/Domain/Integrations/Valet/Sites/PhpVersionSource.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index bd8d7eb..5fb5846 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -551,6 +551,10 @@ C4B97B79275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B77275CF1B5003F3378 /* App+ActivationPolicy.swift */; }; C4B97B7B275CF20A003F3378 /* App+GlobalHotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B7A275CF20A003F3378 /* App+GlobalHotkey.swift */; }; C4B97B7C275CF20A003F3378 /* App+GlobalHotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B7A275CF20A003F3378 /* App+GlobalHotkey.swift */; }; + C4BB39392981AFC700F8E797 /* PhpVersionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BB39382981AFC700F8E797 /* PhpVersionSource.swift */; }; + C4BB393A2981AFC700F8E797 /* PhpVersionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BB39382981AFC700F8E797 /* PhpVersionSource.swift */; }; + C4BB393B2981AFC700F8E797 /* PhpVersionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BB39382981AFC700F8E797 /* PhpVersionSource.swift */; }; + C4BB393C2981AFC700F8E797 /* PhpVersionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BB39382981AFC700F8E797 /* PhpVersionSource.swift */; }; C4BF56AB2949381100379603 /* FakeValetInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BF56AA2949381100379603 /* FakeValetInteractor.swift */; }; C4BF56AC2949381100379603 /* FakeValetInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BF56AA2949381100379603 /* FakeValetInteractor.swift */; }; C4BF56AD2949381100379603 /* FakeValetInteractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4BF56AA2949381100379603 /* FakeValetInteractor.swift */; }; @@ -881,6 +885,7 @@ C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+MenuOutlets.swift"; sourceTree = ""; }; C4B97B77275CF1B5003F3378 /* App+ActivationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+ActivationPolicy.swift"; sourceTree = ""; }; C4B97B7A275CF20A003F3378 /* App+GlobalHotkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+GlobalHotkey.swift"; sourceTree = ""; }; + C4BB39382981AFC700F8E797 /* PhpVersionSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionSource.swift; sourceTree = ""; }; C4BF56AA2949381100379603 /* FakeValetInteractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeValetInteractor.swift; sourceTree = ""; }; C4C0E8DE27F88AEB002D32A9 /* FakeDomainScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeDomainScanner.swift; sourceTree = ""; }; C4C0E8E127F88B13002D32A9 /* ValetDomainScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetDomainScanner.swift; sourceTree = ""; }; @@ -1550,7 +1555,7 @@ children = ( C4E4404527C56F4700D225E1 /* ValetSite.swift */, C41C02A827E61A65009F26CB /* FakeValetSite.swift */, - C4C0E8E427F88B1F002D32A9 /* SiteScanner */, + C4BB39382981AFC700F8E797 /* PhpVersionSource.swift */, ); path = Sites; sourceTree = ""; @@ -1572,13 +1577,6 @@ path = Nginx; sourceTree = ""; }; - C4C0E8E427F88B1F002D32A9 /* SiteScanner */ = { - isa = PBXGroup; - children = ( - ); - path = SiteScanner; - sourceTree = ""; - }; C4C1019727C65A11001FACC2 /* Parsers */ = { isa = PBXGroup; children = ( @@ -2058,6 +2056,7 @@ C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */, C4FACE80288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */, C415D3B72770F294005EF286 /* Actions.swift in Sources */, + C4BB39392981AFC700F8E797 /* PhpVersionSource.swift in Sources */, C4C3643928AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */, C4CDA893288F1A71007CE25F /* Keys.swift in Sources */, @@ -2169,6 +2168,7 @@ C471E83028F9BB650021E251 /* Application.swift in Sources */, C471E83128F9BB650021E251 /* LocalNotification.swift in Sources */, C471E83228F9BB650021E251 /* MenuBarImageGenerator.swift in Sources */, + C4BB393B2981AFC700F8E797 /* PhpVersionSource.swift in Sources */, C471E83328F9BB650021E251 /* PMWindowController.swift in Sources */, C471E83428F9BB650021E251 /* VersionExtractor.swift in Sources */, C471E83528F9BB650021E251 /* ValetProxy.swift in Sources */, @@ -2437,6 +2437,7 @@ C4CE7F9929683B43000102CF /* PhpVersionNumberCollection.swift in Sources */, C471E7FC28F9BACE0021E251 /* HomebrewPackage.swift in Sources */, C471E7CF28F9BA600021E251 /* ActiveShell.swift in Sources */, + C4BB393C2981AFC700F8E797 /* PhpVersionSource.swift in Sources */, C471E7F628F9BAC80021E251 /* PhpHelper.swift in Sources */, C471E7EE28F9BAC30021E251 /* Constants.swift in Sources */, C471E80E28F9BAE80021E251 /* DateExtension.swift in Sources */, @@ -2570,6 +2571,7 @@ C485707B28BF458900539B36 /* VersionPopoverView.swift in Sources */, C4E2E85D28FC282B003B070C /* TestableConfiguration.swift in Sources */, C485706E28BF451C00539B36 /* OnboardingWindowController.swift in Sources */, + C4BB393A2981AFC700F8E797 /* PhpVersionSource.swift in Sources */, C4CB6E66292C362C002E9027 /* Homebrew.swift in Sources */, C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */, C4C3643A28AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, diff --git a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift index 8cfd95f..882ff56 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift @@ -28,7 +28,7 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol { imageViewPhpVersionOK.toolTip = nil - imageViewPhpVersionOK.contentTintColor = site.composerPhpCompatibleWithLinked + imageViewPhpVersionOK.contentTintColor = site.isCompatibleWithPreferredPhpVersion ? NSColor(named: "IconColorGreen") : NSColor(named: "IconColorRed") @@ -37,9 +37,9 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol { imageViewPhpVersionOK.image = NSImage(named: "Isolated") imageViewPhpVersionOK.toolTip = "domain_list.tooltips.isolated".localized(site.servingPhpVersion) } else { - imageViewPhpVersionOK.isHidden = (site.composerPhp == "???" || !site.composerPhpCompatibleWithLinked) + imageViewPhpVersionOK.isHidden = (site.preferredPhpVersion == "???" || !site.isCompatibleWithPreferredPhpVersion) imageViewPhpVersionOK.image = NSImage(named: "Checkmark") - imageViewPhpVersionOK.toolTip = "domain_list.tooltips.checkmark".localized(site.composerPhp) + imageViewPhpVersionOK.toolTip = "domain_list.tooltips.checkmark".localized(site.preferredPhpVersion) } } @@ -57,12 +57,12 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol { if site.isolatedPhpVersion != nil { return [] } - + guard let install = PhpEnv.phpInstall else { return [] } - return PhpEnv.shared.validVersions(for: site.composerPhp).filter({ version in + return PhpEnv.shared.validVersions(for: site.preferredPhpVersion).filter({ version in version.short != install.version.short }) } diff --git a/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift b/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift index cc384ab..1208b81 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListTypeCell.swift @@ -25,7 +25,7 @@ class DomainListTypeCell: NSTableCellView, DomainListCellProtocol { } // PHP version - labelPhpVersion.stringValue = site.composerPhp == "???" ? "Any PHP" : "PHP \(site.composerPhp)" + labelPhpVersion.stringValue = site.preferredPhpVersion == "???" ? "Any PHP" : "PHP \(site.preferredPhpVersion)" } func populateCell(with proxy: ValetProxy) { diff --git a/phpmon/Domain/Integrations/Composer/ComposerJson.swift b/phpmon/Domain/Integrations/Composer/ComposerJson.swift index deb4b6d..1e3047e 100644 --- a/phpmon/Domain/Integrations/Composer/ComposerJson.swift +++ b/phpmon/Domain/Integrations/Composer/ComposerJson.swift @@ -40,7 +40,7 @@ struct ComposerJson: Decodable { Checks what the PHP version constraint is. Returns a tuple (constraint, location of constraint). */ - public func getPhpVersion() -> (String, ValetSite.VersionSource) { + public func getPhpVersion() -> (String, PhpVersionSource) { // Check if in platform if configuration?.platform?.php != nil { return (configuration!.platform!.php!, .platform) diff --git a/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift index 0acdf18..b866f8c 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift @@ -19,10 +19,17 @@ class FakeValetSite: ValetSite { constraint: String = "^8.1", isolated: String? = nil ) { - self.init(name: name, tld: tld, absolutePath: path, aliasPath: nil, makeDeterminations: false) + self.init( + name: name, + tld: tld, + absolutePath: path, + aliasPath: nil, + makeDeterminations: false + ) + self.secured = secure - self.composerPhp = constraint - self.composerPhpSource = constraint != "" ? .require : .unknown + self.preferredPhpVersion = constraint + self.preferredPhpVersionSource = constraint != "" ? .require : .unknown self.driver = driver self.driverDeterminedByComposer = true diff --git a/phpmon/Domain/Integrations/Valet/Sites/PhpVersionSource.swift b/phpmon/Domain/Integrations/Valet/Sites/PhpVersionSource.swift new file mode 100644 index 0000000..de4f949 --- /dev/null +++ b/phpmon/Domain/Integrations/Valet/Sites/PhpVersionSource.swift @@ -0,0 +1,17 @@ +// +// VersionSource.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 25/01/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +enum PhpVersionSource: String { + case unknown + case require + case platform + case valetphprc + case valetrc +} diff --git a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift index bf97e94..6a3931f 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift @@ -44,14 +44,15 @@ class ValetSite: ValetListable { /// A list of notable Composer dependencies. var notableComposerDependencies: [String: String] = [:] - /// The PHP version as discovered in `composer.json` or in .valetphprc. - var composerPhp: String = "???" + /// The PHP version as discovered in `composer.json` or in .valetphprc/.valetrc. + /// This is the preferred version needed to correctly run the domain or site. + var preferredPhpVersion: String = "???" /// Check whether the PHP version is valid for the currently linked version. - var composerPhpCompatibleWithLinked: Bool = false + var isCompatibleWithPreferredPhpVersion: Bool = false /// How the PHP version was determined. - var composerPhpSource: VersionSource = .unknown + var preferredPhpVersionSource: PhpVersionSource = .unknown /// Which version of PHP is actually used to serve this site. var servingPhpVersion: String { @@ -60,14 +61,6 @@ class ValetSite: ValetListable { ?? "???" } - enum VersionSource: String { - case unknown - case require - case platform - case valetphprc - case valetrc - } - init( name: String, tld: String, @@ -140,27 +133,6 @@ class ValetSite: ValetListable { self.evaluateCompatibility() } - public func evaluateCompatibility() { - if self.composerPhp == "???" { - return - } - - guard let linked = PhpEnv.phpInstall else { - self.composerPhpCompatibleWithLinked = false - return - } - - // Split the composer list (on "|") to evaluate multiple constraints - // For example, for Laravel 8 projects the value is "^7.3|^8.0" - self.composerPhpCompatibleWithLinked = self.composerPhp.split(separator: "|") - .map { string in - let origin = self.isolatedPhpVersion?.versionNumber.short ?? linked.version.long - return !PhpVersionNumberCollection.make(from: [origin]) - .matching(constraint: string.trimmingCharacters(in: .whitespacesAndNewlines)) - .isEmpty - }.contains(true) - } - /** Determine the driver to be displayed in the list of sites. In v5.0, this has been changed to load the "framework" or "project type" instead. @@ -201,10 +173,14 @@ class ValetSite: ValetListable { if FileSystem.fileExists(path) { let decoded = try JSONDecoder().decode( ComposerJson.self, - from: String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8).data(using: .utf8)! + from: String( + contentsOf: URL(fileURLWithPath: path), + encoding: .utf8 + ).data(using: .utf8)! ) - (self.composerPhp, self.composerPhpSource) = decoded.getPhpVersion() + (self.preferredPhpVersion, + self.preferredPhpVersionSource) = decoded.getPhpVersion() self.notableComposerDependencies = decoded.getNotableDependencies() } } catch { @@ -218,8 +194,8 @@ class ValetSite: ValetListable { */ private func determineValetPhpFileInfo() { let files = [ - (".valetrc", VersionSource.valetrc), - (".valetphprc", VersionSource.valetphprc) + (".valetrc", PhpVersionSource.valetrc), + (".valetphprc", PhpVersionSource.valetphprc) ] for (suffix, source) in files { @@ -237,40 +213,50 @@ class ValetSite: ValetListable { /** Parse a Valet file (either .valetphprc or .valetrc). */ - private func handleValetFile(_ path: String, _ source: VersionSource) throws { - let contents = try String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8) + private func handleValetFile(_ path: String, _ source: PhpVersionSource) throws { + var versionString = "" + switch source { case .valetphprc: - if let version = VersionExtractor.from(contents) { - self.composerPhp = version - self.composerPhpSource = source - } + versionString = try String(contentsOf: URL(fileURLWithPath: path), encoding: .utf8) case .valetrc: - self.parseValetRcFile(path, contents) + guard let valetRc = RCFile.fromPath(path) else { return } + guard let phpField = valetRc.fields["PHP"] else { return } + versionString = phpField default: return } - } - - /** - Specifically extract PHP information from a .valetrc file. - */ - private func parseValetRcFile(_ path: String, _ text: String) { - let valetRc = RCFile(path: path, contents: text) - - guard let versionString = valetRc.fields["PHP"] else { - if valetRc.path != nil { - Log.perf("\(self.name)'s .valetrc file at '\(valetRc.path!)' lacks a 'PHP' entry.") - } - return - } if let version = VersionExtractor.from(versionString) { - self.composerPhp = version - self.composerPhpSource = .valetrc + self.preferredPhpVersion = version + self.preferredPhpVersionSource = source } } + public func evaluateCompatibility() { + if self.preferredPhpVersion == "???" { + return + } + + guard let linked = PhpEnv.phpInstall else { + self.isCompatibleWithPreferredPhpVersion = false + return + } + + // Split the composer list (on "|") to evaluate multiple constraints + // For example, for Laravel 8 projects the value is "^7.3|^8.0" + self.isCompatibleWithPreferredPhpVersion = self.preferredPhpVersion.split(separator: "|").map { string in + let origin = self.isolatedPhpVersion?.versionNumber.short + ?? linked.version.long + + let normalizedPhpVersion = string.trimmingCharacters(in: .whitespacesAndNewlines) + + return !PhpVersionNumberCollection.make(from: [origin]) + .matching(constraint: normalizedPhpVersion) + .isEmpty + }.contains(true) + } + // MARK: - File Parsing public static func isolatedVersion(_ filePath: String) -> String? { diff --git a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift index 39eb12d..d73a22a 100644 --- a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift +++ b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift @@ -42,14 +42,14 @@ struct VersionPopoverView: View { }.padding(EdgeInsets(top: 10, leading: 0, bottom: 0, trailing: 0)) } } else { - if site.composerPhpSource == .unknown { + if site.preferredPhpVersionSource == .unknown { // We don't know which PHP version is required DisclaimerView( iconName: "questionmark.circle.fill", message: "alert.unable_to_determine_is_fine".localized ) } else { - if site.composerPhpCompatibleWithLinked { + if site.isCompatibleWithPreferredPhpVersion { DisclaimerView( iconName: "checkmark.circle.fill", message: "alert.php_version_ideal".localized, @@ -73,7 +73,7 @@ struct VersionPopoverView: View { } func getTitleText() -> String { - if site.composerPhpSource == .unknown { + if site.preferredPhpVersionSource == .unknown { return "alert.composer_php_requirement.unable_to_determine".localized } @@ -87,7 +87,7 @@ struct VersionPopoverView: View { return "alert.composer_php_requirement.title".localized( "\(site.name).\(suffix)", - site.composerPhp + site.preferredPhpVersion ) } @@ -102,7 +102,7 @@ struct VersionPopoverView: View { information += "\n\n" } - information += "alert.composer_php_requirement.type.\(site.composerPhpSource.rawValue)" + information += "alert.composer_php_requirement.type.\(site.preferredPhpVersionSource.rawValue)" .localized return information From 5fa1836693c3f96fa4f7ee94d6bf58d9194d6a61 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 29 Jan 2023 14:58:09 +0100 Subject: [PATCH 024/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20services=20not=20s?= =?UTF-8?q?hutting=20down=20(#225)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Actions.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/phpmon/Common/Core/Actions.swift b/phpmon/Common/Core/Actions.swift index da87c12..86408df 100644 --- a/phpmon/Common/Core/Actions.swift +++ b/phpmon/Common/Core/Actions.swift @@ -25,9 +25,9 @@ class Actions { } public static func stopValetServices() async { - await brew("services stop \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) - await brew("services stop \(Homebrew.Formulae.nginx)", sudo: Homebrew.Formulae.nginx.elevated) - await brew("services stop \(Homebrew.Formulae.dnsmasq)", sudo: Homebrew.Formulae.dnsmasq.elevated) + await brew("services stop \(Homebrew.Formulae.php.name)", sudo: Homebrew.Formulae.php.elevated) + await brew("services stop \(Homebrew.Formulae.nginx.name)", sudo: Homebrew.Formulae.nginx.elevated) + await brew("services stop \(Homebrew.Formulae.dnsmasq.name)", sudo: Homebrew.Formulae.dnsmasq.elevated) } public static func fixHomebrewPermissions() throws { From 8fcaa34cbbb58e61b8831bf6f377f8ce3045a561 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 30 Jan 2023 13:07:37 +0100 Subject: [PATCH 025/194] =?UTF-8?q?=F0=9F=94=A7=20Extra=20CLI=20mode=20(--?= =?UTF-8?q?cli)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/PHP Monitor DEV.xcscheme | 4 +++ phpmon/Common/Core/Logger.swift | 3 +- phpmon/Common/Shell/RealShell.swift | 30 +++++++++++++++++++ phpmon/Domain/App/AppDelegate.swift | 5 ++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 33c1688..fad7a23 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -89,6 +89,10 @@ argument = "--v" isEnabled = "NO">
+ + diff --git a/phpmon/Common/Core/Logger.swift b/phpmon/Common/Core/Logger.swift index fd939c8..1b43581 100644 --- a/phpmon/Common/Core/Logger.swift +++ b/phpmon/Common/Core/Logger.swift @@ -16,7 +16,8 @@ class Log { case error = 1, warning = 2, info = 3, - performance = 4 + performance = 4, + cli = 5 public func isApplicable() -> Bool { return Log.shared.verbosity.rawValue >= self.rawValue diff --git a/phpmon/Common/Shell/RealShell.swift b/phpmon/Common/Shell/RealShell.swift index 28fd203..ed69343 100644 --- a/phpmon/Common/Shell/RealShell.swift +++ b/phpmon/Common/Shell/RealShell.swift @@ -68,6 +68,7 @@ class RealShell: ShellProtocol { let task = Process() task.launchPath = self.launchPath task.arguments = ["--noprofile", "-norc", "--login", "-c", completeCommand] + return task } @@ -113,6 +114,35 @@ class RealShell: ShellProtocol { encoding: .utf8 )! + if Log.shared.verbosity == .cli { + var args = task.arguments + let last: String = "\"" + (args?.popLast() ?? "") + "\"" + let concat = [self.launchPath] + task.arguments! + [last] + let command = concat.joined(separator: " ") + var log = """ + + <~~~~~~~~~~~~~~~~~~~~~~~ + $ \(command) + + [OUT]: + \(stdOut) + """ + + if !stdErr.isEmpty { + log.append(""" + [ERR]: + \(stdErr) + """) + } + + log.append(""" + ~~~~~~~~~~~~~~~~~~~~~~~~> + + """) + + print(log) + } + return .out(stdOut, stdErr) } diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index 05b192e..e5df2a6 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -75,6 +75,11 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele Log.info("Extra verbose mode has been activated.") } + if CommandLine.arguments.contains("--cli") { + logger.verbosity = .cli + Log.info("Extra CLI mode has been activated.") + } + Log.separator(as: .info) Log.info("PHP MONITOR by Nico Verbruggen") Log.info("Version \(App.version)") From 6115ef02ded2837d1707272c707b109740da00dc Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 30 Jan 2023 13:08:23 +0100 Subject: [PATCH 026/194] =?UTF-8?q?=E2=9C=85=20Add=20test=20to=20validate?= =?UTF-8?q?=20Valet=20version=20number=20with=20deprecations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Helpers/VersionExtractor.swift | 1 - .../Versions/ValetVersionExtractorTest.swift | 30 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/phpmon/Common/Helpers/VersionExtractor.swift b/phpmon/Common/Helpers/VersionExtractor.swift index 00e865b..324c896 100644 --- a/phpmon/Common/Helpers/VersionExtractor.swift +++ b/phpmon/Common/Helpers/VersionExtractor.swift @@ -40,5 +40,4 @@ class VersionExtractor { return nil } } - } diff --git a/tests/unit/Versions/ValetVersionExtractorTest.swift b/tests/unit/Versions/ValetVersionExtractorTest.swift index a36f334..395d2b4 100644 --- a/tests/unit/Versions/ValetVersionExtractorTest.swift +++ b/tests/unit/Versions/ValetVersionExtractorTest.swift @@ -10,6 +10,36 @@ import XCTest class ValetVersionExtractorTest: XCTestCase { + func test_can_determine_valet_version_regardless_of_deprecations() async { + let output = """ + Deprecated: Return type of Tightenco\\Collect\\Support\\Collection::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/dummy/.composer/vendor/tightenco/collect/src/Collect/Support/Collection.php on line 1789 + + Deprecated: Return type of Tightenco\\Collect\\Support\\Collection::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/dummy/.composer/vendor/tightenco/collect/src/Collect/Support/Collection.php on line 1800 + + Deprecated: Return type of Tightenco\\Collect\\Support\\Collection::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/dummy/.composer/vendor/tightenco/collect/src/Collect/Support/Collection.php on line 1812 + + Deprecated: Return type of Tightenco\\Collect\\Support\\Collection::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/dummy/.composer/vendor/tightenco/collect/src/Collect/Support/Collection.php on line 1827 + + Deprecated: Return type of Tightenco\\Collect\\Support\\Collection::count() should either be compatible with Countable::count(): int, or the #[\\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/dummy/.composer/vendor/tightenco/collect/src/Collect/Support/Collection.php on line 1768 + + Deprecated: Return type of Tightenco\\Collect\\Support\\Collection::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/dummy/.composer/vendor/tightenco/collect/src/Collect/Support/Collection.php on line 1747 + + Deprecated: Return type of Tightenco\\Collect\\Support\\Collection::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /Users/dummy/.composer/vendor/tightenco/collect/src/Collect/Support/Collection.php on line 1716 + Laravel Valet 3.3.0 + """ + + let versionString = output + .trimmingCharacters(in: .whitespacesAndNewlines) + .components(separatedBy: "Laravel Valet")[1] + .trimmingCharacters(in: .whitespaces) + + print(versionString) + + let version = try! VersionNumber.parse(VersionExtractor.from(versionString)!) + + XCTAssertEqual(version.major, 3) + } + func test_can_determine_valet_version() async { let version = await valet("--version", sudo: false) XCTAssert(version.contains("Laravel Valet 2") || version.contains("Laravel Valet 3")) From 339eafd34d3fa0e98fc57bf95078ecabd1dc927c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 30 Jan 2023 19:10:52 +0100 Subject: [PATCH 027/194] =?UTF-8?q?=E2=9C=A8=20Extra=20verbose=20logging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit You can start extra verbose logging by running: `touch ~/.config/phpmon/verbose` Once this file exists, you can find the latest log in: `~/.config/phpmon/last_session.log`. --- phpmon/Common/Core/Logger.swift | 45 ++++++++++++++++++++++------- phpmon/Common/Shell/RealShell.swift | 2 +- phpmon/Domain/App/AppDelegate.swift | 10 +++++-- 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/phpmon/Common/Core/Logger.swift b/phpmon/Common/Core/Logger.swift index 1b43581..043db2b 100644 --- a/phpmon/Common/Core/Logger.swift +++ b/phpmon/Common/Core/Logger.swift @@ -12,6 +12,10 @@ class Log { static var shared = Log() + var logFilePath = "~/.config/phpmon/last_session.log" + + var logExists = false + enum Verbosity: Int { case error = 1, warning = 2, @@ -24,42 +28,61 @@ class Log { } } - var verbosity: Verbosity = .warning + public func prepareLogFile() { + if !isRunningTests && Verbosity.cli.isApplicable() { + _ = system("mkdir -p ~/.config/phpmon 2> /dev/null") + _ = system("rm ~/.config/phpmon/last_session.log 2> /dev/null") + _ = system("touch ~/.config/phpmon/last_session.log 2> /dev/null") + self.logExists = FileSystem.fileExists(self.logFilePath) + } + } + + var verbosity: Verbosity = .warning { + didSet { + self.prepareLogFile() + } + } static func err(_ item: Any) { if Verbosity.error.isApplicable() { - print("[E] \(item)") + Log.shared.log("[E] \(item)") } } static func warn(_ item: Any) { if Verbosity.warning.isApplicable() { - print("[W] \(item)") + Log.shared.log("[W] \(item)") } } static func info(_ item: Any) { if Verbosity.info.isApplicable() { - print("\(item)") + Log.shared.log("\(item)") } } static func perf(_ item: Any) { if Verbosity.performance.isApplicable() { - print("[P] \(item)") + Log.shared.log("[P] \(item)") } } static func separator(as verbosity: Verbosity = .info) { if verbosity.isApplicable() { - print("==================================") + Log.shared.log("==================================") } } - static func line(as verbosity: Verbosity = .info) { - if verbosity.isApplicable() { - print("----------------------------------") + private func log(_ text: String) { + print(text) + + if logExists && Verbosity.cli.isApplicable() { + let logFile = URL(string: self.logFilePath.replacingTildeWithHomeDirectory)! + if let fileHandle = try? FileHandle(forWritingTo: logFile) { + fileHandle.seekToEndOfFile() + fileHandle.write(text.appending("\n").data(using: .utf8).unsafelyUnwrapped) + fileHandle.closeFile() + } } } - -} +} \ No newline at end of file diff --git a/phpmon/Common/Shell/RealShell.swift b/phpmon/Common/Shell/RealShell.swift index ed69343..1ece815 100644 --- a/phpmon/Common/Shell/RealShell.swift +++ b/phpmon/Common/Shell/RealShell.swift @@ -140,7 +140,7 @@ class RealShell: ShellProtocol { """) - print(log) + Log.info(log) } return .out(stdOut, stdErr) diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index e5df2a6..fc72c1f 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -61,10 +61,9 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele When the application initializes, create all singletons. */ override init() { - logger.verbosity = .info - #if DEBUG logger.verbosity = .performance + if let profile = CommandLine.arguments.first(where: { $0.matches(pattern: "--configuration:*") }) { Self.initializeTestingProfile(profile.replacingOccurrences(of: "--configuration:", with: "")) } @@ -77,7 +76,12 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele if CommandLine.arguments.contains("--cli") { logger.verbosity = .cli - Log.info("Extra CLI mode has been activated.") + Log.info("Extra CLI mode has been activated via --cli flag.") + } + + if FileSystem.fileExists("~/.config/phpmon/verbose") { + logger.verbosity = .cli + Log.info("Extra CLI mode is on (`~/.config/phpmon/verbose` exists).") } Log.separator(as: .info) From ff2eff2a75e11df9d14091cbc378ee26fcddd0b5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 30 Jan 2023 19:11:47 +0100 Subject: [PATCH 028/194] =?UTF-8?q?=F0=9F=91=8C=20Remove=20unneeded=20prin?= =?UTF-8?q?t()=20statement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unit/Versions/ValetVersionExtractorTest.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/unit/Versions/ValetVersionExtractorTest.swift b/tests/unit/Versions/ValetVersionExtractorTest.swift index 395d2b4..769e692 100644 --- a/tests/unit/Versions/ValetVersionExtractorTest.swift +++ b/tests/unit/Versions/ValetVersionExtractorTest.swift @@ -33,8 +33,6 @@ class ValetVersionExtractorTest: XCTestCase { .components(separatedBy: "Laravel Valet")[1] .trimmingCharacters(in: .whitespaces) - print(versionString) - let version = try! VersionNumber.parse(VersionExtractor.from(versionString)!) XCTAssertEqual(version.major, 3) From 6d89f94c92de436d4b1556e13f9dc8a4a7804924 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 30 Jan 2023 19:19:01 +0100 Subject: [PATCH 029/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20version=20parsing?= =?UTF-8?q?=20(#227)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/Startup.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 24d34d5..c3e7ccc 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -256,7 +256,7 @@ class Startup { .components(separatedBy: "Laravel Valet")[1] .trimmingCharacters(in: .whitespaces) // Extract the version number - Valet.shared.version = try! VersionNumber.parse(VersionExtractor.from(output)!) + Valet.shared.version = try! VersionNumber.parse(VersionExtractor.from(versionString)!) // Get the actual version return Valet.shared.version == nil }, From 3ceded3456b1a2e0e31b86059ec2cc9b958dcfb3 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 31 Jan 2023 17:32:31 +0100 Subject: [PATCH 030/194] =?UTF-8?q?=F0=9F=90=9B=20Avoid=20duplicate=20verb?= =?UTF-8?q?ose=20mode=20output?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Shell/RealShell.swift | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/phpmon/Common/Shell/RealShell.swift b/phpmon/Common/Shell/RealShell.swift index 1ece815..88ed706 100644 --- a/phpmon/Common/Shell/RealShell.swift +++ b/phpmon/Common/Shell/RealShell.swift @@ -115,14 +115,12 @@ class RealShell: ShellProtocol { )! if Log.shared.verbosity == .cli { - var args = task.arguments - let last: String = "\"" + (args?.popLast() ?? "") + "\"" - let concat = [self.launchPath] + task.arguments! + [last] - let command = concat.joined(separator: " ") + var args = task.arguments ?? [] + let last = "\"" + (args.popLast() ?? "") + "\"" var log = """ <~~~~~~~~~~~~~~~~~~~~~~~ - $ \(command) + $ \(([self.launchPath] + args + [last]).joined(separator: " ")) [OUT]: \(stdOut) From b39b4dc58bd610f7b53e3e73395a58d0b3f85e20 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 31 Jan 2023 17:32:31 +0100 Subject: [PATCH 031/194] =?UTF-8?q?=F0=9F=90=9B=20Avoid=20duplicate=20verb?= =?UTF-8?q?ose=20mode=20output?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Shell/RealShell.swift | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/phpmon/Common/Shell/RealShell.swift b/phpmon/Common/Shell/RealShell.swift index 1ece815..88ed706 100644 --- a/phpmon/Common/Shell/RealShell.swift +++ b/phpmon/Common/Shell/RealShell.swift @@ -115,14 +115,12 @@ class RealShell: ShellProtocol { )! if Log.shared.verbosity == .cli { - var args = task.arguments - let last: String = "\"" + (args?.popLast() ?? "") + "\"" - let concat = [self.launchPath] + task.arguments! + [last] - let command = concat.joined(separator: " ") + var args = task.arguments ?? [] + let last = "\"" + (args.popLast() ?? "") + "\"" var log = """ <~~~~~~~~~~~~~~~~~~~~~~~ - $ \(command) + $ \(([self.launchPath] + args + [last]).joined(separator: " ")) [OUT]: \(stdOut) From 7be6a335dfe0ee62c945e52b97563e788488e56f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 31 Jan 2023 18:06:47 +0100 Subject: [PATCH 032/194] =?UTF-8?q?=F0=9F=91=8C=20Add=20`system=5Fquiet`?= =?UTF-8?q?=20helper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/PHP Monitor DEV.xcscheme | 2 +- phpmon/Common/Core/Logger.swift | 6 +++--- phpmon/Common/Helpers/System.swift | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 403e4f6..db36ef9 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -91,7 +91,7 @@ + isEnabled = "NO"> /dev/null") - _ = system("rm ~/.config/phpmon/last_session.log 2> /dev/null") - _ = system("touch ~/.config/phpmon/last_session.log 2> /dev/null") + system_quiet("mkdir -p ~/.config/phpmon 2> /dev/null") + system_quiet("rm ~/.config/phpmon/last_session.log 2> /dev/null") + system_quiet("touch ~/.config/phpmon/last_session.log 2> /dev/null") self.logExists = FileSystem.fileExists(self.logFilePath) } } diff --git a/phpmon/Common/Helpers/System.swift b/phpmon/Common/Helpers/System.swift index 332bba2..e12e546 100644 --- a/phpmon/Common/Helpers/System.swift +++ b/phpmon/Common/Helpers/System.swift @@ -26,3 +26,21 @@ public func system(_ command: String) -> String { return output } + +/** + Run a simple blocking Shell command on the user's own system. + This variation does not return the output. + Avoid using this method in favor of the fakeable Shell class unless needed for express system operations. + */ +public func system_quiet(_ command: String) { + let task = Process() + task.launchPath = "/bin/sh" + task.arguments = ["-c", command] + + let pipe = Pipe() + task.standardOutput = pipe + task.launch() + + _ = pipe.fileHandleForReading.readDataToEndOfFile() + return +} From c609022c9b38e1ec2875fc41c607576212f1c4f5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 1 Feb 2023 18:23:59 +0100 Subject: [PATCH 033/194] =?UTF-8?q?=E2=9C=A8=20Add=20target=20and=20app=20?= =?UTF-8?q?for=20self-updater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 207 +++++++++++++++++- .../xcschemes/PHP Monitor Updater.xcscheme | 78 +++++++ assets/affinity/icon-updater.afdesign | Bin 0 -> 118345 bytes phpmon-updater/AppDelegate.swift | 24 ++ .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 68 ++++++ .../AppIcon.appiconset/icon_128x128.png | Bin 0 -> 12627 bytes .../AppIcon.appiconset/icon_128x128@2x.png | Bin 0 -> 32843 bytes .../AppIcon.appiconset/icon_16x16.png | Bin 0 -> 807 bytes .../AppIcon.appiconset/icon_16x16@2x.png | Bin 0 -> 1901 bytes .../AppIcon.appiconset/icon_256x256.png | Bin 0 -> 32843 bytes .../AppIcon.appiconset/icon_256x256@2x.png | Bin 0 -> 95711 bytes .../AppIcon.appiconset/icon_32x32.png | Bin 0 -> 1901 bytes .../AppIcon.appiconset/icon_32x32@2x.png | Bin 0 -> 4833 bytes .../AppIcon.appiconset/icon_512x512.png | Bin 0 -> 95711 bytes .../AppIcon.appiconset/icon_512x512@2x.png | Bin 0 -> 297957 bytes phpmon-updater/Assets.xcassets/Contents.json | 6 + phpmon-updater/main.swift | 17 ++ phpmon-updater/phpmon-updater.entitlements | 5 + phpmon/Domain/App/AppDelegate.swift | 8 + phpmon/Domain/Notice/BetterAlertVC.swift | 2 +- phpmon/Info.plist | 2 +- 22 files changed, 425 insertions(+), 3 deletions(-) create mode 100644 PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Updater.xcscheme create mode 100644 assets/affinity/icon-updater.afdesign create mode 100644 phpmon-updater/AppDelegate.swift create mode 100644 phpmon-updater/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_16x16.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_256x256.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_32x32.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_512x512.png create mode 100644 phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png create mode 100644 phpmon-updater/Assets.xcassets/Contents.json create mode 100644 phpmon-updater/main.swift create mode 100644 phpmon-updater/phpmon-updater.entitlements diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 5fb5846..ec1f2f5 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -49,6 +49,9 @@ C4068CA827B07A1300544CD5 /* SelectPreferenceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4068CA627B07A1300544CD5 /* SelectPreferenceView.swift */; }; C4068CAA27B0890D00544CD5 /* MenuBarIcons.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4068CA927B0890D00544CD5 /* MenuBarIcons.swift */; }; C4068CAB27B0890D00544CD5 /* MenuBarIcons.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4068CA927B0890D00544CD5 /* MenuBarIcons.swift */; }; + C406A5F3298AD2CE00B5B85A /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C406A5F2298AD2CE00B5B85A /* main.swift */; }; + C406A5F7298AD2CF00B5B85A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C406A5F6298AD2CF00B5B85A /* Assets.xcassets */; }; + C406A602298AD50D00B5B85A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C406A601298AD50D00B5B85A /* AppDelegate.swift */; }; C4080FF627BD8C6400BF2C6B /* BetterAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */; }; C4080FF727BD8C6400BF2C6B /* BetterAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */; }; C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF927BD956700BF2C6B /* BetterAlertVC.swift */; }; @@ -757,6 +760,11 @@ C4068CA327B0780A00544CD5 /* CheckboxPreferenceView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CheckboxPreferenceView.xib; sourceTree = ""; }; C4068CA627B07A1300544CD5 /* SelectPreferenceView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectPreferenceView.swift; sourceTree = ""; }; C4068CA927B0890D00544CD5 /* MenuBarIcons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarIcons.swift; sourceTree = ""; }; + C406A5F0298AD2CE00B5B85A /* PHP Monitor Updater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "PHP Monitor Updater.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + C406A5F2298AD2CE00B5B85A /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; + C406A5F6298AD2CF00B5B85A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "phpmon-updater.entitlements"; sourceTree = ""; }; + C406A601298AD50D00B5B85A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BetterAlert.swift; sourceTree = ""; }; C4080FF927BD956700BF2C6B /* BetterAlertVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BetterAlertVC.swift; sourceTree = ""; }; C40C5C9B2846A40600E28255 /* Preset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preset.swift; sourceTree = ""; }; @@ -956,6 +964,13 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + C406A5ED298AD2CE00B5B85A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; C41C1B3022B0097F00E7CF16 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1081,6 +1096,17 @@ path = IAP; sourceTree = ""; }; + C406A5F1298AD2CE00B5B85A /* phpmon-updater */ = { + isa = PBXGroup; + children = ( + C406A601298AD50D00B5B85A /* AppDelegate.swift */, + C406A5F2298AD2CE00B5B85A /* main.swift */, + C406A5F6298AD2CF00B5B85A /* Assets.xcassets */, + C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */, + ); + path = "phpmon-updater"; + sourceTree = ""; + }; C4080FF827BD955900BF2C6B /* Notice */ = { isa = PBXGroup; children = ( @@ -1145,6 +1171,7 @@ C4F5FBCC28218C93001065C5 /* .swiftlint.yml */, C4E713572570151400007428 /* docs */, C41C1B3522B0097F00E7CF16 /* phpmon */, + C406A5F1298AD2CE00B5B85A /* phpmon-updater */, C471E79628F9B4260021E251 /* tests */, C41C1B3422B0097F00E7CF16 /* Products */, C4D309E72770EF2F00958BCF /* Frameworks */, @@ -1158,6 +1185,7 @@ C4F7807925D7F84B000DBC97 /* Unit Tests.xctest */, C471E7AD28F9B4940021E251 /* Feature Tests.xctest */, C471E7BC28F9B90F0021E251 /* UI Tests.xctest */, + C406A5F0298AD2CE00B5B85A /* PHP Monitor Updater.app */, ); name = Products; sourceTree = ""; @@ -1777,6 +1805,23 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + C406A5EF298AD2CE00B5B85A /* PHP Monitor Updater */ = { + isa = PBXNativeTarget; + buildConfigurationList = C406A5FC298AD2CF00B5B85A /* Build configuration list for PBXNativeTarget "PHP Monitor Updater" */; + buildPhases = ( + C406A5EC298AD2CE00B5B85A /* Sources */, + C406A5ED298AD2CE00B5B85A /* Frameworks */, + C406A5EE298AD2CE00B5B85A /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "PHP Monitor Updater"; + productName = "PHP Monitor Updater"; + productReference = C406A5F0298AD2CE00B5B85A /* PHP Monitor Updater.app */; + productType = "com.apple.product-type.application"; + }; C41C1B3222B0097F00E7CF16 /* PHP Monitor */ = { isa = PBXNativeTarget; buildConfigurationList = C41C1B4322B0098000E7CF16 /* Build configuration list for PBXNativeTarget "PHP Monitor" */; @@ -1859,10 +1904,13 @@ C41C1B2B22B0097F00E7CF16 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1400; + LastSwiftUpdateCheck = 1420; LastUpgradeCheck = 1400; ORGANIZATIONNAME = "Nico Verbruggen"; TargetAttributes = { + C406A5EF298AD2CE00B5B85A = { + CreatedOnToolsVersion = 14.2; + }; C41C1B3222B0097F00E7CF16 = { CreatedOnToolsVersion = 10.2.1; }; @@ -1894,6 +1942,7 @@ projectRoot = ""; targets = ( C41C1B3222B0097F00E7CF16 /* PHP Monitor */, + C406A5EF298AD2CE00B5B85A /* PHP Monitor Updater */, C4F7807825D7F84B000DBC97 /* Unit Tests */, C471E7AC28F9B4940021E251 /* Feature Tests */, C471E7BB28F9B90F0021E251 /* UI Tests */, @@ -1902,6 +1951,14 @@ /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + C406A5EE298AD2CE00B5B85A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C406A5F7298AD2CF00B5B85A /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C41C1B3122B0097F00E7CF16 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1994,6 +2051,15 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + C406A5EC298AD2CE00B5B85A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C406A602298AD50D00B5B85A /* AppDelegate.swift in Sources */, + C406A5F3298AD2CE00B5B85A /* main.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; C41C1B2F22B0097F00E7CF16 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2713,6 +2779,134 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + C406A5FD298AD2CF00B5B85A /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + C406A5FE298AD2CF00B5B85A /* Debug.Dev */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug.Dev; + }; + C406A5FF298AD2CF00B5B85A /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + C406A600298AD2CF00B5B85A /* Release.Dev */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Release.Dev; + }; C41C1B4122B0098000E7CF16 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3292,6 +3486,17 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + C406A5FC298AD2CF00B5B85A /* Build configuration list for PBXNativeTarget "PHP Monitor Updater" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C406A5FD298AD2CF00B5B85A /* Debug */, + C406A5FE298AD2CF00B5B85A /* Debug.Dev */, + C406A5FF298AD2CF00B5B85A /* Release */, + C406A600298AD2CF00B5B85A /* Release.Dev */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; C41C1B2E22B0097F00E7CF16 /* Build configuration list for PBXProject "PHP Monitor" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Updater.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Updater.xcscheme new file mode 100644 index 0000000..f28c4b8 --- /dev/null +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Updater.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/affinity/icon-updater.afdesign b/assets/affinity/icon-updater.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..0ef708e479d37cad45b53165cb5c9693f9f872df GIT binary patch literal 118345 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

+|d!dKQj`!f%C+;0H!_HgDMbpzaK_F%)nYwR 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 Bool { + return true + } +} diff --git a/phpmon-updater/Assets.xcassets/AccentColor.colorset/Contents.json b/phpmon-updater/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000..eb87897 --- /dev/null +++ b/phpmon-updater/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/Contents.json b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..64dc11e --- /dev/null +++ b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "filename" : "icon_16x16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "icon_16x16@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "icon_32x32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "icon_32x32@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "icon_128x128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "icon_128x128@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "icon_256x256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "icon_256x256@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "icon_512x512.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "icon_512x512@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bc3a100b26a795c4b35c151ed259136b13471a GIT binary patch literal 12627 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 literal 0 HcmV?d00001 diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cafc8ebf3591937c0af380de9b49afc8b9aa4437 GIT binary patch literal 1901 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 literal 0 HcmV?d00001 diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_32x32.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..cafc8ebf3591937c0af380de9b49afc8b9aa4437 GIT binary patch literal 1901 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 literal 0 HcmV?d00001 diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c656a34c609d095d622a09c89120a1df68cfd85a GIT binary patch literal 297957 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≦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

2zK)b;guD|v+~_s92O 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 + + + + diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index fc72c1f..b8a93af 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -69,6 +69,14 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele } #endif + // swiftlint:disable line_length + let url = NSURL(fileURLWithPath: "/Users/nicoverbruggen/Library/Developer/Xcode/DerivedData/PHP_Monitor-fqtxcemylaleoneoclkzipwmyxxw/Build/Products/Debug/PHP Monitor Self-Updater", isDirectory: true) as URL + let configuration = NSWorkspace.OpenConfiguration() + NSWorkspace.shared.openApplication(at: url, + configuration: configuration) + + // exit(1) + if CommandLine.arguments.contains("--v") { logger.verbosity = .performance Log.info("Extra verbose mode has been activated.") diff --git a/phpmon/Domain/Notice/BetterAlertVC.swift b/phpmon/Domain/Notice/BetterAlertVC.swift index a1d5251..d3b2206 100644 --- a/phpmon/Domain/Notice/BetterAlertVC.swift +++ b/phpmon/Domain/Notice/BetterAlertVC.swift @@ -47,7 +47,7 @@ class BetterAlertVC: NSViewController { } deinit { - Log.perf("deinit: \(String(describing: self)).\(#function)") + // Log.perf("deinit: \(String(describing: self)).\(#function)") } // MARK: Outlet Actions diff --git a/phpmon/Info.plist b/phpmon/Info.plist index 7918ee3..fa7a4d3 100644 --- a/phpmon/Info.plist +++ b/phpmon/Info.plist @@ -40,7 +40,7 @@ LSUIElement NSHumanReadableCopyright - Copyright © 2019-2022 Nico Verbruggen. All rights reserved. + Copyright © 2019-2023 Nico Verbruggen. All rights reserved. NSMainStoryboardFile Main NSPrincipalClass From 92509b5a84740d05894275b7e5735e77bcbdf15f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 1 Feb 2023 19:06:59 +0100 Subject: [PATCH 034/194] =?UTF-8?q?=F0=9F=8F=97=20Rename=20Affinity=20asse?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{icon_se.afdesign => icon-dev.afdesign} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename assets/affinity/{icon_se.afdesign => icon-dev.afdesign} (100%) diff --git a/assets/affinity/icon_se.afdesign b/assets/affinity/icon-dev.afdesign similarity index 100% rename from assets/affinity/icon_se.afdesign rename to assets/affinity/icon-dev.afdesign From 8fa270fd5422c6c9314d130d4173bc08a926af6c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 1 Feb 2023 19:22:20 +0100 Subject: [PATCH 035/194] =?UTF-8?q?=F0=9F=8F=97=20Allow=20self-updater=20t?= =?UTF-8?q?o=20launch=20PHP=20Monitor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 24 +++++------ ...heme => PHP Monitor Self-Updater.xcscheme} | 12 +++--- phpmon-updater/AppDelegate.swift | 43 ++++++++++++++++++- 3 files changed, 59 insertions(+), 20 deletions(-) rename PHP Monitor.xcodeproj/xcshareddata/xcschemes/{PHP Monitor Updater.xcscheme => PHP Monitor Self-Updater.xcscheme} (88%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index ec1f2f5..7e01af3 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -760,7 +760,7 @@ C4068CA327B0780A00544CD5 /* CheckboxPreferenceView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = CheckboxPreferenceView.xib; sourceTree = ""; }; C4068CA627B07A1300544CD5 /* SelectPreferenceView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectPreferenceView.swift; sourceTree = ""; }; C4068CA927B0890D00544CD5 /* MenuBarIcons.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuBarIcons.swift; sourceTree = ""; }; - C406A5F0298AD2CE00B5B85A /* PHP Monitor Updater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "PHP Monitor Updater.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + C406A5F0298AD2CE00B5B85A /* PHP Monitor Self-Updater.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "PHP Monitor Self-Updater.app"; sourceTree = BUILT_PRODUCTS_DIR; }; C406A5F2298AD2CE00B5B85A /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; C406A5F6298AD2CF00B5B85A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "phpmon-updater.entitlements"; sourceTree = ""; }; @@ -1185,7 +1185,7 @@ C4F7807925D7F84B000DBC97 /* Unit Tests.xctest */, C471E7AD28F9B4940021E251 /* Feature Tests.xctest */, C471E7BC28F9B90F0021E251 /* UI Tests.xctest */, - C406A5F0298AD2CE00B5B85A /* PHP Monitor Updater.app */, + C406A5F0298AD2CE00B5B85A /* PHP Monitor Self-Updater.app */, ); name = Products; sourceTree = ""; @@ -1805,9 +1805,9 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ - C406A5EF298AD2CE00B5B85A /* PHP Monitor Updater */ = { + C406A5EF298AD2CE00B5B85A /* PHP Monitor Self-Updater */ = { isa = PBXNativeTarget; - buildConfigurationList = C406A5FC298AD2CF00B5B85A /* Build configuration list for PBXNativeTarget "PHP Monitor Updater" */; + buildConfigurationList = C406A5FC298AD2CF00B5B85A /* Build configuration list for PBXNativeTarget "PHP Monitor Self-Updater" */; buildPhases = ( C406A5EC298AD2CE00B5B85A /* Sources */, C406A5ED298AD2CE00B5B85A /* Frameworks */, @@ -1817,9 +1817,9 @@ ); dependencies = ( ); - name = "PHP Monitor Updater"; + name = "PHP Monitor Self-Updater"; productName = "PHP Monitor Updater"; - productReference = C406A5F0298AD2CE00B5B85A /* PHP Monitor Updater.app */; + productReference = C406A5F0298AD2CE00B5B85A /* PHP Monitor Self-Updater.app */; productType = "com.apple.product-type.application"; }; C41C1B3222B0097F00E7CF16 /* PHP Monitor */ = { @@ -1942,7 +1942,7 @@ projectRoot = ""; targets = ( C41C1B3222B0097F00E7CF16 /* PHP Monitor */, - C406A5EF298AD2CE00B5B85A /* PHP Monitor Updater */, + C406A5EF298AD2CE00B5B85A /* PHP Monitor Self-Updater */, C4F7807825D7F84B000DBC97 /* Unit Tests */, C471E7AC28F9B4940021E251 /* Feature Tests */, C471E7BB28F9B90F0021E251 /* UI Tests */, @@ -2794,7 +2794,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Self-Updater"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; INFOPLIST_KEY_NSPrincipalClass = NSApplication; @@ -2826,7 +2826,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Self-Updater"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; INFOPLIST_KEY_NSPrincipalClass = NSApplication; @@ -2858,7 +2858,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Self-Updater"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; INFOPLIST_KEY_NSPrincipalClass = NSApplication; @@ -2890,7 +2890,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Updater"; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Self-Updater"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; INFOPLIST_KEY_NSPrincipalClass = NSApplication; @@ -3486,7 +3486,7 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - C406A5FC298AD2CF00B5B85A /* Build configuration list for PBXNativeTarget "PHP Monitor Updater" */ = { + C406A5FC298AD2CF00B5B85A /* Build configuration list for PBXNativeTarget "PHP Monitor Self-Updater" */ = { isa = XCConfigurationList; buildConfigurations = ( C406A5FD298AD2CF00B5B85A /* Debug */, diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Updater.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme similarity index 88% rename from PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Updater.xcscheme rename to PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme index f28c4b8..67f26b9 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Updater.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme @@ -15,8 +15,8 @@ @@ -45,8 +45,8 @@ @@ -62,8 +62,8 @@ diff --git a/phpmon-updater/AppDelegate.swift b/phpmon-updater/AppDelegate.swift index f0548b0..5f07354 100644 --- a/phpmon-updater/AppDelegate.swift +++ b/phpmon-updater/AppDelegate.swift @@ -10,8 +10,28 @@ import Cocoa class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(_ aNotification: Notification) { - print("PHP MONITOR UPDATER by Nico Verbruggen") - print("Checking if contained within PHP Monitor.app...") + print("PHP MONITOR SELF-UPDATER by Nico Verbruggen") + let path = "~/config/phpmon/updater/phpmon.zip" + .replacingOccurrences(of: "~", with: NSHomeDirectory()) + + print("Checking path: \(path)") + + if !FileManager.default.fileExists(atPath: path) { + print("The update has not been downloaded. Sadly, that means we will not update!") + + showAlert(title: "The archive containing the zip appears to be missing.", + description: "PHP Monitor will not be updated, but we will restart the app for you.") + + if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor.app") { + restartPhpMon(dev: false) + } + else if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor DEV.app") { + restartPhpMon(dev: true) + } + else { + exit(1) + } + } } func applicationWillTerminate(_ aNotification: Notification) { @@ -21,4 +41,23 @@ class AppDelegate: NSObject, NSApplicationDelegate { func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { return true } + + private func restartPhpMon(dev: Bool) { + let path = dev ? "/Applications/PHP Monitor DEV.app" : "/Applications/PHP Monitor.app" + let url = NSURL(fileURLWithPath: path, isDirectory: true) as URL + let configuration = NSWorkspace.OpenConfiguration() + NSWorkspace.shared.openApplication(at: url, configuration: configuration) { app, error in + print(app) + exit(0) + } + } + + private func showAlert(title: String, description: String) { + let alert = NSAlert() + alert.messageText = title + alert.informativeText = description + alert.addButton(withTitle: "OK") + alert.alertStyle = .critical + alert.runModal() + } } From 173206bed9933bef8993628d6cd410880fadeb59 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 1 Feb 2023 19:31:04 +0100 Subject: [PATCH 036/194] =?UTF-8?q?=F0=9F=8F=97=20Let=20self-updater=20qui?= =?UTF-8?q?t=20PHP=20Monitor=20first?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon-updater/AppDelegate.swift | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/phpmon-updater/AppDelegate.swift b/phpmon-updater/AppDelegate.swift index 5f07354..8aa4380 100644 --- a/phpmon-updater/AppDelegate.swift +++ b/phpmon-updater/AppDelegate.swift @@ -10,12 +10,20 @@ import Cocoa class AppDelegate: NSObject, NSApplicationDelegate { func applicationDidFinishLaunching(_ aNotification: Notification) { + print("PHP MONITOR SELF-UPDATER by Nico Verbruggen") + + // Figure out where the updater would like to find the let path = "~/config/phpmon/updater/phpmon.zip" .replacingOccurrences(of: "~", with: NSHomeDirectory()) + // Terminating all instances of PHP Monitor first + terminatePhpMon() + + // Checking if the updated file exists print("Checking path: \(path)") + // If the file does not exist, exit gracefully if !FileManager.default.fileExists(atPath: path) { print("The update has not been downloaded. Sadly, that means we will not update!") @@ -42,12 +50,28 @@ class AppDelegate: NSObject, NSApplicationDelegate { return true } + private func terminatePhpMon() { + let runningApplications = NSWorkspace.shared.runningApplications + + let ids = [ + "com.nicoverbruggen.phpmon.dev", + "com.nicoverbruggen.phpmon" + ] + + for id in ids { + if let phpmon = runningApplications + .first(where: { (application) in return application.bundleIdentifier == id }) { + phpmon.terminate() + } + } + } + private func restartPhpMon(dev: Bool) { let path = dev ? "/Applications/PHP Monitor DEV.app" : "/Applications/PHP Monitor.app" let url = NSURL(fileURLWithPath: path, isDirectory: true) as URL let configuration = NSWorkspace.OpenConfiguration() - NSWorkspace.shared.openApplication(at: url, configuration: configuration) { app, error in - print(app) + NSWorkspace.shared.openApplication(at: url, configuration: configuration) { phpmon, error in + // Once we've opened PHP Monitor again... quit the updater exit(0) } } From 8df126a7b0e7929b730decfe2a540005571fa756 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 1 Feb 2023 20:12:04 +0100 Subject: [PATCH 037/194] =?UTF-8?q?=F0=9F=8F=97=20Working=20proof-of-conce?= =?UTF-8?q?pt=20updater=20if=20zip=20exists?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 2 ++ phpmon-updater/AppDelegate.swift | 20 ++++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 7e01af3..6ddebac 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -99,6 +99,7 @@ C41CD0292628D8EE0065BBED /* GlobalKeybindPreference.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41CD0282628D8EE0065BBED /* GlobalKeybindPreference.swift */; }; C41E871A2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41E87192763D42300161EE0 /* DomainListVC+ContextMenu.swift */; }; C41E871B2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41E87192763D42300161EE0 /* DomainListVC+ContextMenu.swift */; }; + C41F3D08298AED0D0042ACBF /* System.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D3660A29113F20006BD146 /* System.swift */; }; C4205A7E27F4D21800191A39 /* ValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4205A7D27F4D21800191A39 /* ValetProxy.swift */; }; C4205A7F27F4D21800191A39 /* ValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4205A7D27F4D21800191A39 /* ValetProxy.swift */; }; C422DDAA28A2C49900CEAC97 /* WarningListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C422DDA928A2C49900CEAC97 /* WarningListView.swift */; }; @@ -2056,6 +2057,7 @@ buildActionMask = 2147483647; files = ( C406A602298AD50D00B5B85A /* AppDelegate.swift in Sources */, + C41F3D08298AED0D0042ACBF /* System.swift in Sources */, C406A5F3298AD2CE00B5B85A /* main.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/phpmon-updater/AppDelegate.swift b/phpmon-updater/AppDelegate.swift index 8aa4380..b1207cb 100644 --- a/phpmon-updater/AppDelegate.swift +++ b/phpmon-updater/AppDelegate.swift @@ -14,7 +14,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { print("PHP MONITOR SELF-UPDATER by Nico Verbruggen") // Figure out where the updater would like to find the - let path = "~/config/phpmon/updater/phpmon.zip" + let path = "~/.config/phpmon/updater/phpmon.zip" .replacingOccurrences(of: "~", with: NSHomeDirectory()) // Terminating all instances of PHP Monitor first @@ -25,7 +25,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { // If the file does not exist, exit gracefully if !FileManager.default.fileExists(atPath: path) { - print("The update has not been downloaded. Sadly, that means we will not update!") + print("The update has not been downloaded. Sadly, that means that PHP Monitor cannot not updated!") showAlert(title: "The archive containing the zip appears to be missing.", description: "PHP Monitor will not be updated, but we will restart the app for you.") @@ -40,6 +40,12 @@ class AppDelegate: NSObject, NSApplicationDelegate { exit(1) } } + + // We made it! + install(zipPath: path) + + // Restart PHP Monitor, this will also close the updater + restartPhpMon(dev: false) } func applicationWillTerminate(_ aNotification: Notification) { @@ -50,6 +56,16 @@ class AppDelegate: NSObject, NSApplicationDelegate { return true } + private func install(zipPath: String) { + _ = system("rm -rf ~/.config/phpmon/updater/output") + _ = system("mkdir -p ~/.config/phpmon/updater/output") + _ = system("unzip \(zipPath) -d ~/.config/phpmon/updater/output") + _ = system("rm -rf \"/Applications/PHP Monitor.app\"") + let command = "mv \"~/.config/phpmon/updater/output/PHP Monitor.app\" \"/Applications/PHP Monitor.app\"" + .replacingOccurrences(of: "~", with: NSHomeDirectory()) + _ = system(command) + } + private func terminatePhpMon() { let runningApplications = NSWorkspace.shared.runningApplications From 57c90c216f6fba5b6b1a44d7e7460a9ce4962613 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 00:47:53 +0100 Subject: [PATCH 038/194] =?UTF-8?q?=F0=9F=8F=97=20Download=20and=20validat?= =?UTF-8?q?e=20checksum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon-updater/AppDelegate.swift | 108 ++++++++++++++++++++++++------- 1 file changed, 83 insertions(+), 25 deletions(-) diff --git a/phpmon-updater/AppDelegate.swift b/phpmon-updater/AppDelegate.swift index b1207cb..6b42393 100644 --- a/phpmon-updater/AppDelegate.swift +++ b/phpmon-updater/AppDelegate.swift @@ -9,26 +9,61 @@ import Cocoa class AppDelegate: NSObject, NSApplicationDelegate { + + var updaterDirectory: String = "" + func applicationDidFinishLaunching(_ aNotification: Notification) { print("PHP MONITOR SELF-UPDATER by Nico Verbruggen") - // Figure out where the updater would like to find the - let path = "~/.config/phpmon/updater/phpmon.zip" + self.updaterDirectory = "~/.config/phpmon/updater" .replacingOccurrences(of: "~", with: NSHomeDirectory()) + print("Updater directory set to: \(self.updaterDirectory)") + + // Download the latest file + let zipPath = self.download( + // zipUrl: "https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon.zip", + // sha256: "654dd1df64ae32b1e3b9ebed7f6d89d04ed374b0b4d6732704e6df190169214f" + + zipUrl: "https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon-dev.zip", + sha256: "1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a" + ) + // Terminating all instances of PHP Monitor first terminatePhpMon() - // Checking if the updated file exists - print("Checking path: \(path)") + // We made it! + install(zipPath: zipPath) - // If the file does not exist, exit gracefully - if !FileManager.default.fileExists(atPath: path) { + // Restart PHP Monitor, this will also close the updater + restartPhpMon(dev: zipPath.contains("dev")) + } + + func applicationWillTerminate(_ aNotification: Notification) { + exit(1) + } + + func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return false + } + + private func download(zipUrl: String, sha256: String) -> String { + // Remove all zips + system_quiet("rm -rf \(updaterDirectory)/*.zip") + + // Download the file (and follow redirects + no output on failure) + system_quiet("cd \(updaterDirectory) && curl \(zipUrl) -fLO") + + // Identify the downloaded file + let filename = system("cd \(updaterDirectory) && ls | grep .zip") + .trimmingCharacters(in: .whitespacesAndNewlines) + + if filename.isEmpty { print("The update has not been downloaded. Sadly, that means that PHP Monitor cannot not updated!") - showAlert(title: "The archive containing the zip appears to be missing.", - description: "PHP Monitor will not be updated, but we will restart the app for you.") + showAlert(title: "The update was not downloaded.", + description: "PHP Monitor will not be updated, but we will restart the app for you. You may not be connected to the internet or the server may be encountering issues. Please try again later!") if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor.app") { restartPhpMon(dev: false) @@ -41,29 +76,52 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } - // We made it! - install(zipPath: path) + // Calculate the checksum for the downloaded file + let checksum = system("openssl dgst -sha256 \(updaterDirectory)/\(filename) | awk '{print $NF}'") + .trimmingCharacters(in: .whitespacesAndNewlines) - // Restart PHP Monitor, this will also close the updater - restartPhpMon(dev: false) - } + print(""" + Comparing checksums... + Expected SHA256: \(sha256) + Actual SHA256: \(checksum) + """) - func applicationWillTerminate(_ aNotification: Notification) { - exit(1) - } + // Make sure the checksum matches before we do anything with the file + if checksum != sha256 { + print("The checksums failed to match. Cancelling!") + showAlert( + title: "The downloaded update failed checksum validation", + description: "Please try again! If this issue persists, there may be an issue with the server and I do not recommend upgrading." + ) + exit(0) + } - func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { - return true + return "\(updaterDirectory)/\(filename)" } private func install(zipPath: String) { - _ = system("rm -rf ~/.config/phpmon/updater/output") - _ = system("mkdir -p ~/.config/phpmon/updater/output") - _ = system("unzip \(zipPath) -d ~/.config/phpmon/updater/output") - _ = system("rm -rf \"/Applications/PHP Monitor.app\"") - let command = "mv \"~/.config/phpmon/updater/output/PHP Monitor.app\" \"/Applications/PHP Monitor.app\"" - .replacingOccurrences(of: "~", with: NSHomeDirectory()) - _ = system(command) + system_quiet("rm -rf \(updaterDirectory)/output") + system_quiet("mkdir -p \(updaterDirectory)/output") + + var isDirectory: ObjCBool = true + if !FileManager.default.fileExists(atPath: "\(updaterDirectory)/output", isDirectory: &isDirectory) { + showAlert( + title: "The updater directory is missing", + description: "The automatic updater will quit. Make sure that ` ~/.config/phpmon/updater` is writeable." + ) + exit(0) + } + + system_quiet("unzip \(zipPath) -d \(updaterDirectory)/output") + + let expectedAppName = zipPath.contains("dev") + ? "PHP Monitor DEV.app" + : "PHP Monitor.app" + + print("Removing \(expectedAppName) before replacing...") + + system_quiet("rm -rf \"/Applications/\(expectedAppName)\"") + system_quiet("mv \"\(updaterDirectory)/output/\(expectedAppName)\" \"/Applications/\(expectedAppName)\"") } private func terminatePhpMon() { From 69ff907f4ae56a7d538597b9da4f62928a9b5fac Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 01:04:20 +0100 Subject: [PATCH 039/194] =?UTF-8?q?=F0=9F=8F=97=20Read=20release=20manifes?= =?UTF-8?q?t?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 14 ++-- phpmon-updater/ReleaseManifest.swift | 14 ++++ .../{AppDelegate.swift => Updater.swift} | 67 +++++++++++-------- phpmon-updater/main.swift | 5 +- 4 files changed, 63 insertions(+), 37 deletions(-) create mode 100644 phpmon-updater/ReleaseManifest.swift rename phpmon-updater/{AppDelegate.swift => Updater.swift} (67%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 6ddebac..820d8ed 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -51,7 +51,7 @@ C4068CAB27B0890D00544CD5 /* MenuBarIcons.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4068CA927B0890D00544CD5 /* MenuBarIcons.swift */; }; C406A5F3298AD2CE00B5B85A /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = C406A5F2298AD2CE00B5B85A /* main.swift */; }; C406A5F7298AD2CF00B5B85A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C406A5F6298AD2CF00B5B85A /* Assets.xcassets */; }; - C406A602298AD50D00B5B85A /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C406A601298AD50D00B5B85A /* AppDelegate.swift */; }; + C406A602298AD50D00B5B85A /* Updater.swift in Sources */ = {isa = PBXBuildFile; fileRef = C406A601298AD50D00B5B85A /* Updater.swift */; }; C4080FF627BD8C6400BF2C6B /* BetterAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */; }; C4080FF727BD8C6400BF2C6B /* BetterAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */; }; C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF927BD956700BF2C6B /* BetterAlertVC.swift */; }; @@ -190,6 +190,8 @@ C469E700294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */; }; C469E701294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */; }; C469E706294CFDF700A82AB2 /* DomainsListTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E702294CFDF700A82AB2 /* DomainsListTest.swift */; }; + C46B2648298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; + C46B2649298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; C46E206D28299B3800D909D6 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; C46E206E28299B3800D909D6 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; C46E20702829D27F00D909D6 /* AppUpdaterCheckTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */; }; @@ -765,7 +767,7 @@ C406A5F2298AD2CE00B5B85A /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; C406A5F6298AD2CF00B5B85A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "phpmon-updater.entitlements"; sourceTree = ""; }; - C406A601298AD50D00B5B85A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + C406A601298AD50D00B5B85A /* Updater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Updater.swift; sourceTree = ""; }; C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BetterAlert.swift; sourceTree = ""; }; C4080FF927BD956700BF2C6B /* BetterAlertVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BetterAlertVC.swift; sourceTree = ""; }; C40C5C9B2846A40600E28255 /* Preset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preset.swift; sourceTree = ""; }; @@ -847,6 +849,7 @@ C464ADB1275A87CA003FCD53 /* DomainListCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListCellProtocol.swift; sourceTree = ""; }; C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeValetProxy.swift; sourceTree = ""; }; C469E702294CFDF700A82AB2 /* DomainsListTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainsListTest.swift; sourceTree = ""; }; + C46B2647298B324100084651 /* ReleaseManifest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseManifest.swift; sourceTree = ""; }; C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateChecker.swift; sourceTree = ""; }; C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUpdaterCheckTest.swift; sourceTree = ""; }; C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShellProtocol.swift; sourceTree = ""; }; @@ -1100,7 +1103,8 @@ C406A5F1298AD2CE00B5B85A /* phpmon-updater */ = { isa = PBXGroup; children = ( - C406A601298AD50D00B5B85A /* AppDelegate.swift */, + C406A601298AD50D00B5B85A /* Updater.swift */, + C46B2647298B324100084651 /* ReleaseManifest.swift */, C406A5F2298AD2CE00B5B85A /* main.swift */, C406A5F6298AD2CF00B5B85A /* Assets.xcassets */, C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */, @@ -2056,7 +2060,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C406A602298AD50D00B5B85A /* AppDelegate.swift in Sources */, + C406A602298AD50D00B5B85A /* Updater.swift in Sources */, + C46B2649298B324100084651 /* ReleaseManifest.swift in Sources */, C41F3D08298AED0D0042ACBF /* System.swift in Sources */, C406A5F3298AD2CE00B5B85A /* main.swift in Sources */, ); @@ -2201,6 +2206,7 @@ C4D9ADC8277611A0007277F4 /* InternalSwitcher.swift in Sources */, C4FACE83288F1F9700FC478F /* OnboardingWindowController.swift in Sources */, C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */, + C46B2648298B324100084651 /* ReleaseManifest.swift in Sources */, C4BF56AB2949381100379603 /* FakeValetInteractor.swift in Sources */, C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */, C451AFF62969E40F0078E617 /* HelpButton.swift in Sources */, diff --git a/phpmon-updater/ReleaseManifest.swift b/phpmon-updater/ReleaseManifest.swift new file mode 100644 index 0000000..117ba7c --- /dev/null +++ b/phpmon-updater/ReleaseManifest.swift @@ -0,0 +1,14 @@ +// +// UpdateManifest.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 02/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +struct ReleaseManifest: Codable { + let url: String + let sha256: String +} diff --git a/phpmon-updater/AppDelegate.swift b/phpmon-updater/Updater.swift similarity index 67% rename from phpmon-updater/AppDelegate.swift rename to phpmon-updater/Updater.swift index 6b42393..94d572b 100644 --- a/phpmon-updater/AppDelegate.swift +++ b/phpmon-updater/Updater.swift @@ -8,9 +8,10 @@ import Cocoa -class AppDelegate: NSObject, NSApplicationDelegate { +class Updater: NSObject, NSApplicationDelegate { var updaterDirectory: String = "" + var manifest: ReleaseManifest! = nil func applicationDidFinishLaunching(_ aNotification: Notification) { @@ -19,16 +20,25 @@ class AppDelegate: NSObject, NSApplicationDelegate { self.updaterDirectory = "~/.config/phpmon/updater" .replacingOccurrences(of: "~", with: NSHomeDirectory()) + let manifestPath = "\(updaterDirectory)/update.json" + + // Read out the correct information from the manifest JSON + do { + let manifestText = try String(contentsOfFile: manifestPath) + manifest = try JSONDecoder().decode(ReleaseManifest.self, from: manifestText.data(using: .utf8)!) + } catch { + print("Parsing the manifest failed (or the manifest file doesn't exist)") + showAlert( + title: "Key information about the update is missing", + description: "The self-updater only works in combination with PHP Monitor. Please try searching for updates again in PHP Monitor. The app has not been updated." + ) + exit(0) + } + print("Updater directory set to: \(self.updaterDirectory)") // Download the latest file - let zipPath = self.download( - // zipUrl: "https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon.zip", - // sha256: "654dd1df64ae32b1e3b9ebed7f6d89d04ed374b0b4d6732704e6df190169214f" - - zipUrl: "https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon-dev.zip", - sha256: "1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a" - ) + let zipPath = self.download(manifest) // Terminating all instances of PHP Monitor first terminatePhpMon() @@ -48,12 +58,12 @@ class AppDelegate: NSObject, NSApplicationDelegate { return false } - private func download(zipUrl: String, sha256: String) -> String { + private func download(_ manifest: ReleaseManifest) -> String { // Remove all zips system_quiet("rm -rf \(updaterDirectory)/*.zip") // Download the file (and follow redirects + no output on failure) - system_quiet("cd \(updaterDirectory) && curl \(zipUrl) -fLO") + system_quiet("cd \(updaterDirectory) && curl \(manifest.url) -fLO") // Identify the downloaded file let filename = system("cd \(updaterDirectory) && ls | grep .zip") @@ -61,19 +71,9 @@ class AppDelegate: NSObject, NSApplicationDelegate { if filename.isEmpty { print("The update has not been downloaded. Sadly, that means that PHP Monitor cannot not updated!") - showAlert(title: "The update was not downloaded.", - description: "PHP Monitor will not be updated, but we will restart the app for you. You may not be connected to the internet or the server may be encountering issues. Please try again later!") - - if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor.app") { - restartPhpMon(dev: false) - } - else if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor DEV.app") { - restartPhpMon(dev: true) - } - else { - exit(1) - } + description: "PHP Monitor has not been updated. You may not be connected to the internet or the server may be encountering issues, or the file could not be written to disk. Please try again later!") + exit(1) } // Calculate the checksum for the downloaded file @@ -82,12 +82,12 @@ class AppDelegate: NSObject, NSApplicationDelegate { print(""" Comparing checksums... - Expected SHA256: \(sha256) + Expected SHA256: \(manifest.sha256) Actual SHA256: \(checksum) """) // Make sure the checksum matches before we do anything with the file - if checksum != sha256 { + if checksum != manifest.sha256 { print("The checksums failed to match. Cancelling!") showAlert( title: "The downloaded update failed checksum validation", @@ -100,11 +100,11 @@ class AppDelegate: NSObject, NSApplicationDelegate { } private func install(zipPath: String) { - system_quiet("rm -rf \(updaterDirectory)/output") - system_quiet("mkdir -p \(updaterDirectory)/output") + system_quiet("rm -rf \(updaterDirectory)/extracted") + system_quiet("mkdir -p \(updaterDirectory)/extracted") var isDirectory: ObjCBool = true - if !FileManager.default.fileExists(atPath: "\(updaterDirectory)/output", isDirectory: &isDirectory) { + if !FileManager.default.fileExists(atPath: "\(updaterDirectory)/extracted", isDirectory: &isDirectory) { showAlert( title: "The updater directory is missing", description: "The automatic updater will quit. Make sure that ` ~/.config/phpmon/updater` is writeable." @@ -112,7 +112,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { exit(0) } - system_quiet("unzip \(zipPath) -d \(updaterDirectory)/output") + system_quiet("unzip \(zipPath) -d \(updaterDirectory)/extracted") let expectedAppName = zipPath.contains("dev") ? "PHP Monitor DEV.app" @@ -121,7 +121,7 @@ class AppDelegate: NSObject, NSApplicationDelegate { print("Removing \(expectedAppName) before replacing...") system_quiet("rm -rf \"/Applications/\(expectedAppName)\"") - system_quiet("mv \"\(updaterDirectory)/output/\(expectedAppName)\" \"/Applications/\(expectedAppName)\"") + system_quiet("mv \"\(updaterDirectory)/extracted/\(expectedAppName)\" \"/Applications/\(expectedAppName)\"") } private func terminatePhpMon() { @@ -140,6 +140,15 @@ class AppDelegate: NSObject, NSApplicationDelegate { } } + private func smartRestartPhpMon() { + if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor.app") { + restartPhpMon(dev: false) + } + else if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor DEV.app") { + restartPhpMon(dev: true) + } + } + private func restartPhpMon(dev: Bool) { let path = dev ? "/Applications/PHP Monitor DEV.app" : "/Applications/PHP Monitor.app" let url = NSURL(fileURLWithPath: path, isDirectory: true) as URL diff --git a/phpmon-updater/main.swift b/phpmon-updater/main.swift index 6c711c1..46757f2 100644 --- a/phpmon-updater/main.swift +++ b/phpmon-updater/main.swift @@ -8,10 +8,7 @@ import Cocoa -// 1 let app = NSApplication.shared -let delegate = AppDelegate() +let delegate = Updater() app.delegate = delegate - -// 2 _ = NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv) From 744ec9563013ababa1f266fed66c179bd5b58a86 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 01:14:53 +0100 Subject: [PATCH 040/194] =?UTF-8?q?=F0=9F=8F=97=20Do=20not=20make=20assump?= =?UTF-8?q?tions=20about=20zip=20contents?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon-updater/Updater.swift | 64 +++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 22 deletions(-) diff --git a/phpmon-updater/Updater.swift b/phpmon-updater/Updater.swift index 94d572b..550acb6 100644 --- a/phpmon-updater/Updater.swift +++ b/phpmon-updater/Updater.swift @@ -14,14 +14,17 @@ class Updater: NSObject, NSApplicationDelegate { var manifest: ReleaseManifest! = nil func applicationDidFinishLaunching(_ aNotification: Notification) { - print("PHP MONITOR SELF-UPDATER by Nico Verbruggen") self.updaterDirectory = "~/.config/phpmon/updater" .replacingOccurrences(of: "~", with: NSHomeDirectory()) + print("Updater directory set to: \(self.updaterDirectory)") + let manifestPath = "\(updaterDirectory)/update.json" + print("Checking manifest file at \(manifestPath)") + // Read out the correct information from the manifest JSON do { let manifestText = try String(contentsOfFile: manifestPath) @@ -30,24 +33,22 @@ class Updater: NSObject, NSApplicationDelegate { print("Parsing the manifest failed (or the manifest file doesn't exist)") showAlert( title: "Key information about the update is missing", - description: "The self-updater only works in combination with PHP Monitor. Please try searching for updates again in PHP Monitor. The app has not been updated." + description: "The app has not been updated. The self-updater only works in combination with PHP Monitor. Please try searching for updates again in PHP Monitor." ) exit(0) } - print("Updater directory set to: \(self.updaterDirectory)") - // Download the latest file let zipPath = self.download(manifest) - // Terminating all instances of PHP Monitor first + // Terminate all instances of PHP Monitor first terminatePhpMon() - // We made it! - install(zipPath: zipPath) + // Install the app based on the zip + let appPath = extractAndInstall(zipPath: zipPath) // Restart PHP Monitor, this will also close the updater - restartPhpMon(dev: zipPath.contains("dev")) + restartPhpMon(at: appPath) } func applicationWillTerminate(_ aNotification: Notification) { @@ -99,10 +100,14 @@ class Updater: NSObject, NSApplicationDelegate { return "\(updaterDirectory)/\(filename)" } - private func install(zipPath: String) { + private func extractAndInstall(zipPath: String) -> String { + // Remove the directory that will contain the extracted update system_quiet("rm -rf \(updaterDirectory)/extracted") + + // Recreate the directory where we will unzip the .app file system_quiet("mkdir -p \(updaterDirectory)/extracted") + // Make sure the updater directory exists var isDirectory: ObjCBool = true if !FileManager.default.fileExists(atPath: "\(updaterDirectory)/extracted", isDirectory: &isDirectory) { showAlert( @@ -112,29 +117,46 @@ class Updater: NSObject, NSApplicationDelegate { exit(0) } + // Unzip the file system_quiet("unzip \(zipPath) -d \(updaterDirectory)/extracted") - let expectedAppName = zipPath.contains("dev") - ? "PHP Monitor DEV.app" - : "PHP Monitor.app" + // Find the .app file + let app = system("ls \(updaterDirectory)/extracted | grep .app") + .trimmingCharacters(in: .whitespacesAndNewlines) - print("Removing \(expectedAppName) before replacing...") + print("Finished extracting: \(updaterDirectory)/extracted/\(app)") - system_quiet("rm -rf \"/Applications/\(expectedAppName)\"") - system_quiet("mv \"\(updaterDirectory)/extracted/\(expectedAppName)\" \"/Applications/\(expectedAppName)\"") + // Make sure the file was extracted + if app.isEmpty { + showAlert( + title: "The downloaded file could not be extracted", + description: "The automatic updater will quit. Make sure that ` ~/.config/phpmon/updater` is writeable." + ) + exit(0) + } + + print("Removing \(app) before replacing...") + + system_quiet("rm -rf \"/Applications/\(app)\"") + system_quiet("mv \"\(updaterDirectory)/extracted/\(app)\" \"/Applications/\(app)\"") + + return "/Applications/\(app)" } private func terminatePhpMon() { let runningApplications = NSWorkspace.shared.runningApplications + // Look for these instances let ids = [ "com.nicoverbruggen.phpmon.dev", "com.nicoverbruggen.phpmon" ] + // Terminate all instances found for id in ids { - if let phpmon = runningApplications - .first(where: { (application) in return application.bundleIdentifier == id }) { + if let phpmon = runningApplications.first(where: { + (application) in return application.bundleIdentifier == id + }) { phpmon.terminate() } } @@ -142,19 +164,17 @@ class Updater: NSObject, NSApplicationDelegate { private func smartRestartPhpMon() { if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor.app") { - restartPhpMon(dev: false) + restartPhpMon(at: "/Applications/PHP Monitor.app") } else if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor DEV.app") { - restartPhpMon(dev: true) + restartPhpMon(at: "/Applications/PHP Monitor DEV.app") } } - private func restartPhpMon(dev: Bool) { - let path = dev ? "/Applications/PHP Monitor DEV.app" : "/Applications/PHP Monitor.app" + private func restartPhpMon(at path: String) { let url = NSURL(fileURLWithPath: path, isDirectory: true) as URL let configuration = NSWorkspace.OpenConfiguration() NSWorkspace.shared.openApplication(at: url, configuration: configuration) { phpmon, error in - // Once we've opened PHP Monitor again... quit the updater exit(0) } } From 0c52720e55a192ba5b0de760cf26a79fc534924f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 01:18:30 +0100 Subject: [PATCH 041/194] =?UTF-8?q?=F0=9F=8F=97=20Cleanup=20zip=20and=20ma?= =?UTF-8?q?nifest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon-updater/Updater.swift | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/phpmon-updater/Updater.swift b/phpmon-updater/Updater.swift index 550acb6..f9abc56 100644 --- a/phpmon-updater/Updater.swift +++ b/phpmon-updater/Updater.swift @@ -11,6 +11,7 @@ import Cocoa class Updater: NSObject, NSApplicationDelegate { var updaterDirectory: String = "" + var manifestPath: String = "" var manifest: ReleaseManifest! = nil func applicationDidFinishLaunching(_ aNotification: Notification) { @@ -21,7 +22,7 @@ class Updater: NSObject, NSApplicationDelegate { print("Updater directory set to: \(self.updaterDirectory)") - let manifestPath = "\(updaterDirectory)/update.json" + self.manifestPath = "\(updaterDirectory)/update.json" print("Checking manifest file at \(manifestPath)") @@ -39,7 +40,7 @@ class Updater: NSObject, NSApplicationDelegate { } // Download the latest file - let zipPath = self.download(manifest) + let zipPath = download(manifest) // Terminate all instances of PHP Monitor first terminatePhpMon() @@ -70,6 +71,7 @@ class Updater: NSObject, NSApplicationDelegate { let filename = system("cd \(updaterDirectory) && ls | grep .zip") .trimmingCharacters(in: .whitespacesAndNewlines) + // Ensure the zip exists if filename.isEmpty { print("The update has not been downloaded. Sadly, that means that PHP Monitor cannot not updated!") showAlert(title: "The update was not downloaded.", @@ -81,6 +83,7 @@ class Updater: NSObject, NSApplicationDelegate { let checksum = system("openssl dgst -sha256 \(updaterDirectory)/\(filename) | awk '{print $NF}'") .trimmingCharacters(in: .whitespacesAndNewlines) + // Compare the checksums print(""" Comparing checksums... Expected SHA256: \(manifest.sha256) @@ -97,6 +100,7 @@ class Updater: NSObject, NSApplicationDelegate { exit(0) } + // Return the path to the zip return "\(updaterDirectory)/\(filename)" } @@ -135,11 +139,20 @@ class Updater: NSObject, NSApplicationDelegate { exit(0) } + // Remove the original app print("Removing \(app) before replacing...") - system_quiet("rm -rf \"/Applications/\(app)\"") + + // Move the new app in place system_quiet("mv \"\(updaterDirectory)/extracted/\(app)\" \"/Applications/\(app)\"") + // Remove the zip + system_quiet("rm \(zipPath)") + + // Remove the manifest + system_quiet("rm \(manifestPath)") + + // Return the new location of the app return "/Applications/\(app)" } From ef37876508f9c34d7b5ba4157ccbf383cb780af5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 01:23:48 +0100 Subject: [PATCH 042/194] =?UTF-8?q?=F0=9F=8D=B1=20Update=20icon=20for=20se?= =?UTF-8?q?lf-updater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 8 ++++---- assets/affinity/icon-updater.afdesign | Bin 118345 -> 137573 bytes .../AppIcon.appiconset/icon_128x128.png | Bin 12627 -> 12866 bytes .../AppIcon.appiconset/icon_128x128@2x.png | Bin 32843 -> 33914 bytes .../AppIcon.appiconset/icon_16x16.png | Bin 807 -> 811 bytes .../AppIcon.appiconset/icon_16x16@2x.png | Bin 1901 -> 1897 bytes .../AppIcon.appiconset/icon_256x256.png | Bin 32843 -> 33914 bytes .../AppIcon.appiconset/icon_256x256@2x.png | Bin 95711 -> 99178 bytes .../AppIcon.appiconset/icon_32x32.png | Bin 1901 -> 1897 bytes .../AppIcon.appiconset/icon_32x32@2x.png | Bin 4833 -> 4817 bytes .../AppIcon.appiconset/icon_512x512.png | Bin 95711 -> 99178 bytes .../AppIcon.appiconset/icon_512x512@2x.png | Bin 297957 -> 308143 bytes 12 files changed, 4 insertions(+), 4 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 820d8ed..15e7cc6 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -2798,7 +2798,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2830,7 +2830,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2862,7 +2862,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2894,7 +2894,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 10; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; diff --git a/assets/affinity/icon-updater.afdesign b/assets/affinity/icon-updater.afdesign index 0ef708e479d37cad45b53165cb5c9693f9f872df..7dacd661758ff7d14ea8450b40e9e3354ca94a14 100644 GIT binary patch delta 58279 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�n$7bPgbE&fyr+S0{soi#>Sk{s@Y~oi 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 delta 43321 zcmXt9bx<4a*G+=El~P=bySo&ZqQ$*faSae`L(vv@C=R7Su_DDKlooAq*HE;$yL`OA znJ+Uto7w!4XZJbx+;i_eyHSTZkc06I^r$X}0|J5EyuGv;Ro(2fn?RtHiY6-3clq-+ zPuD?^r-SyqFbOF@y;(}{A9MoPD0;!Uk}?=ea`43t6esx$un2> zg13A)<#+^i@5K@oKC3dz<0p}m6Zwg@0Xg*-u$i`*hfYeOOQoN2fd-Nyoren!1kPH! z!877|2V}O-u%fy5hI+EO;s8{SPlGO-Ls2>ud%Y+G1(5q~PlO(m)u}B5Xg5{y5FNQf zW;I7Hh;E8L>xECwYBjW#Po9{AkrgDR@;&MIiE-$&tv{2(`OVbQhr@pv+&o*PVII1K z0`Gs?e5Kot*1s?t`~#il`_s&8*S9vx4$5xA&lN&qp1MVS(K&>ue^_TtPt(UTFr1-h~%Iod2`zWe9xhddb?!9Bu& zqnvf%+*Bw;pDMycEq%=7uS@o;HS@`=kwH3n`#~JYfc2YQ2meEFcntlNMa%YemwRF=Dcp`TtdiFXrpmTxyTQrC9E#zie@vF zgj)i*N5y{j>)dIk{MSElB;50pk`g_v2b-l?%<=*F?&Sp?u>T!P!p{vaF`va!_8ar_ zL`b^ga@R(d-+W1$uojuC7I>#|z|^cM=(cI(Xv)vee>D&u6&9_veqAcqsmhCeeOg}d z?%-gkZA%)(A zJ$*PYL^*lrM{$D~yz5&h2=~nu5{7cjX?x+4V>KS~5pX&MHr5X%A03)|DQ_ zosQ-)Cv>h-bK=nTRdXBp!AvPgbNO+zpHcy&Df@g0+kZ8}xj$dg^A@L*vVTjQ-?Cjh zHe=Ba`~uiM1RQ=OgM-!?5dwLhhFG=YRECmp7Yp zw&(by{ad*vNa3yBpG_s#HUxR}BgV68{Mmnw1Xi*=Pif~VYXZi^Y!5@Eifjvb@;x5! z)tm25Zn)uW5DzEYR?H(&I~p82;zWlt1;k$dJYdL;N=4JCi(4qkmq;D5HHV=zmUl?N zHgpg~PoU{Im=R57G)BLVVrk@f5tv-XL3@R`lG?gS7gygpD$=6`=?{>$}Qq8yhiCb!<3?vSX! zun+JJYi8@8MW^U3W-K6NwU2K;#!B@`C_0jMME}yDGtCejq9eNUlZI!gPly&!;wf!$ zZ6!p8uiqe7)x<}{6UP35p|5gU1`*w6mKeOShf+;u$T$2Cl7MD{8`ffex-tOoZ6*?I z&u6VNn`Loc{ML#TLXlC%s|@-Y=l&kR^O(!j;2+PNQAPJ^5|lFD=S-QJ5~6Z_G5Ml> zYo@es7w5EnX1SUrgeXqBGktf8UkTGK@LelDQeizHK!6z~Q0?JEVU@GE#_Ze&s{F87 z^Uje#yl)}-wl@DoI_oKd7LaWr9j)>|-IK^zN6fZ+lWC?oF~EJt;CrY1FxC;q#G*vO z(w@;SQ@1Pux)c|&>uqIl_W5?uef!~Vk|*9wUPnoVA#I0#{9|vc%`0m%)cJp53kg~q zs^~2bMW62G4#~|qY{>#3C#;_AWaeAemNNMx#xKCzyIBZ8z_t|!Kr-1b3xQ_LI^W;H z24loiEsg5)W=DkjPfypQIBgoNRQ!Ht@A{$r-Nj6`ZT9YxFKi0I_rF;r%ChAc$R`x{ zrS1Z|X&mA``j^~i(x5aB7R`(}(crBqkMD}t92{Ss@glBIj(Vuw+NuDjzxx&U{!8e{ zZ_8nl(es%nzi~$aHcfwoL$Vb#^i6>1ud-zm z9;R5em79o9ja9aKnz!kL$(D%iMSb2ys&kizu7sR!F;Q}mfJMQpeJIL(gH`Y)ey@3< zfHR6BG7$QDAPUl$GssfP8!^Z-Ao4~xYlx0h+ozFV?CGCoJbLgZ&_YekrLPBW0^(t0 zTVM}_JMa&8aV&7{I&(8-zN}`w=F|aP+HzPva!wn@$+`kpBuRt)$ zcF-gv6-}p+pM$mSPV%}eS}qHxBCI$~Zas-H6XU^?jJwkxN`JMB68a?yCAa;*K(||N z1E1YmaIW$CP8HxbFKMTLQ^3SUsEcy-poEYDO$4uQbLawpbzBI2)QFu*-(0@YL6VA~ zq6iG6CyM|ss9Wg@TXPFmW|V(1uS`KTWbxk@C@*{3w}_0SRIo7cK{FN$dz1K=JY>c|Z*6ULXI%GOqp!Whgjf?ps9%Q8Kjj8K))9f`>|;qkw~G z-53LdoVQ|B6U1Lp2$JF=1asD03ljNpQLuK`VlftYQ``m-T*|2Fwvb`W8ReL8Z*z4f zgy#r69MgIeoLu74C9Jx}i52&VIshnp8J3dx)Q8@azF#QnS7q%fi#D>b6!PA~ZjHyI zSrvYwkc)yIdFd!)U}UJ8$Syv9A~=wmo2QWZI<9~cYP@jOz-5{ALV4EKl+^yT`cP7@W(46 zq+zw`7Ts&F-hqmT5VPo=^IbGw=HnKB0_4Gt8(Q2~Y0HE!0&?22GXV@o4#Aq|^>712 ziAC5J=!D>6e+3=6-0d(@2J|&y%stEFUJoH3W&cKYn+V}ge7UCGgc5XA9~Qx5cQMF1zq3$=gZyssZs7N zC>uj_fvZ`n?Y6#TyM@3DTmqeqa)J&1fNb3y0$+peB{?PhX8Z~P^)ZW%e+Gz&mrrZQ z`Y_9?jKbX>i2b@!QKwc1WU7elO(ARwow@`gDL&F|my7BZ3TnUD@|nMz>CiwNUx- zcv^}exUYvk`?MaLJkyS&Qa?R)jy?O(T-}x4R3j@n;uy0hz9O>xk>Q=`m?Oq*uwmPE zi`TkJ)Pg&$>_eHkKZazY_oIPAYy1x%mB{u~dmbZp@gjU6OJbOM4t=0lUUwO(8rXGm zN4Za)#BL*fXW0Avp+0p>tl;L_1S0LK-5$a~cQ4AhdbApzDJBkj-)CQY_$5xc57k6xUhdtdy~7mHQnY~iS5VR@8k_!i&hc?Ry9B0?t<>L zr8rY^y1jt2cTr8G&QhB8!{;66oLqzn?f2E;4r$cSp*pPFdo{gar4tk3?I}xD%op;zcApY zJ+8v;5(|y}NuxmYK{sovc>mO0g8Sk_4Ic8`3ke{&%{;nIPM;xsIFOr9yrHSffZXbm zGU`o|B!<5`<@5K>tZcA$MBldMjJ>XK*lg$Lm#tpvza?h;dg$YDeJW$wBLbZIP*_#; zAGVWz`-K2aj?}QA#td(apggEd@3#N35AEX&Z~8vXm|NuzTsV*u&NWH`bU6S_35H_1y3n;>88g4pwSPwcNJrSwnG zXr7mn9m>br481e7P?k5bws^n;J#NYY$hisTMPjdQ?WmbC{mrBd>fDv4k#s-W+&mMl z*)Av-IO-9W>r8pmkwfX;a9dAsysU;iJ*x`-o0md#9yX45r+yZD$wgbgl6+tU6ccdQ ziTK)_?XkIU*p7+?cu2is$IcoR(+x~&pATw9_;?NDlQ(;%hxh9P9LS!u85zKwu(`#{ zSBAzp%&x;7ZGG+b^rRKhXcu1RvS**ECs}CFEa>Dc^@GMh73Js_n2fk)5vyNc>A=hU zqjZ!oE$bY|+N^A6^4XKdF?vveZpCTgXT-82uwI~Hag=*$TGUl}eTs=Jp|(5eu}p6` z-;?>HD~iTu2oj#~8&8;GmCb1Le3I@~^HQm%D^>86|0!A~JEEjpMUu{BQ1HD? zXFtbD>v`Xq9aWIog0bzk&`QmgWC!yVZiW`n+9NTL>-xv@nd^Aa>2$eT15Jzc%jZ=> z>6mcQ6T9o#TA|S$1sOjuw^PpM>3MahBn`&YDk5dUWIYu>w#WmG8SjlH0QN0k_W7MF zdgg+$?&o6;Pf-Er1$=i9bpnoM(-0!ecqZO~zX8PXwpQ=y{cEi{&!@1%OKfR^SbXDu zFO+7j6(KX1vek}#!=6MRhwEBF)kJ$)`>?#5e6;HxH>BZZ-_Id~O82k$?QT%3uL-ge zs$g5YaqoOR?TGPEMe_hi;;NiDx~ARm2Au1VGZRs)i7{6B~Sy}=2+$|(kxNwj z_vYq|S~Nf~f(hQG#bjmkUs*|y{V+xiR#(SzY&1!8g{hu`{9XD0!&e1R9&wh6b0sD5 zK@p4Xlq31WY~jr;W&+94)wIja<(NEg&!r+E`!4dmtG{|pUlgL=-i2*+s|rj-4AwU- zKm$BjQ=*^Ada#ete(sV7S|#jcL3^@`!N=hi3C7fip z8>3bubK(nRn=+kl8VrQq zJE|-XD&;ZqzNZUw0aFsr@`~#&1eD^;P%^wJkP)p3*n>68u-|Rq4&d+;Y!{L5hz1^ z;7k^htNfg&T?SAUz?Ku|?lS4-R}CA`au%7xD@nK^ox39G-ffZ8$i`gJ<=i-ScEgJgCj}`|L8yfk!3Ez9zU51O$EP3I;Q_d z9e$3z6@%kV(`~*`IUjT5u)oP?N{=Q#&&i-tR6+Ez8o+q5$+DBpx*ZueF1VvzEmOd% zW{mQ~O6_O#tvrd&jSNdep)J=?M)*yMZ193B18?Z#z|fOA)Qi6~kS*vU0lkP@58!Ul z)6uFVCC?=5b^R`;1R`cAn7M4(4O}W0Zof)*w8?W5^Z(XU(@N;5AuiN$G8#(gViw&* zkH&&Zm?7#5eh!Yx(DDWI0(eYnGvvycqUQTka(iDSg|?fj2{PAzK7o;v?$iyf0aG@A zc`M;Z3K62|$9psTW$Ea6O8?86;Qf_8w-voXv{CYHuDAr}+zS{J%iUS_mp`!9_3bhI zm0M|0wESaLf6{wK32*M4*z1-3rhr^@GgSdk82b4el&I6cT)?`1#)B^yn=RlzHD7*t z?^%ZTgFMB`$Nn<&17g`b<4(2U=|eS6%bDR~COTAyDd*7)K0h!u;8v}HY87TngVns* zo;G@P@(+Z5H?9A;=J3iEaqn)aih6Rl&~?t$B6+TE?Ij>p659oO;$cxKy6rdW!{m>5 zT;$GGyh82PBWIyKW*Up>hB%hz5%;&~D2wSgT1#UJIlE29O_leS#N+}tL`^Uh3Ia&ET zDB|gCrjYd0r!-xj{uC$$4Voxs&?#&}|6$ItFZ-dQPAoMX?K0CDpH>(VH479ykGtgr zpb##HyK_q|CghtztuDSb{MhwT@(pxtwoE0&Ta1sjTY>-z_6alI75VRH>w|n~I%DOwNMLZ~ZPeM$Rd!A)tL=l;4?a>7rr8w7Tie4yOd7|G|=Ne zWKS(YyEAn=ru+B_-m>$@snQ#XUrahMGreq00iqQ$T*9R>KQgmw>Rl|Z4kh`?9|`(MQVMr)iV)CReAlSn z;}ukRNP*k+fX@6)a@7deT?6*$#S`3zsau=7- zHH50|JcIP?&`O$-z*U$LD=)Gz0R+~d=L&YFp;_nj%@l9oF7>|jhzcsF6y#x>J%ppe z6-wQ~{N3g6)qGeIW-R)OtuRXGIS+g!*o^_4P46D;9F^ZGgCfS}8~cjxH^L&f4UH-q zH3%P+yHYBdRyxu*j`?vqgj9--*Yhh0n{}2d+JWd4(SZPjTI9KIUM*QFFmhvyaG>eH z8LB5NM1E^ZDoyNHk&v5_901*sUL6Im$51adGp#gmq};ckG^a|xY<|e1IcGR?)nBw# z5lu1$v+#TT{hu0u)s!^Y+{aCLZqgr|mV`Th)@vCWRW$f*?Yz!Kb@ml}3 zMMJmjOJb$JKau}1@k(~{xE;sIl!HWF%Q8ZOz!cBE{zuxZRemU+Q$7AHrxC9AwKHZ^ z27&2;!yv!jQfZ+icuJDxZ5V!y62SwmG`*-LBWx4Hg$-76}vU6QpY<}X`aL^&`0kM=uS z18tiNR@H>;;`5Y`>?iX220B>mYwsDlGymNI)CbR3utf*{dtkywFV4hVSENIp%XS3L zg^AQIfOfwH28S*i+22j#;GMfy)}WslJfm~q|0376XyC(H5`OsT(fdc_i4grao-zy1 zLzvJV4Je$<9G?NS>C!bE1A+&O_qZcd`=C0q5mM?XSh4#`pg&3IXmlBU!G$ZYq=6wJ z^v~|#5(PRzraF-kvN^tjxG<(QhTyn2la6B@2C#iI&tyK5QQIHK zdDtF$pXtVe(i-3G4T`?}xQAVWL5l7!?xFiw?%i_tgWG+2=yMosgAk!Qe1it>g z0Qd}W{R0Bgfm9Xb-bmwT_=kX5!EqUdAz;dCyO4F%=J#a@E!xm#I1WJs+wpn&9Ak(f8iVEeXQf zx z%fZ?s_5`Y=EGoE*cz^GAW86i+xw1fy>;DtIeZd@7BAw4zZ)`sx zWClq>>ntWq(RckXUMtU1!SFb%oG~^5qW4-T{+o~4#|M5|OtSw0q2?|OU&hzaJ#?;F zT$bV_gO6oIGRNsyoLbdoBSGcmzwYK<*EXE_HxcV3#(o#vI0bh3HQO8(Okrv;gV1!A z)%@w_%2iKs<3%2DglTStZ}L_J1kmsRBF5=MssZK{T^65K<4p&d~j36t?zE zq3?n}4R`%%R#IScs!^p%Jo*Uyz8VwJ90R3XwwLzIJbLy@kW_Is4j$3j{a6-2&ZJf2 z4D85e3~{KCM?Z7Vku=`|R=vzG%n`9t8_Clkwo64&c^TWrBA>LC{GcCsG=;%vuKbp? z6Kz=>KW_Q(S8V?6Hu^$O!;_zI7p>j;7LR?@jj#7&7>kPf1lx0H=1N5=eWo}Z;}|ka zL5Oku%_~iKQ4i`BCG%4$E+_WH(3du1XUS86O>1hHo1rIE532wJ?mHNak{tJ&zjlrjg z+`349W*h8PAOp<&dhO98ym|LKN+Bz)qM4P*4}MDAUHrNAP|zKFo5(u3&=2ZC+2_rH z^a(`{{EujgOu_r7pO!d!E*{dB1UA9(8(J{O*F*=PI(vKF9+->Kit|G>lME5>=&`TJ^{rC`)@u=Ruc) z7L95)o8s{5Z;@%T2n5wnO}1C%_II!kjbNA!O@jAJvD;B-Lk`!cB7(tzGqQgJ>qQWR zhMi;3rl;4$_t^b{`Z&gv_GFf^)P9SENvOAGfNI9#=cF-$BF)eo_LvEtp< zM34_)J|j8ZRR1u6v0(l*#K9_Rf~4z#ZVm6&#Oog^hnjW`WL*_ei|)qw(8FLlk?)Fy z@xm$C2T2sUXSFxzkA;~e57T35JIf_1^64_Ydns3DS5@7AUnP*Ms7zheUAo(-gu)qi z{?t3|4l33Q$}M z^YK6Fj0ppkAyQ^|2ByF zLu+}cv&p8uggUE%OKhi0taE~+0zgn>2QGU$zVlr3Z#2Wd{xe*jNGai>AXBj8i;q|c z{7mLoCh5rwQl$}CQYIQJXQC5`;2ft?pre}l6|N{Zuc$drm76@YIdA)R(DzrI7=aq( zpv8gZ;_#6Ds7a>2e2I`d7tiq3W=`%}iR_5*eEgrbkX@IIr_7Q#`!@Sh!w@cQP2L~) z2|-(;jI8XNG<|cp2n&b{$X)IKUK_*YO+P)9JeT>Qw)P~zqVB~!{UI*aVLw7*Imy$; zq-TgW`)HlT{WXKfN-(v>qcBn?rSRjABJx*7kr}cPU}}Q1maA$_ca=jl`#<7_U_#Ok1$lnB7Xe~pr9)W z4~CIroa7baF0w?e?q3?^zn~L$`&Ta*u*2+hXOhHoF`iqSYNJSd^A>%CJQ$^@ET_?~ zmucv*yV*zHL=B5}2r=Z2F}_c2fscfZfG_sMPJsc$?efg(_xyn?2@rW$Aw~SLQ5_#N zT;s$^rIV0@%Zdq(%NN+}7V!T2Do7Aiq8mQL50>oWH|o%5PH?M2RiM*rYsA3jTMa+D<3qXIK+UcQ=5t?Ez+Dzs8dFyj@_M(Ist>tULED!Tb($~9AZ4@C!qdL z!2ad4Jw6(CSEbL@c2UhYD2`-#pJ=nxL1vcTy)MEPdsXix7Ir_NKGDB?$#?jjb7+Pq z=(Ky5344h}3?EZo%X7)zc5=Hu$sSqTIEh&3-3lxgQrLa=r_+DTP!cTMAB?g#lg8pipeDuYJ^9)lMB01-c^M=;OF(SLGib0zrQhgEVOPYxvN6 zHA=DkB~c}pI#+|=L2nPj*LM3O&UJ1MA_t@KgQQ>1&C7Dkzq?0Xs9W06r?wOWHdD)~ zUO~UB#P|gl$r@2GP7kopW~QfKjjSNLX1Ym057i1*4B#gau&sJ)+;qS=tV|Bbq}`t_ zfV{^yi6V_Dz*$`=Z>`P*Vm$k4ew$-v_|~7Ij~fk#oa)UokO^}e&dZ?n_aqyCGGRc32d3ta|XDVm#JAm%L65=XL0Nm{mV$&p@yN#Xr%&+gC2+^Mm< z%3{*#bA6(BgZWIk3m(=%6Q;d|5Z|f%iKqtSlfcT@4|?Na@6tv#Jpe0FH;swR8ar?Q z*Iv@Y+MyvQj!2uy$cqg+UmI6fJau(-BU4k3WvRd;F$YdAuCzn*nU)|mP%KlX29wp3 z8t1NJL7CqYk}!nZsUOP7_qbZ&JWHUg!c$ZlfNf4oZwN5HwYKiu5z(PRFDfd10TVz@ zD`8E=xGl1v%W}L62k1@|NWNEmM%Zd-`SXIiGD25w1L*(;8xe6yHWW(eAKJ(NlZhzcQl=3j4^f)ZCg_-`s zK-}1Hij8(cyr>#G$x z6+de=%6%peioXo}(g8#ZK2e6J&VZQAu#sO;&A?VuQIThwxStz z9V-{&Uk+|DK*zajez68vqb~fR|7RAN*C%!D>(aTDqaLWAkwQB(O~u4DvERMpw10hh zy#Syh5P4noc+;%#5&^7P&G7#)#rY)sB`+5>-l=Y^>k)`EMh7q|7fN1SRcTKjzO5vg zfZh&f&*CP%pm%7PZD#tH@-M4z{JMk7~F8I!QzBrz{!yJD>JJ`V}=%(D8Ou zXW>ur(wnw;#f_4ekXQTp6t=Nz6*jh!faus_YGVoU#h0Ng5_%8sw_iO1^^WB^H zn1hQS6qcJBWf+%8wJSpZ)-`Urm~XOIRD3aUu0v;>vTHFocNh?Hr#2i*DR9Hs!MteM zuF%1m5iurV8~F93K`YZEH8|}aN~HhjnDAXChVex=Rrzmw#FlguNxMOlHCC zKi?V}))6ZYv2;gJhz7*O56^|{2{PzvPl`vv;Dx<-WVlp@RxFsD_&J-BGH!GXL!#T> z>sA{gR%?xnfLJgi_#z`O7R(C7XT(e+RwhPv^A53D*9b!`cNS`7EoU^ow zO#5}U;hWP`hL6`WPn=d6$wv8P+IdYko5F)_K_6^6t2+~Zd;_rp>>f=%x`WyKq9g$7v#H{b0|rTeWF)#_HpX_ccIGa z>bG`wC3jprJZovRom75n5RCO-WiR=dQFTG&wE7D0)EF;P3T|7aYGk#mM?idhTVy+5 z^vTR%Tx+cy_OW@airowl_V7l=1YQs}OU!p-o%@xAGEl%50%|!n9mw7AbZ=k#q9?_2 zv3mAh7?SI)B=+4#scZLr`#>-hL`)=z=eWzKqm}W&{nM75$}{x)9?TSY-cE^ATW#zh zY9FJvZAY3%gaWgQ$UV`v$$UuwW3J%)=iir3Cb$0SCnZAH6M7qg-FWMCUpgDM%F>9D zj18Ns71~oex8}m0@o`;x&_y{=HSzrvQ&#Pt35cU-W#_0#_zv1*`K3!hcQ`iiOJg(V z+mBPZAlO{}O}D>LC`*DY5m(T;CiMFpx`53=e@jD^QaD}<3fkyx2V4I8+<+j9^46}s zIa1yMMjXy_UpY&FT-2ZQO;q?irNQb$vb0+c>Q!@9-KirkyL@(^IA=aS7Nt^?J#Qz7 z8SmeQHpT9n%hqkW`!~h=MVKvR#y@6Md%u}*$lC?bNP4z%zZv`W$BIQ*7W}qOw)FJBEj90>j$Z*s4y}&=h8IZ zm4YnjKUp4r8ERp-O!Vglec$o{}L-yj$GO`EaMcw9kfrK zv^v@(z^w)##$TjA@nN}KmbIk~y-zQ+HX z6ycoxy4KU4+AFQZ*Z|mhVPZm0<9IizxlQHd^8+8Cq}L_L7;qnZ`2x38{Q_v0&5@$Z zWqAMVn$ulKq5JOS!S{Ys47}sH5upKd;Y>ao;Xlq})BhZv5wgR-=&i+_Wb_iOgnCoA zkb?Onw@8?<>03;}erN7zl}3WDnmwrKjZD`*J@04)q^mz5knc}*LWG{1#dk;Ux*gE- z8bBmirEbjqm~=*A;gra*`#&WY{wq%(*KibtW%;c zYuEG5()YM@W!$eUi+XRWOto-*(q$6PJ*6`MZs*VAIE+>%_o^piCxfWH(yph!^y8v(&yYiF|Hy=T*X##yHGBQv=9k(QXJ9MVkZ+FE8$Z>5 zs{ff@-u9PJg)vcn=H1h>Fo|Hsy_*X>-l316K?_#OPWEt{#3&PgBmA9$c5rYnF9B%N zvXfU7+aai+6R&r8dro>7i&q`1E{gH~3+`|3x}r6ytg1{w)Sltf~ z6rgSJGB$1E#w5RsRnD6;Pq>P0pWsCVZ`z@;$&#W6x}$mjRm zeIbd9o>9|@)XYYlhNyPTPDZ=9y}lu8WlkZ}+81aGD_n?{F!gQh>8u~d(dQ^O%V?5I z2bHxAJ+5wrU16PN$!Wb_$rmK(QY<9+?mf5d9-o60KXu=`CYm9Z#nb>A-GTM^khZ*9!Xcssts7 zdQFn)ZsT@@4b{rxnU%zo`&`(l=$p(VH&3}rANx1&t=8*IH!H|jCwcqHHoWhv<9`l^ zvC#GTPx0kUd_1Aip=|8@%}IHrgG~8-oLZJ7ho|QLz4H=}VU?#4cmcyU`hnZpTrL11w(NN%Y(X_>HHHZ1ANd@6ck4gfb zm37QLO~_LZR}(eO)D5Pg8D>sj z!HL%!A$?R2^hhuqD{aHZ#%Pl+Gr!q$jP#`0TqsD+P@|N48)M73Kq+7AgWPBN>TGQm zn}bOe8vxrwO-y8_yjsRH1l>H=Mt2%MrASuKSNQ4pGkfy!&1;*Cr8KZSK)>hIY0wPi zLii^A*SyUct%AdTkrOv=IuXvjXXaNJ?m^-aK%o2x(hpm&)9yDf$rZKSBtUA03ZS|j zQwqFBa(jWhMF&Io^f)a%@nS@8dc31K=TGxqLE*ADw7ZT91(1sM$Vz5|c~QwDQUbg) z$~;uQY1T}IFB-R_b$-uud=$14wh)_be=}_}y|roc4NL?x>eIn*0OEM6EP}fQqPx(i zg?;+nMoI{}DBYMRDls<(CsOmHa73m`!Gs0dv&{5d!05ZStJ>$^KE5WB!Y(rr`Z29e zF2tFhv5@RphDe+D31>*y&k+1N3VNnPgD`Fy#3`z)tclSm2qDg=a2Cl6Z7R3=+irL< zuh3v=R)vxyyU1q&;ON*blD#xK>&tsF66b6PQe>1WG3K5%X$z19y?AMkcBjjzm00b% z4Hc+F51ezO9<$8SYcX8j$Kt}3$s22KfwDO#+F{beR1T!azTSyh?lsfG27tyQI%v>IJ@NcI<9-@4`k z)T)4vGPZ@9v$&O{W%zJM03Lr++{#;k761~`HbnM18;rn4G72-F>>Dd|`7Q2Si!qOl zySbpJz+f_d8U`tnRnZfuXXAB{ob(dDQ0CK?S`gzu&M#4kIaF63nrhl!U(B%$Ft!Q_7E~7_&K2 zlI!g!(Bn6%0lhef_=UgMljnuE!?3<_<)#c{<%XA^MBJjN(V5TNXJFC(9p0JJtqbyG zehqo&R9z)iEH!a`a(j7{4>Jy67qVBpMDW*%Xgooy>6UF zkKEZNvPF?1QgME|6K`6Mhu489H#dT;BF*F$zR=( zo2y&xr^4vhHe#z{?TW-1i*v&2NRu4>y7<@WkC+|UBNW#MdS*(KlH&dWCHA^vW9yCrd-ot_ux>^kKPzey8NvE7!K zPB>#lS2EY$iMdcdSHZNndL`4c&+p52pjV!Fqwi9doGAvxYoq?feM|AkUh`(ic*&kl zKAo4C(0K?}TMg97IfRhEeqUoM$;B~w0^bjES1o!-+hOXe-ujB)5IPBE(YdED`gL2Z z&tv(mcdM2IuywcWC$q;gzy8ZLLmTO<=atYj2K~MyRd;8G0qG7 z<3(AUA9PIjn>V>LpXnIS#qaAbMLFELZf(@?)qkQtG*iy+-Rg!y+T*!DzJhuenF?qm zv#U#8L;#GWdsy~YK50&7+6l!Uony{*JW9le##64>&VTP#`j3cBD_=$spVs+Jhst2r zl}J&zo2pZhT0#E$Xe&lw^3Lh#cx=A=G|acP)}cGil<{j8Lu5E<*noC~`p>Vh9yYil z5qux@0r8aOG^V{d3TXULK@DPDa)=)nB?7aJ1Hh_Ce%(5DrgwWemZ@_giXxft+c%os zBcU{u8G;uncv+BFk?kXh8`(6nk#w+1XPLzg==g>5xu^&B$(&ZmFSZeVFtYGl9vRd| zKCX2A+~+Q0OK~1AG#Vr-_{ICPfA!y_bP0M;gGIXQs*m=M3oy*19|Z_U0AI4+B}nfTuFiHBVzsnpKt$monA>OGYl11=p>}gzcg3Zkq}?OdSDCF49C5^ zCOPN~BoqBj8*$%6i8brlN-DbWvK0lfgndQcr9+O}u3K62|D#U6kOE3!R$83yl(-P| zaShyjd7X?7JP)%;T=sbw92hJ3=6N6+oY=_K0cYsFO)wUjmh0ejc=xlQHP{?#)H~&q zY%@)URsi9K{a$N-#?2V)W5Y_f8(;XTHTmG?$x4NwfXe0eotT~{^J$bHma3OZlYMLG z#3b?vxV4vrm3Xd6E*j266;Pvj4>_EsCO4GaC!KHjq=Y=H%hJqf>Q89V4C1;LU4q8&l7Bqk*;-ihDiZm(`B+*$>@DtZ!M zMr{d&dz;21IwsOYAO9F-e z8(irWq5T|#tMdT+ShC0HIx=sRdTi1%5a^0{=SIIWtFe=k3fLu)Cx_^AwXgeNxtA^o z`hAaPp6;2x>lYeJSBZ&nACq+DBH|KoW1Zj2VZb$=?R<<6K~`UD-{^-mB-8Nn&`{>7 zI0&Z9q)5FL`iqU9h9BzbK+rHpmKBDr;>tCi!%IH+qFV(}h15{Lq{X!&;>(g)=0_b{ zq#V;HNG}#QIiLW^1YsTFtt5JMqs5@q23`&yg|mRP{C{L#^fOW~pFBt6DTksgViNR! z!}mGp!=GwR$0S|AF@3Cyg7Ta!54}(ktO`VP($A_xdC?Eq6?M;TbXglc>TaM!=x`FF zJ=SO8YM?q;r7)GOzp(QmlU2haACg@bdXGcsUS=&HrS$w~Z%ezICM2*)42kE&x2g6@ zl=jYhXO1v2cZ(UmJ_5_G{I?p*q};DUQz`-@xi5At8cp*+kw^Ev(pyqFV_PgV-52<9PsHi(jH8o{XkK z?eQe!7`OW;=_qSa=Ci$9visd4LCZC7Z+gH2xM`l>1fA4xX=zB_>S77~%!_1DLWQUK zWhxbK>?DbCL~7_`#+E9nyi)BnBM*c;pJ)m-&Iv+sQknhkocV zSTu1;c8W2!Ken&$2LXWpZwB}lA3=7$z)Ft6pAY9cDn;zQYwqXLMC9(bU&2M&Z5`zi zmK!<=pH>|Jt4Nva-f&7Ik;!|G^@Owf^WRIgb?r@aw+7kZpEU^v3wqSymB#$UJ7u%2 z8_*SZP3{-3~Y=0!TU(lkkcpK+20WyL9H0|L%s=pCymDSwa>uab5v z#&WG$wAqwqKt!nis`JPCu`3ansb|&0yJ^G=NqsmOCih-U(Xn_0Ul=XPKN7rL^6}ZX z7IYiN`6yms!+Bn@@q03gzq*{}R2x!EJty$JCQVunY`$En3`6zwQZz#e%8@ZGB{K4( zuE#{SnPp700xzCXCxLdLkjL^h<6fg1Oi;_vRaOV$u+tXn_R_txrQ>3reEB4qJY)kK z@#>`u&z{~)iv${~jN6}k1T520$yasImff)buLu0{RTibWUVCKDTPSU1C(pVtc((dK z*HbD<8>xrg*GJQ8p{CzQpV1yzq#=@wHeDKy^oF5= z@VmyEji5E1>wLKy$`>x`rY@poh5W*EGkO3l36=Y61*Its4yxzgEW6ixjx-0R0hZzv3Z2KhFgq z7WD6(Mkq+ZF=tP!SjsK-9iMXPyqYjQRU<*&Hi;(akExx!)M^J|HA^QT(3RCaS2 z+kfLD!C0+dp_2R6h_E@S{hwvRtmAmx#?w5kjk!eUPFNnwOocA_xx%@);03{`C!FCx zBFdfg^F(D~1zh`IDO@+X(WyeIYd{_Fgn|y{P9@2P1E0SfGE(=B@7G>%qkbo~XbIj( z{GI5Ao60W!EVrGj=4I~EqasvP3x6$0G%VlAirZETJ?2#GElB2BqowHAXG(UPpZ`f3 z-^?(q3Gt{JnTX$SLN5=<-2w)1S6=NVE6$`5%iJHpb9$>b1{U%fg9?d3JUUH4pL`%h zhKDL{U|d+)d05Li?SARN>&9@~m^-E#!~d+i#oB-QQkXvNd*C|w+>!Ei2YekjQM@IgcKHt zEV<+jJ15$A75#<(kEySYiKG9%-o@SBU5mTBduf3dFH#B=r#Q0|io2KM6lifR4hs}7 z*5d9ii`&A!Jm2J(yvZb!`C~Gf`N+NZ+;h&b^$|yVjWiAbJJ3{byLZWl0@D|#glmd_ zHKhn!aL`&vX(z6d6!iY3bSgi_dT~4`+?yY8MFr8Zv3G7*(NC^y`e|U^vQyq3ljpoy zOMcl?ZXwt!WDx3a>q_xwgo+gUdRKX1tg^DUwYiE>=O&4nuHst-F57ybKm7r=BDy54;p49;aPj~?*_7>{gT0?k$@ZJy(b+d?QUKAz*XA8XzC21 zzL%Ff8}{M%N%W@l!ZYJU?yrY=oM2f`tkT|&tC;0@aanTaN5#-DVV zZ?s*leSkTU097x}f{CZ7$GlcZNVTA+D5}IlA|Cx4J`uDM)2cYdlka0@i!AT?V+quA zSvHCG-+@g0#NpqrSUb$66y&ro1%BMqLb|qjGEvYRWYW5=$|m#rFO8j8vY8nr(oP)z z7(V7Cls{?D%t57!J~~drXZlJa zl#rDZ!|5w;5tnI*;K#Cq_MAYzewn*#CVXv~4;fz%BB8v=I0yKY&ewwGLKQZ6fA{pa z(#p>aZC)?D@=%ggJr1*aadkn%IakI$*59mRTXu(O(cfDtX;KPAPMyuMOOO#^PX4rO z&ud*3M$bY%1Xwpi;v_w_^GEE#;^ zkH^6uT)(n`($oU)?#-NLmwDz^S6{jwy=n8Er=hzT-zP&l=-UJ*@X$h3hi zxBpnynri>20005aXxvrt7&lWjrf&x)8U^3YyZpobfVcOXAj5HQop0tB6%6AQ<6Vvg zu7~x2X~3i(E}@m7Y2PL!f$Ejj@ID0DaEv&_>W;*mhLf1!ef8`<&%NiXp2mn^-KqWa zVbqnDov1;gO58(Z)G4H4J7-hXZ+|lb4O0&zAz2&a8oS&8YblP=MFz)L63KM<3?S0hNZ|+=c++0RVeWmm)#A*~~4@luh zkNo^CV<$PJ7*NItuFCs$Cl||6V878wHhQepwWX6d4SsLY6A6)g+_K-ANwK1&*`^U~|iA zXLgpKDtzHmpN=?CAW`z%SQAZ$QP6p9tmkeLRtoJ+PJ6gko#tEyjY6GK#x7&pvJydqhdP@lH4t1R&r|Yxl_FQ4~l_0gkyyKYhu7d|SY7Ju<9kjt+;>y8RwePgHFJ zH3z+9vX#!G;O2BaJM{nioe(-44uR$!{4wd15RWcDCp43RJWkga%{84;jLAJ~p4eaG zuQAu0deH&gNE1kiW0q$?$u?^4`_u7U5~SgCwvWFOI!S0Hux{HXmwPc*zg>(cI#$`3 zt54}7@*8K3N-!See$+MIrVIbDGok>z+Wnj}G;0{bLn#wOx9nvOH zAee0-&X?d0ptxK*VBon@jyWUS>L( zoY?`8&=W_Nb0b^p6??zN1H1k_8`MaLGxfzxEjc{0k{NSXex~yh=7& zCSVQZcljqH@ozjDSRD`ASYdHSzYLzhdUQo!6Z?-`62-$5RBU_Llk)h15`V*N_l{%j z!>x!&tS_e`bV@QuAFP+Gw*VzWBa>>L&;m+$rwX-I)O9i6#K>apEXXDl_@|`Pd&!z# zP05zIh?1!$3v2#EnSpMK*jryLUc%mdeZ}t1UWa&d;HaW8d{*!`Yz;{X&1ks1(9!-r zb|yNxoRWZVXiJWHl0#3#R@m5&qLgyq=H6X`nT4ifc+mGrZt-6J><@Pc!rupB9-vd? zG#Cdi{%MjWBQe!~ziJkUeSM;`7o`TR$dmslmxki@m1C)z9IWaC{vUOQGtm!wB>s3n zP*(DL?W}bd7+hxMQ`S`8&wu`FmN+A}2CNIV$yls;CO{++^EO)@h9h)x&u~Cuc3Y_j z9EMDPRR)G-6IH4WC|M)%Wg5_TbDC&!Gc3n>{9~R-=1jYGLlB?Z$o@mF7&wbJ?iO!U zVtnM%e@gphM0RKi{Z=K@lt9H_fyO}d7QFmOmysCCys+zx_Z3ZEc)Dz}=5T)|fV`(j zB6vyi3$T0r>8aUhV2iCnDN;uuD_L)fx_5L&?Jd4U%0O12jHqnj@OM%Jj3_eN_kDAl zhDMH?f8@J2EwA`$%B{t7<(MD8k4Yzz4e5Rj?5mPtDxjp`yWc8IMF+WPhcKDyk4d?P zU%ZS^>h9cpw8z|bqnq_oMp3xarZba4e@LGhP6O^#kqSMpW8_;^K=HetGEJb|<7e_3 zs8qi&M*HYAYs3gLo)F&U`%Yd!+Oc77Ps)`WM&l=>w!#Xzy_TC&?L7ZA)rQ1nwce^7 z!A}KZ6k~unP4%s`Cuf%>q~Sp_p!l6-Fk=9-31&@dHmS z0MK6D<~;isp^k98;_Y%!qEL2R3|6KbCF_U3R$80;C>hr1yD~H zvy`b=v<&fe+3M~#WoBpC!fkaGG1;T>?DB9aeL-!sFeesB5t!<49{Q7kB;-peL511n z&((3G=Vi>9hylBD-PO(SrLvz}|0;@6qs%oy0+~JyylP;k#JcPS>@GwXeDWEr`k`fL z#daoBd&aq*bOWDdRtnLHKTG=qy_*xeijdo$YGDpBy`~lhPN>BdC$>R7S26yVBiNiZ zJSUbKYf>Obvy0HIS@n2N1V6ACP^5QTtL6Q!5y2er`8A$?TUCNX>_<9{`03Kk?exk~ z)KKj#!=|d@qpP3&gO?Q)13!M_ilKb`XfUs|iVeoa$c|~ypyU2m{WUBb5JX1-gUVYv zN%b(H{-^))GWt;%G!upoZjPCr36x*{G9g_*BE8ro_!JvX$AMPCibp>L{khC#ymjs_ zkaa`|UfGMFksqlSNJDaN-t`*be3?^J>}Y5es3`^V7{0B`hT&q~hF7D}-H2P=oD`S+ zEK-wN`a}&I(nHD%#ArqZpp_D{{g8w4)b#0L)JG5ofoTw1Qv;G2wHW6(N+pHE>k##r zeG7TAFJgWX@lm>1UcWB4R;P@8EZ8#)Z>%Rx$Q`O~7OUS)+>^g=4B?Ba3qCuHv(Ad`=FsPf$^DMJn) z-h};MEMkl1DfC{&inI%qKCOgIgGKzb*zA|)sqOhDV!govSLr0b1^lg*&InT@&6I!1 zVM&=1!(mLQf3ZM!QfZXveTOTd2K_e->vwv{otIipH3?hUp7zaWs%!n!0}T%+hp-3) zsV_1Fy}=Uc&m_P4C(Ks_ylGPNW!%{sc`)M(CkS3x*6%imaGgSj^5V_}en&ETVl}5Xm zk+8mrHHM*h6Ed&?`7&IGZi89nkMst6k$W&qzJGw+cW2Rq<2(?>oItIGiKA-g>s(*~a{LnFd(OLFy$3C?o$tMk5*XIWx5r9Z5A zuYu)&bpIdLKPsz?=9UKw4!(*2Om3;0Usxz=upHQM?x^pLeK_@{AnfFJ&M#|pKew~m z;+AEo%L{)h@oK?Sz2uopWE@Xo7I*qCO=)nm#2@8{(bOV>lM7f^+Tl(VD)i$)!SFL8 zkd;6reS&eZM?^Yw;?RcR>YTA0^S`P5C`E@TJPRkyi>ueRX%A|9mRd+Z@aOKR3y zV?vFm1USxDS_j*LG@ZOxXr7h6hdZ(q#-ckaFS}*V4#$*WYhD5I z5@Na^%*LbeTCb80I$O_1e$34HPEZlkz9f)Y_x~(1dX=q%vNp3WM6;P%uFl|bI)CH$ zA?1d%W7m?+#q5uiAXdH_z=PygnEP-Bf`38|PN_t&#PG0Hs${+F5y_~UV${udW*{fi zT`7@>HC9sZiuq_8sS4Y4Is~AekG#ar-WNzPW+xF#56R`t>UmJQC#@7|nkm*-+OwaSULHMLLQABnwp_(|!X1ST-LrgGb^LsBp*v_bEsy;4=4J}o;Dq@Nl_0q1o*{T>Kz6d4uI{;SC;I-QMr*@L4 zZqc@M+>Kq!ZQ$=BAgvXCE)#;egO4WL{$Q?uZx8!Alicg?b0Ww=xO>g7?R{Un#f)gm z>aRq4sn4S8No|TGX!y?5>+-pFob^+#xGO}sK3=S+OT-54pWj+|vN}^qOxAS7c?<8* zWL2rZEU}@PPtvQL{SFY+Om+U4xb!Y%N9t$*{D&iEl^Dgr)>v0KB;^aL6KDr#9yTI- zH5kOcG^>q}SZC4}#1r0!^uZz@uNrMzE;QE2{qMOb->1+KV9LdU1@0;nRZS@}B*ai> zu`ANe)d&e#yzhTOM9a-te4;9p-e819Vf-6X?h8=kP1+zpKqfC3s*RQ~@|IG|CP7TF zb17HYvh^(?_P_D_uR<2y)BET^O3;J7@3;>*1Fx&i3g=c=K&F3%CBcu<_(MY6&s;Wv z^~m^SE;VH$@_cV%WwOFm95CK*@8BZ;X=?n1vITZpub{ImZ!A1it%tg?kzA{U>C22W zgCP)JX)HQGH+O%76uhT|X)gBCy)ytX^9*8vjw1U$?l1x#`@tPm>r0*khxxkwo9OS* z9nX&vEK8n4L=4a1bBM^yIJ^09s$a5xg@cd??YBszstF_1pC5UVR?vVhxuXuU;{l}x z&cAa;#mF9Ku&_LnjA|y?v|eqCwQT2D&wKhOgbcuScv~I9n`EkcQ(Tc|_`OD23V%rJ z?5bRd8$NM4Dh`ZHV03TXy&%jE^8j0HF&_4Pk*==dJ=^iEYKgrMZ|&5ipRq3T#?V$H zch@YRo22a~t?z9nN?609>Bp;BPk_Cq8#Fyu-72URbKE9cxu9E<>a=mU9JBR%eBZjF zIuC5{I0?l$c}IdSEo7~brIP1RzKc|N-xQfj#q!FU}F9E#J|IT*17N2RQK81l?yV&P_|4WLJpW*4GXBy~dy{&cG58z<|SHw@0 zklu<)x9ac*t(?vEzb?u`;~Q^m9!n=RB@r8GwAuy&SV5iwxyK}+YeZ*yjsVUeJ9W6|KA zll%LBoz$09&;C5ZkG38)asUtV*Y=H9)InF_g`Vv=6wYuDH=MxOE)+T^)~!lo{2Im% z2}ym3<^5|;l(ivB-?Nx;ZJ3zf(x(0GKBBsp52q=d6kiY)J%5Pv8I_lDRA2YTLE1iIOM46 zyr;N6!pt4UVA!R!U{ERjzjnCC%07nttas+9p2TY#ua2CvWU zWvI{kKm3(1KvU4Y%*mWx0AK&V8yUj!&g&1p*EXGWmi}jr-wJy_r3%SZCGWY4!g>CG z8oG|;7^#rH^Y_-O-h~A!BV*&**4F5>w6yb^vjled;X@VexM3lhA+h%lthtmM3=}lF zSNwi9gWiW17;hs*#5VY=A5rfF1y>$&0L%=tIuV?s5sTR`KS(9=crZ!ztvLaAK$vI6xRn|XDaF_r=e{Mg0>tyRD_H@b5g3fBwgD1$ac>1}ws-&Q& zQCA;dp+L**8(xd^b^*Y|R&;o2zTJ?eJEt|tV}WgL7UHy^5+W!`)4NSpCFc56SoGXq z%BXE zNKl&*PqEcOHvP4YUA;;JPZap{55yJQ=z2|W*?D$PmO@X1mjEDv9N6|et8nV9A~^fc zgEgBv{znrfas)u)>Q(0BY7m-BSc{C6aq_Rj2ov z%&f%r?`F(jxcYVBc)f1U{A+Pz2Q|#C^NuYWBJY}8-$$_G8|zm0j*!RJR=@W8vcpLw zrRAzZ!}V?e_`pD$m~?I+jkPIp_a8XRD-%A#D-}L}bn7w_9S;@(J4{>eck;#PmCGP{ zEkja2r4<~Guv+=*d`y3s_p{&#N3LSn6=oY1^muRF_kIZ;2gMc3zB{~H-&TVit@<*{ z240Rn@0H%}Av|0OEigy;MfELjJ3NXH`n={>V8A{5vj^{11;ex0f)KouTd+suc%s=4-nP-3tuDgH zl>Pc#y_>%V^JNKwipa}sU2>3V&EFF=eifR?qmUCcbMt8kJGzlMpx|w>y=#WTeK9~a zz%A`@ykzv?9qRM}KsdaQ|Py~op3!6Zm7g>Q8iI$U_u3+FD94rj9yosvG# zphsdi`zzbkL~XAnS)n&!9X%qNl4Hx(J(_NF5I8SB!YErAkhXnbPVi7zh5V74a%VH zz1#KK#&zN>J}Bm*Rsa>YUz}Imm|O-OA=H0NKZr3c=jodE-UPzV)HP-e%G9~6#@jO* zO?SHKKHKOGr*M#|)CAwttf}xxKH6V(+u*NH)BDR<1dW_-gcQ98CS$O5UtS-Hqa!xT zyYS`i8h{YBynuPkS!|z3ShYWsc{@awzpQ@z-44HNJxJS2izD z1@ArYq9Ak>tDiEG&;&o;<0wO}zmE=$%OxkRfC3RWd9p-q|JYsn6CUrndSxQyfCVpc z!|lNX19)B&oHuy42ne$b+(}qh%e_VV!q^HB?26#6Y0_b|c z+2|1H%fu9yn+Urt^1rVb%ArCOyvPX2)FpN@vv>GEYX~9pQ8IGSK}7^V)d0-%(_C$yYRLKFV5ny~U>f{)2 zA2)g%1At%xZOhkw39a}*z$q)A4!cMI`E-bG z0#bdY$g+=6bKkqgU^3UX&E?XDpxEbxfucGUGjC2+ck4rqNX$x|2f zbDWb*CS#rn48P&yyMO1G7!?)%x5I#1q4f}Ogw^1z?}KF1RYUC|qe)<&kok2$J-<(g4zn9Tcy1McKrA3^oFY@D85_<=&ER)_Yu8!qMjjUFgw=KCo{@aW> zR|A&V4!ePhLwkfd@QB6RV;$wN?P%ePpXQ)LHPfj);w(oXc5+B{9Ws3;36i^Chy|*! zMHkUVG@GIUM9A#M2yn5;29wim*{-MWO|iH!Yv14lFe8lPvt7J(TeSbHdY=LB?q^oO zMhpKf9}my^S%PJE%PK_{TWOY-Rivc7iG(-P#wDxcPuwz^076#gzpMkhLqw^2xdRZ>9zBQBe=; zC4E6XNQaES&~fApgmBuV3Z%L%8fkvIcO3jxu~l`#t}k`zFThF=YuB6fht_RtP-5&t zM9)m-ocL^KI<%=_Fa?mK9G89jVBqgm?IvS(DkgKq4S*(}+?2T|V4hHsyLFQi{zg>+E1=F(T3MMySld&C&-?$pc$zd{F4Z-D&G))v z?BX%dv8=WAV9Ib=<_bRMnd=$92Y*cYdP{Gm$y4$}y}!fU31&IEy|yc42Pu;*ly-Ao zLgu{Xf2o*5WdMZKg!X*|ckUqbDi|bBjcL~MQ7EkaR-en_UUeC#)5+r2aM-oro=mZN z$KE_1_p^vQ@S)CVC4A#Ed{hQ+&eiX>T zjIe&$Br*iMYFZD#W0>0vy^St zOrz@?Xwl%^P}I8|e;tq4&?Yr8GZ}BAbLDXAkPsNc;*Q8FJ-aG6t%cP^XkU>Gq7V^h z)Zs;$0!-e>OQFK?4w0K+2X9Q0UG%lt>cBUVVo1cwyMyyV>rQOS^r6++ME>SWbQ7N(fOwKGq zV}s*aB4T}dKvNOwZ!*Ha3srnb!|kLsteCt#p2SPwLf6=Mf~vv_IDd|WI;2>|tO&eZ zc>4BRjSiU#d699lck1JWA`vTJ&8tQ&fMXZAoA8K5{vD1kdynF3QqNH>7Q~^+Z^Qds z^^_AK1h4f+$VKzJi96p`zKZFxdCoj7xm$^DM@OvDkpqKcGhxGsYWIlpU&WA7OD*W^ z16X>L9~X)NV)h3ytAa>LAtT#-D(RGO-$G`L*6vPM`eas@k;SxJ>atigDCU4RIn{Lh zfkA~{{_mC&*?6VJvm6J1Nma~S-~G%7>8ym)=0eAV3nyH6(1lKcBI z;!QQ21o(D`aNC_a^lN)rs`-M=i3wy;?NhYu!l#*5khJy<)L@S>MMb0j^YKCnRj$5- zLhB9RD0;?knM{zkuSBN7*wiTyvs<2AXtg$X=Sa}R6W;7SDV`?~PTMt@ivgY28xrRb z$B_SFaK1{7pu0WQ+gN>F%^J?m-Kj8J_38Caur%R+pNeRG>neV|$N}^UA(d1JqDw%R zdnlBPujLKtx%=EQyW}dk_eW%9^BV?553}XlZqd#c2C>*;!{)=lDnyyBsYUe-ZgMYtuWX1M`*9XuE!0gh1vq^PtZb zMQ^uoP5HM^gC7n0j$ikp?fClAo9?Y2XyfhAJ`Sg+V3Kaw#ZTP5+Wt`T3B8=Af!UsC z;~PW2%&0N*Fd&gpU$+M6FPc8e_sd%tvm~JiJdyWpd?6(ch11jJVNha`Mo6pZe+MTr zcC!gIR<94_8TXf>Gjs#lz2N2V;*}VX%)qilJY89`-)2-r9FS4_UYSSy^bc(w88Wj@dRDT9Z{R2O|m65^5w^k`RFnnFHeK+}1S$e%4&B~hw- zVKc#i?@~3Nz|OBv+G+gAQSkIp5QGtw23F{Q9C1T9l>rXACVR16gx(~PH{0IS$rS#>=YpYT91>;WqP~Qrzh;4$aT%zS7me5WY@R-0Jaf zHBP}b0j#_xx1R06`^-bwGAx;wm4XjR!erlS=D>5Ooew8YG);st~BJ`MD~$~i%sSDAa4 zcNk&cl@Ay67tgsH{AJ_e3csUt>Z}juhMLdn{KSKLguS@67s*~JwQl)z&oLJ9+w{D; zwWUOlr~CXOW=LeFrh1=_xIQ*aJ(Rhjo(pmxl-=r!1_jM*n z^c@gHabRc2jc=5Jow-m-nX*7#(&$}QKpCr?vV=O zS!awS-fr*lx7y+S$_Gm4wYlXYczO>{k<)*`4`M68S9`gD%)&{5nTQlGx95OV%JEIc znWwq=sCh>{U|3#$5(hQAO4mY}+f^YfArttZGFfuz*#Cgu2JM}SaxPotR$RqdZ73lX z(BH<2Yz(#_acgV&H(kvNskNt(xWjG;nB4;i*lOmTGetjPx!j&fXUhh2VVz?UdF0rp z91izoGBUgOhy6^X?0s4Y#Uw=X{)mf*Gn)5BdQtGm@uMOdHpmf4oiI?`aEVV8ITC2W zEhPBy17_X5=IA_^7;_`DT#MP4*i4u7&K80{twjWSLpy`gykpRbR^8rBYxU|IzQs%5 z4b3G?%)6Rkj#zxqaF|d5zUtkPEgR~97ly8G=)_HdZQ)J0R3Wk$ z)k7Zp*Z3u_TMmd3FJ$gpxIlO|4JB}cU)IeNzzrpERJ4KrrlMN+L!c^gTfE@Ebz<)3 ztpDPXs*}^Ch!FCi#><0KO17_ldvb1|SOEB|I$-R3h6_@R+oj0n*sbrbB{J5R{slvf zGdeao3C1Mv{`8K;YA2Q~u>OFfGtoah zt0GnL4g=J~4Au^p8)tR{OeZ>d&cmwqturt5UI6W~kiexe`0RgCK-N;TM?q7TP8sn;*$(|#$IfRY_4 z$n(+UTOEKCTki0Me_P zDuCrDCKksK{R>hbTv>9}yZ!P)wB&mew}G>v+BGpsx5CYj!oTF4pOn@qCfevvp5|${ z;HYRBxIN2q545Uj2{pg0NG32*T_Ve3f0`G>t0FLfd=CMO5jmf^&qGZW@F^8HoP zJq#%oY0J9hp9;|XBXV0-#r-x39a5ge6$ywGtjR>)yvQCn#t$E5wR*6|^c1WSgL=Dy zaUpLx-1+00e(UoCt#c@&c~V#dXQ6e(Sw&C#xKBk>vGp1h6s#f#-h^B3l9Xe|%aO}suhuCRxuqjB*M}?)c4TXZyCNyuJre1pDy71@K+N+a+pfNvhGcmFkeRl9{ zbz8_B0zt~MmS;$vGsb>XF5kSf+f=1M1pY;P&g%&M8G|eJyJlitRSiJ0MERt&1UFHH zpyx5d6vve3#+S!B!S6^_{49@!34XKhLLjZbku8TEX2j}jhx1L;&WOZnk}13l`l*Hu z^YJ&|woGR_hh)H+xNL#5v@X>r;1Ib7Fobt%tDVYTW(~#`I<&OlElF)MjP)m3$zp+y z`I2IYU?M?mo%oDEs8l={R%`P^>dutkM94R;_XOImRn^}}J{r=SD^l5psgTTK=D+i$ z`QupJ44&svolJP!u-Y4At9L_WV5s10&|c%e{(m(2V&v^BOp^YUcWZaR?0Yg1P9sIy z3w%FT)+PL!3DFF40_hY^^EC?FubzG(pWM`;SLNU)DdsTYc>4FvZAoA1dKrbmDDlKj z5A8~8o@f+ZmKbV6w~N2VtHkNpNaBdV^X19aQ$Q>kyrz=mNLq* zUcf$s4<5S{a=*l1AVevEgSWx>^yRaXLiQeJ63xf#V(%8_IMY*S-%!Z-vYfQ<7;#6) zj46dYvYO3`F|(D7pn;(v=%s|1V)v^axCW{nXjF)m3wvWa#X_ z0YT^pdrOCko^ol)hJJ1jgkQ@6#aS8&k-2rbL1%4wEAh#N8-wU-p)7IT6Yz&h&KI?| zq0fHU%X#ayk|tGAO38-6l~S$-HH2}5UJ+^UgaO2BlXV^<%QXx zo23aB01S2ujTv&pOZ#Td4OV+stx3c4a;Xj3M5ytON3g+PoXNmgsyYs;2F-0PTjR+P79A((b3PJ{E5m==01}*2GmMQwm#ul-T;J8=j}{cnH4b1 z`Oyl7)^iJP1N{hB#y)v1;;$Hm#GwNcJrTXDMecDjAbQ#~49BJZtA+C7O^@4+I|8?? z=fR9Rm_K`5QGy^5#D;Bc6V}9hcz5_l9IH*{THxu?&b|~QvV@c2<(4)#laU4QX5PPR zV9ow0fA`XD``xh($vP4465oC`2(3 zqk;&YwCyaa#fm&Z4HGeF%HQbo$tn4xNtBtXcea)+qCO`bR zIlNfusTL56$pNiT5psQNbqXaTOqcuf9VAU-orJm(Lg(E{cXEHKYbw5lq}i5%FnTx7 zY+s{5*pms?EDxg=*{p~Ek4q4uK8jkajH9UuF*x#NpiFcHR`KVMj$w_>dS2OFO}vkI6CG;!_WVa(I&AH_Y;9stt6pH!VooEHe78D= zGBsr+>pLqFmFALWMw1a#MUg4}W=m#m=JLgx*Qf4nq1znQU+>q4Suo34tnS~1tC92H z21b!0vFiy+!}!8uWbMQmH88$uDcADA{M570teeV!C2XLc3Q1x5SX(02&wXZYv&;b( zkwYO7#Lz}7myk3!`7o;X4~K#Gy`F1#dCIR1EXl}KG(T)(q5e>XJTYthXvN(#YE6t+MAyviC0nbQc5sH*nP!IPsPqj)baqf7 zJt24t`?G=!GGdpLBITdDp412J$sgF+ykQg|u6X3sh&9M0_=MMNrh&-?{;mw(sd*e6 zZTunu@PO6UflbUN-{)KIJma$Pr(*Ey0X@0+k)UUD3}_T9dg~^0D$*csFc5c)uV}wx zAH#Dvi7qE`BWP&%9jTw@) zoT|KnaXAk!xdvt6=~?Q;5#xDxzAZE^bF)NlXy?#MI7+d%QM-})bNJ6^i)wONAP@if z^bDCjA1+PQ0oUry-m4Q<-bU4E)t#CBA*!d`u#FHtGjG{m3GJRnn-EH&jfW3S4g7&u zq&2=`HPU;+C{iR5qw_;e+vr7LxD3Y4iyal%D7breDYahZ2!%|0r9i^0-pEIXSzzL; zG8h3cxH$2^aWd;(pd-*zfseuKH)jL)fwImk*%8I;TD6+8pL=;ct?Vm+XB<~<>;a&h zU9N5^rqt_vl>T(INV+sz{oWFOJ|L$wzCp*?@ZythLpHQS?~y*sR4>F; z;r$;LrISmV8??6>brXg?92xN`srPPlgNi}qK3ym z+-e=qf=^4~7w{aD17rPEi-B`!6yjp(>ChKUKV$=EFxzkAda~yTJ zd{Jq>SXdOQ!rt6jHa(jwWKWZ2IIE+Da=bEP6${ab_!Hen;Re4w`}JxuF)DK1z&&q{ z1{#qYBuno?=ZACg%j?GYHKVvt-0#jBWjS73-ZNC#sb?eL*q5YOPIJP_V9f(*1bs(? z1fi~J0Rze<>nM*Z>g!3^Y!zwgAU1K|lb~Sru(gsz>ii;CVUfQ1zhE4yDRA2|>5Nh3 z_TH5TNRs<)*GD^3Y1O;s5sx4JW2g1=&fSgUyM`S`Spy`yUB%WJA9m&3Z<}L1pDK?( z`tD7$3+DiGAR1Sfo=`ryc&X|R+&=R*_W9OZN+DYkdmRaE?#`z_+5*fVIEMUNWw0O* zrhZ7&;%d;1xp}nn5LYY_%3YOVGzJHc-EE5(zwi%S#W73l={2$Tw*-m^P4OI`{1<>GK-c@j$>}4Bb;Y$zUtGak*G6zTNvzd&k7Mz%W`3mZ!(ElFE)iPrbB5%q^`17F$Z zAyvY9w=vy76qzSx^3d;nw`Yi_Bt<~47askUEYl|I`F*gsvJJ8i?8ENy8Ed^+Hf^Jt-qz2xG*K2K;h9GTtJl*sn$l{SSa zSrPiTlgS%&Zf5~4HVlwC(9;3ngJ8bWQ#e-ONv{wh`tZ9uQFsS{OL6*as8BMKFShY3 zlXhHc%!(vLDt$cLSR$wZZbjW*SDDRRu4DJvldOmoF49m%8UFp3LA&v`>g!o_XeN3S zu3Y{>O4au5mEv6YND2mq(xH&xb7Dr+wSn<@pkvfG=y^*Q9h0~@uK`Y?_M-<5yNO+; z<7gksHY5@H%Y@RG2XYgCXB=zoqBhxgE%4e#T}mP^1iIdRetrF0%O2jNNFn2>0m@{U zu?JP6Tl=-(i_Kq`FYXpp6=-4Lq+q#3#PjPX@4R}0$R^+Z@{9;+bm$e+NmP$5LT@)& zPHazT+)?B@B^0K43;_4*z-CKAu6HP5ZRu}W_~G5P#40NK62V2%5cQ7;7L=YSQ7Qrr zc=YPHkm;&&MAZC{9;F1B84Xv++jXet@WQ%#W4Fd`{FCAKQMF8D1o;#3N7}DRBg<{y z*~h*L{&N=K97k360q1YSUZ)8LTdJv{V}fEP$}#u9D5piN-T^{c?vD9F=CF|zMea0D z`_DG7SFi(n1p$5_-m08}X#-Uq)~emeJ+;Dzl_+l=*dXu6b2gS0LxNI0j!iel5oO4% z=?Plh;S(iZ3O~*i{;5+Bbj@A6l3cTw(o^yf66k!+&!tFoCbF163tqaOW1$X~z92HZ zNqrGmhp*T52q1N?Hufc-U(;4~Gh-vZT;ovwJKmt&W#nTY*Cv$fhe!Xv-oE-PiZ^V3 zc3BCjr9nCu6a+-N5k!>uAPq`4BHb}dgOo^1w{(|)tWr_}A|TzNbT_=?`F{U`_lNhK zIcLwFGf&Oj&mGrw-_Int2SM}4oGY&$qOpkR=wj0Y#+FwIl`brf;zDOP;{ps{4C zfd+r5?$jvA=j%j5;%m9^O!3Fc%A9s>h1mRMm8*RvW7yet(G*xFe=$&Z!*~?hYv{INKxZRL*~n8AMdvW4 zS%;@!`6$!xl-;+*EU#d7N3@A5wygnpt9CK8osgp`c79qe^81Sib7( z>&FyMg)2WDQt$jpVB9zzmu%I8wJK=5S4;-pAf4a)T4y+LAg{~J@wYVxmh+B$T>|ba zslCAg8q0A>WVsQncLMN(BZ$7HmXe+ao6D_w&LQ|=>IHYG9TQt=YdM7fj9=v`UEzOx zqAG34vI+$t;Z)mam;^#9W$}q$=e=nDP^vkQ0^*R;-XE0Ox-T<2ND#(O#J@i%Ujfs( z1O|Uld)8|;bUrD>2ec3k#l;aU0A-F=9(l_%8kO8f#^@-;i)}cY$MEDGyKdxkt7y~k zXKGnoF{8PCXG2Y=jSnxYkSD}R{UL|vRbNV!M`R%yNA=o{`3Sxwcz^>qVby$ z7q73`wuLg^y##iA{iS(j60Yv>o93jpW6&;Dj5;b6qiz@8_P5^Kw<|}3d8opu59Y~R zHw37e{aA{uoq7;EG=#A&f>)?aweMJHckUf(-kU*cGC5(htKUn*DmC?yF5EFOWUW)a z5D(z#sod)M!2Y5n-cEHL1AZFMOC~Jmmh^!SDgTZ(+#^28xf|EdESoK&q;w#z#%?4d zp%~yGgzSRUNCX)ax6|!K_?te=b|zu>kX?$wKY=fdy(86HV8Qnt%wm)XkG-cHPqcW^ z8^$_*#p-rDdO3&dLX8LGzrS}de!BGK2Sy5u&v)TJjRp=<>`-AT&>ttO;+Ca&Vz$bK zEYp8oVQhHd&(qkq>?tCq>8UI)#|hrsz-8nqO#Bu@sO~{@t7SA#YN-5k^v@UAzc#66 z>q`k^RVE`x$_%$D6i_slIDs(+@Ci4yGQA*|?pMJ~)I9G2o`8x(5o*f9bykYjg<&)v zZwlRKe(X=7aBS*_pbVkEUmtADie1d#Li{IMTJutk`>6`|2ew5|MFFXqYp zId-UrltEzZxc|own_#UyR;JIb#di*D?dOk2donE7j+|1A_`B~Lm@;eJL2vL<1Fo*F zRVODWv&H;eE#Vx@|GfahCE?^fN%3YqMn#MmVn;UJq~C(Epu-_C$KB_D{d{pVZ%Gh# z4wEnbp0ZRX6TscRCc zQ4bjdpitZreAo2-|IZpumfX-FL<&%{ic#ko!k)$fMWYeZmULZoTR0dwRfZhFtc0R1 zoz=UXJ@-xg9Myruk^dC#*8R{j3=?%Mn317**P+9H#?|v&Y&Bc~8=-Kg6q0`-)0rlr z*{XKKWa+#zaI8H3Q0-pd>E8K`n^Uq$z~M8Hnz6z#z(d;Tqpbh{82PtTR&x8$a}+JB z;8KP+rBbGnlBKc$!HNx1(b3V>gilpANL4gsxCdc<2k|t~XF+CE)ON&>BjeocpkGgH ziyDaSM%58~T6BST;sU4of`}@l&3}E`Q~N=cA%4EiCJlTv6WMpcj8>f4&y%jGI55Iu zm~r2S`DKsQ<#@N>j*S_Ifpvsi+1Z5v_s!#*)=>GXgK6IVDMg2Z0$jdx$;_B@io$Nn zm@s7$fW<@*v=DXOKq>&-Y}zEo3FP0!KNo9ES6d&rzY4@c|879B9o_LEvYza*KWrm- z{N%>hIxBYb$ul^41;qgBKe?M3W^ic+_Go?uDZ);LaxxlnUvbE&Qk%D-9yLvRaefS&SVgnU2E2k_9=S zNY`3b)BGdAchOA)H27b8lLAVCj8rme2y6BxE>&LMp#ZPZ&Hc`WLF$-L@IN@i{Mu01 zcTA`+THfm`LibalBj`;>;TD%sc9cREwStJaEoh zo7vyDyoTN=CmuNH>P@-Ba9eT#9b; zJCI#j4cVDqbyje_iR->7ssg?D^;E8cmIxSiO>)@R^vIqy^n-|`GW}5EFRwCf1vFE( z`b7WDu{&-HUmvY|x_r94@HOa5OiWBkYip}|ui%50I5w`7fYLXIc4>o@Tc!PKX12fH zVDPakCnC8truN_Yh*OsHcBPdOyptjvZwk?u*d0C>MI<1kRz3M6V)0&IcFKmI1wuko zwzSaY_MM3a9L?`&Dw!ua`nyUP&XBy8uVhNqZjE!1)7gI1p^RY4xVWjDKcUa`*)6EU zFQ?r<>0@^kOBXq<1)7zFyblNFx3 zEsLBwS^Q{o+_a#JHCKB7D^3~0Fo~+9{!q!s#0ESMI7OBehmGwBek6Od@a=5Ia{AIB47FJ%va?BYBEky4gCoLo?@NN>6ae$ zn!~{CG+bQ`joL42SyEgX=FA2WPZ50Gft3`pNG?()CDJW-abGD$=<+^3FfshYfAvcz zGDF;DU)BsyI|qU0+Yi;Q$$B}x&WiJu7HPZvpD?6DPy774k2wiS_Z!V(T#;1KqMa4kr!5T%1pWKcYHX9&- zQdO(xq82i?ZiNFtXb=L;Q4(JHm47S4WA1#dZd5sXK%N?@gxG`7j=p{GSsV*JqD|F} z!*f2{1gZ|dFvrqUV7&Z6=gS0Rfd`>%li%nX?#mCcpDK|Ge_;BSM)r-)ci|eWnu85Q zYYd}DN5YGX($O6zL4$>ieX*7jV9V^=jkDhKB3^OYl4U86GxV>^8diAt>S_DdaAWpoyo;R$>e%+1Zss2!nL`+i*beBAj;pBY>|d?}^leDh~8 z=Hl!QX2CzGOn{BZeSGViv>|wZ+iE5<1Uf$Vj(Zxt##2XrKs5QUG0`dy zhleNCueL0jKgmiFu~Hd}A_rey>tcX4S>_o|leYx24?>lAsOK6f{4PIh)w_)Rd7wfS z7c9fptDEXH427#vI3-R|Iq1b!I9cc41+|2HB4e|>n~pybw};)7X%~;O03;Q zouOAV66BQRxy=QlnWIX8b@oUf?Ku9cdOA^Ob4fgOXRZhfKPjfYXLsEN>nOcF3HVPQ zXxC1cYM*W7eUc@$Eu!+4aOx}d6Q7pgP;8X16t-RxCItcNVbc+X?#xPV{OsaX`^t_B zNSUbn@H=0aF0n#V$}vZW&iz)wwRvmgXU)j)`i$4rbB3$gKQ}Hl3N`P~ApH8qB}#3O zPJBaaCI}%zI&6=v+va_I!Eg5RaMeSojt(pv0jf~}oWPla>s6n=Uc$sXdR5dD6K4D^ zvQfpY_aIwXpSxs0?z{`LGokd$4~!txBZagTOWUV+8bE%@iIIj65X*gqnwq7D#;t)K zJwBy$q|xhh{3r&AM}H=EwPwg#PI?6I`|+>oBxKi=%-N>ZeV2z})&T(e45z`{W{aMg zW*07ECZ#UQm zOMU^-;7(H050wx=#PbNr;Ju1h*U-p*Jynd^JY0+r&iqwpQDRVvrb({UmeC?dwH znqtu)=zR>!{#!^`&6R90^S1Gofx)Hv?aej#k@ST)vp0*(dGA12eaXMQ{kzQ=fVbzLakM-;IWK|My`-NvDF z_WKv8%IN~7fQkP5;w*8HlZroUiLPwF@utB;ujD3DWw#1BTk6LF>WFYv=?}od_AnVt z|A&t2Pkq&y@4br8-N`EpEF!^iJC?Ta#uH*d@^iAjbp$_;J62=ot!CCp*7U=HIG5~(Q1B+;Ev0o^8t5VX9~D#C#?V_#wxWK ziv3*N!L($7Xov-P$TiX5-z(@Mh6fOKW&&6K7UlYXH#gg$Dh7j*BDJhZrJA^faKU@o z6tH3M^097*m9sqhIn4*$l~gscf~vcwiS%*b*p1ui37tn;l#h;K~qK zhuj8j8aTAM4K~r`Ab~j#^KO4%B#>6&TQVX`ub~F=V7ieo{_21S4b+ zo%=w7-$#~(?MCRMz#GFk!WXBzp#A+Q_M;K!75&RRr*v_-s{EnOit}v+$5SS@*uo>-{!?Kcx6E3iYw-OB~P03~?O2tJ7+a-&-F= zcjB%W80CC+8!VxJR62_=*7wtSsD8w(C&n*Dj4VPoyt}xY1-DH1sKUXVHm;5Q^U~1R z-@W(1clVi{CX~UucF-ouJQo=LdkPXq`W%L})n(%X zIbqYwp#w`qA{q#$r%|8b*vV;cKijxyXpBxJ=qc$weHt1z4@KD zjl-lYvwW%6N^mA@f-o$~hSeeI+w@!@19-p!Lzo29z=q>iNB7;`mHpd)fe0kKvYCAX zIj50R7llz>LxVQ^^nZa&HTVK507`ta%r}EDex6qWV96fqiKK$n%q_XM_|Xc#&F2JU zk%b$!EO=E7i=RT0kbgpZcasq^QPe+hm>%jF`5lusPOIDoAY?lS(YarovJ9sGv&vzY z|EzA{@b_}o>ffd_hcSVnw~6*o)`?{*Dk^r)E;cI}m2=AxvgR})6>umeo@AoA{#f(& zyQQ)`K#k59RJW=DkRyFq!+!}Eu$YEE3U0P_cXy8!^Cd8aZyD?MW;gv1pL#}ue$yQc z{EqD_$#)}xQcsY*=K=^i>84j`90tz?!>l32KTXiQx~i6BL8pv~skzX#q9yBxw4}XMi~?N4pLwz|SJK^C|QWHVXc> zX)!eV@?_f}<#8ll;P<E{r(g7yv8PA(Ab0*4 zCyocs^paeL9PTTCCcrd0ul5yEJkY-4v7sbG#8C{;IqJ`>?|jNp@2!o3bmzugLNs2Mc#|tePX#?c@sS1Vi zDnbyP6!ih-cQ5j)61?90URwFZyM?0cjZ?@Q_TevrM*vjm)svlkxOjhCGYJIr0hCj4vibRUZhzJM8dBBJZ@ zTh1=rd~|B=-C#@ON3JD-Nacu#H{^h~Ilm5_zC7KsWFJTZp;Q7{A=s-^j1Ut zY^eC`Y(TMc4Sp}tLe9Tc|WzI5P;$b|$cuzo~^-UsA^@l+?(|959nz>4q zLc1LRke2^GNp9NpZrKB3!+4-K#=NKvy|FmuU17Y{*^4f}n;JpJAm}(Zw$U@k!5&Lh z2iRVWLSd(}5I(@<-BbCIR>sb2BPYxj%=EwbV+2v5P3vB4xGXKr-bV#aSw3|+MDshp zt#btBb0_Mc&|MxKio2$OPB!orp7%Wr{U?%j2`g0@aH>9ps{p!5wJmL1SR<{oAgz3=NwsC5CT{%AuEUB|T*SR?sP3`S^ z4BaTy698I!EJj)+$W(SuZSH%vl5r?|{)N_8l3yH*7uaR4G%$}lcJ18-;dmb`Rw>;6*y`zNAKp;)SJ~Y%)OK;p zT8vpf*s2cvaUTE{pQ9gY$_h&?g{97%n46#B8u&&e2sfEeiC z5lYBIEU|}Cgu>4mJwrpO-bF|9PJ3oqB#qJ+0pdG9e7R@aerk&T+mQ#~BRIeJH-3M# zN&U+T7`MNsWN^58J(WR(^54&EhGMV|x&E@8f^rICUSD`Qy}f0mH+7;`rLIZ5mM&FG z@2k!snWgb7(`8EW#x<(2ZmG*7@Xsi|k?($&K_~%@b3ykpZs2!Q-+?ftp)1^ZMnOSK z3G5RZ^!#fdTBtNjAxTfs?9j=#X2*q2#G9|sCYrrBw1&aYajo;uzfAl9%5EGp0=3rt z$3h=trx;;;1c_QUV~z3Yaao@7P)aqQ{+n3Iliy976)ihE4_|*KP}!ITk%%~LU&C4= zt2Xnu!7@M!-y80?pRd;6vw6Fsf1`03J&lA1&gsrZE|z=UkId}8bbbw=CUl* z#nDDBq^y6G>D5j_8cp=8Wv!@b6E^hd`Y^eVwm!`V4Z3L+_KCg($$7SUsKw0_6p~21 zed|s%AXs|fU9L73*hHU|KmUE74frMh0DiY%crz`nq3!V3GyRgklKHlU856gFU-6^Dx(N&dZN;O2T4 z-1UYmry(PBkZ*t?6n=X&zv|k*r-GFCcCpQ>{;k_WIK8QIit6dkNE<0_!ifOzC#xN( zAf{TW2^=Im$*W?(jGg5(+ZVa#E0g*~kzys*f1v)9%=Br@OvY{+8?)vpvc(JKuhbnv zp5)Zh(vk+5s}Vvr|9xl!M-+HLN@pzvWd|yKa6G=FvosJPz+F}5Qd?~+kmjf5#zuo6A)KWJtF>RCE`IbXZE+-cbjy1Kg33c@D5zwxu+ zMYB9tJ0ebSMbw4Ad5F5T>5qNY#z7e2x&H*E2)!!7Hl%j# zYWrDgnM4F4WL!J{qNC})j3eYtE_KRu)lV0Ki2a?<_7;hsMo}}nZI0WA4_dxxC&C~= z+0Fq-RL)X}vnF%};?Ek|#25Fy`D=We*jL>+q%JKfZmz$|@mU&1-SNar)B+nys^sP1 zOy0S@_{b6G9sM|1c}_SC?RUA|IQUPv|3c5nbRRmq+Ti)~=h)LwK^`qp6jOMLhzq7z zx7tJSB&&);)^{R667mkHp>jVkxIZY`EXvm-o0Y9#K`wnYFl)g?~SH zW7};tQAd@U-?Z~AQ_?4fmy?sTNM0`RnVRAB32d$PnDzzejlJjkfcsmz3vW+8$ubX* zaQvr|$!L)GbujC3eFW#t>8G;Kyd-x}_eg=Y2-H2}1Xkl;n%N$$2rTAo?vRj>6R*Ry z;|zYY?rdl^vXb6M)W6CN8fEX?xf7JGYNhi+iZGCAX>HdotBaoT)OLQ`z(BxEmH( zIL6!5o|2Cg?!D;W#({oD0%KaiC>XF*;N#=luV;7|?&mATKY#ZQ`WDCCyRSq=MJrlc zC3IpKllxbl#WH?C)pdWIMd(CTp+e2m0qHWfV5Fe(2d|c>3Cok>NuBILwUHLbLIq zf(SUpoi6I+t&Imu?fpkACiyngDboHW^(wZ4&7k}4_dg|ieuoVpeNs0F@6%Vqr5-zo zw!IyZha*i4?Ck64|9r^{@sF1m0?GX7E|Ra;v%wvQ_n6y=iaW2JzSikMC6-Z9lyIoT z=XlNSY@vVklbuA;M!zKP0udA$<*P8K4tEGur;xzoY>%H3Nlz7`b<;sMe&iqjya4}L zc`L}r-H-H7Ha6bLVp7734tC?=?4%(pG`ncx+8Akj9G6^^P#BMbD1LC_Y^kO4KaW-^ zn&c~9P3>!sM-LMSHUiQ-Swy?6LuBgW0(Gh6e~;_a+HcOfJl;(eO=9|)sB8OfvFFEw zv=C;mQ`rx%##8gv6mFSQq~6};h)oYqf4n8NaqLy?v~KBpey#szwsy9}#)tJQFcaEW z(i87gZ7xgvdxfMDxzLygQecgU`Q}YLwQKVmX&n#r50kfIyJxZ>z4lRRl&^Jx5Q2nHL6jk9g;a7Q8jJ+tLRj zIk3FNL&x+wcK=;+-DVr*XMI%kvk z`5bkJ%Xa)L*CL?hLwJdL;k6`9FL&=?js0%$Ks9LX%BXC^N^y20l4gMl8H=${%~uj5 z!$HDs8-6Eox$r(QhINL>j>bn_{Cx@I!Uwka^`j z;@S?GW4|d-JOy8_tgo;Lqo~}|ZeF=S)#kIaF%2>9bmDVpX#dYRlM|{$NBnJM#NP!{ zBKz)dc3Z0oY%r&L=aRs$HlL}Ae;|u3>Snabifi*8c8Fz?lRt2WKppYDyX4}#L2T?5 z_ui610RBum-Ac3bqVpSv0%t)LlHCGn6EPX$l_QiPKhu{6 zThL&L!}$tf!ZU&&FpU!>TfC|MJD)2;kn6!D(L!=Y!T8V<;}Vt@8Pi6NiNaBUTeglc*)GVgKxY4vy=I$vD43Vw+k!PheGyb?wNL zo@<-$2$6!@K(^O+FF;LQyahwZ#(%VZ@)LHU?#e*A*!1W039`6Hm+s2u`xzQ}Mk2O* zyM+R7e$q^zM{kr#W6P9z9FuO@!`xrU=m* za1mOJ9>iKw!?JZqD`tT9j`_RB6ljW1WnwA8o9_3X0Z4=_vYNj=m-b4|*xa~0Jg@?| z+uT*?B!uNiDkFd<3vi=H)9;C2*#ixEH6;(Lg=OCZQ1472DU?nLKMRq8p@q)q{a-Yw o)xP-G*Z4aMmsHN!%C5Hvs`q#18;U3aauIa>jxG1IhX-^Z)<= diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128.png index b5bc3a100b26a795c4b35c151ed259136b13471a..20350c082776950cedf7567dd8e4863e380d99b6 100644 GIT binary patch delta 12791 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 delta 12536 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 diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png index 26c235aaad0043fcc2484ab20a16aefe33bc780f..18a5b1ef2b7da2d31167438bf58facce7b2c8b2e 100644 GIT binary patch literal 33914 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 diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_32x32.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_32x32.png index cafc8ebf3591937c0af380de9b49afc8b9aa4437..74732f3342ac2be7f0f865e7f5699bffd237290c 100644 GIT binary patch delta 1788 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 JPDHLkV1mkiR!cZb$ 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 diff --git a/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png b/phpmon-updater/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png index c656a34c609d095d622a09c89120a1df68cfd85a..bef4d850e5ca9ed16f88db64c32b97816eb43add 100644 GIT binary patch delta 107454 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

i&SS&} zNYd}raWeeGJPLTaG)ZI?HB^?K?n@=((!kr*G}B2_X*~QwV#Xk7{1?w7R0N9%S6wMN zE*-N+ASz$5Z^tEy_}~>A0Ky&b?l)~RExIo2OH`af1aBu@(>qb0On^VZW4HSU7umz0cN7G3L9B~J`T$J;F+mZWzE!ZDAP`!nhg5?(9yK)qXk}3} z%B_PRd$nNK%#uZN_WqxYKX!T_VS1TjT02LjhiX8zptT6tv)Eogp$T)2`XQvLtl*I*20S z({jr4WfUiFMEzyPNd|qu(e^Oz?N9He%~z|`E2JkskD>tjHpUqHqi$9OkBu+MB0t$a z9*J=soO3~T2^z{c;WEV^7UJS1#zglol2@==!h5!F1|QOYd)lIYOvo=;np1;TV1=Vh zn`a=aV85ea$+?)CHR~Ptg-pq%~HE~GO)f!0SJ!_{WQ zB7VF)g9XalWtlTVE0P@&1>1v3uy>7omfD0nKPSna&~|t8%{jI`icocJ>&x;96w4<& zJ((k#gsthc3obgkP$~3%O*`6=A~q!`_~vZF=?d9m>Wya4q^ORBbj>_~m7)tUNB7l-AF6 zu07sV9Hj7M3f2}SDLiJ_v+BuZv@E6gR1M4JY83xoGn*M5r$&MI&F^}xnX`Ydi2q7F z?C@>X+;~tJXk9!5?s1b)<+NIb?NPfSTO`VkcFSDxBHlg5!_YAw@2pOgX*lwOjy)S_ z4uG4fi&1RW+--lOBz>21;~{O;*Gy*Mc=P%Snsp`lm(ITny3m9zEXtY(T}LlA`(uTe z=U_Vy!(i08!<|Z--Ii4x1yN1+T=VARf#zzs3NbX4bPqXx5AnMQX6Hp~wq%|yWRZsm zh0w)Z{7=WvU{J3lZ@CO!aju#!H9$nV;Mrm}oZyHA%7o{1EO}Sly&HiZFVf=6b$%4X zXXBm$hTb1TPAw}C&X#EHNVTLB%w7+2ymx-~SHp}=!F;|ppb|cs2I$c@JC&@P+?|?! z!||zOPLOp_)Msj%*5`S40AkLExf*AX^#IQ`mpW=(Wx<6{)h}>ZibgO{2>3WZZp4Rl zW^PWVJ9YUqooRV?M}^lv42;16>$aE^{zJnM3!u3RI5I}nqp;}ReGN$c!oc{9m1%W8 z?#QNG()PmhZ*2neuk>jJUJ|=#w$fE)4`$!?mqiq+6a6qXB@}6lNp!GK!W~7Xlh&As zxU{(C!k|KD6%VdtqP$1$W+4W)xMoeo$lrsK{;XG>O z%f&Y9Nw`$g1x@OyGI26&E+{CXE4C&ETR{FOUBS8gw<WaoHTI)X@BF%6i&LZe`s-*vKcBz|nbB(C>~U;HA6@5?V1y$E zF4N?2!_|mz8lbOGm4Oi}S$MX%XlqDGoV>k?ya@ub>3x=w?6|q5D&&DD#(%5|PSuF* zyI8@(8(NME;qaErLU@tJ1@L^#t9*^!6gPg+tKn~pY16>Y?`r^iRrZICH&(Nui)al8 zQ_N7+Gz^ykFwZUAocVez;`a>t!|ppBynW-h2i@8mYX-mXjsaoAx@4@xq9r-dmm@+4 z?d*`an4$kwkp$-CRRVE&tJE~3xj6cHUeH^>(N_s*y4;4K+M%f+y`A(_QHkcZ;|1zU`?!_UXlvfJxa-XI+i zTMtbWp0ui!OCVyA+0loEuCo0uwi6wz*Wtsot^=QLXW??%51#v{ZHvMTrSd=wLeXj( zk(Hdewk|_eR>YFNRxQaQmj9(&7gs6t0PU5pT-KOd^ z%bAfl1!)+kt7{DZRdY!UBvK7HgJT;^=PR)Y+!-gF6@GeXO8D;%#Q${VVicf~scy;E zK%0)M-Kd}dWl0yA81W*6?oELn;Es{O!I>{2guRBLi*^3{LZ-F;^OB%O|M|a={)T9mT8>qmPZzHLjH}lU;c|hMKUP zpv!PHDx{hibV#0HM;FPur0JsneuHPJGTXhGl9EllNPu%VjzsTP?Rlct;K=>R z6Sc*BILVP`Wdj&vj_tB!oO4b7^^@U{$93}Yn?v?XTT{H5<UcQ*Sn^|y{|1uOFf$DbF*iGRDl z7+y{b>*f;J2bM~sHa9ffAb^;Rb}Yy1iXs3Xsv4w_m;jRtt*O!a zzB}0hM1Uh{7roT#5wK+Q8Rj)-{Vq7`_&X1UUz@)w(8qssa(;2qAOqS&tokNQX*0R+ zt=cX8qk?)kZrz3pH;LR<{=pAlO82ht;~fRLoQA{uZdRaYbvSlhrX%hqC%P=z^Y6KZ zlpi7JcvNNqw=;}YgIAsf^;VJi$x+;e;Zgw~%#jd$`sTq~#|;_NUYH8sp`JKXp_~ke zv=JyfP4(>jj@p7xfv^8BgLc?~fDlngcvp+1w=%u%v3_bwxT!?5w*5(4hqd1il0-4K<1?LQN&gZ$zeY>; z#dUJwuqMYzmZj%0oT?OAr^=!X(KhVB!%fsX#A0C1 zc7&ao{RD0T9t#XX>rr8IqI}x_wdW2mdNs+EFP7HS&@x`Q7Np;;Cj7! zj9%9Cg74|}e#>l8gK49WEoKV1favwj(3yxI2%{%7oJxXJD@r_N`hxH)BMm9kskemh zQXeUP*Fe2ws(p!SoZDHo#lQ|{>%o|M7pdHpIZX8BkdmKgOXD<)$hsy1gp%+aW1btn z9w?g~-a*}%{<#_19|Pm)XRR}@-(rRQ;8#Bm;*i##L?zm8;8|!JH~`zU#-XBQ_%5Rk zudM6AkYVs5WHuS_@*TsnU&(_+&k&}Mf84x{Uk%EtQ2e#k(_EEt^0w^G!HxBy+LAPP zsqdmh(PoI_*RNZSU*CLrNcfoWAp=#^16!h1HB~QX#by)Bfx)#?8XhxqO)UihX-u7TweOc3}~d?#B2N6W6=qtn)?2%s#AuBdkCsRrCn7q1GhzW2bQ(r#| z)@~brPfecxjxoZBAh~%YY0XN|WLmL%&pTP_fmEo7F;DWZ1G_+}k8O>7OL`XL)SO@Ao%5gWJD4_P{lU=I(x&=%j6p?h_(B z??xFN)seV{9ZeDbtZgeH5#+ksrj1kr0wf6NPC74mv`NI5w+a_KWTD9g%1~GkR1Hz+DBvc39cKL ztVN7=5v9T0VR@`R#5_aVA_B-2K>{zl@Xhey&*wc39B_`wp{AT(mrD(An zs=H(Tr$t0pWC7^0kN!&51_Vz#Xo$mcU=hWkl)zs?lily8R&08LL_uncvCb2Azkny1)Mspf<>J-1Vcc3+zphg}% zHi5Sx=ThslQ`F?7p&B~#&$-Ro#&=(X*tWTO<&#v-xx%MUf48<5x5fugy!hZj;gBr@ zasYUw_ieB%aGi6LxU9>tW4Ep>jr?JKmg1^^-3vpu_PwvEr5vorXN$~?td-A-CA5zb zAyqTN)*n|MD>MWOiu3)8XnM3l`O#as63_B?v5Rpp4KqUv!(f6%jOI5kKBvus?7!ZW zJgG@a$n|Qq?VQg8M>_<0e-g6#?}Ty-{tyKcsmIQuA5z9zr`fngG(X7+FFWCi+IBAzu9xc~Of9X7NzaqGQy<@3J6G$_b0>%CMPU`)InxEK@IBku~=- znz@1S#@TRmwBUMF!m6)HPC`62Yc6M1Y<+6bX60ZGbnv-tzKmLaotBILjnjKhdRsSu zp&r(=zus4V3V;2dNfn>!xCA+=L8{5M9!j91)AvzSdWJ{>Vb08B@EhLIIK9|5Q28sXSXmU`#-9;3I~O zk-V9X5h9o5Z1Ea=za4DHr>ekbAov@&LrH`E?O=2iGsBV1EEpR6?csYwU^MHT4wBqN ze>p#4ZVatQ@U(x^w3h-Brt2Bk?#Vc3vz4=7oxPPlGw4;@>z`&$Cg2tKBKS~3-aloh zLvXa`W=pq7zib_Tmy%r<#1`LDXU{30c}8u_H`PiGT3PCEv<(U9s3zF8^@+Rn{};@D zHHfSm*o27bNPK@(zmrj&keocANEAOz37a}gE3@oZy3DcT6+u2;+{*hC+uQ#pR%Q?8{}z0q*`f#Nex+WXZ`m@oZr;+d(jF)gs8M^Y@m@=&jIqcl*+TXG zY>nzm1nv{Y?LH`}JmukP^^8k>P1nz=%IDp&>WP0|ENk!Lo0PD?R6n4EcFZ4mDAKh0 zCaORPSCKSFT!tUSC3PrXYM8rM;OG)O3R(6zaaV$dbFv0&{B`edj%UXJ3yiG_^h`Y1 z#4n#|?A6z8sAJ2&%0)8%y!Pt=DAeH^o}~TFa?jV(|E-~NGTTHSsA6%JWjr# z{=WF%i<`EzM3ajeS-SxpLoKqEzh7rzY0zvMij0GQQiMh{{PUhnO}zdqmE2=R2UrWA zuSk}HB%fC_c4i|}?Pmjk?q;D%^j|UQ)h*XOZv2RyZ>IEja`#tccB;4keUs@Mee3># zc_k;F#obE$K9#%nafrZG8%6~CIwk86I zsujCj>l9{L!9iHgH}bS<7IM`ce+Ox^J}YTPR;W`c4X`%Q?9^o319AkWl-x&?-lOc! zFJtXN0}?uEtQz^daI(!u72ou zq5kmTh764w=oBB`}mkHIC3FRg4b9g6L%p_wOydMA%7&H z*Jb#5!hewUjLPi|ph=kQ6El86IQ8wHftJ|GGVbm341&HAUK-o=eGr=$qznF2!KY*Q zQ+ECi1%GIYI4pVqb}!!8_?Lr`Jy-uP0wT$GOu{DSwmjKO;V@?*Sy$;h5o$<+^OPk) z4o7JFqr(Hv<`_weXLQ+U50A!i@N`w=FG)}$av+Ad_ z&@*2&P8w#Z_S(RDjl=(J&Q|K}G`9>sz5V+nG^SPt?y;NVfaf;xaQ*dWz50*MKNjDa z|A6qikfLDvzY9dg)lr-c!N?+HiC*l)oob%@5v2U@f9J7b<60(;Y6gaOYiC}We0Phh z-+#K^xTUbj2VB?1CY#h0i{P=!GSA_hu5J!+epjZR0H42gzeBZ`v`na-SrL|U^)ZEC zS4=9Rx&9$kis!_}l=s5Mmv^tLpH2Gph3H1Z=-W7VRXt&6N7Vri zjm_EF&5!>{71uK9tI<8gQ?u;RfPyylAUzdb(ld4-(m{isEg7?RzlBZ9hu2sKl%|tf zrjcj_u6>?G`JCFsgQHie)2eQ_3_PNy;H8z(Q!&qg8E+Rdu#+4v-v{(J5 zuGtsh2MOCM+t_-Q{lh3({-H)9bx8*)?4%z1XqCgj{-#5K==r?dF^Jxsk=Ac!QWLYX zBeieflo^^a-aTS4MGL0LAiifMN~e2PQq39gva3f6L_+YgiL{PDD)O|u)M7>~y2B*! z9-&DeC#n0kWr%qJckEK4L3@c`yCU&B+|d?rdY=uWX(I4Pesn4}1 z2H%S<)wcXYhK_yPZ}f_!IgJbmCS6e2Nyy7J<%X>)tdJ~=5 z!iJw|(Y!}8nQ3T1AE`9%g?;(Jyf5sXH06GO_jlyE84K)WDToY0*$NV^uxP7Y=-QG@x<`Reu<$~5B==AE?xCbOS9cDjN}g0>OUp;>8slH2iT<(8Q{ z5x|V^_!m6?;9!5GJl<8~Wf5~d6c32BktmkFMc=3#k0jJW^_Z+yufJp7IGzL~_b<@8aQ4F%Mii87p5H;lJ>QmuD*H3^{oBl4?H z;TA3rvXH9p`tXq{)FrXeu|a!)1iGqgvi6Ob-30b;QThuHBjoZrqqW;EmHV38L@=}R zx>fGVx(rjlU?=&>yd`zKFxNqB6YOl5>l**t#>rMd6$c-Gkz9EmFSzp66gQDVV?FLEod8~PpucMR|QWH6Z zYTV5F2rNRg^=@f35`n}v@+S@A_G&$>BRpiEQLAgDZ=SnkHZd5E&D8X4x?`#K!0A;o zK86w-v`^5Ted---q2L~ zAl-$oE33bJU*PUjIm$vErCtub-F*I){*VBgfLosQgH2n^vlAW__SP7(!229dv&(33 zmio4|_2)&j$498<0Uy(Rv8)40RP&SLQI&&SO=4iRqoEMqxWBp`j)ASvi=0+~FemE9 z1dDTS+CICYHv$=uDIjcHn7xHZ8Z&h|`fZ*hMC8tvD9=U?5AJ>4mICskw~?+@za!9* zP08|wVApVG6=ERj=|3-NQDq^xa?YO!YS`|Q<2wq67@R0xxz-mbt(Rh)Z9sy_tDxt8 z`A5e=zmux{uS%`9TP{|td;3nuzO!$}(IdSjn+C&^*xx2PWCN!rOCi~)AMZt&PK)!0 zHc}qxdD*YHZm{Iu)A>e*CQQz8$rH`qeZXJr#DuV*f_)!qzGe{Mu+)>D`1jz$D@~?8 zs#5mW&N%7OAG`(%6O>i7)qD6Hg`YW&hiX<2O(bh6l>M$=pFW*32cTCgF|5AF(^~dY zs}J|<&)?HK)G7d6m#Osy*ME;{-u~Uw)a%#k+X4}NSbXQf)cvT7wF@`V{R~8hpmp%a zJ8q{7JGKjy{*iaBV>y9OT4A3j`TuzW_A5@#ryQg{1Z2y~AWG>L{?fL(pN*9b+Irqe z1#j*Ay51^qOumX4F~xL(Qryy8tNKl$Z+)VIMU zIdP@9_J&YU(LeBlR3-#hPl9cCwjMEU_bOlJcGZ=(S>E>|kS|AsKj_ny(v;MIu#v8Z zl13+7_rF`jhMeK?Ha$nY8#rbg(}Vc&ROk!ByEW^KVdPc!!SIjK4y6~7)G+Bk8!Vd0 z6F~IW5&Yb8TL@)3%YSVXfKZg!|8>4S!48v>Mu^})naO%IJ_ac!e{#ZGHHbHz9cexq z5gIK~Y+)Z)-%JlpK&RVt)q7wT@xJbCnEhxXq>vvvmC=|m&Ob6H&T_ofsUu)K{el6J z?V!epZVJ=O%QkKUX4tXpW8*|Ps^$0$*f7*MesR^@{Yfj~xmx7cIVmz)qcHoge&sv? zw0Zr*EMgppoz5P|-*&HlG_jeN@GO8OvT!{=`*nh9tRFD@tsu6ym^PI;5yNK z9_hDYl;Du>uO@JQw7yEgsZyi~UmSaQU zm!nd+TfvCbJ(Bw^WFKCnEQqqHt_|P8P42E2F>EmD8g|7i(UiqED9rt!GUVMFS;?UirA))vE znuA?Xr};_f+{_P7MjegUBV+R5`fTjVBA2C1VUd)TREFo^!P(=JUlM?x3|(K%>-dJM z;~nUdCHx5VhW4ny85?Lto`DUo*s!cwTHAIk{7{~jOlM&d9xfOdf#YZ6h^(mIB!Wt#0;a%ScFP(gbO|%E$={inm-7`uD>Pgih^{76{b!30 z{%cpgRDUo5GfY@|ypNoU$0R zk#C?e4O=$m`JT&-xK~eRG_Vg0FF(XBIZj!O_^$zyO9P32YxC28~v=)1H=J%>` z!M~$gK;~Le0h}!#Y8&d+`@m8h&Ni_W(etk^jpNH91cjQXD;0vU&qz)9_V&rElECrN3 zaepY!x;$z$3mvg~c*U_n=~tq7Gl2FB-~cRS2_H2gqKZ`Z>J95@%Fs%C1!T0omR2tD%OIs)iP0kdb= ztD;cOhSvoxs`VUAgG(xZeHL?{^Y(VRvsv4I%It;;J2C~Z$HgSqbq;8@a(^8fYkMg# z5(hPZmcP?px6%Az^HPA**qi{kc1Nn^vrCyfI^Y*qaPTYL*23`*lAE8%6&Wqwi@#59 zc&@8vy|jI9JY~{gNB=}!o?p3|5@?UNRu~>C!_oUPwW9c-pC%46PcGZthtHz$uJokz zFUP}$&diLAigz}AwJqriRq>lhAwV?$RkrmpP$`hAX%4<KW>nckY9==^)l0S*aIn~V_ab=U5MbdOv72S<#ZY!v7yf15A@^r1 zPo(67tf7bRZ_BTG)7h+b4H0kI|9U_$1cCowCTgdjwFFglc= z?lKwFw-3dexkqVLZbxCOVVPa*#+GF-#Y}p;=IivmRmai;c*IS2uJ%xBWM8vKh+Xw` z1g2PSD`G7s%59;7jV~pRbh)dQyMBc}$VLWhVWwKPdIH)R&E~nW{0p*kI0@*IYTTn(tEySL^dSzVEC!n)z-1w@}=C> zH>(vad%f=-aa~Tc?>H<6rqX{W%wZ3UNGjk@qSdT|bqjMvtXQby;0w$GM%a==| z-Y7rN37r1WKet@u)ki>4IjHf)jcGc*a^kf6ja0*Dz;FVp?)~I6yV-JfthD#~5A5cM zN#k74zV^@_+@SQCN#l4#UwjF*pWxR;qbvS0CifxxKz5|@`Vdolbgp2?31yPTwbUbK zPCs8t*%aEC6pbuD0e|rdy5E*Isx#AY*I~SJ@_?w0b$p%H=T9Yqc{ff)-i}OAd|Q&C zW^Q}Z0@yR%RUCTF5otxxPNhHG1@f)!UZzOF>4C&jal5+(QeLko;g^cbv$D7E5sxy8 z#NXj=XE4a`@8!+-yk3FK^}!-5j@&Qn>Z#Xj;iEbQN7X7^AD}D)!@b`Yj`8*WRR49G ziK0#a41pWKXKtFv>yWp&ecb*~CZqhRk#ifsapDd9jzGgq9{(VuGEj^o>S=82Z$z5# z-?1sr2E*;XDgmLKobpH;t0x5gw204EGR}FKyGu*Y2fGvAWgdb-*{a zAAAsRVwyZ_Zz{O_tOMd^8>Re62L)Nw=ykVS+U@t4nCyA{paGdk)>l$v=dw}+JiM-f z6g0YbKRPK#d&$!V^9!WG^}kt|EV>z~+2a zZ-4_66KKP{*@6Q`!*0gaFD4A*WdyWMkft(UG>#nFfcDaTo58ewkzRV9ld!g_lx?#Y zwC9e$$MD$wMCT2gSJXE{r7e~Xo4Vu-^hfv%$J=6*ugbS`x5R!2u!cB=v!lf=>Bo}U z9SB-!Mxxym9WCuNp9<^MYU^hXSRP#r*>CiVOMX^Z>4~cdXrn+s%)Kk33IU+cFpZ%i zOs%b_rd~P+eM++=-p3ku9}^77qz%{JY|355F^hYxmha3&{N&EBC$7Kv@Ykk|*~aL) zAp*x?N3awf~>BT7>v6SrH7D&NNq>9MHQ8(fv^r2B-T8_XX)d~uUwx;@1KF!DqneB zwCT~JYN@mZ*Mo;v)9{U>BAD`C#w1T)r@0A=Eu8(Zf6;)ZPA(UX1y*v3NM#py6|C_r z;@v8AMKTcVKRB^7ZPPjV*JV*&A?rt8gnJ%i#$OiBf^`-o zu{3}=!)Fu+^Xebd`l&8-7f@K7h9*2<2()!1C^3CwdE;=ZMQ6JZQY8_wkB$rN`lyu2>*U&7g# z=C$J3^5@~L)YYQX-M+snG^=jM#(yfsG>I44*jn@X!qpXMx*7L7*V0d<)_V=Lu1fur z94rER3lPOr&z>IULi@)2I;=7>B1lL-QNFbi?A6S+_XKN40m;|;Q?5z}F_k@;#P2x{ zU`nlQcrHf;0t=yPMUT8HyACT*MQ3YJwy_f8We4s$O+F3253``2-=SyD%hc%YCpVwY zWN%M3OT}%}1FC@YEMn{;jPdhg5sc`~Vu)kWS z%v7ON4e!Bs0K|7Gto}~?*W0$Z7l+|ea*ylTiEID+R~lr1@n68y5z%`6c|@R%$kxd@ ziJ-=LE6fnJcIVwP7CY>oh)fF3k*({qOAwOW$Lm%=f!)6KR!a4GeF|FMpnd%k=uHg% zUbP|zOtTPyEapPUyW^Ad?v0AqCGdAg#JfzWl&VGpEY*VwR^{l{L^=KGngu|G=J>ja~|=ynAXSTjop%(iuM)%tc&Sa$-ss<;h32ZgsujI zPa@5YCAZ4H=w&$r31QrxZkaKfH&4Sgr@5kE#cGJ#n&ST$iua3^mN|RR2}KCJt&zm% z4o@?62G0NSJVG?gjQRS08y@q^T%(t6%UoghKT{9>_5Xx$m|2m6YP>9>}&o zykVH77yF4<(@r8@33%YsY<{Cjcl6=IO;s(lm$|3R#n9J*Rgyyog3S zwl5MSMM25(@>p(H&4)qw7#GNtY!8Jy!%x@vfPS0 zi9FZoBVmQnq=PCd%wq-1z)YGf*f*%&EolUc1 zq$_yq?hMl~vMT{Q!N3aA49XK1`>j-}6l(q6p!!Xjm}simha5Zk{IDO2?i585Zc5&P z;Y9OvL#<=tHEDa68@JU-!tKWI_p+%9-@nX!O^+*mUGKUw06M$TEMY$XF22*-{-HI) zUpni&pFG~&gFz!kjZae9!-SS(9Y4lw2zHn1hYD|yr%eY=SVi!ll#F(`JJV=BmdRHa zl4c))pU*k9AMpXd>%+U-+_pqf(q z>yVp!?x^Nr897W!tUB}ThG*%%a+HaOlG&f`6=cRrjbh45^EQPkWi%f^P7EOK-2|R1 zi8REG*C7UEn)Pd_$GGkxInS{gx!dqpe>uN5MCZ@^t*<=kJ;EzX_w!4@V2=LvLg30| zGT%IX2Is>vMrJflMeC?DaCVGa8Gb8Oq(Uk-V0akp_(vqdHLM<8S9wd1{^C~%v=6$P!He(uLDQA2XY>hI* z#A$>4bgsDQg5#~=*n75t1rc;)bXppk0X2eI3qZ&P{8$N z8g8FQ_n8C-%hdSK;m0?!7U$00p{o5Gc)*VdT7jt6&KWy?=&Yyo;wNv+wj*mB zU!QW@)sug{uznHN`n+newz#!fO-mgsgZ5)Rn&Ote*S1$w^6ivOyHcPzCGrTYsFkUh zJK=hQC9}j3GS33(Uvsh1)OF~iJd06Esq6z+bOu1W9=X#ulgpIKUAbl9 z`(d*c>icXIamU^g<7O#Om?}eqbiCv`+-E?lg%YD6SSC__J$*B>j6c|&e`qngMLQ@W z9C`5rmT8~Oo{P4(QErz#_z1KBd!Lyz`)>u@YY0#CwA0?t*IdUy0uK5N@$U<7cba5Y z9{N^V?T2Kh|JpI!e_XXwyMO!e>kYCQ=`*-bh{2|Cg^Ld`_vEwX@R}7lT8{6%&M&|% z{cn9^Y0vnpx|ZYky|4%-3r@b~`IFst=0cp$>7;A1Zj3rp_&k37UA_vShV^fsQ;R0z z>8w@6J;l>dB1()h4Lmi-iz`c){?rp_H|cmm>CriI$-%&4pqN2%T2-VvOF3UW;??jb z<=@+jO}g}bMk2YNYaQ%B8ScLyrf24j>#1g`aRd80SSC(pQ@9G;_xuN!Gr2N`+8q`jsQo&oWii)P}ypfb%rL9{Ta38Ul}q1Y7&kUie`6vcbJQvu9 zjNFb)7p32$Oiu_PCJlVLc7NY69^c{OfxHM~g*B`w!w;%(w|*XukCl47%0M{WTJt}4 zAm+Xvhs^BXakl`TgQ19MC;xVETY%8kvHvaAY?AOZfa&DW>dwt)KqID%8e{MFG~)*Z zaCp*nX8kurz*1O2w5o8Zgv(#;O7lNv`L@XPw%oMpCy zo}vMYXQj~rUsHfoCZzITaxT-54ra>UFmST-@P}x7GwoCT{4Khd{4;FfNkrD;1ZYyl zt|>tnC(Acx!!SQXZN%yP*o;n45_ABorR!Gxe2W@%7TOP>gaOv=K@_Cn2Q zx2e~P01$#?iDznfIznJNHqCUA#YKP&M+HqK(^{O!m@^Pty+M{CVa~6l!rZ2>vEb`9 zp42RAiH*B#ONA~Rd;M~i*D30JOnz4H7+KEFVjBBA=W$2xNlPY1Omgg9LY zCWOGOo(f30WEqC>8It~f(aKu^!oAMwvU=vA3HVsT;}IYS<*p|#B|FldNKfwHy3sJL5aj1vtB@DEqzy5+$n|aW9D7Z7- z0PIm4O>kjKMjZ%!j>FFz#Q7`4YG5I#@#e(jBO}HX zw@wXmILAn`wI?{}$7gho#Seiw0b9ixK=zO!+FS)4%2Q^FFXhEzVlPlQHZW?IkSvUD zAl(wyk2F+nAm~=Z=zg@3^yQ#tsLwL)phDT|p^9!VT9^O3V1ju9KI;|Xq;U-o*`O>3 z4~9~u1}g~l{qO!LZX3>Y8NJ%2b|kDezlH6k!w344_ig+Qd&hwn7MM zdA13a4OEZDJE0RpIXt>L;`IEc^==bG!@h-UL0Pk}+vAemf@gAd114H_i>P5?W#S`0 zn?utiEsV<3K!+BzQ{kHWLsUR0BP$;&$zD(MwD!#y=>rX&H1qj-3dS(?pE;})6kqj?qf7*hAck4wQm<81~)3p zrGuFFrp)oK7g11$a+oiHe8KdYpJ}Hl#zgMYFQFcCouvHC)*S-LAOP|C?b|Ck3J1|g z>&!L;8+4UjaipzRqfvj;bSJekehT}Mepb7b|KFJBe7Q|_&BhU0`(*M{fxx)3MoWjS zwshkger;~}=y^dE`NA(&zExpU8^pWNB!bY%fl{uK+4XnnH}BHlcq?Nyv_9r66_3Qz zV9AKRRpk3K+jTsk33wRnxhDqF6`x#xXgceHLgYM*v@qfn+HD20luA$W%M<$FZ*k9U zck2-@4)^tzL_9xB=4@s9^5$s{t*uPIbQEDzs+eoOrZ51DEGO$iw3gL;_95=4cIX@m`xZGhA1 zK0;M`XXWO;O=XJN;UE6B%)N-7U!qGXxSR_QAwn$0Qfzapu;WHdyfa5YShH6L}+u zKl)^;>!f3O9xiWTXdxRMqwPS z2!y(v@8LM!=&*LaHyl0QpxPD1xO54*TqANMv|b1Di4mm}fgQ_o zu&=|Qn4s)sd`9Q(d&^7@*FbLuzM%)wnT>i2=hzZk#Z?K@)B}s6K+NDW(+D3a*Dt!+ zWoPe1zt{cD;8yi$kCO_eR%YOxNsObelKHcBz`vOph+Qb~40DlQD;Sa3^)Dnd^Vua=V_z|-zI3&{IM|1V z#Kz~wVCTuq1(*pDaPbO(FPmGCL{^Qz_|nSyU}%d-A`>3TDJ8wuY%eE0#%! zTs~=87JAs%vU$#KC+Idt{u|n83y6=`1h70`HG>F$gW4T}E?&uk&X{k;iz zPGDX73Kcutfyoc1`*8qOUZ9n5KytUT!JdU$=5lbpV2kN#->2rVpDj)~^5vU`jcjne zMcnIMGQfHFA~BH0X$}OxPk>-0dgZbZD_N)nZJ6wl$w~7E5)w44= zft&T$50^dq6J>^1@^IgUgQ*Z165!&ytA!BRo}c+un8*dy=F0LdezCKfNsr2-A%H!J>k+PrFQ ze)DSiNiQ|e~~SF zl)byj_}49aw87aG2`R44m!A-5GlrhbD$?)Cg43NSV}3+EcA3jti)*?G?{HmZ)Jjqn zDLnZ8jQ-H5m8En*>N_zdf`+u&;N8|13HuG4YHg`*Jd3pmkm487ozi;beHs6cz$oTX z!)rAWySYDt#*zdZH}RJ)RqN!`651iGX5U+XYC^ZQ2&FD)>?X>#EIB zgqx`$Rc4sDx_2KWmdam2vSwFX9w^&o8~Aq18gYLV2(VAf#`(5lwto)~KKvUaKkR@yP5oqVlUeyN@CSX-jKj2DIyw!`uW<;b(C`Zr2_%J)H8i zx=aK!H+VfpMd37B($Pv{ZCZZfibZ<>?R^*8#&=ez0jRR0r!q@OY=h^6SB)i*mL^zn z7twaAdYhcLuO0$R&`NneZyA=EN}T3_%(BAgS55~&Jxm1ie$ySLTftNItX*f1lcj&G zG+5+K8DU`k$;>x;DvG<<8qAY$$ui|*u^rx+A;VqkFIV=!bCYENBE? zVY4(~23rq-SQ&x_9sU_R!5kODTaJGb!bif66+9i9dv{ylss&fM+>*6N4)wC+ZT_b6 zjVK@#qy}E`GDC(4@+u7;aM~GO5t1>qEI-~YB*m!|+jPd-$5>t->-#6lS15BB_rK+# zAbk0D+l(+WH9d>oo$on};cAfcs0Pd~Qxw1}2C#muXW9GCT6pK~8z)>ay}Qi_#p6i} zq+Pz~UUAQlFDve#+R*WfFq~bNIKXNJRx=0QOPJ4?y>JrC92iB2MCT`TKiurEsuu;MLoKUF&86zAyfZOIkml$$G@71BhqD zCPTFq9n=_+yfjn*6C^vPdGkjYD_SFg&>XjhG_QX^2hB_GF@ne}Ma29*3Pz=k2cO&D zHJ;JDr`_%g9*s=gbA2C=T`+((_11T=ZR&1zGZZmWk?_yI9Kj!e@pA?HBzl{6M74{% zJ9y%ACPE{ua97U5aP8#`t(N%`Ak>AiQ^ePW&Wn0(hViZ%k0K`z z3;H?nP;WnRZyU@>2yG{!dfQH{12_m5c=MH`Dm-h2m&2&`l(I(Yxl=u~tQ$Bmi|1*#N{IAjC-96Ut6*N>Y`1IHg3 zG$y0d1~t@)JlVEhjJYXKON9?uR`!a%)XvLl{-)NQDTujFjn9WEPh+_MlPc@6OOyYi z*FrMUg?j7b3a!aNVdnw z@7GO|J*sq}nh@^5><@nwPP}5w{vsm?hM3xz1t{$(^?%lk#Z*su-pCnlw$L!spK@T= zf1%h)nP2cK`72h^nqUzS->AXg6|PbG?h z=%V+z&2NG&wA}y&$M&r%x-$7}YHRdu+XzILyH#$L!x}IOySqt^)@gk0A{8)fbMb<1 zxt87k{D}I@Wrh%bKTNE(U>4F~a$W+jnL&L(*7QCo{};qhv?M?Ic1C)-nXsLqz~oVe zev`EFmPFyFnP&|8YG{LtmMzp$8|zQg$F(LRcQePRJkZP=*v5xJZ z68Xv}w47nQoA@E|*ylBxY1KidI6+NY@y{OjK2_i5G9qQ+lkpZ%pp~;A#SYf+=zshb zj7>m!^Nx{D9N8X6gB85k!|fv))mJ<$>w*))^0C!pRB$th*Hxb-pwqWPQMYfx;t?tB zfmV2Oz;B$`vQmwigL{YO52Y?_-nfl^mQ>64Q1;}iXBG#B_Nr*w<)<-B_}^x}`*o^Eep2nfk} ze5crm(mz&kwkke*6Rk172ueS|XE(wG7 zkM33H&D*$7bQDlWeQFuku?VDQ028-S^=xZImGkbZD*>$#T`@Y-r*i7K?^V;mDlTQ0 zpyd1MpufRua<~$wJrZbI5^AY~g=TvN{}$4T0CsOkL{uIz?MIB|kc2?tE|VGn3ETnV zq;@>(5*t!Q>0#NKji;W+EO;Q}f|qPc^;0VBW#4sjbiI!vukIzl^%5M@ad`rYJEr;W&in!JchF_oAZ@&T3nL0ck-VeQik1c97)}z z%=VVblpGLqXR;@56XXvEgBLcXz*IZczLe;~@ao}5Tn>ki;w^+Kr7F4yzh~6n?12&b ztD5;Npz>=?^5Z0Cr*4E*) zA5YoSUsSem<}d4uiQrdU*;?pHa>~s?eNP$TF~~*Qhd1(M%vKBIt9$hu1K~j>dAy*V zEQIGn?R3SSTAu!nFT;~+pYF%ff3Ke4{?u2MZRwi!II?4D80ckJl-$*;OyZ+k819a4 z?XHjHjnptz#8rFeVVD(NK~ToG6+-`8`C%O40NLT%*Q20Q1APSa*ND`1y!=JW-Hnl)-9a6JSO(A|w_N7v zec}t3@D*H5m26FMtiNhHzdOt4LMNRt);-8J-mj&>oS^61)dI9f*Iq!@SPR9s3fZn) zMToCCkt3bsyjQXqCC)Rh8*b>_J<8e+jT(4W3(ww;hEt8@{xt*IQ)>OL*D28awVO)o ziSM3fT^*O3CGg%p$J3_6OOt+Bn5Vsc5w?XKF}5Es zd$VNqk^bB2egH7`qP+}LS2Z7Oge`XnHz*1c&U0wiy^CKExP%~cVF$Z+@K(b>zF?xy zrGL8SHmKkvv+q_ga%8w8Nt=vbp3d8PQ=q=UsQ__M;(4s0&P=RhW^LF=C-qnw7>O4PkCu2G-l; zLouGJdzq+qO&5skV)cIFa5`99FFG^>VLZQ8x+o+x5|;I^unjSTWqA+u#{AtnHqdq( z#us&O3UaUKism2ten;!ceI~s9F*KW+d5{I9aifq=aH6RpinG}IGoipVd_)VRnZ6z| zGVKJu;f%JvZD91z|CzZLIF^8$d63O%8p>2vM= z#RaxE5$f3=*|OFRT3@ENix*ytP;P-X!6$UGekZ{fq^3$di9Q`}$0}a}XZ!^7to+Pg z-z^Vn>XEcY(1~Jv;J(*A*&kyG%(#R&E>uVx2Hf4kKueyVxjVDE%KJd)z^tbIIPlg7 zsj!oucgcG5pH_Z#I8a;aCKkcC)7sVc`XnW-HNLd<&d#Ry=z36CFh(@#*Gertj^9Sj z@yBEFEA0t%6|BEs#MV^3wwn)fWg>ut;mbVc`YoCR&>Hs_!L7v+`elm))q8SaC~{+C zDoi%Tq>P}oTKZ+=c~=CGduFLDpXDkDatvGfJyH zjI!!h5C=$Otp;1aN=v4@Afk_%pjB>2ktElZBd72i<;4Z5%a4u|;shY;akuJOCAAzW z6gv*Gob^Ik{;OYB=?_KrO)TaV*nnk465*XU&tyB*ZLwP1Wl}0&3o3ut(c4YDWq&)O zKBtsc46O2^o|Qh8dP_3`lT_?4KqiS**l)glJs3Hdf^P;+61p=U?@bo?&84ig#oA&% z+GbAazMC-C%cLtbzp8)dR*BMI)Izp&a1goG21J}%-;ovM`5h@!P~R#O%_n;me>qf5 zie5^(H~FeUi=P0Li59uPIo`2I5AmEUtP^{rplH?-MlPO;9ZYnU_}BTjByndym?!{B zraZ!S-I-c~j2B4ui3t>V&fAt}9NGI@8O(<~h*8N^Qa=4taF(CZK>gD!AM#L-S?;={ z3LHYg$cHH>lm>DU3w-gKRcgOYPE4~E-N<1I zrv?_onf@%ZaqJAUWpv^;XUl1EQh_H3u05f^8GSwhHwq5T4FSPaPO~lC_WYg>ZW&4KDL$vN^RdrrCttBZ?cw=;V(NHa8A%QIX&4 zanDpt0b93i78YwMd->{D`W@SmCO3E#js1Zyy?E+nf1Fz_v9}O^ocG=Rp-9V#al3rlWG^GJv zM-1yVqNxrYwAK#JI8~3WDm4jtS?JcFb+fpaO>>ii?2^h++m!DnvyAtT50Gd}nGXq8 zP15eFm1_0-;x_)nfq&J?XKXs@cik(0lx-`{&jR-vrHQfz9LeUkUpDZh35tX*+@!b# zKshv8v4NLZpLVn#ivX3-HpZjG$I;Y8X10ml-L>~BV5DKheM1>)m86SDecT0PcO*~oID*R z=hcgZTn^JdJK-F&vVG^(@;L_Ty5CA53HX1Rfwh2twu4RU!tDgTrmuSA*M`dJ4W*j6dcRIWFjU{VGo`a!3WxUiYFa;_yYkMC-q zOgANLQzlpi#IX2+)dny~$HsDtB-Vc#3M7qY$Pe{RUW+CrxEqAdp?Xsy9r(pf#gi&u zc}pe7#td*iq|#U5@=4k1e(zBIM9`0>AB00o2T41%(*->~VTdPu4c_TpX^zB}efiOd zycoYgS6B?7&Znoro#LMn^QE3ys9u(3e5!M+Z{vD=H665nby)&p?hr|=Z`p4Fad=FjSwI@4C`@H_0=dkC4Uq;&S#l9;J zu?*pl_A5b{LhPd zK3EvKPLHfL-w4Dn%sV;cFnOWm(Av*L;jvM`#Y)%Zc04LASM9bCCz<9KDj2}w4~Zdd zRZ27xQXSv{khE~m(u|KYEVm{soZn(}KBNpyYEyisi%fjl??v*ppS|hy#dl5#mFP`Q zN&%S?-kZtDA);k}rRE<=ZKh35?tFL|j7%uIF;myyMU0>A%fF)krUd2R&kFjIKOO}G zPC1_XV|ZZ!Y^^sh65ptb_m7hKVPm|3ZkrO$rb}Nrh&bD)zFCN!d@v9()Ue{J?=K{YDmkQl%{SKW=m|oa!SGX(~P%8%`!L3I}hyqCf zv{ZE-PzkNGsklphxPk^~`1H@!o`4%omyLR}bevm5Pw%V@(lhL+F}3HZF##v1$M&;?DfQ`SRxjR6KcOy6~%4G3}-X^4S`T1xLJFW3r78SG5r^sydE?J&L z>q5&#Yuqu)FJDbLVbBEnu;8my&L1SR^^vn0o&Ac&(@r~KK7D`eu(Oh|eAP`0hq4@4 z{n%$>c6!A3?UzvF=eGlVD4WVeM#;(yp%*?3)y(DlVc)DMpj;_*RQ^B?UG5I^!^i$k zng(Seuh{FS+(`RjtDEp12@Qf9?KZu>zwA@{*oa}`EhkG0anhW4jja+F%wMD{=0(Qp zP9AT7REV(g3PzuQOzo$Cn(7-hZB!34$k;_t^7e%*q@H#nJ3 zxOl$4`ih|WeBWjMInNI;{KBph-nvg1C^phAxa>w-DaWyr7%STN(eMfDT=2l0hR>R% z9dtzPl<{{I@qN_=#2ch%WHDwHV%|Nq6T@~1CqiO-?N;$F$IBoZhHYdexWcNpN2EWA zYq`TmyH)G@3>mLfy=bB&^u4g-*p#CcX|3vPsBSuY397ESDS6JK<>N@V+9Xjosj(rQZl&8(B;i9N5v0c-rr&X4^e>X zm6MP0NP;U1HZX5eij0&?v-Iy*$5LO#`&4CuOvLP7_zauT1h=dLi(gKn`R%*07-KTc984cvn|H1J zBC-26$RgujaH3KF$5ZZJmgL3i>z%PQuhXqX#MyY}afliW;)PlM=*{c}CB$?mWN;;4 z1(i4{C09l<`$Yn3q&@+vQ|6@MP5BL2i#FIU2^1P#}V5? z10ssNS99|P=bEU*k!jwZISPK$X8#UN7XN@B*>=S9)J@ja59_}?3+h15e?YRDF@q)0 zTjs65cT3k@PYyIk)cyw?^x8A7wgM{D z+lCgiU-XfOP7mJm&AxWXHTTh(Z{YX~*5=KR4MD&BuXi)i5hav1UZR%;MgQSP$&CR- z^;0tCy9odJ7~yBEIs+d_xciOcS5wSS3xc}_MIw-0Ih0_J`yMw$l1JW^vJ{WncjaS} z95J^nPOq&4OFT<_xigcpo_4gd5i@n?4cj+5;D(LYJeGuAg{~8)<)pHSMu3hZ2Nl^# zG^d!+Q4^>|ne$2x+xZ=V5dP~DOJ$PE!5OEgy<|i6z<4^)5gQf8 zxy9Gy%AEEnpCKBCgRwDaA6-QL(8Vanu}nB@!=WDutDm|q3E=Q3tS+EGYg}^IPd=|r_f!~>e+?OK<23;IiTL-T)or+R|4l&3d zWb)3sLHGf2o(pRbfc!4M7!n|YrGq+FlM^=suwVY17v=D8J(%o^E zJpb~>4@<{s^e=|^!nDb zQmvK3Xks*wkdc-2fQ=JshiZ;nNfG6nLQB>tgAC7S#{NS161}AUw2w5XLi?YE_x~z* zE$^w4-i}XR(G66+FkO!UN7*%>J$iCnn;lcT$7qmsO}G^!Gh5E+$&6|?z%e%33BX7T zte}a&&P~L7c&7An;J%!+>j;+qCuo5!s!mi*$rVt?WYv)y^SA`HWq=R%=!F`oG2{Pz zgZH=aGK~4A)6`s2n|*B)Xx{l1Jlz^<9l&+v?aGieybHWflm^G_Kfj|Y=jH;5Wu2OV zHKX*iZzb;SH#C~6PKQeb#70?gWNtZ&q#{-ZCLpyI&ja$cpl?^FdfL2}rKcYTOoJSa z_B3$g{$CgY&y3D-XzcT)?{7c9ZdKPF#JOO=;nn;~ame(9AD>Ck@@E=fz$j&(3tPu* zkP$$+&L%z*>FC6e@c{kI~>OYvZ*O%u0_ymL}^s^4Y3?FP}VKU2Uz_|VkV+IiZ<>u=|CcB+<~ zqoegcb0rc^mD83|>v!G^zpx&0l??<9FB zKb(rEPr^K@ETw9gP3CAv6|2R}r5ekq;xtO?tMUNMy-Vvg{f4w7yZ$hBi*rykFi=2R z{Q8%I=GqbwPUui1W|^HV{ov}>W4r!Ab`DS-qM*SDt8SqSTASzILR)1lfPbFeOiya` z__yZ^b*?Vi9d&3C<|2D<*whuuFe<0_DJD&P$-I~PTu)DjOT8wJORYelVXIV|q0ka# zb=iTr^n%WHZMaUALe)i@ijnISAn!g_i@QZ@VOJ5mVKq@{5eEm+2Q*zQOvp!(@_7E6 zpfwxB+pEL9zRXmYD>xdpN<8;C`x(Tc>Qan-a{D^0Q|sa}1G!7Ql*l&<7P}=Q{K2Nq z+Swg4T<`(KUfQAe+UV8Yo$;CzBw%NbU^TprmIP&}0Xxp{YbSp=uAaFEc4m0nPnJ%T zK=2SaZBi@q?-q~i(Xt{sUx^1h;|mk{Jh0F5K5SHae+u5`eMv#%w{p8k=A_Ikw#PpG zf(yCPk=|L87AM)h@lMOF(-@zT~^%BX7sCQ`sX$aTj=elU9pPT zQpkW4>C|_nOONrD0oHV&oU`R&=s4H4_aMyBK4U#ci}KGNs{83i9F4V!U+#GvdsOz7 zx98gaPir58O)LA6!d1Mtok`+xpSmQ$fzQD^H~DVLCszuzKKMFjDbE-NI5e?&^sYEt zFB&5Va(je82ERJw{L^0YcSz9bon%n3Dow3~a5aszdoIr%_j)q}!&xNwskL`sssALn znoN~ei{q-c{@8&BM5~t#K<{CqWA!h?(h*E;I*>1F2s~Bqb}RbPq>vU~B-!H#LvMHfhj!q{!jSYKDy6MC>+5F{&(ei%S`+6M+-)~q^-XMhHz$(CJCnnySD@ttHI$r zfaB%|BMWRH!$Tf<@z3!igtc}%oH#{r0k3~YRBoE-<9Yh4zo_@axL{_e5Lw##Dsda` zNctWVC(y-6?nNu}@O0$OQYdKEm;@r7FM%h-EaDt6+b_yOCAD=%neX|O68i2lD;=jP z;f9y|4hc^L>%%MM)3)u@)yXQfBC)h7n#h>23!tjJOh2p6z-~o^<`^CV9WUQn202oa zAGNl7`qq+J*%-jZzLA61;hb2lMXOI$#l69gfchtaKNUFg2ie@y zgxIk8{MaoDGZ z^lh08t2jHJF4fQ?NyEhe+$dc8NXdF#@#q16}J^2yv zgff^q>I4A--OzL50~x5>tNVZZ4>xugk`uvUcP{e{C(~I6JC)AY>s#;w=&2d}kQde9 zw)p%qDHMrF{u5*YNz8{zJdnX>fK^aFi8d_=DD@w|u5|0)1FKl^fTo`=@!Vf+b7M@G zMM}{q{z@t>VEpemDK+?UHI|$JjDz5TnN1rf*){ptw!-y~(Ii~(%pCH2d~&Yxwnuz^ z=vzfJqNBi{_3nD}FmWw&uI0&)4O>_e^UhHmyJr0B#;-AWnjM0y5n}CK5LxES2>#Zn zEiXSVxmF~pw8%ga>BbMI^F%I5elxl!j+}~5e#S$}`w>D)5eh`lo%ZKMX6% z8aTt?qi7L%Y2zP+h@BAFPk($eU{7!_h6g4&$9J;%(a!ExnCSMX1+Yq%!}3_+dSk}L zT5ugCyBdG1ka)iR$Y+J%MCz>P-4R4QAV4y+i;MrOx71bjbZY@^@6Wy+l$2=i$7ssa zaUA+MKA47I{y(=lGovaX>g}Q|cTuUEA^J6Lt&iI|`n?va5SzsHQYi`D(D^97;HV8%9>-18b##hs@VZU%92@HRWBrnka_%HV9=>t>m166Ii4H! zyH|&ZM_uh+7qt*`_o`}lWw>+2=w{{$)x9r@L8o`QR_)L~^F#{ZeE~Y_B{2?QD2-G- z&tCL@b>&Z(-iXXar19S5A&zLVD9nVITE)CK$B%iy zQ-R119*hoJPdKM<5@8b4zeukw^1{LCM9yQwq6F#%=!5D|F;y89v$`gIlk%-WBmT=WqC= zvb7{8B(4nZCGxmE-FrJ45d@q&D!1`@m`O;_5o3qyCVr@paIxDj!dNt7QDkKJY-p13 z(j4yco$Iori;KGbi8gB_eGc> z#r4y);BN}OQr%KdSEZV37S2%{&>2vqkMASQ6V>yrk9=vlXZM$Dcnv8qddJIoH}nov zEqIsX_$WDZH=Ayu`eoe4X8IF>bc&~Eu-9OIfru*U5@CAN(yF$n6T+=x0~nQrey4*- zaz=lOsC#LUr)^;E>!M*Tfqq}vCK;;}c_(^)xTjj?rhxlR@TOPt_E}Jjo`?Fp+EA*`IX+~k<6_FIbZ3$ zH5GTDGl?u+M{`(Tu#RsB`wujD467^H?3rk)b#_rvgr-||zc;_-1unCwa`+Q5YXUNFXp zIT;02?^wrh0zciC3OO=dTf7=8{p6vAxkpvkS0&;(C^Oh-+3>~I6yV!=3~ck>pMbqD zpeq0dWtG_uI-dF8fTzCYC9C(2vnl2kJ*%oHn>3Ha5UL|DqpIi20C4I zTasQ;h_PP~@_ah|IW_?w`g59hDgOTOms47be!ygqXsw7lygicALhq_Kf6)nJsC8+o z;&sT%f|)hes)Lg+H8sY*CHU{MYprmmf;ON;_P?`~r}B2r*(@?O);H(<@VnMg-)DRt zcfyroC5haAF~u>}z#J5)b-x&MAp&(vc;hCMhJVO^kYzO+>H1`btnikMKw5`HT#MY?(hnKM8PxvoYhGQ3^lOwk{i80T}(CLu{gi3A86SkW19~G7{fX> za8drYpX>(bvy+S`{Yfd>vYUF72hko%bxquuyDMRB# zTy_&DWa}+~p+*2CQ|xn?eI7mBS*4$X&OhqQViiTtka&LJs*AC>>s*oNtiMca?>p!| z+Qhe6L{vVmT54E{7?T-pp~?h?KcaaDXHr#2fJV1&lZTaF!0n}*gM{gI27|ujq$n*I z$?mgcb)@yp{la?%@h6nV>0`mSH%b{dMwFDcFWHDcI44T|ZKLY>t$Du)ZNXfXTDh&O zqeiek_>lz8+==gb-g_1p#$Dy&ez`YFrCd4S-`TUd`?WvuaB&Ah*IEJq+9_@}j(!n?wZij9XEs{g zQlQ25;_gx#>qx0?u@Ydq8w@U9DWD2Y=V_6*;GS207|Z_G=$0);>6{g8ek_CjRn zM*>wGwBBB+SJ_deckW6)rta!lH1$I4H1~@ARt1RLB91S10PikMvNqN9hT$jUK=^86 ze9U*4S57->rpg1CN5{8Gu%6OqaB#Fc(!m(Ou96j?{~cx zUj5agXzW>z6|n)Kf&az(`A-=~u&)i?gWuX}+k`2>*lbsi@&+9Sr2AVepAsqgq!J&i zy$BD7eu_#V>w4R5`hmqwG5!glMW+4uLO&+D4bC4mN75$;S-n(VJm-HEBk>wtTwp|4 z$o-PO>4k@Vwjm|p76FqR@0NwiWzViE@cM7d!t+OY6||Xdl?;}j8y?nu;5LC5Y$rOs z?0=&)gOIN7bhRstHwqJs7H41jJVSq(N7Gq`HTl17e6-|L zQevn`OG^oCG)j#Q>Fy5cn@|uWL|VGLyBh?gySuxaJ^THSr>=RIf-Lws0(iYWs^Or8?MYOVOPSoM&KxaapHx2tG-Mg{(u{m1f zW6lHdiu05+(Xq2Tybl=>5g{(-#-WP|1hp^;*Ju{Wsk!BMFk9rI9Cq-l2)$-*Di@+w zg(aP%zRx@YXI-kBz9p${e2W~W6rlcq{ptX|gjb;xVq%qkYtM8SyWRMKeshR(KUNIe zkTI7gj|MGsMx2DZ-)RL3gLEJNmd4!%y|Tw9GjVz@RwgFYK8!p34s4YAUGg0&POm7H6+KyYhbJBudJ?;&)iU1cl$>?>OeZdHUtLJh zkRX? zWD(iHPlLk6Um1RcB#FVq0pP7QGwZ;Q47f)Hd?Q6QyWTGp$Yk7aqkx57$_F0b<;xsu zqt)ZrBnYqAS%ZmI1em4tq4EZPr3C`B-4|9_wI_?GL|Lr*f8PZvav$wIo_2?mqBi$& zxdE${`=L69WUmYC-DY*4k>zLcQRVM^?jz)ZIhDOmO2se_hV>9R?0j`QdSjo7XAGBm~Y=pA@XWRV349%j8a$P)=I zvKgq;XNW!fX<~jm-pi9MfVUF``}*uBbrd5{{S@|VG8t8@)Sujf)-u~WUT-naCC<)X zw4jN-KX~_Vtq@OH$qzpUV>}2_fe-TY@MyEr-=7M;0N5-At=^T7r1v-m?6#4WLU$(G z>vvRH`KHHiZj3)cnI%t=pFUHRF2D6{50!Ser-{lQxzR|sQM6rYDm8Z+ z&y>beEV*Z#oKIwjlxC{X&YGm}#d;0RWq9sVimvzJ@2c^ox93mR7-@PT)7~367p7(Q zDVC|~06lN<{01IN{+`?w8K*EleIDD19P;qJSyJB?4$yBoU*t|^V;J~@-UY>`CxWuk z`cPk)(dTB^rsih3Vdv-7_7jv4b%^EauL<)w8}!=DE0U*HdMa*9A>U6q9Ln)HMcbOR zwj?_zgBH^7T>T_?^RyYW+iZ>&3a^%Vf{y=yN{R@a;YOoSez#XaoH&aiO)Ud3wvoT zs#Kf|#6`?Tgl0Q$L^2kC;Z6vLex&|My6x66_-;x?!~N*^sh;WSKteZPFrjFm(y<-+D=%7bMy!c?SYK})3eC3;*M)$cn? zn?41FwLcnlkD$F zwiD`)AK;U%NA=a-#|sI`_18nPleX8N0fbXQLqkKO{MThjF1(1-IyHd83R?6$qNPeO zZD4P5bEIl$r(&OV+k9-;_)-awVtY0aPZS7PP`+p-$gvI9)+NQ z@2-5`tNk2|7TG;v9U{XcU!5QLJI?KcwEHIxP>wudbYD&d5gvFhgF8*`Z>ha{fX_RT3RhIYn+T8x~FLq zZ@m`$$MQA9>E#z|)lN)rw`?u?#5Sgz0xMyeT}iN)At~MCn^(PdzQqiy&`u~%amkJ3 zGxm}1-kRI#|Drr@DnY5n-Q*F%Uz7wl(|KQEM(>C(?-*L{y|2M(SBr|tXZrv=%j=}6dKo``#|f6yhjXOn!X(YRWXVvtLc z(tP}+DjzkbCwU|>)byv(qL-2Ncp>UUEFUhnchS_6$4JP?+cWQSgWchW-O87qGz8R$ zPUfelLWI{P0J1|lh+;V}nTmKi3>o$ON!e_l-*k9u7fnOJUsMZ_t9{|J@C3oQ-PcV@ zBh7Ye={#zZpxY6f2N=EP_wgqITfC_DS1WS9ZaD?1UnY9SLo3uCECL%CW!Ce*_S*u( zHg&oq7t(6dY*!$9Bh_fa_i&E(GfsE;CdWVYmu1@x+O}9x_f<4ptc>1{uRL~|eA-cy zf9>*OuqSSGf$xEFIAzoUNZ$$1-u?6E==19FCe-vZGdKNL<0a@fEcvVstO?dzxxT*X z5tc?&C$|kajbEiCmh#?4Xn_T9^yL60f1%9U>zEw~-sk3iA3JpMnV^MjkVZwRMmWaJ zbD6~MVCg$Ls`d-60Gx7#Eb4$xmf2`tP2x7c)Dr56Brbsdp(|(`6aE5HkxOUHY{=>I zg5Df#4|w3TNarjmr$iJwS8ZN|a$Wt^8`dfgP##`<|M9~5qMHMkyVofhTOV(nPldwk zIcw<33T_IAa99M+9-(NvtL!cgFG@!kNL!1@;t;(QR}axU(PxXk!$q_cN*#SziIBS* z)Sx1tGXkudem|!F!1og09PP@$o}|G+uvwlX z`!~VY)4j;8s-DS5V7{UXy!_@_6iohLBr55hD1ZgQy}{JP7&joc$@=la`VIDnW~RK{ z(1!GCp0>R1t*`>#sD5i1_PK^gRangn%!kp=VXxRF7q8WxS}dqfanH2(i>v(d%PeTT z?9ery@q0?6g;O5NG9?;YhBPw8S8ha^zv_iwm6vgcCjW@oBI+_U<|#!Q+=oQK(W?7* zXW-q_p+0VofY7gFcMG9yfe%T0&1j(7BX2k}3!cw12POPJOZxkXGz^2EkU;g6lE_sW)zLaSgH zTAQ3N%B;X4>nz81B1z@6S}v9Q@5cn>Uff;ooHV1*NEoCoV$bK^UoR>y>GZ)?1?H9P zl$%P|`gOvJ_%8*h*cSD5>Lso`hqjlF;N>rm`RFy|*A1Cp^l+GBR%dLUK#ONjcf)zo zCzT)iGpZIW=+%_WnO_@*p+`*mu{0OYBjli}k2=Tc>HPqGiEhvlH~-LiQE9oM1K?3` zLqvV*jX~0jrOu_h$xE45CZa&Tm9$FdXW7w3TyxWiz)Z%;J8!n^#oCqLl?4l4D9E)G zJ%$@L%4;6*9jBSvlqtB;<(+v5i&oNNW^28LI?z8A?AM(=OVG zSI$NJdBkxaHP|jpfIkRbVz+L)|0&35$$7Beu!%}x;{|zGlY$A>uxzrO8?pH64Fz6j zD!~8j<89b?%GF6)UiUR!e@EWM{53JM6h;bH6Z3xq)L59`JuPv{qw@Ez&ypx}YQ2p* z5Y(xpDP|izHc-N*G$I4UfEA+*JJ%JC(*O{THdDd3KHtyzvYBr`HB2F#gNCu76z`WR zPu9oL?CLNZ*$zNQXiBZ5?5t_I_!Gx^b4?N3qaNodnceeVlslU0;asoORq!WPz+&(7 zIzu?kSZ$s#g?)Vdz%FU;Q*ui}#%lZ3oRg3JMvuTp#|z5?8zO*%EnV?P`1Z%7WA%~+ zW_8y5W%M?;tvU?u7AX25U+1qZe7d#AdctPB=6WWhZLg&lfr`aH0%#xlWZylakfmG& zOz%cMUBUjY<^$BWYCGyrhjbt)>N8C}#4_i06z5DS(30KTPfMRf4?HAI_lH_=c@&vs z^DEb5>AKB1A^9(?KG_gYp*WJOJ`7xhcI>cD#(nN&BIpSd$$-gP;YB?Gr%Q?wyy0vn z*}y+nr{^;j9l#*FcKEM|d8e`jpKQiZ$?mhd7bmz$4uHI3ALI;pn_paEkI_c%G86Pz z)bpH1znB)s4;`vd*h!bBFu6>0LqBP=Fr$EL$z&4hxx$s2-$&ln<%9c9G0(eQS1kXy zc}0xs0$F;T(zMOdmi&FYJZugms;g<#w$?}RHSR=$3|)5mtrh)BOOR+iXg3cK^-Li} z?^F5!fNQjI_ZD6PSs^=#zHcGkOu1d_{fSExUdU8h|Ca;c&5k~)HL z4@J87cee_LkrYYkBbf0A^%E{Zw9#1vFUm<*Ngj{p)lkX>bK4rKzgq*IrgpYix@qbIh1%rk%Q-_gbm6{ze}Wx_VSyIZ`smX= zlm&fvENESxPIwkdwq*pm%=*WJ@f`*FH*pI52i+^vU+EtzpNIq>g5G>B!b+~Kn-`wfY*&3uuM~7a}=i_29F^v_DX5G^N+JYe7I16R|DlAaxU61 zdXs7Ge2(@#j_KOoaH;hjv)sEZia}4Wo8V6lzf@@vBljlK$0v?xXurRs zdN7Fgn>qPnHcRQyZ^}fT49H}Dezk0zNQTKF`x>pEF5I$G?}^z2`|gKGWBdv8Pc_VU zeD{|YV_7z7l8-IfJ65H|y=uygMl)zga`i#Pofhc~vsziHv&gVf`qDA>It>A|%U6m+ zPe&1qL$%I>9=J5GQg$<%x~}#{&74bGhsb)Nkl^C1Wze|UFm1&OK-v3+R`Ux>ZNDCKDE}+4a@w?W4O&e z#?~x7vg-3~$9beP0@?W4Sb>LrT(QL?t(^BjB zOaaydVgSzyV>Jfgo3LN%X{RzFo+v84pTE^U^Z?L=)p4*V5c#nCS8cveeXaa@zx^!W z8ZONhAJ_AU&*oIwj$^i>U85o9g;=b*J|#^LNu;&k56SZ2rhh9*o8?RgWQ)gPk6002 zJbL!AeRimMOmb{(mEUk#vKfVu8tLfRxOr`I`}h6z@$&2=T?|QR4i;0i>bRE;4_xZ;+scvh!R5Po6k@$`}=|AIDf?6tAtu(%i zrxe(`>4&L{cxMbJqVmODU+)vr=-4wjoN2;(3&U4K@6H8JbS3ZIge_%dq1C8W6buXR zUPAzqlNcmgw~v5F(k`#y8O@%bkf-HYAb>Saz^-=?(IZ48CTZdgFwlM(D*^-bgj`_Sm;!8t_BWJDz2yod*I_d@jZULU8pD1B2&j=4f)_reEIQ2^*cwQ zwFIw&C+MEI`&jR+m|>{9?B2h+OxYEZ_p0 zoXcq=b9iQ?FC=`hCH(v#5cCoOmAgA71>N0LQQLu5CIPQgKv?h31S$RXHSDc`ncn{1 zF4Xg3Epsz0u30kYa?Y-xahW?CgD?&2q%ua2?{cl?*9c!rsG`AiSL(TRTN9)$(doCLd+L}|OPra!z;2d%7HMszWYhOM#VSD-E7A3} zS?E-9h|KnG1AefN|Lk}=nUs;1pi1QPJehr-SFQ)yeCOy^r(qn>E(~2j(bcGp+z@ob z2_-T=|0vONNNCDh$g$)1)r;IyNig=R~bqGLN3#bfkajxZCx#`%=I}c6bt+5-g;i6#Frlp54CZG$b|9^ z^aN)PwTr#*Jp>PHmv4hoK`Xnh&Dd$Ypc71Ck4rs(pv>lIy9y;g$FtAgPu^%XovjB247H4_Z zU6vUI%<-0Zwr3nGE2g}?*f6kbGq4sm3lz37A8A+C&s^}0;P{%i$6%Nanjl*@et?|rs+ zy-vCPIcl8)U4TGvN4WDZeot8-lq~WlXkXmztd!na=IXQ&@Lps(y_y4}zYf=Zz8Vxy z^vL{|$gln+8-J=P?7-C$>ivJ==odY^B^fq?+Yo?1}+ zO#tvVm$q2?=}``p6j;X~a4B7nGGcV^HJl=}Ne>b#gY)@WP7%$04lev{5Reib@5)GT z))tk@aFOKXy4yt1IvWaK=IF)MF~HmMdXq3+?OhCe_voAcD^UHELkiEF^xclia3Xfy ztnU#|Q8ym%t0FplGDD`o@6MAw${3wvVc#>I0MZ=%p=q<6Z!W zn{_<0nsW--$8at-7nmkmc-K?mxT$+P!+70qI2+khM?GY*km>jFihs=Es%BkuGKWi_ zkMAF>UkvRoYuPvLloye9#|64SY^8g;y3n)3nXqg$zF%O=$Vp)s&y|bg6}ql=yy(al z8ciAdF@}aUkH(cdIMRxD;#uL00%-uQKWTEF-<~~m4vkE0@S>bipdQjaUXH6oSg*P9 zW-frpjv)|(2S+shZ&W-eE4Le=azpeM_5ZM6UFw$n`HL)7iy7wEp|89hE1vqelGiNS zZ&l-7$J4!=D;O6~{0s%H%F2?z8=pUZ800ST4~v3Fy@#$@XvnO@1iSo^7qS6tEqL*L zu{lxa9+dNUtBCWxb8w^7*LH%yI;)-_w&_~X)$vyfEPck#tF|!SsSWV7K42kbDFW`% zG3RvotUxEaukVruzJ7xlDe*znCaWT7LyAzPsXedn#rrDqY;FwZjFDl?qDQ zu+`}uEW&A`tL1fect!3?VJv_IB+|KqZ^~DCKSSvXN?x_OJ$@=7mWjpdo7{#mkpA=` zeGO42Th~8yv+u=l{+YAm}B z5if(*+pi{mcuY;_c#s2aRNrcWMhx2X^Jg=1R1Sz@vp)ByiAnFKLuSg2q>utQ=t>G2 zY&rE|%{&(`WNmZwBq_^XZ|{@EfXPn!epd%infyp<=dxhLxZo9-fzIbLi<p~gg?dl2t+*$ol}FR-qOh9+BOwBB0Un2)GL5K7vP6il zn-()f<*JLC`mPd>sS3^=-zOA1|$4| zMEkyPn}F;^K!0&7{Q32VocNpJ9m5ymnh+jZQzf05@aGh%s5i|K6UO>&enw5A$Cg3?*ROXvyD! z;F}%?LhGwL8CaZJ++^vySnUc{CPAIR+tiA0hjW-$t9@ z)Jw}|>mJ*yL3vNbejPH82si<=U@G)ZitOM7eLYUBmAr&RQZ=3}_Ya*3jL* z;m3IdQT=wNJJ^93+I#f8d-=J6)?W0tL#_Vut&!~sfEpWEwf6Ol5Gq1-e>frrBSuRqYCr6=^Kb`ksrLp2c_O{?b2_W@FxjV z7%5B5nJ0@YA#aR?%LVbrKCDlp`iP@n%|VqNB`}4#9OFAh|}_j+%u!A z=YJvZ+A}^j`hk|Zea$hT?cclRND4#Jo>N?=6Lj?)KfR#%cKGZv@ym(OUh2KIT#5%% zM6{^9rs?C|pNA%&3osRFV@o>qD92Q38hTl+ieyAasRdU8aAjWkc*H(L`Jn1IVv))i z>p(VLFhy*FCM?OWqe<}`ErSsa>;$QWyY_wGwpG{mgg^RGSQs2c-Vr}^9ifEBF!ghc zhMYYth1{KcGDCPVhxpBEy`C04H#E%C9uQMTwWhE z>=mqCvtew5XNUT_w)^)odK!etEDL!T6U7CT-qf;p=*~|%)q^d>Z!%`<*(~#ukc*R2e#Ggq)*>E z(Cym&QR)p21!re@Wzt7fTd%^#IXwKaqg{S7isEB!NTkpEzwl`gj+y9pg9sb8@ka0b z?HaNk`7ZZKq37JDoB|d5#oj_OHz2C#1dJL+ih;A^(Bwp}dSO#fb;zSB=eQ3H?b5@A z%mAKe{b|RH;{;Ts&Nknsu3^q9{=KhAKd^3iHy3sG(D=5LQDNd>l0p|=|A3bMu6Eq3 z5W?qO`a-Lu%0mf^c=j8ODOaH*XGeTOo1*ll$jMRV zu)gZO9UI5FtzyT{mRlSZ4DkD}O~S!ltw2QUV+8f14E*jg7_d>$JEbQ7q@uFKf1g-k zHU+QK)X6SwS;=<6S_gMnjc8ng&6Fi5v^J*z5$As~M^!Jfy2fU`+K|3FswrtsA$O$2{H9x)TgtBR= z0^Oi@9=*-9Jmr2La zdX)P~-y0+()$FDYJ8)p#O??gs^$5Tnh)3eJ)7op{Pwp;qtcvcl6?7=tMScB-@0;#v z-U3f`@>iF(!Na9Fq@QPX6iU=De1M!mJiEYpM+>UcWrdofDKE&*~zPzUt-A z7ock!u8`uaK|2nY6py8QML1%0gC=~2t+nBTF`>n_bzziO9ZV#|d4P-XSlJOV>Vu`6 ztox239d`>DGTHyF!{;8B)`zryU$?i(fpjo0oeH%G>ZRA6g?4}8MhM90mcT`2{u|)5 zTz+;(TvA8vQ{SWmMT=+O4rUrxy>mN(7+6<>Etmg0#wP+|S?h?j?Z6c)s`<>1Ze@gC(RKpDg$a}uV zCaSje@z8Drm-(qkf{`!_i~Yr!Or@zO-c8ent6>uaNx}k_WnoGJ>%YcQqdnm5_rK{8 zzaj)YQXlrecvITinHW$sVVMYlGue`{1&4-ov7E-3jjr%U{?T8XP|9rRPjt}VY5twS zl=(3EOn@VAIHZ)1=U@Onu@N2imOfehLwi&zwB$3Q)LVYzqs)Rsl6mT`p*I=t@^wfU zE<>F-i9#Mwla%#RIXCi{IXF(E@#_q6h`Z+{u!9?{#e2r$O#HpY&sF zendPKOX}15jG-v_OZ5gBBqHTYRGp%^?nba*b9C@H8qK1e4`9UXl%OT=%~}ba(^8z% z0GlYVmdPbf(dSZC%IG%Te4cGIP=MqODzmigzw`l;O!``r@jCE9?;ftwkebOQ z^RTvSK{#j9FPT@v5RDQTnw#M~rn{`&U*~4Zk51VOmHSo|PWr7i7;&ow7=srcf8UQ( z+5;!QlwcO-|NHIwL{=GZB3bcyLCDAyGO0R$yoas;OIDNK^}Bl)?%m#}DsM3C@=LS8 zT2~6e)KAtqE6Cc4?dx;|Nv>U7&Mp0>7CoY3Q<~zhT)973i-v1vR`8N;?{%kS=<2hf zi>|ymoR>Zi?}+W+SIsx65Ras%5mZV5zpDK{&d~IfX{6`9B#gAPE$*934biR;HQtha zO%L4OOZW zX;PoFD^L%LG}oRDW+?MoekR`DEfZpaAe8o|oaL9<4t!%6>Jg;Pfnaq1(i(PVZWG>u z=Sw3`dfyLtp$Q|9bh(>ri?v~O1R9J1twOSfD&s3*qxQ)i*AwO37)H?7dRpboI{`?m z`qNP${IBm4$TC;3%pvSxIyD3+65JzdL^ig{?3u@YW)PQxMYq{%yX&2R(C=ozvY;l9 zRqcZ@MGHYl)Xx-^(79}(b=9ghn~BZnxC?Dqx``(pS9)z4FGU2(X55QvM|1N$uV?n+ zLQ|gl@_#-hR{y#(jrJKlAQTzy!mxR)=BnAzhJ*2w=AmX?y^bDbTWByMRdlD+hsF>ypoA_J;pL2k z*=rrnDo4Q@8tCl41lg1V$A0%%k7y~)!a^p_ubnX!LInN2r7d}ILQYSAz)wfIUtuy4 z8O~rTzqS3~t6`05!3Btw&EC9A;ky*byo!GR<%65>St@ny6Iq{)IoMfsBAS@FCy$+Y z68%5#xiTRoQG?qy4=wO1>nV`PS+`{Eb{eFQ2A`7!-)BgOok@`vMS)Z75sEk+Xgj1J5d8@e~2W%J$Su~YXOS{}YlXqXjaGWv$081~liD!ygE^a+W_|hV1 z?)!Ry1()K7`Qaz00%v9QTBoDX*)y!+JDY?a@V;{;_kihR!}~u_twi4k5^#OJ@D(m= z!EHuC;7isf{DMB3Xe9Kmm5rZWa8qAY<*ZW??^DDsVxaY5U^yP@eP@tq_vJJxL}-QH z)#skS-bw=S%S~>|T}g~-(nT6^5Y9Nw%D{~yDYKpH^vhj1`s>>Eh2h@}Op}3v{RDVL z?66SI{1E)_9tvmy1$NHx*2!?oUuZu+YI$aSZ-G2Zj?qZ(YmmPCM=*NE%cBrEeN1>8 z;`992%bU}y>jjn@XUDg!uZyZtq+Zo@*E^EAES1TCfA|RPrPu-2bi@?gS6GU2hn@Da zbghk^)P#)CgkjyuY+kHjz%(Hosj2?u^HO zwY=2_c+pN)VNDomaL-c|;Rkf#Rt$EAeUtfzVav?%(Lu|P(&{@w!@9M5G5KsCzuXcP z9z5X}ZVF8UDyduRVMmdqUZnbx2xtDwAB0jz+Jcf3XhB0d#?u9j(=hh8tsGd_*MpJS zl{|gL^T(4je43#fEWR9e@@!b*XPW&pmmo}FUPLdsp8{l5E9OD_k{-@aRpO1bX#epI z9u!}k*qBh~hhhJ`Hu6VXvewLN7wP^t2R5jBzADQq=ndgJpC55iAAOH0x87@2vz~Lk6 z;Sh15D+E;@GGlT{Ot`m_!T8_)Qhm;d{oswasY$vsTFp}7b-NU}u}n?4^5_sb|KS@| z9J2RQ%FzYehi+)4>=zo}2*aginfrlLex+gdDz0|GnC66PTvlPOkUjtSV zR%@kSrN;HpegLQnCSJFCckFS;x(P6+l82}4)|k6;PnLuSZdjFKZ`UPtq&FHF@{jsP z24#7yl}w@k=DLlo_`#jud$(_0Z`7Wfl6O0XQ|lt!&;z#(c1u6Z>?R-d6AD-yZ2qVF z`t51)m4(Gm9ieG+ksJ(u`@n$K(piRPr72ZJT6Q!9X~VS{|0C_^zl?WvYr+0CF7Xp{ zL$?JZO_i%wRJJB77$ULCvpY;Dg~6B- z?u3eZ(Q?$Xk;Q$fZ0-t(hjqVF1UOFC0AchdyeYTKH{%14SNgWZxfd ziLuy>aw0(5^6%;5RZV8}>Aqi3sxI^K82IUMD&jUwqJBNt6GN{E=rQPxkf?i^`5C<8 z20i={bx;a?SQ+MaEtcIE5GP2y{q*n?Wd5vVsgp&=%C?q?6r<@hJoj%heiDx6|6D~W<+BZH&e(CYI^o-FfRkim@r|V0l zzwOrzgN0oSc@LZt-nBO+-=(*04u})*e~b$w?uEN;?O*(xl?2SoJiFP$)hpQczjK%x#gs+zxNHHRg_f&UC&Y}8!qHXlab&j>X+L%lL_or$LLia< z>lUTRSwyOybM^aphbk}Ne7Xw1F1oe>yUi4}cg=l|ZqY9yt1=q0?}vPxy=a5X(?`|w z$LHOO&MKc|YR1?7;_P`Lh1Y+6fuBbXXg| zA{R#IN|Y~D5v?PwJyqPcl)RO@azO2&kCin-i@pm#K#}wU-yzHQ)iF_9`8yX>Ox%l_ zo&NUB-%Csd$@eHy=m?>(k6QPC#Yxg6=b_<@!88UThr5@PU%3|!VM;rWCkH6Vr z=%&d@(hv9M>CsZ1J$mm}&nwBnI^^Osc@pk$hgvFA=Lhzg*+B7CBHVN8l~;v+N+4bL z9&St?l3sc|YefLGDoV=b$?i`2^GU514AOOo_2NwH^FI644`iD8bHTKtmLKfpS{@Jo ztn_*24qP2_-}b9po;Citft`MgN)BwRgA0#dBS*OCt*!Dc%d*4L# zey6^kz?XUfA%n}AmmA88IwstS(o2Cq%(oU_%s9>@D&DCnhOfIaJUD5WWd5rulW%&_ zcJ|m@+jlhA{z#BiE-Aw%u=|$Zq0b@Hh0Vw2qV3KG-WPK>hqw|Fm=lg5@V5hdAG9JQ zY`-`S>;R}lr8OSl61SVPSPts^jDl;AHY!@E&Y9mn_YN3B&F- zeo~3$uhafN1Yf^zD3P5aF321tLyJ!=HmAwPI0rrnufpU0aJF&(Z4(j6t{{<759EHc zm(ePkAsW1=9VbpNhOTh|_U}}J12O3prux~acV~1ac3(0dq^!<<79eQ{fAe!giZtF- z*r%rxbMTlOAZYE$nXpB@Pl& zZmCo><8mbg0W!aNL4w_z$+&F0SqG`wIX)d@$YDXPD-~wi!F;XVgRS4y)K%;h;9QTz zH`*cbf;Mj6A|JT`Q5S&QL-)(~IvPGozO%4l?jwdl_#{rLzeZ`!SG zN7gcKsA&XkXmpn-Brbt}5f5|@0)Fce)67(r7H!(IHN|vrD5Hh@4daV%4XVue!*jph z<%u%aY^1g@aedCE%6V4IOZ1UJ@qtH@s;1Yjc6CCsxvzcF&`5$JFT%nhgVmSfkez#? z+m*w#3eC)g4~J^M#v{{iu0~(pr!-E=IETQ5PAE;AeW|%+l0!6cvXuGndjJ{B9LZlq zqa+lJsO0^!n_v!>dV%ZUJFspfs0{A^mKuHN8=8vY`<8^X$CeH;Jv47Jpzt*{sObVJ zhTc?eJ1HY$R*;!0r%LVHMR4Dij#e+9{;4;G zM%bgPZgNxVtn3Ta44;~T8x3&N6w?t$OexBSfle_>72P9F)nTCB`?|49Be81sChUCC zn9$PNUf=d^jTM?MGThvd38_9Z->K3O3xi}5d6)cQix1IzMtDlfT&$08t9!&@YekS1 z&1kdxCUVmnY!BefndTCTZ=(jX{%M>jxScfEAQT2{h4!|8iURKZG8E|S`YV`(*!v-E zZfo`N&e7@C)||V;QC<_B6c}ksLq-{vp=j5|hi=#To}2L!Qhn$0-fGw6?0r^}V~8Ou z=sSw9(8W`h?w~#B%_F=&G4=ifB5Jq)j-hru5x3noBl7D z2bMO!oq8A5i$UU5nFvx{9JBtT@cmFzCqDAp`aH+9v&Lq=#=_FpeRfZG9|gu?HN_Kw zlFH`uTZ+PY0)`kn}>_sf*pBFWh;sk z@y1RcJ^>wKlM3(SEuTw$E}%gjEMo2;_wpMi>Jm$y+hH%$5>mtpz3t+)u@Rtxz}F3= zI4I+1)CB8$DbTo^(e&9)nIoRe&g`Ij-|jSK=q3Vu8C?xkN_l>C#Zw-V41~5X_bSNk z-K*qs*5L0My)jJk=sr=RxESq$=Kp>*-9ET{F$(;(`4CW&hMCf$Yu7|>H2Hyh%-n0d zNos7|C)@@$#D6uP-SYBgFs#NT$@fja7zA3-l6P9x8=fDcwYtW^6h5>!^wN%Ph z1L$|VXe&**Mb+dpYj^u*%WImd-E^Xgv-K79$wA+#z3-Wz`DBJA^CUgX7kV-lvzno! zvI1m87ymA|%DF}}yJie+(9@TY8x~B#81Y#z27HO|%zt{}E`;Ni5oc^OhhnA!OfW>e zdr6je{`+OiKXb#0?0NQ<=k!~FDICTUiZ zIsp2aG+7zX#5`b#BsbuNw^=ueoP=grFou{Q<6)UYFwb+VT27KqqH-!rqxVkZ#Q*Y_ zGx;0P6ZdAomy-FMBsX7#RQUR9--F8TcF+oZ^02 zUu<0J_@rO@D+>`#7!k8W)v&nZMH zCV7HXvim+TO=;-(eff+>Tms3P7`n})4HubwUi)TN{JW-XfzmwZv&#Y=y)MA&2ewNn zw&4|M(xrLC^wc?KtpoIiG1{!@(~ItZOcWFA!59oAR$%rriTCpu$#!ho)`)JtHhPkl z@^?JsEY@8euvxzd7lmH$E)B?mH_L~l8PKrkw#`QRSGSms!IzV_iFDr8i)T`1P}ep> z1xj3>P*3-|b##}oEOv;uV*+p|nkxy$t3^0@#)PK$Lvy?Q4ZWN~Jrg|a&V4q#txrBZ zlrJ>z8)!BkJLEMenaZa!mI@xLHz-{jml6SM$2xb_2p6rX>wh^%6f^Y4&B)$;rH5N+ zJg0Bsmszr#Uy}39*^!M>s%+c<_z~a67k-m);7KL#HW3u1$AhuE1W1N@56+Azc@$x_ zTo&6Q=axb>aA~JKp|(CPc|YH9+FB>2XF~LWDNis`yJ(CG<_*I?#6iF4?#>+u^tl}%RLf_$hJH45Y{K}#3>cE}*1kEV-@3DbU2cV+ zvk4y7R~R2Zz8ZQ=1>S55S z@xcrQJXs6M*>Anm0=ch65b93)Q$3dtTp_K?4G3twB#lXdRs9Z!;vm88KJ zDqt14r5RyhjxU%ZoD=(PGPGImX}H{qdle@^P3){&T7L}VxtN5dnT?K!lvYw}&Nw%_ zsaX+2BDAM{+^65y&&)uuOCJR;YwgM|l8<}XH8O0DhYp*G0wxH5dKg@Dyd-%&ll-D- zHa{1i^W;bAPoZu#>Gyd7s0ksoOD7SaZ^Cb~^*Pmm1`rNUHSA978JZ;GFHPWW-hqlj z5ULQ~C_zzog=&|tIKNFqrPMWg;6IzQ7}1C^VeatW41|v&Bt}_&mMdces9S$KK{?g6 z_3>|6405YR6|53Q9Wi_u&0o{BARD*;BGrel)+v2Rx#s(}*WY_9G{Cp2y+o8W`eY{VirXxNn{u)y&ysh-le|F@d4gIorI%FvT0K z2XO!Fx&0PwTbK{| zPqANtw_~{<}Wza4X?e~Qsjw%dWS=^0c61f{zX6zMK$=?-ZIE+L&tcQ?|Fv~+h#gTT1u9c!<( zc4;CQMzIHW(l9|2l`8C5_POGKYIC{}ta?j|(RE<*M|DcuIO%o>h&!=`?!_7MYSG(OvFg!i4tvy|RY=iTDAW&O>N@3I(JC|+?i z^Y?ur7|ZULLFu+pL(<<7hcz~Hv`y21InzrZn?=Y6y2|@<*fYRGc_F2LEJs!8Xv2Md z*9dJrlm}DPZq6}`$2qo_^bt5Y&-lN?g&QB;^T2fumyXB2&#T^k&RWLQZ2KkK)$3T0 zR=dy1XL~YkMDA!@`9i);_Jv%=FL~r7kUEyUglRzi@L}J5fu8C;4~W1!VIHmobVWyU zzS@q%N7&|cIzq3(reveb-q5hmh?RL$9{dOq0gEw4epy7}2 z7csbVC@oe6Z?WtmbZrbHETEDDc=6Tz^}|#qnj8s2Y9y<8h|1SD*G5Hgftky<-sPiN z*INjM8d?r7?6pJyJA!-)ozAL4JiG%(CU^(JvB%B(oPcUcZp%S2^WK8;`L(6HW+cC5 zrlH_%rJOKqgX##$=6@+Fi8z=_sw|a;pnARJ2o=PC1V_Fjz6Krr3J(0C`9w&>Vk$q)>KH{d!RvFe9 zA5am;{{`phxzUW+=LtVdGNYHg7f{@m0Dpz^E)~-=EJ8t6Y{&HW52Pr^VsSsHmqGEn zP>z%`L2SVd+BO`~#Yts{j}DZA4z!83J22QuX;Zdo#fP;Xg~5ZU6^>St2&41i=DLBnmHTMxzsPgm8TQ%_`c8NA|LN$L z7I!uv*W{oWZ$+J8?e|MoSG-d?Y)h0uU!?n9Dmv1C3Ytk`0-KISoH)f1zAA!+nPCl>8a`n~6?;rQ$r7(w6o(TmC`BYKA;3-=b2g>Uk6x*Tr?LQP;$}u9@3zv0RfB#yq>(;~$ zfHs&H^w&W=Fq9~Z7!89WT-N!tws;MTi4FPXvI`;NbO<3hgYDfq(AaT+4bR4?e# z`+Y@__OaoKPYPNd6&!NzdTYjgR-jMYJE~g@llTcZh=S}}KcP7&_+0-7lb|%Xwkm<>dVv}{bK$69G@nIQ@lD}4cZruJZyo?Bd z?bQ=DNlzs*bg|rg2Z?>ME`f!=C`kxc{+>Cq&~^Q13`a}GvU_1FZ zDp}1rSWPAMah3p)+X7@vlByE5RrUR*6bat%tCtXy3j99Lge9i4ZHSui{dU8fi;c$V z>nm<+T-@{Fr(VhPVXfz)0z#~Rd9%}iShf=51<`K;HlHt*63;#F1HDqV%BV|<5WMdd z9((f#gE*0oI}j0i9uddIIn)@K0d)ht34AiJVjYi#d>}T=i9(O77!hiV)Pk!F!BVKP1rrWX7FNzvdbfX zeERm;I?EO7o5nxm+&~SgO|s5H@54;~z#efbgZI#NNpfp-6H5x~qINze>nN;9?%RH! zuAjAh4JDJSoW-E{L<|bT`%)lnK)c0Z@x8?6{K^Y3$shdJ*o+IBq+cBb%sHskwb)Xz zaIyOcPe`%e5uCIx7s}X%gtQ*dVmWKS>tXehd$62osj{Ab7^p<_zP~m#O0IK>BvFOv zyv+l9RDu(SwvC>%+gR5tT=)AE?4}8REnjr2p1S!fCbdm4ra~YhCeH_~|3PU&8cW(+ z@BYZ?N5h2gCZ+1Lu4z`|X7%1IUi|?R#n|Es)QfTC4@WaKAq%(@hKC+0K+H9LL6trQ zvdb!5Fhzq5dn`)r|Hi3hdc$P~!{@D+-`)2sdk1(xa8%ST5o-S)5V4vYHMJL#H$15J zTOl;@Gn(Xm_D3#cJHReT-f6TFok<;?mDDi=rt)?9*TYDyyS8t;vtMJAy^i;k!b>zd zENTDz#p|y_1gXsDXO}oKPm0SI&XyB|lR|GZZcY-mZXx&P?6&DPlTGjU zw(QF9D^?Y-;sHl{p<~Tfmg$j=k#(ue`mOrQ6OR=$ zF9_l=2*|8()W3|q1K}vo6AA5z$LvjQObz+T`9HD02J&;2+!4N90%SYBIX}65jC_aJ zK_!C6rs^0B`*6oHYs_h*o4Kr4;sJ3KhV_XQLvCi+DTq30jChCa;tq_;Io1kw;OncY z*k=XYbsc0R6+$x!$6>8A1UKERGp-(7RkUfs6&+yO8}8%r9)6oed}{UlE637FgmTN0 zy(pe8P>4ZwfWg_hh2<4Ba5l0eXnmRyHLvqe6Be0`&+z95kBL?sbf*JqKy*Y557#fZ z>n>lem7m%7{>`NAQu=TRYkOodIT!NTeEcSYbZtC*fQ1Y9VV=O9&iLKymoevRfl*8g z2RrU>heLdh$o>SE5(h8G@pb*Nfgczf$_fL348Ro1JxSo*`5%{E(shZn^*CU7q2>@y zP%n9#%USYGXf-D4$JA31eX;_Qix46QJxTBBV%^i?f7$ofJjZ$JO68xStFysGK6cWsq?rM|;a|TXDOn?WO&2V9M{JoI94(8*3r6sl}!70eUf$ z&kt?(dq5ws?Ab*-mwd^+wkBtV;$G;!_q;r^8O_RM^jr|;Y(dX>OWTM~edw*8+4 zCTenRQRFc-9y9r7d%QsyV(4IUa7rU~w%NH(uGwpQbTn0F+oyrTO9@LhGJ> zz(huVB9LPj98n!$xPo)MC}7AkvxV)m64BDN80%zjUjfIdK&iehLM}nXWG>jmB+7_y z(ru=(QnB^ol1VOOBDxpf-zEHdNxrp9L4r^+GFx}!|KvwHA8pek!9pYh!q1^Wyu-Ug zIertdxiQMVLshsyhh%~QeelC^SesZ7DnQj~5@u)ApY`}A;iz^j^o1IRqu%n?`%hCJ zzed#Dpal_y@iBbNV&=ni?krlqi>rG3>>1Aet4MBJf22hC(MBMhn|^QC`=)$470H2{ z&mlpnH@N6{mCC*O*OP%RgK_jLEF5M~H{yY)kC6(>BBn)vRZzCnyY`&TSQiEI#l5Hc z9tNeT0?SNxSqpMNRXw&%HjtVAI6ni%1kf@mx88YO0Lw#-ONAcFQ^;w7Hl|1KUO+z7 zhJ5(b-{!TK$o4B?W)vkds;A}J9HQgc>AtiVRQ(Sbg|^-~n1Z&ts5|#yzn0I5h9W$U zwWR&wV*<7dV^zY=@qJFIeWoY_cBi4JL=_`i7jtSqMK34ZXxXEXu}pu|xTC~ZS;zIJ z5+AJKuc$yV&YV7uW{4hI8s%Y-xXLc}Ju>Mf+$~-bFBY4^$URy?@cpiB;kzD#XqtSk zshRX#CAyoGFf_j(nji3cdWt6y+y!KQ2f_S{(Lk`P;oe2jPsR3jO2L~7y_{mBMTr9ov&^(UqwvJgC?2^oL_Z&7DFsAv{CXi2kytxFt;I<3kJb$ljR4pIEq^8Mjv4 z1VNJ!os&pvj_k!n*IYRA!Xv=Go(s?ubqJtv54<<~dUOWh{HlNeAzxC4Y z+)W~pv;+v`-KjKR<~_yk6P$y8*uRhkgb!Xj{IMe3c^38%+&A}viSefpdr>+WMujSw zkMHYR?(0uQ;-MJZ<{Z>;CpN#h7bRbibKf(kYHcts!he)T;N7B$O6HE+PWVN0D@ak zt>11={lIhsibR_J{5Q+6aXI+NN3Msrt#^Y8ZTyTY{X6H?C=LhEaH7J_t17(6HE|!tV?UxZlNV(_f&c>F zWz;J!hKI4+p+|q{4M_P&?$ik+pwdotGpoE1pYyL$K|_~=1vOics*94+r6a_Cefuqa z_%HKnIhWK#;Qa)3BQUd+zM_}%JPws?=7*m`a^&p*A#>S#b6*p?w3LV>ao zCX0&7e;TayQ`oKm*TVS|je*6j;3xMzS5mN-anp`?y2tu^=>4mY&SNaG2d7s|hve1t zk5u(!XTr$QC^YNjStacEsP+g2UJzXuucIhsY3wlo%EH3ws$H+quD45Vtw-0j!@=yy z1JwQP>pkE9*yr#|pjV$fY4W+~3d*a+aT@UYgzX;W`PBMM(`G$y>6TnHLx=Z~YKdU8 zGx1rpU-?h9rK)zb&RCQj6YfG%7OjSBS<>pkUDw5m8Y#~zq$i*N$SY6K6Fg}qL=4rb zZ20Gv^e3_P?$mB~RIAh_(73qMnl}y)tLP}d6kh!;@+AtuG6GAK6pNcSknOYhJKPsS zIgs_9VFKq8JnBsKJ_(^|b=dbY6DeI+C+@GWxcnLha+@;4+5I|(ieGAH2~k8Gr(ix6 z4W44=my~`+XvtmnWNn@BO|Qe3kN0kQONc2F6Xl(bs2aD&A2%=HyS|k>XtdYf zR5uPon;BEHVCuoqx@8s&BK;@XRpK=zZ9<1*+>y>)JY}s~54)236nhmhbj!n0%gnI* zj_q@nJ|{C-g{erv?Zh}g9>*r-$mA|c5Nh_~UUZb6_ouTZGXqJra`n-P;ZEseuHpni!^t>=cOiU&)P>9|tF#6USLpcBV#u(|Gf~LVcrDm$KJ( zTJwsZ6ALAhiB;S6eKLU|+(ExWu%!*Ew`~OKnY5eSMn3S}_r)|TUrGErZ=3!53U+%0 zj87J%eWXX2hI=*x4gU&GPf{M#%31O<77na`hkSc*Fss9bY5(oCxaOc~AT%;Og-EA! zD|6*3=gIWwnf=EXS{B#8M`*zI*Z#%j%Vj|g)_>YLmf7)SW$AN-8V@ceztNw}mjhxd z&IcDYgy^;h=&W9qwctO2)hGpVa6e@pji+MdDrMa7XTx*Pl27YUKA&|%IBNKWV7wtX zV1+V~le|6)`;upF5KHR;m`UW(b}$go8=E{|1y-} zH?X_{!V`rJ{Id=Qh25w|Rd>Y}`vC3Tg5s3f%?E>1w$9o5mK;t~OaTv?Uf(u#&6eq_ zFV_5FMpPPl8r`>S3k0wf8%(!Y(^&2Wd>wUEi`jsJ^VF7~8>}lJ>ui>g_m9O}+qoNM zLCw`>$(Kf6RbCg62d&Wz!IDeaNsp?RJi<=ZaKt~BU9Q4&jb?$Ji7nk5fM&b&A!ajC z3%4e1nCQWJ=7;IaRF9hG5TPI@9#B)gjJ@eGu68HKr-PV`yUl;TzG(LYTB!DxP99=U zgp+(WRh#{}#-Lof;mdBm++IT4?`yV3_>Po-_@Zwv(_pomss)d76ttG3p=|$?k22V5 z$A0JjFPN>dy??!3+&v5pz)CbXpbYl!xBv0wYjLP*(1si-^=^)>`n4{44;B`kKKk5D zmfd-gfSt=2k7kz(+UDX{GF@cBMbZ08_JLgCvJ+18k25f773xBr1MIBVh0K9!mWvcd zghWe2KloSl>!_Q4RdkTVHpGcjZl;+D(Nvp8z)RI4y3~!D1_JBE0sW71TK}D84fs?d z`iU1uGW|oe>%q$VD;xdExcBe$AMM%}?Y#Dxkz)}VGgiiMwGyw{w-LYP+v1K#MUXr# zhkwFmVh~@d@utYEaQlZ^QHA6Bklf}GrmKCbCXsZM_nAB z9j^1|0+{0Sl-qwW|#Hxps zxnbJD?0>MdBf&J z4c1gmmJ#%?PAkQ&y0XC`G$K}{tfOR_>*Y6_nlMC_Va^bTvmqM%@%8);G&61J@Z}PlYL*o6FaqpHgZua z=jfxqmj-}__hXxN$B(MJF{8QM58CITR@=vpBcKXCSN0KB%kH(kd^AXEi)_+Mv3F+7 zQ-iEF)mb7Nf6;81;jW;y2PEQ}s_PV%WSbM8w{BL|Up&{h1v$C69={VsSOpz|?hlum zVW*j$3D87y6jN4!v?dKMpTz4vfN7O`9vW8P55&nFPD(iF@07VoUxGFHSKYo`QJ3&< znvB1HlXEVHj)+l2gj`Lzl{$&Z8vKe5;YQHh%uS^*t4nx#Fc2G2s%z|C9ji)MR>l>G zOqml?1mvcBlwdPy!0+u1(S~k9I}DHEm{m|>BkLJ6ubjZr0YWeVtDBKEXwjEf-30y_ zFmWC)ETdzhF2?W6P-vFXb6F02)@C?ijrW!6mMta9YT!#t-9~%;*FrEVySGd1q0wD* zDG6TCW8b~ky+OTr;-*+**$V2gHoHgH>)XpMg+=PA^xK}L+5Si1ww{2oN7bR#80o$= zKZSKk4WhftOcbj5a_Z7F|H&4i+xQnic`CJ@OwJivtyG!FxMLX1=`s4)Uim0kkHzbl z-ez81Qc2F!t8N-v#eY{CrLWCoQs0kJ*zH{+C_e~x?wMUytKw)b6MY{tlT&rt9-c@D zT3t1AB#g=FR;K3uQ7LLO{wKDd*uu#C=O>zC=`Pi_u!jx z5Nh4q;?{n(E1p2)>B(kq9xRF~re-_V1{4qxz&p@2{$o8TOk+O}Oi+hH;%<4Te6!v7 zw(S-d(pDZbD$i9{Haj)W+W{0oV(_-@%3)rlp{?_a>gxmF^5qli4rS>*sAlUXS(1oK zThHPy`(i7GeXx31m{Uo>`!g~G-G39LrusqqfFaVFz%#X+y_sK3F!cRpVMeYfLkKI{ zX>5obiAi?1ajEoW9i#Wjda{o5xVYoVm`c3Qg5AA?@!I*XDb4f&V54rq7feZt*qAh- zOV8)F$7B#=c&@DK^LzBgw6^S6AJdaJJyISQY-&@KeTFoY+-}WJ{a=l={SwB=#(#!8 za5+XzwzHc6-}&R>^TlUXii7s_lXILgYxHXq-4`$Ylv~)M6FMXl8%6&Stz9Tqru|5S z!8Hc3k;fcIKVL^tnF9jIatZ}CqYBG?_1)563r}jaat2Ypo0vyvbhq9dr^Xoyk7AXp zSC3bRnj5{)=d(WF_uY@2>G;%u=oFPxt4$UZ({Kr7^R8ufOQtaiv2IdHcSe z$%@Lzkrq99W(3Yf$1C@j&)cgt9 zWxU5nOx8XA8(tXI3$PwYyu_anD_gm0y%NeN9Xo~2h+P^v9O*$=vx>51eHOB0D+IAt z4o_tOQoHyzzD;2v|D#%CBFW-M{FbzZc{$5!!6Bn5Qz?eR-tKA!=ZB${cFC8!eeKVF zGaI~*EDO(unh0_}`QwKk{?XUk^(hF|AEt&r0YkYpP>Ms@PdY(TrHsEUb(5BS+rRn( z#eNNBKF&WT(wMW3#>tS}th=uG&=eJPzmXmSILyQ7tY#?^v@UBL3Gs z8=#|F8Q13%sXRtHNaKv(ZO`oYW;}&{8{JtfNi*};1>}_Pj1TW^>dwM7S4QSIZfLr{ z%|WmC6>>BuI@?}m8ayRW0jo6@(!(E1cU)g#WpUJrP_Nn;`j1HjD7l!*v#$sExAoDGWO> zq@?69>@HmT+R;00#XnGCA!Tz4ICo#ulc+O12i zD9NPeMZ3uTPT1*vkT<9L8l76|#*6nc?n~DM?eFdh+AFJ*y}%%^aNH(+I(QrE`KB!e zq>gwzO~?HbvncUMB#I;#HM>$NvZ321faAqKv#eZ`gtRy1N}vgkTo5~q z{U=htq0YR=9|m3&QUkF{8Lr^gs;CcmZiO`3N*!(t&S+9^5Hu;md_@pG2c0}gEdY>-0paXa_}VHnsG?RK z!ip@nys+m%zud)*SVHC35Shpl%hTAIUn`ffI_|?k#<$C9Dorr{mJ`_H5fBF}Ls}G+ z93XG(hXpT!nZ3XU)9W0y{`M!fwG|Mdz@{hvsp?PWbrUnxWwn2?Bc!}=3tw}gl-Y{| z_@EV;fDGUmh1&#Eeju;0>?bZ`B-2&EB2Ih6~p&=sPETnMghfkR%XpDIZWXj zjKB$+E^JvE)`G9LBLx0-0;x2V@;13{Ii2<0ttj`~{X&@L`d&DrE?Q)YvCYiAtJVtt zeF-E&;hqos&ihL6fNzUz=pxn-te_)5uDbI@X(5=yUWYAxmIO6LEWhw+d!`t7ozv3j zeK2ydb@eDz^_s_eh2j6$>*)tV6WK+Rc<_jw*CN-cfA4kpf<|}& zrIcW;r)G=|!93b`Gxq%GY1=~i+iupzZ(F7@Qg7*+4E-PE;!%Vx*(#{P&yBa-fJT|J-zVoW%ag2YoZi&$wx#KnJ)<70epUg;^6HjMejk-4u^$wS~W>xZL!2 zD1=ga;elphVIiE~35}p??Nz>*skUMUv#FI|%FE_WV7Nv6VfAkhv0fD8E;ZM_WC){ZOY zMqac>>%q&LP9_}(7XE^y6ilVog;_xjQ{Qi4xAVFl zGj#Rt+9m#6ab59(M6k;{FbR$QfFAcpm9x&)zwXLtNM(OkB0W{?1Yf|VbXO<>{&8IO ziDUp#g5{SILXH2F3J=84Jw$;M{;l`h{*htn55%-=&S~Ab(1fR3lO*Egqa4ve^q!>? z3n;b}*E?elb3vg+|ENZbvE=L#KYvCfFBU@FdZFX>3*$M(_8dZSto>HKGhY_!A*M1_ z$=c}x^gStTQ8gf-G)^HE$-#F}vs4E(id04k9bNI+R6yzt?$Ej%KBMrz)NHM>+U%NV zW~=`Zz0o{CQi5UIMHnX8NA3vG*+Y~F4h}f`10J(48c&;HKjj2?Tyt)e3-)})TAmzt zP>Q^%7x9jol((s~T0u)(nnhsy$QiAtzf|CV>8ja?W`Ep_ukq(bt+K`K&*ZGir_YHB zUI>*fe9)zIR!kWfIHe5@QHq1|XGFUvdC*y;bIaWP_MRyfM*4@%4vJ8@20biY%dL%~ zHe@c6>uIo+Tk$TqM^k*pirILB_HApE_$oO?gdRowPHFr4R$G+ONE;6luI)yWt?#Hr zSHC9ZbsFJ;x+h?m5D7Us7`#QW*{@NOvpsP?)@#$L#kl?-z6wOq#j zzADt-g9AiG}Rj;nxxiA;lRG$h*AjSsrtxqtw}R!=|Fuj z;0iLmfB`wW;bCsgVJoj~O*f`n2LD%;*|9GD`l85m-bK=-<9SdkaKVD+v|Wd^fB)`s z0;3F^NXQpg+1N@=9{Fc$ir%3@Y^10++D!TLQz3W7zFsO02A~@8%>8Q3b+EGb*dw=v z?kGxg>&M3h`l>N-lSTRHF$T3LpzK8{V@-0OKP032g};sCg%6I z6PwezGw9EpsAZsC1vnHxoGiYVp?>Q{gW~Nyzd-WlQZ2x^F`F3YW4lV>zYR0Hbv!bG zJ)!o^Wgbla=L?QaE?30R+;xTgs*Q0+W)LO zJb7YCy(`U{P*V#Fub_b{tsA643i{fIbQbe3B}B{*zX*klQTU06x!IrmIUPQ`nRFpf z=#cYAW+B!j51;<1f;nLpjg!wKnSj|(ZX!fXo1ldtasR}IpyKlEGU#l=yf{?o4o zy??oB|9C7E3^9RB$XMx3U&*xWa=sAxo`7CB@^38oiT$}`?Rljp8zBxt_M+Gi9{S7W zGBqMSj*QGouD#FlBc}TQqS)l9jo1i`exQq|PZNb*OU?jwJNh;a z;$?!5Xzo26m-DUv9$syE+tn#p&|mQG@CM$I5m8)H*cJEH;AzbaZ(c-N9M}c#NyZeJ$SiH0LV0Es`O$lY9m;ddS*Q}Q+6mBWU zQ+!m!-|R9}mg<`7g2}w20|(kR`Trk9gxEO2W}#-c?#aZ|#LxsrJR#fL)1{8hkR}&n zgOI_u#GG`_2g(_ob?eWL{(f^E>}C0_u&n8+DDu2PfKylD>a%82DIFccpc+$s{10mf zK3eBAmY{uu2O)Ub_)qXn>X#)a`&RWJzqGgAiix%Jh%mHY5uiPw^KzV&n<=M77~m z_9oq1m%-+809hf}py;Tb9wU@bvqBIY}?Mn8qfL8*UpDTWxtGwDwb$u z%<9jmL7b(y5mv6R7rIbf@q>#=w`}XOQWCe&8=4%lX$aZ_ZLo>1hk@f2D27&{vRm&` zkeCO-a4S(p9`&8DPLS=~V}V7xR!$gLTRQ!s_5K@RC2+7m$|Ty=QH*{bf1SN#4p;Zt zMkjV#Z&zUzUdZB3lICw8%UzX%`)RBhe%B-IDjss7?+cFla_g-pJxloVxGKTCF!}TQBjE9X z#jOMP{7m=q>aC0<>JAeMwPQXZ7S(t35&+o05`qV$-mJfJ$PvudZ#-k)F9mo*8#D=X zLN71y`*AgFevnRa4=%Zm#Sv!B(Rr_KR5xmyW(5WxZ-M*p_layQ zMPqTCWy`+8$S6s>IJx(W()9B6Xnl??kBvcAsOd$@<~tvqb`Db zRyCN-u5kQ^H75($6?o$-^dRWM(5J@6P4PMPgf|74Zqk-NeR4M+-r_U>ld0Bm_6XzT zCcvjh){dmV?P0)|UiQ*eCEw^=iG-vmI8%@Lj((c%`Gi?a0-&X`bj=i8X1a&{u45DezmEu{ov(pvl1UtcV4Vz=ZP|{+X)3d!l&s?e#ivUf0-0;9e6PPenW9f z3<}U`doaLVz^X{H^qA~O~zyqnIK8$X=SyArrjwRE@yLMN{P~&D?!)w*5=zzycU0V3Or^WHWpjz-= zC+05~r@l**emR7NkGScUwm@Wvoa|G4%*-yVg!UKw^|7Fuy5oCksp?L+joTTwh{&wsE*&{0nHGmp|M@P(5-oo+O}4$5#Fx* z)K08y?Fdh0p6hTbI2Z(v{u4Bw$#&POKC?>0^wFQ-()zhqY1FjIL)+?gt*X$Eu$%3a+~~o zWE9001KRMewH3{;Ck)!2VjxQWfe+y0b*_gVyB)8`*)`DZG9XJIe%~0)qa-B^BfOk@-_M z%eor5H(GInHoCH* zZA7UpM*Hyxo9eFh0=*6F@}qu${;g%#HDdoZ-(;I(pP&DqJy07p=fpY-=gR^15~}~6 z5iP$1Z~dHv^w(H?zTxVJ%H5F=FGUA$Gc9_@*Bjk<3_X+Ja+%&1pB(7|#%2-wnyu;V z&kCPoo(qyrW%eRDJ}*zV@Dy4}Ift44u_vj_WqJyO+cUhW7euPKqxRXX$=9gTqTgs= zvk2YUXkcFFdh#xphU$p7iuD4HU>|Jv)0%EQG|}3dfOgyB>i0WVKWgbC&CqDlb+aG+ z)(z0q(%LMXu4i3#N>CHcWfrepndW@iB*$=yx!`t*527)Q_sZlFXB}e19ThA^{M@0S zM6i?)!_B{+Ydo%p(K=`O>d3AvjEPAODfL!P6=({lj2=bu!3esutq`hA7QTBs8-r$h zr4cu<5cqApW(B9*gKHfxt8{Dn&^WxD`+VB=5-+wcFD}O@*DI)3#m`~NMlkuM`~26>iffU_!C zFsQ!FJr`SdUMHndJPRZbb}GaQfRve$ZO+}J#?yON1Aa{OZ$;2=1qj0Ls0`G*hEBnX z|Hz{pT?M9^GO!4mn!gMz{8O0O2F>x5?Mx!0*$;7Er5MewdxVGanaG@KP?KsR8fy=_Iw z27>lg&aJGUyAM)A2IItojP31HtmnoUtRM<8wTETZ&PBTuJVna^8}hhGkGeyV-6AZ! zxP?K$KeD=rYkt^4ih5T*E*HKL(=>MS568hI;kQ>c{_=eDZ|==_Z+bQsjhBBvoD+r` z#eNsrNNB+U!2pq@`l_w9a!y%0FV0mOz7|3w|5DZa@pq84yvF^R1i}BZtcTv<^nT;$ z&EY;HY6W(hNL@*=%gLL6Bxf+evv2Mmi)U}rL%Mn+M8Dm7H+C#NIUYT_$sH~0MM8ypE0bP+e^ zEu5%nY(%A{?WYZrhQ_LKmKkO1m#Y~glPt7N=wU3SYymOLzc*{I5qQ$>C<*w_vU%8~Log%f&;l&~K z$RNU9sX>)(YZ&6$dc$xw@7BRI9r!^0_DsXsTEZavb>=oZXX-2sQ-J)gZ>#@|>WkJ9 zT_HisFV2sq3vqQ@b#bo!#3>r_SSs>FBIwN!;K11qeC={W;yYQ;bcCb!_naWTiWEer z;8<@KN&9#cAJi(<(qTJ^Gs#!GP{@^k(#gFq1z*T+o_c~im%W~0(~+> z=UIL>J)iSGFIMqnwtVT^b{W!S0qm6+&1HkEU99KEXIThDqgsWh1u#bh%4J4kn0Z`* ze8keS-s{D>>A}{+{wlyc)YIibb)G)bwVcY@0Y04j)>gAyTyiv3Hg=ZEIh@%DiWG2E zR_d`4pP-+lyBJJ;xpZS3c{;%&DHD|nw=Q_6$?9RE4<2_8GxqLHN3ki(QI$j|Y!uW(`^it_%)QT2Oi=+d=nUciW3Z%BJ&ozUr)$;uA^zP%#75gX_b8UOe21}};BCr`x0z?bB>1R z`iIn%w$ekOtxk#WTXA*OsTjb19{=^-&Z*Suc!8qj_W#R~gubs)RmJ}2!MQV?Sp$V= z87XJnl4~@d%X_p; zb%OMeQm@m~`k4M|W-S?Ebd5JFJ*CZ9g;rK) zuHX6fLn4+>q7N)x9YR1wo5^bs`&H%Y+5N-)twuE{GrB^~7?ZQVN}v6uSx)2e2Yqr0)w%!e`Lb0e*m(}gKhi!ZDmeTJ&D*4l}9UI2G7x7C&VT(3CSOyRwke&4)# zv>fUs``~PTY8TNEJEYhjS!(QqUZ{Df)#T-D0U*&YKF_QS2)wj`XL%%iYIIO>k zYx+Lcut%?eUmG{1$kERN3cvpuyYi>+;B-$7+wKKu092KPE+weS%lb|&2r zR-;dI0*HEO-k_`bgNQ!S);@H?1&l8yg&BjC!m(g+9UC&m2UgBvzb_#Z;N4ERmymJB zSJ@H`y_AJ_a=4!$eBod4rs-t^g(=mvqp3X@LU4*5XeI2a$^pi79xu-w10Ec%GWU2^7rj#`j+dBJmW;>;MO5%nNkYXlU~ zlRw1B*m?Q8>E_rNvY*cv)*^oo81m0Ot+l$F@A0ADt2w)_qanZl90GcVBiSwj`!ZUl ziX@(~L>W+^vh}-~%@ENWDP;5FRM0=)f2px$nNToQIq+WOk$l_EY4jhMLOUisUhGLHj{<`so4 z8iAXR{O2jPVg;z{quc5cjuu);W0qq%X}UdR&JJYNH_QREb?i^7U z&_CvH2|JdqK52cQ0)#uT(G^Z>FGpet725gh71hyr_H?$P?!SZ>4Z@u+G6>Y;cx(TB ztY?iQ+Ogc-@HILb&UwM7m4CzrWuK>~cthP{{tCqJ<&CtUX{~q(Ug9c$%qFAa#07OU z(8>wWAzeH0QFwQThs#ovGo0FB;_~^%TSoNHW2}XbCLBYyz{P^3iDGzML?>#+?^l1h zTXD0u=b2*MJF6-$JRWGbi# zv?MT1r-9LT>*oDrjCI>?Ln#Y10-gs!cmW_qtiIEJ(7PxGO;8_3DNz%mt;~bwE&hU& zr+ow!wb6~3MS2Gt?L?}|n>%D=4* zI+N832jjP*?zZsswSV%oKUfVomVSSdE!uWHFRs_-)>P_Q*q;>b+9>h8~O|bl!S(dLZ&yTn+*47)&rASg1 z(7M6C_zEXq{M#Q<1{(X)Lp~@>f(zOTppyD6!u0cT)oxw#1=hs( zfQSTdw5*zR?tN zQ@p^iE86nPph-dao$pX~W3O1N+AOf@eHysKpU@JxF7!U8e}hi^#5ePd(5dn{XuZL! z0Z-s=fJdhjU6kCuEcY$5&_kzFHlQQLCK;i2wE5N(&EUrPQO$?KRx|R2^V^V9BQzSN z=GVsv;3l*U_YBA5{$f@HIi;d-F*P&Oa~vCPjMi%&EXs_@>E4x~bP*7qOTevf*IUbd z5rhZp%XEQmvGuyW{ny27Sd~UBoJnD%d1e#s75Y%zo6o<(5=zzG3#0Uc11$p!r9z+O z1x_H(XwW}?Y!_kKU9G&sq>0oBCL!rx?O@h~$EUWg(rVSas#IXq5`uJXWbL7l!gv;(|T~RIhf}n~9eB<9S;&Ic^QuUUB&JM)4yG zOP;1DQHO|Py+S#_K9G*E0?pG_FeZ$^|FtT;j>kN}n&F?k649eoPE_Y9a{ z#(xIVZ0C@5swoSGV;=GK_wx7NS@t`tsfT9A$-D}l*o?l+KdG0;N&g0AV6F31>uXzj^jh{(TqsLDb2l(?(B(j20*uoyjY>T@#bDv07i}}^>0;ll9SVj~>Zmx~H8 z&m&Pe2|z}&vT`!qi*ErR+__q@P)*hJXf)uxO}{CUahoSteSmeS4*WWV7gVAQfS}@uJV29h27}qD#^X=mtP2>;T3c~yb3arn%k<_{EWjGu_ly@(WM`n~mV%8&kyJw-`{b^7kDcldx`o9H zp>AO#>1!c;lWI&Ucd(rypV0R@o&9%rFIk|9YDY;SJX3Zq@ubEAxs5}QrOw|wn^ApV zZ(q;8%*|x=)LbGnJ?=rk3u_I649nc9=i^MDsHSEd-=Zt*-F2(K2=ARS0G>0rOW(>2 z%+aqswcl{LI$!)vCe^X$sXS|G(+_^;om3A0)G^ryP4VUUna|tt=iThL!`c_JB@;(T zV(B~_0qj-v=eXUF4BLfm3E8idLFv_N+A8Bqj+ntkeHQ0e&yijyMKLf33kY_0qtu}U zr;G}mJ%5-O!D+7|4`PG`etKyM?Rb0h$P@l_kiraa0|(0`sK;(}zD-P8$>4t!jN6dD zMuxLvtNCnjAzP`PXWsSZ8^iN9YnU8e;=_1<4?NkGM%&~TEU&iaJ)6H1rRPO7AI+n{ zs|;Oiru&~mSej75S5%cwTp)jzi~n&3knaxxKP%4g82Q7fX%W!#Dvu@)wQ9Xk{<%=& zP*^MC4d%U6p`2yz6#ypx+M!?$dFuWR`b&5y^XkeLGSjjH#uc}f*cqm}7K~Kx1=A>HA3u(t z&@zl?V1|a^X!XBoF3Ofc=(%y!{V`|f3fUQT zs25XO{BsxQ7EK%e7_q5C`6GXvx%_yGA9S=x_!e-B&)yAj5Q2q`%{tp7v);08FyZcg zQt%cRTC^*ACq}Afl3|j(dci>Md{9u(mlND_L&3p^P*hY3)?ZC_6xtPdnZZA+zI-Ey zh%b7TKx({s%I*mG<_LK^w7FBPXT1+Rf#;mT>w!#^>PkBPk)Y=O7nrjGotOKhzI-&@ z1Hd;yN6Zw8&q#4+W!t`>$N75m#qJUM-J^p;_iSIX_z!#a4li0KjHAA(QNDoapymv7 zd}(NKTr0XM$Busf3wM>`oE?-5#s+;s$CNVM(yzgvW2g*sv**6r7xt^3kTuCR=Sc2= zh%)|6ddl$nc<@`*x^oKA*loy$ScPgLkVxO3?e@tJ3{gq~HWZ8=;XWD)9X^_}Qx!lO zv8X=lE({)@$C)ueP0PdaOXMB-*Bc`0GOvaRr+vPsZpGp%A~f4X%4ndSkyuibH->Xn$u7cy+!7ionMJ?km*?EBM9= zp>_lKc@#A8#rDI#mOymVS{RQ;kBE*vycszI8|N=Kte?h=Knb0N zEWzQL{P74#TIdt3o{ML;vu~!2<|PhDY<}WW@UxJ{>!T~J=9;%@j>C5Md*F)puuv3DlTLYt`qwjyFUN{dPOG5~ba-G+nXA$+o zfxB+sVKe1${V!hORLpQC&wschFb-phmCmM9;9=;Z9whsfX{_Qn4XvAx+Hq|!=|dRJuEbr zeA1I1{Fl%PDElTe=RLeZmJ{x3|AWo(Ap67!HWpAN0^xV}jw1~=Rv{S4`O2nHwEvz&*#34dXCF3=) zp1Ie(U}{$e80XY+t6Xp3U6I6%_AwovaE2v(tzJ>`c3IN}k3;2%z$N=^Jls+Ca;}59 zuNpO{2N(z1>GFrODj?3l*tmn4d=Q4(0FTewx1Hs+=n@5vYn@-5{rcDpL4XHv&Ihyo zu`Ogr+!op&Ud57bj?gn7k=h2&0dxZ39xxvn`h-SjFQhG`|2Bw!W-^PpAy=NR5^C|h zwOG+W1D?ql+_y5)|3MPc$J6@cxXR=6X7@lqf2u-a4)=e%~3)iw|9k8ZQ8JB;)`n-mPfqxwFEJT0hPKe}7 zNpCcrsL!M!0BLz8KPw2USL2VLu%a0iK0dxxak8(H(Jx-|XD_Ei{)Lxdz;c}6@UDyR z-lLHA>wTE)Wd`b1n|;<*807jPj{RF8wczJ_p*0~_5Vy`1*SilvYw!?uaFl5b!;cpj z@%oC9*Ho&_rl?C(x=fe3%H#M?_@1-z4gi!8SkZuv-uQ5e!uY9@k>92ieD>il6#+l3 zp$U1RN~Q?ZxOcbE*l=J~TcOX3;YWl;vK(LOU8cnfi4YKkVfuFCK!Vk1@pJ=J%zAhjeanlGTm+gP@HwV5JjJB#It|C z9HIqLNbs42g(VlabA(y>if>UvP~4Cn;#=jL8&UWDz`@0!Vz;l<*3zA3Kjo~qIpSKq zcRxrFbN+$t!as`!<-tr3)t{q;K1IKj%)pD8I0_$tjOoS=i;39Wa5m7wYGPIg<~@B@ zUsnM|JnKgwQ&y*sZR8Y$-3UJlh8^^o&!S$?oj|-Z^t!i;BL!WV9^yK>*{TpUqcAaBooulz0h%+er0S3 zCGc&FR`2q#X>pl63wVDgwfW;amZG;>7U_AFhOkrX6=4qE`gY5^7xo^Q!-tfLrOxH9(rn^u;P6zhW(JRZ# zJ#-&H2k`GX`<=l(9rZ3yM6ZYOG-g3$8@AiHT{8Z12BI*~mK9`WmjUEo+iBkAx`or% z`|lR)z1!dOD6Y=$11mE0J4ta9kf(z8@S*+MIlD>-Vn=7W*P=fkKwi%!Ts#aE{@KYf zO~_HKq`&3lrz`1PW<>KG(MYko-oh|8w&3j*5v6?&TtUf7ZSQcB_S7|&$8x{9U?tt! zv!I!Yya9YsaqryQ+(pD~)8Q{uLeRS*_AV|iVw7f4(Ai`DK5u?bm|TBYZV&zX)wFyF zQX@Bg zfF8m(6m>1^@>&rN7y0^cIRT)?!=dQ@-V1>rS_;#DzNR;s<&dc_-Ct9HOg@SF@B-7% z{5%_ym+kq%;-1k8`)3nnf)ux0ebRG!5GKAGHJ?;?^iAq?Lvtc_rw~6}YS$QPW6OX2 z-<5-kbO!gC&)epv%4348tgPMRS=kRyR_s#)nJ~A;XYK(S{BH2O2Nc?vQKIsn;(Gcd ziG+g1e80CnX2(ItT)&k0n9$GklYg-3B+xrJpuL6P|D9f~A}w9hIC=Ard(8t-5`P`U z>l0A@85hRbn6)gF@6{q^!r)$^L81DaS5eF0JGy_FPkTY;!BtwtkzV;JEf2v)r}ob> z9)L(=O|OBr|6Ro~gfVjw z;-l7TYqi00hGXz2Fx%&tSTAeF6QUOZNNJ0}o(V+bMrnf)pIfw>(~nuXE>S@J58`BJ z$Gi@aNsLly>XGtVF6zx0Dst+zqSvf5`1hkVPt`DN0hfgK&W9jB`5wV_G2U<70DhTz#D2T#!to(T#Wkz1=Ymv;8oWGADwbvo0adRYz#FaZvxLa+7^y%ge(rf_48nUGP#982Ub=3VOigxX%8YlEFRwb!CKYTTW3|Pj4IV zAzb;+?CZF=;49#$Pottm=X;e~7D6V}sq~3b>i9!4(}cIKEk>Roegj*{y#m+iPRC=* zH-VLkRcgYxJ00D}*ndsO+fq>YquRB?d-09x5MyTfG9h{b^w}FA}0*@Y>Mz+1nVrnt`%Cl)tQk0b%=_VH_>FUyH;(+WwPm0i5=_ zzW<*aV&jA+&H-Y_M48R2Hn1#Xm1!n-q03*gJL+Ymz}%q*KUc8BP!G-Am4@PRj1w9B zwqcvQb?^*w;&j=KHQ0HhRv3nU%!ZPklaupS&;7pF zy?+H5tRaAdj~?NSC)aUmLf&*ZDfW0va1((MtB1~BW;}(wpoa+{(5&6yc9oHSIvLO2OpVitqOa^Sy(# zm|d~9c&U0eyBGKEp#+VZ_y^`fyYcsx%su;;)X+0Ev>zg>`QBg>t|a~eFVA5x{69mJ zAq{t)Kymn+pTTU4!bE{g0L7z*}A;*v> znINg|l;dODAr<$`EIchAxm$yO#RK!d+-~ANOwA?I0A%xntB;a8NVe}Tvd z{{U3OPdm?6DGzCyN7`aAJXvSZhhJk_E;yU0;?hjZ7}~c18gv;{>m>SxY4Of zLl6QzyFfXPv9rv7g`_j(>3fc`WN_{)xxw_9@1?_jj#?1!^R@twX`|+STjmni}yKhL_GEB7gn|_l>u08j+cLBfyV?#m{w-y&-rs$3~-TBP{ z&3Wq+{99MqMiW1>AGm)^XhIm&MnWaSkA1Dk<>9E(o=*^hAFFR_|AsLAQSa%ZFP6p< z$%U?(YOgbF-Es8BJTLn*R7z9U=JO>hmJ0Ai-@Ylo6BXh*{;zH@bHnaDgUlI2@=5@* zh4pe_T6^^6c2%W#S#YL!i|q?YAt*hUe6iZ&AYvMC?r=>vL0o@UR*thJ9^EhB zgKXRAya5N5M8Mm`Hd=lTGyb`tM@{l=`7GqPHOQH#RivjoAcX%PtbUGRhUrj)9CN8D zT#tI5T&6!^%rU$Hv~|3;=QFqhKg{ReT=l)BxL@9IzV$5c0$|B>{BgznqoPp`SdE}t zS4NFkb~p$;>{qpTo>PM#PCF|zdEh^FJg0sP<5QeUMy$Q7tyQDcGSj`MEl>E&56I!SE`TlBS=CWj}XX z@xQI!2!q510e5b$iqNW^BOqoHrN2>`&Kn!A3>$sKJo;}ogW-z@bLnbN*d$|GDvf16 z2Fh8(q7Vsm_gCsH4}6tOIdx#Re0UEtO0B##YUI}fk7);taXcgLPDBvB*2ZenrJ?^} zF6n$`2ECn=Q1maee&K`ou;ou>4lPOL@A4si7dyp}#2pQBPfw6K^NYF9-!`mrpz=($ zeeUv)Wf~TW@f4bSvXQ!bSF-k}I0SeN`OOvjo9;$psv06Uw=OuD)5Xb&dlyW-Z4mSU2 z{5s6ykK$LCk&q!BuQ7@GoTFW}H{D;;U1E5DjCN;N92%bC53-#iZ+g--l1$v zw*qJzjO7xj{(r+LQx=%cnwRdFgytt?rrerd#{)&<$ZR}{TL773B^jc=JA$&{N_xv+ zDgh%}Ra^@Vz5DZ>SutfKIPoIUUA5`mQZ+-@tpLq+afoUA$}y$2HQg4iU!1Dtj#*-F zfmx-|y^2@dm#LpUZ0{Yy17;|2Xzef;SUT_VwFy)1RO*u@fFAPYJ8uiRUyEi&3I}Vg6 zT0lCdY^LkGIa=nsqoPiH``{8VRd2QbQu?s48vYDpW>cbE;I5e;+6p9{@#z6Hv#JA_ zo2#oBYi4BC6pW~wH!w&J$a!0llgyv^eh!EiA$+-_=uoKWrpF!0DnYBhjY_HkbDbYK zFPdyh{cD3kR$1ONh!s$%zf(K-8T}F7Jb#+J$iH3ycPureGx(o-+7p4})A(KNDHdgi$8i4Tnf)ir*8f%C18)}+gU{VDLhGbfQrcDDk z7R&|>RSl|=J38!~`98}voi5q@lL~HNU z7Kzlw85DU80Vv7K_bnT0fw|s)U>YBs{M5#bLv~zyBA49C9eR>($8<0gp2DvBQD6j8{D4otx1fJotg# zo|`vbfhs@xLEe_~=IMMLc?_ksP4`(&hz1tuqQHi5u;XPXr($Ivz6xLac$gmkOZ5r+ z%xi2|tB<)R{nmSkC?&{i>{=7TZ+E`={F(x^f%jO_mZDqbn zo9Xx*Z<8AM<8P!-+rK-xTnEEwu2#DvauL_L-h1Z4DJghUPPfa^@Q zq5o06OeU!QLdfYYQ5b(e$$k#pch$T`S>F6N!kN}IrM@=+F6*7Wg@lLzY*HPw`rc1* zrQ-heuCqv<&e2u=J+p8LQ6IHxHjPGv&Xs^dNOUK!$&YIdsD8D6u z=n%Lz_TIxcvDvh+Go9AjH;#yp-2z@K%rby`<7(x zl$3{0--2ZHS@~#;sUfly_xyQk)Yz;0MODQKYnm(&nT%XR@M*}=fxU4gu$!x-q-3LX z_oV4Rs?QI*@d7mZaI0;SS1IF|6x*6OE`jtl0T|5<_0#I@9@4U5cafnD>AFj`bBzf4^>*@MCo3=-Qt>&gT5>O*@-(Kv;gz!l!`` zLB|i%y+Y_v5!##)0R-qm=-k6(g~XVKSDxg(0F1B`vkIquq9s?hUpr<Ko|gXSzwq z4&B=Jd8f^XS^-lCD8*$XS1~Zp7SWbwND7#W(Ppx8uRn=$d-(8HueDDGW!-ggH z3qV+bp5R8{1|Zhk^QXBeB6lb3e8pEZeWym48@=f9{de2ljEm->*81BQTcodg8LZRsvKb?8YKo)j6CgGIylcWMC0m{?Dn`C0NNFmA9d&6}{YVku zKW)<1))pj!58Ob5Nm65U>7hpc?KYkX;shWWRt82a7%x!>Zo(Ckx*eC^B4QXwBtdyNO$sZ=nzfM1ahlwf|rQNEy@sg%%48(XSQLbGAOyPd^Kb989h<+414g(GY*b z{-ejCQpJ6|nljb;`Hn}>#Dty)X1|4KkxVw6Uswbp(LaA1g$-4ZDkPbO$OJXN=QEN` zX3>p5h@mptMiw)B@>Y8+@*4=>lndtEzE>sC15U3um#e=fXNF+E&5AlK#~mgfU0feL z@ZIj! zG_}W)6Zl@I7w1Hde0-g35l}6NM43;gb*3{fgu-ysH^QDkSZUG=mRS`bU>H6yGfSY@ z3>zzvzdzu*euvr_w$0chWdRg__1a$OK~|EgR#l4f^WEJu1W){@0Cx}FwoP%c;4d@Y zUH$>n%T`R=UQJoc7S1H|-4Ls=dz~s=Yd zVKq2@zU6e_I(eD2UzIq8=pZYfawnw~H~Ex|j&)J7oB;DN2tgFyH-%p4q4|ovJgWu9 z3aoTVgz-97k1PaAt1g~x23fUZqMG{l@|zi2xfSakFiSKB_N2|F_<0 ze%xo&CB3QlyD9W1p$2&GC(3!Vy7LCx-zDVA^X;>eWM~@i&?-~}d&7|{$!y?QghYV^ zyl?&`gNM-|xh7uCN6D{j&|bt+w6|*6&2j@UElbat+f(#cnr;9I?<>@&|K<8_2L(~` z)oM+&|ApB?Y)~QUX_4D(}=?t=ucV_U&6<2$Kl>`g*HrxUIM4{m!s!blw!|1yPvN_h=jSo4B8Q z;Rb~lLOzOHnR(H3DWA!)nh$L0Ij!z>hgz-rm6-dt2T(m&DnwR-q*JA59rSBwKK%oR z_{$h}OK1lk=2Jki4ng(iP3n&ZyD937$oKMu8>7E^r(GRJ1^k`-TuuY%ttc8kPRW+PC>b)}}OdQUIj+3Z5J8CZ9bDOL2Yhn5~wwsBPNe&r#!!{Iup((0f zHeVpu_Q4gVP15#4uHxLU(cbiBi(=>bs=b*+fR;?EOb6`7zdz$Fmtt1NO58mx4e=jp zf)G1Yh(hT9{(H)rJ7d}yZZw?KtY1)afODP;w5sp3a575_C=V*EeAv9lYX2c0@e}eK z1Bb`En4j^f_66V_GG$xH<#^Q6?&W#i`8NPN{%^*A2 zjcuSp{&BFHZiynOsCOuK3{858<4(cga!J1?!W(JHNk}>}_#GFdtIx z{z8-|aTuc~UlqZ1mb2qaG;tTx@S>z;zia!UTO!2u5|x#cKFcd=4`+EjwaB&7Fac=; zc=G68c;M<6n#VhjG||iLq-g~Z(Lu<9f$@2^H(cG zt^_Uk_~%Qx20BiLDuN{|yVVg#n$fXXBZ(t(p+8V&)Vf$I{Dxdh*aeW?Tc`Nt;jo9<^3lRWezUjw~Y$|S`qq@ z_iR8W8JM+7Z#Nf+S`IK^+9^StI2qyUvZ-}TdQ=*V~$teDkt&@`f85FfBV?LJvvYJ*a%;cI70@9FkXoy}O~)S$ETI zd93ci>kGdTlsfWemy}icx9N63X_edtrtDSh+mjS#*#pRxPd;A!pAv!?fH@p2ky`HcEqVwU|A^!dQbKoeu@o0kXPhw68C zw+`%9`Yv_s!|#Cs#ocW1vGe}=2u`$5!zl+#b2GEc7xlFF|A$QuZ^}9-L0TTerDiiU zJ9KQe)pM8*Dv~PPyczbV_N@1Nk9;(7(q4hqchUYnPba@{j2U)G+MrJO7w448hgwGi?0Ns7Ba%r>>c_Bqv?v0eQ zqB@^5_PW2xdl8|O`5QeB#VS(i?P%i}gUQM8*nBgtXPOwd1L7~r3=k2pW-~Exb=f9* zIy<+t^wA(XXE#J(-7I{{=F4!NIC`CAzk5R#%#dgLxT!^`-{t$$KTsR?EAIk98{MRt zO5AI6+ZplzS|y0(6X9aFIVEmC_694@LB=9uw*Lt5IYy14Z)#*?kLi8{bfDy;cP5V+ zQHO7Y=3K4*=C=*#as_JEJvm#yp9&0d*R7oy^E>mXhVqAY6*-(#IY{+7DG@}BMXi+A zxr1rRL-!#HnL9}%WKpqaAiC&`MY(+7G$Vw~3DCaflJj|}M4c&RulRi& zN_^%HGdcrr#LTGsU00=C-pV@tnO})$c&_3MS@_3TGY5AGjL|%oTKn&pm{EF=1zmQF zv#sMJ-nRzxWe1twnS7-sg;hrn>)AVw&df=$)gr+8iK`#cJ(h2b79PD7!l4}9 zyG~B)2ByBm%XSUqqPYzWx?%O1yi(0y8-x|^v`2>R>ri#BEu< zYted-L@LO4%4K9aN<0iG_d2|`(Rz}x%Hn#=ER2w|kRrX%pMPEGvIktsbLrl#VSBSF zs8eox8`Ie~wEbR`{A%T-}ItxAid6k)Ifd#)pPYSR3QWV#nd-SE$v36x+mcBe7i+oU5qN8nNCUd55h;pLL zZPY|kUWii6V5GCLn(KLmlg=EnhD5Ze!UUTO-MHejc>^U+%b5E8{sNdf&P6J%^zB60 zkS7vAdt-4h1A$wP(-lTQygG)skxNCAVmB zE|7xfuXFbJL^cCUxb;Ytb#*!Upz9*R=Z{EU5mH(BGLh=Sc`IiMZFZ(cvR#-QU!uwu z>HxI`zAr62;S9g0>I@lWI(6x*4SUc>yE%l?V3?AMtCQ2>m=Ez_m=l~q;7!xyw7OJR z6gSKnd1dxx0pI_#gM6?Zymf1U>qj^GJgh$_&PBvf$)MP4DK^`xB3tnSIh0~C1&%;S z^4U5S^C#hL%_$vC0YdI)@}J2PK$j?{e74}kad5u#Qn>*Wav}RD^#;)7pG6d=l}@AB zM`=Nh35q-LI}&Wq!S%wHm)s>~&F(rc$CJ{*wl|ex|l)U|adUpv7Z~@6%DYz*7*1-lCsI|(FZUVT-;FT^oy4|>hukTDElXHS+ zl&V$QZ~arV50(tzks25@8_|E>XQO*|CFXSim;DtBy<`P4a${&bTT)ej%^d;B*~)T` z1Ey1iz&RxttCAPP=8(622WWf`;_PxU(XHd`V0Hg)V8bt@cW0Q=wJ5)CPh}7mE{~FD zF5hARAm{%LAMRoxFH|y4sCi+Z{YTlLVA_{tFn~dcYJq7{xEccKVZ2bL;k>?aS zAa`NaPtx1oJU!Tv?(dzYYxdn=P%c|x&}l3Hn`n020w=i*dE_5q7@;S`;ZubXbN^gh zel+|ED}~>x*w|&l&2QOrVQaD*sT#1imgcPf!|`gF66c>KYq5aggZ>V8^wEs0akFi6 zA02u_D$wa<*i?cizj(ZJb~9Z{uyg10pB9oejrLivXY#Re9ALQ@^?rBL0LN0J>3j2n zZFC!Bu%&LPTZxQsC*cL#rkYie;A4cOJbjt26mbjc%@o_QxOL7r%ciZr=vw+w^-(Q=i)5zenZ7$sTHZWtHkKp=z;_ zLkG(4lz*o?{hO4F2CUTYR?I~BvBB_{FDEgyiy~) zIi{9!+?fr#YcZVa*&dTHAlH;U!ts_(7fjGkHMeEmt9|L`0d|7Ccp0O1mJw`K+-Z5$ z>Kfw}5Eqcp%5XPC-34@~BGWyQDh6RsQS7=zVY1x1HnfJg5p{=hZ!}^2^2c+a?)j5A zz1I6#eMgTdygUNX$G=6cF-lc-y0=P{d@Wxt9>k81oX+zasr2(aefl)V5qf>zzm*T9 z6r*8s<0X~6=fG(NPj*lHyqah$?1)Qe`Wh2LSyq#L@$1CrBbqkDfBJjRI!GvMI_}1P z`mvPwnf@@lJ?+#A@FOa=@A`iq1bKULE`U@NY6zGU==p3D7ic6zBgoBzK6-k&UU}*` z;V2@7JPzh9us^fF293=-i<`^QYIXb5DIGrI0R^3YfeMR5%gf7O2Hl83n+Zhn^ns(J zV?4@d$bBN2?a`A-5r<_R!T;9H21VDBrt_d*@zcvz5EDm{*3`m|810>GAU0>qFse@L zYN$18W@jR&$m9D^y-Y>0+fkhcYh5k&{ns>9ZspaLTbqOjwHdJ6dVhGRNkbLDn~0NU zAQ3}dYXf=uCVY)padAHC5hM@73>7M$dWOjn8XAzm_X@Qu=%Us>PPZnMlwU@C^_}|| zwxT%s^5RY#I1ldE>vJaef!PYt{r{MDDGdCxs zEF>xuxmhQ#dZV(tyg5#!w-kRg2^=I`wc5cUZocO2V+M(E2?u+d{t8u@gOyqG%vRon z9anv$m+GbG#m&RR^RWea{P<@ty@P{;?t*Ev6+ky9V0uwT+LXo2uzRlUVbWPt^)9iQ zKB5C?XVWh?qXQ=~tiA!Wc31zHeRrcsj0N}uhc1&h{re&nV+?^5X+ox#c|lIMM9(eq z6Wl@{jM?@&E9BS>O_2XJ?%Y;l0S>(3ZN!$|SZ)1NGDOx9Utw(O3?dDe%pT565$sSQ z4XHHpc>df0Umffzcc2&dFcaA=6C(l1ZcFlH!%Az$Tzv4wA(tgG@S|p>Y zri_{}_DkKvqk@Nazqn*2)?|1Xaw2ZARbDAQobhlX;9gHFF<~`l*Ra3Woj*tVSR%=m zwmQu{NL)}9Y$kmH1^*psO>{uGobG7yc@$;Fofrm&&eLT^LNI#ZO!Q(OcmM@GAX8F5 zgbwv4)C%Ot*$r9lsXWxqbQih5* z3?2fil|*y(c(>U}PZc7jX@1={ z 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≈e%SbdHDtABB5iMbIvn@4>&Z6}qF%&@b=F{h5LYE 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 Fe*jHa783vf delta 95926 zcmX7v_dnJD|Hh3FiOS}1tVqhtI2?yk_Ds>R6=icW4u=<6W$)3!sjNf?N%odw9@(37 z?Co%jV}E;pzW>1Ur^oH_xUTzkJxi8vET-KE3Z)FC`b9l@9e7#nf-s#?=qvnMbZp@9 z*38EXEz-d+*Y@^4wY*2@SAJVP!B@)i0!`E$5JQC4S93nkvO6~sAHkl+60w=jaDU25 z@ABQ@>ULCBe3qpp@G#*{9{r_H@@evd*4#CP=ag|l z8l~+fbXL>T7Me`XSQ>-vayq0lc_MC$!HFaKZsf@2z=%!!;~sxvHM3)v8JJiEiylkZEnGlO1LQNcR)XnTx&p8(=^-)K3LEGfKfW!98rSO|J! zm!wnoxIgpR*2@czE_sH{_j38Yp3F;S*1_KXQ2N6BqvnnE>Q*sLKdq~exg2gn#5WX= zEpDDW%$ne$eAP|y84i21)aU&!{wX}{QN_L3tMyFLF7J>I8hM+73#E%MrDZGMa9C>K z>Uk-{KR^J7O!2p{Q|0%skEaAph4!U`MgJVXyQb^DvZHVLV&~RrF~O3a$+eNT1H}4i zxlzo~;4Nl(P0&tZE%+|{hb|B6GssfLY6}$Duil)!AeMZOcsW_mcdj{Mpwa-Fp?Q6c zd5N=jEN+>>e1^go8aHV&xbIZG(i1flvIO9%OUQtTbV8Tps9oH}uRzVFRfZgQI3 z=n|E!ej~Kg7u=g_ZaZaO3eVAb>=_pr!V;?H=V&V*xH3p55(34p+(-FmPf-*#_7uF< z3W`P+u%@+P&^^5sjIVrJa_MrLq3(12`YpCt998#>#}QO`r-3qTsncS##C zh^%73(=MA+Mr6Cz7mYPV&iEL%s3^-2LxWuUPWq}{l}5NetHcqBWkbg$;nO|7psloXnRWrV*BOoJ!;Lz-d+og(LkU#^En~3qupgZ@Gzn~!OOoV$+YsK8$WEd;(KLp)3K_pG&Z1!F>I8ef?S5#n@e5FmH^KM#s0mFVV3> zJ(QAqvC=l+iyA{cna6rht2?VTtYX^;qz`w>tHT<@Rq`)W$NB5tA2$w;5Zb%6Q&vq! zO!=$wG!q6muw)g9GA%K+jpmt zJ1;^SGz@e(juwiW7IjV*K-~p_B35f*&U0wM5|BI`DPpb*H~%mi=99NT>t44KLii&T zD23DB(%FB?dl9RCP&Y;wdC6a1WO?CDed4r+oV&yIwdWQ z@3e&2T$=O~%Zdu%#9h7r#~vNpf;tye4^wgaJJR-fUe-|bsll*BSx|E~mnFPown{xF zKQErPYLAVHt}AZKS9_pTdx{Wcn6L=G%4x`VKgJz&MvVCtV(it)aUY&CSEpm(%=X<7 znnI^qHq_bo(R`WC_r@=XCLk~4E$Y?0C{Qq~M{VhGc$fF>CwwWvwI$D*CqnEdG<~Tl z!o&3%Kjf<;h^2*V9FkJYi5aEOZpiWZA^eC>%A@wtpIbB$2&pknxd@`BJ=0YopVz)% z26(FKy7I{*QEBK%_hoc7xBKlIe2&+adW)Je;qSNZ`C6obxC*IPz5xZa(#+R+ax4^Y ze5y|BaHAEKwC=R*mWB1L>KPoWNApF}Wn5Q1z=%3Sh|TIaX+sR3imK=xpV73puG{Qr zAa#-1AuKcf1$jkao@Vu8H%?e+CJLEjidSwV9USm_J^Z-^uPA^yEkQp@VyCf&IG6&1 z6w}+rk5koj(bf2Gz}@QAn*mf>jFEPRmv-{f?COrRVuLaLa;eq6IzH34L9UKRNr2-g z>tPqZ9R>DtcWubB;gkwkDtBPZ1J)V59kwYuiM}|tnwr_ih^wBGXq%>Xl@3KR4sQ79 zU&qEWZV93@*{bR&iT`G&Td$n~B>7@2ItL^+37-@nbUp*7{-j+gl_Z;QTzSh=&nu3P z@3 zEvve=Uu7io#2~{~X>F2Vo}Si{p+0lxNOxG1LRqjOCd0wGib}r!BWn-i%^TUVY!c`A zfxgW606b6OU3^coccXsYhV_TCn^UJD*rN$AJ^V3WB7u;3N&PpCsKC>l(Lb_PyK*LOt@!`<`AQiDry*>;%| z<9#r=M#}grM?3E`4e!h!(gdXbKm}V+Ez&wPG|Y*=s3EC~DEQiGV#-=jx-$0y?8Kbs zFjsG>`EEitqhrJ}=c&=x6c2?Wfb9|~{J8V`kCut)bd+4ReryjeX-@e;-WU9K@)foC zS(X%0*8==1rdkD>d@g|6v(6vK1}R&x4_7Y|B)$DKnCw#u8LGj$;+p-OLuuDbcDg~MPX?pNvbxh1;V?OLh(-*ipw zW;nHXX+nwCcj>Oag{M0m1Y@pdRwi7NlYtg~)Yqx+*t_=gV>xb1EwvhAX82}_I_XvC z!h4lmW%k(IT(Gc^iiqk#B>OTyli~b_x8>FxO-9q|*AvrTR23)1HA-FnR--XaZswuG zho|N8P^$p-Ve08)CZ;-3M!kMaxABn94;#6U=OS_txffyy0j&z=ma%-J>oLENo(2H| zbP`zIfkyc!bixF!TCWH02CNG&Ube{`XS!m$ZjNKYh0o;I@IETS(w)T6c61H)11JoY zvuhFLEAJUOIyJC)`{R~nap@p`elII_Flp?Yn=jzeoaFC%N;rUi2}?We6bks%`6#=6 z_(1O14!CHp1zb=1-A-a+8h4~rcN)rBNcu(92h&cf?pgdvRZPJl zd4YMkTHSP0{-$4h*2@xS)q)~P<^%K4<&-MP5lR+}xED4vmx5!To2JaI%50C3PmdhU z0f>~2Ghb@IE3z$mQP;`Xv355!L|H-b!OAKnM01i3aGW=gKm=dM0#DUQ$y=Ow?y-h( z-3;?7BcFgsNs^v~OgfC|Db|}?hB#!!t%6nXr=WXu>&r)KbXg+NH?~b~ZhJRmStM{2 zLdCqRrI@5d zbWAq#<~Gd2G#f^K{x0iIlJ=W-hHc+z16#aPm?vS7ALT`a{UoMQ9i3M;JJ-8_H++`- zW=++UTAyIrTB2DLEZ}D&_kIxiPTynGe$sWZ9R2MPn1m-cL%J$N;Is_1nALJCO02zl zn5cE7w=A=jA8vxbZ%0jPCqt+Lva}%8q9YQ}6nNY%{~}(l!YN21#tz?}*1ov3a`sybJE_ZF@Q@ z=ix)CI;t*6y)h0 zs2JXO0;$f+ieA8F54KZb0_Gs5ow||;O0=J=%^o}S%sa~Xi6G)hl=48eOdX#Wve@73 ze0ZrM;MiNuH`WfB5NliI7ZC{mA4MIR%7BYvtPRr^V{4ON?qv#0R9kBT?EZO6+khhI@-7eztJr55iGi$x172?}a#~ed)Sl`Jj(s%K`;fej2`_?C#EQxSH=eZN`DWrz&VMrW-#J=-W@#^D z%Fpow)j%)x`Ns?b6-a|Gcgc3;HYa)RtA?#Jd3uub1)U}Kvb^i;mzGQvKH7h#wZpf{ zx!t<*Zh}sB07;^>=_01OWCGq>97cPB>B!tA4ccG+)VhBusODMnUVGm{wqItpN>K_} zEBq|hD%yHR!-?yX9Nf=(tat_D-Ozj;H_l=+FYv>hG!L3jPs(jlvWzW8z23Q}aWKRy zV%V!_QTr9bTfhc8%KDYrV-uLjduX1rI+XbYRw2P z1`{1m=7BnqO8&GnR4J9}f#~ne#;(mt2yz3DT6Q_i_O%bSCh~e-GRJH|;rP}G7GR_O5>{iGhwp~+yavewxpIB$I$UK^(W34<IrbF7I5@!yutlb+yR z4xMed-hJg;&ksZH-kW1>=`%xu=cMHIvQTzrRlN#=L}Lxql}aK7g!6 zvE&1A#~sq}v(|+>qx5$8l}FxzGpo%39QFxDzB{j6yc0|3b}B5*S-lw_2{|76TRp0eGn`}R|IS}IeK5XE8PMh!CI@Yrt>cCPATdIC*e)F(yF>`+qZL=}PU{v_G zxT5^GH~fr|L(#mDZ56rcTq*DfA|XoE$HN4;hh83PI*6Zxt7)uhdfyf0Xb3IDV>spg z9QDRk-uKH-tbF?GsgKv3Wxk)dum}~!%DKjS`sb!Py@}B8t$3L}BYq7>mO0#u1J-7L zpf+C4$VeDz*LBPeviTCiCMQ+%$_WKX>rs!*`4&ov3k*G&Y|`V4Z0$P=ZtSDBr2{bS z$>6%TOw|X_c{ z%Nfg>v+B*fO?cqgMUyOg*3xekKB+ug4eRZ58mptV*yS3YX`~EN0Tbio%ec_T5DW_0 zbI6Hua_>hM|IZM;;_d5pW&*^eB<({>`?Qg6{yb>Sm6o3FeDjXwKfLi9o_F<}iEQ6) zcxm3c{U>1XTKiBLVd%1h>m6^rBy^_@-xoq#9X)jKyeZ31OZ9KOs??}sNKuU|J4H!< ze01Vbee)u8lXnECQcV^c;r<+%x12Mr^6v3s^wb{JQxYp*t!D2iDb)cEgXZCwtj;P8 z4|2PwYB7oqQ*bcT=r_K^$$DPTawb{6dPLXt$^8ZO0h5_)T0m3CBQ&)tH6@JY<1C2G zMWt_0;&3!jNqTP*38CvW5`VMg)o{!3V&u)E{KO?`>UfArpPax*Y8rzm^&LQ7z0BmY zfY(VqvNBDFO+qMHMZmsG4@BDyz#c61|m(U#Wx}^eVs_ka$pO0>{z082=?kL zg$ULnerDCc9C`CZ1V5D$91yq?oiEB3Toi&9mit(ZTh^bQ)_ig21&uzi;#jv2Rcz?ks`A848#%^) zQEsO{$q&18hYG+6$;+FwpnkPwS>Xa#ifKh?KP;P6Fp6akc3V9eEz>W(hHObQ%p$5S z!Yp3d6dSzsD*<1#z1}8O$MX}pRDxVe@q4aZz=k$yF=@bm{L%Tt(yzB`(|2z!NYJZB zRjSaTsp*m=!c`3wacEZu5yw~O$Mrn&*5NVT5i&b0Rs-I>5>12I6@t%=MElN+zAc&C z8k;^Q2T9x3W=avv`v+kahS?SE3n)8|cmW{AJmDUT`8cs=`}WjXD92Qj2=5fAml93I zEAjdOJ%tNi36jmPy3E4^3UpazI|RYpJU+-O_PGB=Yl?f^$skF>`6bQy2QG$=G90GV zRypI{fiDFH?04X?Su;ZVEtq3%X}IZMmnx&2AD8STptKTtr0&rg$53(DWCZ;jTsh^6 z5PACBv(mP|Tx#`9D=DL^R334i1qXPp=11Ek3aAI&ucUq@SPWt#)nP*%%q-`dLjhy1 z(i15<9V3P%x$mX?npK|uJUpt*c1{i8cULcfz?2#2dMmi0K49N)b~;e~=E+z-l&&H6 z>5!KUjnM#|*J>t~&*XM><6Tam+52l$hq6}&r0*LujSaK23yf}^Ix-W`%t#gsp{FbB zG(^^aA$A?$ULLbrp}@qWiF5e6z(w_P$LEOsW9gc#Nm=$ozk04yX|OW$!N*7KKr$e^ z%&9y8g%YMi#^6~0D7R7;7E0fHt$cq@L}sV>R;K`wuwn`rQJ>nh#zKB=c_qP@=+5? zzO?7k-UzmGElla2H5w(R?suA+qP%|7pqe4ak|%~*m^v0YXV(A~qb%+RAg!7mtRW5% z(;McDC08HwNSsLDtK;+3kgsP25*gdoybC;HYRPI<;S28LY0jsF_O$cAott%z?M{Nr zZF2dE-trC7AUm^#(>sP3N|j+gT(Q16?#IlMoY>7KeHEw0U4~b%M>Z4IkA-5!R67~2 zF}V{jrCBQTJs`M#Di?4CFqkq=bMZo7RlLbR_8~*;4W4E;8A!5w{&5SHo=FgdVSf## zl}+>_J?APjh1+n71x0a1nVaZ8tp#}VS#Z>aAb5h|G$^(c(D8~j1J@q;K5@7Q!fjeQw9+6Md)N60dQThQM*ge#u_vSuLWYq-5|*y|=CGmI%J@07&c5fjueIXQl2aGl4@vO7=5O0i;#b{YRbEzY7hV1|ex#zOMb;xHj!Z@fogeGbraib8Ddtjba$pvn{uL*`O2#Q$A-XuRo^y~q7GTDeKIebVSE zqzZ>`=}tKcN@tE`#ME^OWD&f|Y~g*H(6a9#kmacWg6KCw=6D*ijVUkqpf1tLVe_;T zl?dEGReZYUoZxQ}+Lvj|;aR;xsrX-orz+UB5sWFty(>G9&>3znX6b%hac0Y zM_oJI1TO=ERsuu5Vb4(dF_VFzVmQk%0uX+CPt#^1TbjD$H?V3Lt36j6tq?%da2U6C zH3tpFF|*nm#TDL@)A|VU_jdx#dcSec`tC#`VeL@UDJCX=K93N#j~BW(m)^K45hx zD+x_3hjgEWu_PJZI9XfX>h?dDT${#9&Im#WfHUiPA<&QE{H<>jn%tXy#-}Ka^7%ZW(O8ZqH0}se#!)mhGcZd z>#PG!AZ2SpG*^+ydSg1uCAgklR{L15y9UHB&r;r&WN)Nf8CtrrK%rSVv_&?0rC57U zXc{)|@g*0R;4^CC$wYR-w$n@{`p8%0@F~gEt<*~2zmyyg%B2GuTABy3w&V|!pw2QO zbq-}XHvf(DhrgQ`5qn%@<^j#>@sjZvq$%=>+zeb9ergMGoabN>LZ=YW zZ}R}Hh`g2r-&o|-b?e~uc3*nwh8y0Ryc9TED`9of=LfxWG@x5qS-HM()RRH0D7q`c zW)p}F^!Yg_Bo*ElW|K3sAcTiY31>YXx)P_dxWRmp=4gl+UY(dn z&%fy#dj!as{s)SZJV5C0&)sc4p|`-2Ph`DaZQg6zU)jQuj!P)4MtVb0Ntp#Gook}2 z9D2ZO1M}sZ7s)?e9jW@JnA9JST9abd%XVZXvevzhh5P(=KSn4tZ7WC#r6*l-;zYJ)24Vu7f2m4c=lRJ}%21i+QSI>*Gf3w9(^W zoJ442{3RM(huXxk0blqaSLRQ@Zd-PFy8^>nckLc?ObEFx)?_;hmyAkOK>N?Q^RauO zuh!k7qHF#dDLorxp9z)?;CgwEyRv*;a#AAeGmC#HrC@f%g>^H+g%uwAszbB0PiuAly)6TeiZcWXmgzSh9f9d@{4;l&^tR9bI^IhDvFG+>>>U5nxZrfUTYOrP_61pHD zM6v$=vyqr?3r7im#1X%Nzp`UZZ;8#bQ15`Y_%U@Bj1=z)XNpAg|D zS@eQF1-P5a0GTLiXnX?dggi|azvL5qqte0vIn;fm9Kp}%b972i@1L}Hn@EzFrmI#!wPBs(aXxD?a&Qav%m)07)rwdcP_-<)!QnQvR`u>s z;NiELw0K_Ite3?ExMfF2Lbe+YR!1^T&xZ>niJl zdPQ@vAX&rUSlZ!_vN7OY%P*y^>3{xKDu8#i8MJZlvDt)g5hvKu6_riGHMfFkD%Vv^G zN_*TC_N;Cs$?erCZJ{vLxd;94R^huH96rmU_hoKIi*1xSjEVvLg%E|9BGNDEr#vlR?s58;^h|jw7x%2MR&j9f1+h#bW%NjJ&qK#@f2=-V zi!IyBT^d?|-zWuYeH0eoT@@(j``hL=Q_9-t^wr@Bi$y~U%`-yLrgDSbS@5r1i-p#g z!P{paW+=$2?Ff?}?#0MA>*@KeFn|fmUb>T#cG~30C!nI!zD1I^`LmOkJs%n723)_@ zHFvr>8)#{@2|QokT4mXVGR_K%9!$0F?F1i*)K2)g?0p23Cko+77o2e_ua{&44hIXd zmnCYl>@<XFD(dGgoo5(zWl*|8eL3GuTe!?E6K*56ID4%i$=uGs^oak1T8Z zI|%+Z)7NyzGEl4)#kwNk)ls6bH3&;I%x-8-NUF286Cc`Nh>Csn@K{O0s^E)t<$S3A ze5YJOC-95M*VCfp)jWfDk6Yc`$NOnwkHWFiRr6|m_dh;m#$31RJP5mNtD!xo5_?)E z#8Z_Fx#%1ug}kgbNaF+E4^fZv*6F@z+pt3`^0C-<2TUnbX;rDP7>)_R?G3m5xH?1B&ZiDybpB{UCX zl4$0k=blmP;b}jkqWa-B9T(KKPg+`UF=BZrG(i*oqql=n?!`Smn9D-^?T=QN5(cMb$F z^I0Tmw;?JK*OjjxFoP2|EoYh$KCsX-5ZTw-W#}xx-oDfFQsM12-SG86AM|Jm1v2pP zY7q36>bK02E2I}BOPJDS*R_9IMd66(aAj2A`_w8jGqb7V8vSSQ@mDT$QeX<@a-OwN1FtgSh#g08QkH;>XVAKR1Qs6$(EAv2KC= zoxvhP`>qW#=TJMjF7#Xn1~=2L&$fM;EU_5<@xn=f!M%MMdSoF4Rl;P`{iaxv zFghCZF0;ElUvcmG{pL5Qvr9~TyyR%qciR=dpUtlqisrVo4R*N-hyAipgvwlWi+myI ztimj@EUjr*>uU7vQ8Zq%B@Cr6pF|w zhi4gO67J89VwOKpQ)y!(d$#aq&rWFWcKr0wFc#wqJXFWwJqBzP#8zlf$DqeJS!JSb zrC0zas!W?I*7EmLZ|+X|ynxtDZ|mE`I2{Wo_hW_0y4c|pg0wIRA0uYM+PW_D`!%Z&2PMST^j*PcHq9t9TLhBkvqK5wI7GcW;yix zfTLEG_xnAjIn^fWo%BR(6p^!7%&|p|^*&u*xE|GeS^l_QxC}tiLeqB0nEz}y_HfKX zsS(TYPq?^I>AjJ7Ve-|Xw!Hplz+*QGa{J>^g;|HXq?ZGu^))*S8p$UKZaPohXVM4M zJ)8Aapb2fqw0fS-PdwG11*8`tvy|bi-Mwt9GlD2a&meJEBgM2@h&%XbqubT}vG`W! z+vTP#kzto&K<-BA1UF0Ci|XtsDND&DO!|pXrF(+fz{z+u!z@}ciMhd3c%mHw;bl>r zDo2x>d|Abgke>$Nc*@$qe%~c!(a&Gi#!^1Ljw5RSuq-M*tIfV0s1t8mm+emTEe%=) zeSATSluEsp$yL?r!}K$XEvTY`Do3}|-50N(`|B>I=Xl;-koxx^@R={+ z%k4h%4Ve~kZI$qKotp4dM9!-N**Z&ARr1<*vxo2$+2gXm*JMP50;C<3SIu4oiNXE3f!$QzF(b=-)fh zBbsOUvosiQau%xKj#zs{o3&k#Vne-1kFzAOlAy#vt7Wj8DK(&p6^l?Th&K$A@#GtH zimd?VN#ri+I3F~e_V!NG>+G)8x%Zp6MMp<0&C@F3vv$dVjy|$WJ!L%I8T7BAvQo*> zjlT89v4kD)O|QAAK!a>jf=|*#2jW)}2e1IS=vUZWIZSMmnD4as@75S@l?ALhw1@5F zyD?s~dx-n~U4k^rjwV)@Iyf9!h9?2(l6n>f>Y)+$P6le0&dBIwuu+P+bO0^B_ zIz8T^MqZaMa5ncYAJpnw9rd6#1rhJ{=J5s)99~VQdd(PQrIf~Zh79`2ed6vF&3mBx zO94iR%%rjlmF5{);5&X@#>Oz%D z83$3iMlAfT&ZZEU=Y8MgdVzgj1g;D)>KdQ@e%YX*r;L;`L}DOUl`4{?vlxRt`nWWmV+TSNE$!__-+OjV4k1=PDaWnE_z8w(KKjBEab3eFGnL`k9YUQj6KwK`*yZTuKg6xFX3~KCqyhRMsEFS31U;PC{(LT zvPFovahUC@P8iHm;N>j&$Z;~#3qvF#IKx+X|ErLlAtEV|CGa@z_*ZL`o9m$JKD_!P zI*A-B1k$|t6Il1Z5PUuWIF*=gjAiS1x{<`^Nl;N7E=X z*%q|?yY=Z*Qy1m-#3T1#&BucRYTV&@W1bbW6>`=j=54G(FaF>b zxMinmv7@iQ?TbHfm4PlsEK;&;RhLQT_53<4@|z3w*rtD28lfV=2B~azhfXs6qamZ! zz-=c500}91bJu*qmuaGRUndhP)nNIAvgBiu=@#@HFWaQ=eA zLAKgwr^TMBi3JV$*Bhq1;S;0Y5CAVAZy>_I`tX)2T6_b(=J6zj(i>Aj&Vdshp~>K3~_s(50(RYa)8@qpdefc&BibKCZ&C!Wdr2(VD~Yvu2h1 z@GFMUn@XBn*4`PE`Aa$qx$48zM~{H76i)&(f!8&rrCL&}uMY_O{5Xnq;p_Sm%X8ld zb#u_&7WDP=+*l+20KL}n;I+Iq&j>BkCs=7(DHS=hmge3dBr?TfAc2BHjY9k3{U={# z;Gb=C!>c2N?qxXn8A|TNB@b5LU6zoL*?2ySSY#H3ttU3uV48ExoMWsLS!RpnPWYKp zf#%aO&UWitZ*T*Y>D}Kd;Hu4G#dFi^O$D&OLqZ^6&tjUYHfAWE5b<2}33|mYUHzcU z)Q|R4bvV1#GVcwGSqg7zGe0vXWHwV2f^C)qOv27#scm5>AN!E(%MHsdaixi z!p|M%mXdFPWdf`Ij*nXfbBRu=S0e@iDl1R(9JOV?s}fGxFq6t7g69GBZ&9GFL5k$oo;q}lXrJA#=wU+y2N0OCSuK;mxQdK8v6=aM z3c6oDF7Dk$jgUnu5bn`8udWD6LYmCvCdt~B^&Q+;H;5_Sw|uje2VAzU4&j1^r>lH_;XdPn*N_z3E`xk zOgo_17}^S=zi)kXEJNf2*xp${LSp8W_RLD24Tg|ta8X;GSkW)d32qi+OR0TuoyULb zn5c(tNAd(aucTA{0rNlux($Au59tfE_s9hh%-*FqPt4H=>{_&U7Q7&aqpm^9T4N-o zPv$Oveq}6qC!Kqg%sRP46LBXocM>`T*Q501Mf=_AG8-Cwc&mH{plp-(@wE{CFnBzs zvZk1pefddnk4oaRK@??Mtznp!S+K!R}A`zGYK)Wt6Q~DEiem zMJON>3!NS1B@dAb!KUlY_Uq=;>RBN0cFkG2?a( z_ibk=1d@c{8*`r2kk~D4ohnjHk`N3YVV8=kvKF+EeDvLyNaB$jvVWDGn`^U9C@ou^ z^h(>gg=sQF(lkmS%$8@BK0~rIBhH+(y%-%XG|iUjlSzL7vdlHe#SWbt-==wB{MSS~ z)vgbnYov@SE6pR`DDiqqVk+G+Z4;6jPbPwuORl&jZsm+@l3(0AI1>g%pAhVkYYL0B za0ytzzxvGHkN=cs!FIZ8itN&Z^cb3su$@~U>xnHz6YB;!C~b>Tk3&3cf%2h_RCUJF zUt#lMSwQ+!Uk_!?hnPbCYFW|Th2puQK)Y`y(3>MFq^5bKBGr2XgEfL@oo(+`7>+QNbOce_U)rk|^a?3By$Ue9kl4wrHJu;EwqV!_w)X2GT!8(dO?|MM%) z$o3Z4=1RBGs;nerRk?Z$ADtpANiOSsgsdxM0qPKu$$kgwYjd|wuEXj&D-7lD9b6v@ z5g7zZi77gvF1 zy*zgh4^eC=Hd)x)^n9!-%$q(qFDZ&$bPBFSdqXzH7*`Bt24v5y39*2x6Sx zR=x0#Yv_S?V&B+VDb{zx9kfYqWTj7)u1;O9lPrrudj3CDh2N2sMKrN>05sc~ZI!>x z-Z}WY)*Fp@W$7v_$aNb#SnL`y%~FS=6uv?K($I)V78AqZ*ry8j+%d`_N#;k>W=E}7 zthM$cqeIi0!%c=Jsh94_NGdo*OxI6(h^bb5fu7?q-MQ?HGzPP56CQSWL(ICI?cQyQ z^tM4dqjy-TdpDfG3^}ikf#*2VNwvnp=E#@FpRD9}KCbe8&!1lq!^@>9y>5`nhQfmz z-(FIjBcQJQmBh4z@bz9o$)wOMdK}tsHN0Yy<%tu`Kx+*Btn>=g{06F^UUttLZ?6Qo{#0vbw3v8Ri z?5alVF7+TD+zI#_3%}j$y=s!1UpC+DX1i73qaP{t{V1^YN*c0|=F&G8G0XCwyjPeT z=34r+ZkZQue$HI_0m9k`CN{Ad$7-&bcPs3?T~-Vb239muRFhn0@S2M=HBOIA z&naXvJb*6{M|Vbgg9Pm=xwSzKA#CKmMu4fkA}oEdLf2&gek|NjPUpR3xzijIh`3d< zxTFqicnjWd>+2*|OYXGAMuRi%JI9V`a_OCp^~cGSk>h~s9Zg!*MQPE4M=*>37adA7 zhQrR)6tES5#@9SO4P!YT_#Du(XR_*AH+V9)SJUD1*^9IR3P!?*Vq$}{6OhhRQ=;}$ z4Q=O(jKZh^h==32Xhk)nHQ zc0+HJKe^v7ZPLjzssI6*$>(?=d3#y>p#gIyd+K9LGDKse>LIyBz(jR0=f(2 z^)#4{e6oAjE!@#@w2ELfatte(eI>4UqG>QvH+s*>B*6GL78h^kZNBwLV?jyU@%&n7 zCA$cMDW&g>pmptHA$gqBT~5aBUs0Xk%Gc&d;zZMpCJ-GvDmr8uYo*lV(Nm^5@pAtAtmG$&qC55N7x<&y= z>4FVkGITWz6=@|k98y;@Tur^$K40fW{XRt6&64zzg0Nm|YZD+^quuNpT)0|;#EWEYTD-v)!h*^=a_PWS zsqY^7&_QT-g+p7yc2n}-f%|1 zQIs~8P?uwJjt|Ljije$GqMUy@SA(Ib!qKw>iyOWo33JvUaN;jZAws`N>)3aW^S0I` zw*=z4=En?XTa6oOUI8V({J+*G5)^eRA6ykbu~^H{tW6Wpr*he>hi?kqcJA{X z{#MFgv|N@F)upAha3=k@fi9v{2p=_7T!-#;E=?;XELPss`nHV7fL0N93Qqo{!3VwA zte$p!9@$r**d?lhj}bq7aIt{SJ9&*gv3Z5h-pyzdubslU)%T10C+R8{dj)VBiM06w zQkCjK`O??)s8c|nnG8?F$MNi-BryN}3zgO649U&dvq^auuaCvGXces^U$nN%zsqv@R^W`4)XU6ga=-Deo#`U^$K8Ro};~(@0Z;srGBs zMbj1g>?}dgjJ>zZYB_9VO57ie!yr4P_OuHFYHpw;cog)iK(xce&8SL59^@=5zZ3iP zFPzfqRBNtX%P+Z4OiWG9Z`Y(}{lPAS)x3<`+;HoI(V3vE0)N?z2btp0;i;SZZ zgE;do+|^dm2@Sk2F@xD40)t=I^{)Y8`5H)*z87IbWmH>^-4Q6?xRymuf+6zwMM+D_ z2nld$xb^hS2=lgi#FD<{tEREJNCbkK|H|G<=P6bbrl4r=mzFReWl_-Eu*wi*(?e?c z?TsM2C9YEECcvG!Sj`);Zj-g|O39uQHzf}q{1^?ZBpBI^FSP>54)T0Aic;3Q?eAlv zN%pbD&Rb2oz7NqCnUd)p)^?hFXUvZ1A|PWb2RfqEE_pCtO_ioV!PhtMz4}7D>CwM` zvtY@`{{r9U{||gO%}xbTsLyWB>oq^Vwqj}pThf2F2AeD7t#ZK#q!dFtlMtU_g00pk zd9Ou=oFD&U#%MpT3mT=5u<9ogy8dcTfs0 zVjXpIX!U~)!S$uMw?__I2O5{r)4$U!{Q{UzMUYL?%CiXnlLNQex-)Fa%rxw{-{k}h zEOuSIe8PU$X#*0b08iRu1@2|wf6@kP+-Q{VNJ^^skZAXpE-anWpV5_8;5V+dP`Vpp zQTs2PPC6K?68!j8HnBV8sLV9dSeE1wuz76$jnkaV+B2ZT7&}_=cYH0ZW(brztS(0< zqVl)Y1IM2X;i+WVa4#9;2)w#Fp!nC_i#cU> ztYst6AnDoIkb7Lwu%&87Jaj8XTAYED+AObw;w`h8MYw*a79(Nd%PPfmddB8)9d-1P}t?KNGZ-2`7#l4u; ztJlZ@q0f;)cLZHPmlwpPo}L`9W623vN;;w4eBV>esk06E6gJb{YGJVczhTPW zng=q@u8O-as+xW8 z-d3iFMOUUt!_wrno7W7p5%nxo5U)gvu2FL2U=%_}NzzwXF-E7+URd=r@92Z|FI$c$ zXAGw=j{%(v@OdlZvIXm`j(B7S!5q3g! zz(xWZ)xYw95OkZ!|(&s+Mn$!d>TG?DnFHX@G<#cEzP&w}%I zbb@L%SGH>BES>3}CI5xwB) zmjCCYg!PnU;WC1{Q=mfSAckjo_>IvQ5akYgWB=pa+{TW!SL{(I>HO07wr?@#@qneU)@(zf5?a* zlyacGoEWp)qCG~444SshQ?<-O{lz19Qg3=_?hT7+%1jOJfPU{@1AO~Uz4Jbc|Fl0y z-|pX?M_XIizyArubghfWUvGEI{al-Gq=R-T{hI#06TM225dKA_E@H3TAl~sA*IBju zO>K3_0xSW#q+22-5n1OLV=dOUt{GT_QzmpiRe46vnS}GQCBy|xtYQ8;eRZJV24qPP z0(A@h00*)-fi5QKdmdR4URmSQJ#-o^HX=(de%Xz8kst{F4u4>DSad~1*O;jZaNsPj zTHzGG)ztO6=n|(F<=}T)dLRY%x+X&L1*Lo3&O11WpG(c>1M>wCSNGc?@kTp9(s!@G zB6$8K-o=e(R(`Xgp-^{>tJF=b>&A4gWH31{(Zv=Lzuyl%{Jen;8b9A7YMFvz>5ND99CF1j z&v0$iI-!OP6uDga))hTZkUbY&4By~TEDw@>HgxmjLAd)99baHeM!icz$k>Ha`ueK~ z;E(4w0gL^Q{u2ZgwILdn=PSq;kx6iFio%sH!y@G*a5(lik8-JhM*VVaQ}ImEa}3RG zflT|uC!U&4h>4;t_urbJ7Al?1+ExV4(GVw?n*1zU2W<&tGz>NMoXO};??i5OHmdIm zFWqIdQ40w$+_tc$odmaB`$WbnE@hnn1*j@52aVioXXr5%-i7@fFZyQff`T(-CD#H& z+*Du#VKMCSC55M9M+#^~rJf%3`tGlqh%f$Mvjjm!E$%}nynhAzR;=WI7=x`(6x66R z>)wcf<}VXsZI+@xPA0hbqm87_z8$ETRH#JXlaaY+NXYmQ%TB+$TVo#%I4ich9()T` zorI=O$%lTdm#}AIdcCt!)vSd)%@Y6hhk;vYaqP(tZtmQN~*{}r6c>G^v*wiT#?Ty8&}Nr3tzf#+|jnCJiy!bW>RnX9yIQ2 zj|_cIE-%X;`s?nk?pyuEfm?Xp!J{wmEW#h5S6&+QY3yS6cN}p^bF4y1@JzI5)R*PZ zzUh{gQKNnZ#fod5E(iGyqGIaPSkio57N3UKPB@co0b;O@ynLuxjo9h%n^bta6IF0I z-hu7Q*{6NAsb?2nB^7A*Z);<^wib-v86w?mgdMZ(ie_88Xh{3{fEvUI302I_{Cyl% z>usk|T;P{Nn(`YvtzkhSXoNVdvOE6lV;Ljlro;TJUDc=&0t0cu;dm>h9CUvSV4G4T zz0>wgYE6i@(DDc#n+-gG{;Alh_r^%|QVsYQhyEkr?!wUU#_VCcw8J4X!Fkw+5PmYm z%{Pp5T~sLoMB&$ofM=4U!&_wjK-(03;A@kpw&T1eiZgph$|CSPQ<~;lu|GdO z)33g4+%I8f`84D<|L*1}=O(h>qV=66`q_>vAOyxd^E&3e$`SWtJ+}1gIlnGN{6@&S zU^%0Or`f>--gwnrEv*rN7L#0#PQ=DVgq*dY=N0(a?u*ZX&uoMX$GC~9w&<>4-fZZ1 zNyYt2a+6giZV%Ek0xOg2oVbj;72M{0hPIco0%ae)9{q>04g6iJ{!gJs>Z)ho8E~VM zE%uAYMU|gpX#M?_jkxk!H8rL7apSE|F}#i?CftfC^B15F9P-?e&YlXw*;Tt6%*+G! zl@{hu3q;F+UkNRWFM{^&@n5*2udi=M1Ly;Jb@a|;?7u*?$kPDtjO+)}MIDGiAR@ByM6&?S%jX0(qipy*m z9aivMUp`x<)+*@dR`n`vQ8Xg>^0zg?j&5`cvgXERJtQe^+nEs;#0YZ)&@{UA3Z~@S zycN*o;8s<=$-R#DCK^L;Vhk%6DI1H{UJ3=mIuG|S#nPqXWtj!@mPrZyrZN^Dj@{84 z`egw-EQ1Nj^UAdrgopK6W1t!&Qxm(N19x*Dq$eu$Fk^U(Gt!OxBo85b+cVzE9#ZnU zTC37876kBk(yvY-c-O}E8aOpFZW%j-B3mRKIWAv8_>P=)+aguux z{Ic^qezF5^_Yjv%6L&Q0`dO(u9IZPcWi)yOXOh-=e^d8xilutYHDoxkDLxADJIK77 zO^$6`7iXU;;=Fpr(eNnQ(&-!kCE9mp#18Ov@JV6+us}BtH4)`sJ_)N}c+C9d}q1YPOt@6G^0MYGR0wN&+e~ z!(Vtf8+bxq_91w}f`JP3M(#Y9eIf&28r%1u~#!A5mefXEivxbDJ)M5 zs21cL6i>%&*DHjWU$*T1P>YGa<1Z;m7wUL|8JXVrTXSegHr!abNXjt7ccG0QJ2fIh zrS^0B`FmRKAKqvnLY>sJJOn;YOn{~MHRYw;WBcc{c0_Qyf)CJ!&oduR_0~Xa5*!+4 zL{s*yZ&h}Hz2MA};0Jjkr0=r3_wCM6d+j~9h)!#*qELpx))xmbXl<^_92J+6=e$0< zHrUS{LbF5p=c^u^p$7h{=ywtVefSK=hyMwFWE0i(ESCX2TS=(KV@ZXJCPhU_G4@&^q{5E#%2)xxFbk+wCI8wOQ(K zRhtTxkAy$>$98ge$lS$MaOXT65i31c`pfZWBjUaPL3pJ zR5Ll0t?i-@1g9ctG43eGVheZv+UD)8QA@j@z3j?-;eVa#C~&f{PNcM^M%)}egm-7~ z$mdXjfOa^m&nm$1NPErawrD}!&sjm9l3P?Ni?{u&Hw%?JobNf7BdNkyfk-!dF2t8i z@~;s^!isDy7b?7!{fW4`4%{Z{$z420?)eB9J>nayLEMJ5|y~)D`ig2 zl8KJ`JCh;NYKE9LWpde&B);hP?@mtpYDi}Qp?H&wQ;o}%ZetFJH{!LPx}P&L)w{Ms}LCjW+MRd z+$441X;L6UYpRTJpwpeWoX3CJSE9cyb2I0FD7w$e^{n&BAJ~ZWUO6SpG&lP7L_%v6 zvMOpilRT{mfL#kn&o@_vKt;%K&xCizCl~gE{_4nZp7iNdn;%kD2Z4kPxwpN~M?1F~ z6u%Cp5Iw~RPA_=3FoF|I6Qi2;Sx*=ET`EWsfoMr%1x`D@Q>91GMgo_zMAGk|xy|Ig z;?X8ymsP+A&6U_py@<5PGvS82djIf?9WUc&O#}K!H9v8`qtSB64jFaD=%ZKBfcEdI z3=RnR_qV+AV#MV_>PI_<1P{mW`B7go|1{3s`P8%8jKvQwF>TSQe>Qr`UmpXRR07B` z;}hSaYpAFLW}nbf*wKJCnt^~m%nU0dydf98!8!5?xDD&uffZ5_UeVfx zX0NA=i4D-Vq1PIAIYg12&+qoWY! zUQ>rv-enF#Y>-&Q#9jAt8_?C5xF$U;$X~nZ^O3dTP31a;;mLIeuVsK;;^$X{=b)b? zya-*x#kz+BB{3SJhh*Nwzi;K{*M zFx!m>vB0i6(PS+PHs>XEC<4kEbEqJ5Y^2w00-_0wQt*33&XYZSfZ3-E7pm`28*CgH zWC^eN-(>fjFHszGSD<}vQrwYanS*ddD1itGoU?g|RJ#p14Xux2XQ0a8+tM7q{iq{m zYlLYs2t_wkyKN7I5sE>slxx>8y0@tv(J6KPT-Jv18@prJKt5s}Jx^5rRgZ1Uj^=e4 zKlO_~!6_O10 zBj!Xz>jXUPsZrDYh{}&N75h0q9N7HSmUhtd`f4R*6b)uTba5{y+SXNi7WfsL$LpVR z8E@&R>~+V74CfA&7o!p-QnholOU*mAscBpMM%VO#m8Scn#=y7qO79culR#94_4N^M z6DB9?vG9NHpgp~g&o_u#^geuNjv6%?V9dL1#arK?f`PiwhrbKg%j`v)^B}qsFAXj-sdd%FiWh>qtZ5-?T!BA8cDkyCD*Qm&wra z7kNwau%ugmz=@hYIG{Q55aw(g6MIY$tT*%l%fI;s=FHi*oO|ImdU#2u;TECSUEF8H zseQrMLS^d;v|H7&)s1*bX9HVIzoIQQa3STNu#W&2AJw}7&y8rX5A-<(MSy|FEz1wq zR3U8aG+E<`2%RPU<&7%N)}G+jKhbl}ijZ>-jmnzt7SXX^uUQ4}V>yNTjYu-vIOck_ z*iF}^h+o5RI(n5vwtLbaDMgD{quhOF9C}WS0yf4v+$+-m22T`7ubvqUD8|1pyDj%< zP~`=zW+xN*J}*>-bSL_SW(TKY<26~E!p%ztG{xZYG>Y#hXeQzI5aa;TP5+HykCcAE zgU0mHOu>QA+|lyHmE>5oY?*-LVqs;j**rwVb%|}Cc&L6fYmLULP#?xbP0=!k90@e< zE~2YJm`w|i7MpC?qp&;Pm-rf78E;%H#sQ&9LX}}=?U~5V(YqdppEQ+|OIlyV#;yZ* zWi!HjbpjgEmA3v&G@_H=7wMyM>MyR3`uC&Z!aqcTd%M?ntM~1%S?}ySqlTO$A^x{eP`!xSf@Hasp3zn$J0XzfPd>G zE=uumh;m?V7puVS&v`c5@~)|Kx+a6q%Rtni(vn2I?VTim!tFJi<2~FGQ*P< zXF@zFCltv*J92DcuI=HLGx3XGK8mCj_cZql$-`CJN4rPX%4(;^O=qd6`cSq6VUgAu zOdS$s_d?DmUl>9SNu2cmdiDJ;09$h%J56@)>3D;!AsFC7l*>pVV={DXpg1s~Zy$Dz z1CNw?_5Nf+*5!1PzAc|p&q$PXn40>BY{2$v(Bm*ErI-{B$!%`9s}?Xi{ufN#dYV{p zxr0NfH>=8GH-?|(2+PrZ%W*!~r?$Cf-PM(lgbcupzHr1nU?dB-!_g`QrmDd_UOMO= zL_YB|X#>f8DwY^(!z7$PA%xUIs<6#C;K{$Fgia-Q&>s$7*rkTQ^sT3n5C* z3dVH2o=-TJR_b}L*Kkak=y*~P&V3?h(v9=NOEBx4M=K&(_UTU`)J{Y!=rhm#=GE3# znuWrZ3i64AS+`+vP4PhvKfEj^Jbh&)+5%E?DvE>6Bgpd?!TuI}zhrltQr@U%Ud`VR zAY>gJ9u9SDSH5HlW1?tKM#m>b%%8=HbY@zKruEJlzzlugM2DV37a6}eZL4B13(*qB z{e;xP)Fbltl|q2Wg^rXS#mRG#VNsVUKzuo)CjO+Eep=v6nWISumc*PiON*>C}hiX`Rxev`+*4Yhs4xjyhlJ zrZsO{`a7QG5p@VSifG6UgzodGZd0|t6;@8`olmM# zJ6}dZyO5O(Oe1nbo+MSpY9MFj&@$-2+_v6G6#qwLhv3Gbt z!jFlaTm41YSA;Q3>}Ys`wYLz)$2VcDeXm$WqC^JP(?v8l*;LoCe|%kMFc(_0m-oyo z177ob{C&Gh7nB0`P+a}X@QoMgd~}*pqlyJ|zn9@%${7=(>m^1CI zYo>p{$Tz2-jeDOk4v?ZG!Aswm1QrN47+rL=RtZip59KwXUEBsR{3 z;o>5`y_bqn8F&gNXIl!=`tVAS+^tn^Ul@JmN^`+)5-khLg4mrtD0SGFN819!07L=p zjZ=?%TxaGG(Ph7DUS`6QFEUCpnhoeTQKxck}4&)1k z6wONGi8cp&FjDfyGr!oogctStL2e7D&xhb=*$!=8Bz+cyJ9Snd@v0vP?oU5#V57*8 zJ;TMU*p~I-(hw}as}~I^*_p=x4wb#_7K8FgV5U&@(m4~sjymOx<1#$OFzttWdQh2Z z7$<6wkIelpW+y#S2tZ`E)wUk_CJx!moTS~29!)J{UH7y5{>>!MU?R0i<}^I#PKeql zlN#R=d?a%$OB^Bm{(N%)cC0DI%NFQvL(12EdEJGB1O;$kbS7N?nGq0>o!rWpd9#W! z34KCq7+~=fPDm6L@-12DWTa7~T_PfWk{Yvb8-@8DzeQ-se!DP=NZ#7bAn?kG^V_LA zH0xP!k(9wsVOdm8bO!F#uhnzs{KRufMX$ZI>?A|X&S5W%IxiNS-?KLnu;SJf@e6sw z)vK0%l9|?CG#RR9w|F2U;|VXZtXt;s^St1{A_F=Ucsl{X6(K$RE+Zi?{ zGe?!&o%DO8bOYK?r6Y?7UuDAfl5Q%j>md_{MC)nX&8A28T8flRV}N*;iO|wzkV6_% zq#6NOeQt#rdXX(whal#SOpS*6T{PQ`?E;_%t994q!N7>Sdw>e-l|N6zhQH?OSnFG(wcu2kEm1f{hi zxw~;kfB*gH1enrRDuaEMdvV~|Z@S<0@fFwBga6^X~5#kj+0@UCJr!bz-b16lsn zUcBuyybY|cE5Dx``aNv}&0Gu?_wl|Bb=ZfQ|qIHy2YDTAIS(SWQK}kAn^7 zy)>y_Yes*Vz6%^2qaC&VMkHx>taQGD6K?!sns@s8HX|2*-*BgdU0sR z2XWa>%a1y{+IumkWr((`HB}a2iFxhku+I=D&#yc&TI-e$+$6QUlpy4<+-aX{D-`e) zZ*6tC0Bq)E%lr(kvJ44*udoD!K0fZ@nFMAmX(xxptAsvM2bxZZZXBJ_io_BG=p{#; z5rdWgHk6~*m2&i9k5Gw{&zkk^oA&9Hzy`=~!*)Q)-6tk;>JT$}P%cb-tKTcvKiH8_ zMC$#^+0K6Gpuf}uSXg$Y|#De44eW}0!bXTmL=S1>;y6h0# zhC}N+q9f$*)7&}wtIYeiYy+`1)$s81SE3D6Oum;>t$3I)?*7lRBbKypXI@Cq?#(3w z3zz?ypD!zC2>QoB+cNz0Kxp^MY1}|K5dDhQl29AH` z07m~*F9cyhIn$7Z6Fp4)&HuPpCO4q~rs8po??PhZTHp{hE6sIRELcA#ARU5i#t}T$ zDNpKgPB`G1#<_142%OaFmd-;_7E$#52 zQbhma$t&4L*r$sp@R#jU^h|F*Hp|*WpVJpcb9pr?!!B}C3aD|2z_RwMJ@66%uE`T*JEYA1fndNhaH(>)4a>PG(6t`5&R zG)>T+89g9}oV`iJDLGH0rbgwXt0why1`6HmzbcgUIaLCCKD|c491QIqa!Q8|jmtU= z@8*jSm!m$DdpXLM1}-@a%}4@cC$;T_+c%WJn^)_G*{1{$b+tD=UvYH-dB_J z1g#BD%Kf-gr`y&>M&kmn$H%NB`-*^xfspfy`RP% z3c$gcp>BZvB9X!G7{}qU z;An4dzKBaxbTF<6mCob6}cmP+0#mc1CEqChP0Ovn0tveu?$F(!EnR9ThR zvkoUxU2tVS!g0_+-rrx(WgwaVLiGC&f%_jY6h&{c0k;_G)tK4yVET>D+4}LNRC0nt zUV1S~tq;`^`b0R9W`4%rd(&HYzaIXUj@ccxdwF{A)X`oqU;R5kZW+4vF2v@yG&PkP zC^>+94!qBSjCzdmlftk|b_)$0ap-`r;FA z;<%o%kBXm>)M}#-9QR>{EzM%L`x{;ZU&O+lv~Vr~RbyJDP{Bl&+xLnR*5Z;R-3j;#A%M zo1W2=5t6w%boPdmQ6|DP=g7Oqa*ebA6Gs_S#p&xWb6P4(uj1X^;@g?_%bP2G3wR@+ zD?m_RJa!1NPfqEnirDnnZ`@Vx{1K zpt)e8hTN6c=_Cb}{Ghvvi72N}gC1v_J0m50S=`S7YW+C`6Me3g2ReM)c=EXz8G}5zR|_oFKyx zD-B%d$d@ip2*viE&a4&1cxDZ@ad0X1bbRkZl=kp-9%xqfP%TjfRc`kQevGsUHYORk z2%>D5E&o1snY{J-$CPt7%>NVb6yRF-5w1iSq%*mwK0px1D@M`lcjHb@Bqe;q|wE=tX(nJ2UeyE3AeSs1gmkwM++(`swr6mARA6Ua?n{~n+Eb>r{G^SNUM{NbNumb9SZpZ3-)Lh%&nC zo#&{4DwB3<^(r6BJcQ{90#jHb8;_&W5c+_w{Vi*<%dww#t>7Ni$H0-&erQX)A0NOW z6>lu&!Is5Ls3c0WAS0patvqP%Zu^p)e`p8tV}pYci(@x_tkMV{6_n~}#^#8IPapMi z%8@W&1P@~qZ~PZ?7m%F(EYRGxeDIP6dgXY22ewg|k0t^;Zy+ zK0Yz!VfO?$7duSI`y1Rkzr%s7w=T2pZHztAK(SJ>gx+;*A5*RD5Mg7fEEsg0^qy=x zD^kIz?{hkpaXB^Eq@i4_g?;~#VK-$(BtmVJh5`bzF)|u~(4eOoFT&gkRZud^)|N95 zMeOD#580*rFAlU0*r;GLRuDzyw~0F9RO0Hl-542C4Tl6z?cx``%VQQXv_3zyWp4ku zyF)S14;u&<0{SZn!4CBYXZ3d$8xorA`gBaC5Je8b-O$sT+_7lhnREsZqw%SNi3(|TrX%n;8<>B{j9v) z`-`h3(FBWUs0PJC#1iF?UH$$R>k}nKZ z5@utXHTulOHL1|FT}}4qvl?!_w{YVSzSP503MhuDf6nnj1cJ?k#cRct*U*e2bqmKb zypI~Nd&Oft5GmI~JKc#P756uaJC^UD=&ZZqSB)CZzxO{He3%DJharxt)LEhslTb98 z0Zt*NcToWciFHq!hB#K(zHXO z+vA+5zUzZV-jD^kEoiMn!puz*jvX(N$i7~q5<3JZw`YLx>=qWM&Sh09p;Akj^AJ@raV|QOh!{A*PlNFJSu2KY-pkc8x6{M{{;+p3rDLGX|G2I7Y#NH z+j)$|pV;DGHxme+o@3o-{z>TtY@-HN46nNkkg(t%>#TE^X3blEQy*p&X0xL{sswaU zVL$7W$REw(P?p8h#d@L=F?`hB)y8WlT&qiXZ8dt5lk|CXD_@#ofB&f|D$4bcbP*G=HHb(essQg(l?glI({k z%M#5;{q&2?;B@X!$sm^L-(LF@hEJ}PPA^>V>2>d`jLkAjz641_oEZvO>^K$w+^l-c zSiKv(RmyuqluYy|`pV;8vZnl|5_pL#Dqh5SR)rhB#08EVZQKTv1 zJ87#$;q(Ut-XOevz003-Twf6`y-T0Y;A^bAI{G!XbgeP3yyJ>fJ`;?#1@uqy=My-q zrI01u^n{X_NNj2jrYTF~Wn`YiRkl%Q zyKhe6H){n7DJ?mkCSQfrw!T0XPx3>(8JXm!rk9LX3$aePKi(PGG&$pl{51C0!a8|j z$c)P$RS`x=n9Gu->T9CB4ya}Y5mYJ^@Tjjm4>Lz-yuy~*R-R>iZhF&P+~;C)eR zK=!*jZl|nD?Zup&m6zSSsD_*B51lIKj3-3Lqq^hg;?!t^aY} z&l6}6dq}ozqUi=+jotc+$)+O3_6zk+PugdGUPr~3m0o(2du3&9@Yh7Tjx-o%d)fs%zrAzTrbqxX~|GdmN!}_~PA_ z>9?Nh)@Rz`L~?(V2E>^^+w$&yY&_;~L8qTFkq#2(W}AZ1XX3^C{E7yN+}yrjzGLwM z)h5yPeoI=bU2jS}@2@f&aV53m(cj3sBHBp~AQEZ;N6!k^d5dVme^3{6# zKp*rQTv76x%1V^oA52~ojCP|8GNkG-q!WDh(|}iC*J&;G9@r%C=h$}Ci%I3FBr}?q z#%r_hUL^1ucebJZ@7$*p@}IFP=JiA0zj*6m>ly~^9<@|!E&0rIYf7iWEtQ;kdP1KI z*S7$Fv1N}jdnhCcw3{iILu)DK;%5}FjYorKOB}J=C`C=<2b3A6iKBR}Vj}y<-kxm! zYzRN9IUfT&1i9Q-LhI`=FrA3w@{LK|NP{R7L@jqd3*CUU$Y!1TUehui|I*yt8{3Vp zwV~rPWBIajvlqPn8;)E#fo&xXBK5|cC@!cu#{*;sOmSQ6^DjG1stPdb2pj>B_IuGV zebYd3)4v2R+BBjTqWt(rLOBkb?2ZY4Jxe?qdWwOX=XM;M0d?o0&Y^a)PVGrgBMrjM zUi}s|pOY&+P_IBi%|zcJUTOs;_~|?XXtqj*ll9;Q#Ct#?liDo_rTwS(Q+%;*mYM)D zhY9Q(>&fxUq8@L}0jbUVq811Jo9fA02XX@Z5eVK$I*jI*^gK!Tt8>0Wpvr+hr2MWK zNCyn5tq!#A)#eK(vQ* z-B3kOU(hZcylgO_J-D^_*LW4?RX#7LEme?(wRtrfYbdfga9SM88M6hsEUI$MK&_lp zvwM{;6b8?Tg0^E&c5Ue6Z)hgeO?P!cBmkd$@yF=s*m_0Mq*@!Cyjl&12uRpQ9xiF> zi($k5W)|W#w(qxQZB^Slm7Mok7ys`v6J2`g#^V) zEA#+kh*TK)NZ6|+JFdSI(BRS>{rw{;%xRU^#Ms9bmb6B}n@RCZlokEw`;@%ZEh=B? zFSrHo2@9S^1vU{6xlC32%4;&&s9^!zgp^Wn@1mcy;&shhLWoi^8jHsBzB;m-t|dPm zaOO55{+{6eM(zZ1VXE+p_tYa{X-2~iS0E;mUlm`IBg%Z*<5ez^PkhQo%E|(g%1LT5lXc( z?<0QYaYr;_)!Ea;Son;9=d6Nt!QE7Wp!@F}#{r09pQZIP|7U$pj@oQ6t6+7GV2hNv z_m!1HLT)2;Q-LQ6U^k&<<|ZD4bi*eqW~O2b#Pevys{Bc}CrN8gUP%jNIvn#D*bWF` z;O5ORL?;|jI`wsOXfF{r6rWxmXZoC&uNCg;=b94^A5iq|k)}Z^zPkxH`ktF{9lfo6 zsMY{JY5Rb;D1Pq|;iD5-e4fcye{iSfc0_V%N*gxUzHLH!DZWrLKe8-eXS)2G!pdlB zXT>ga|27rFE5VCU##~+pdR0i6=+@hZ0Qf3UycAbt8=!Tk|G7-Y&{C2!6h#Od z4JhC4dN4fiyDL-0IxJS$`9UV=d2w<&7|RipD1O*jb(0mpsQmlBEYN^e!1~$Ks!dkV z?PAI;xPuex7Q77#@2CqS^;!HOLUq2e26jFJNl+Q*{7zG*BXps+bNYsrG5?VWZ3#NP z>Rbz;-hdRfwGCa07eDHE4#bCYft2I$WbDEv#mrQ9p|2?=0^4z=6|Zx~dp*dX?sBu$ zohGmfHhAB1QDZ#$*_bHIyt7@hT5KKvgB%w41}=?st`uLWE*`Lh2^yejvd``46a*4@ zk?whmRj`ikMziat3|L#o7cD=G;smeb&p84727LOoUk39aa-T9%v)InFH=$2W;swLNrU6V#$bAehyG@G7VE!w#aATSjxy6RkKLU?~2W#b-Ufb+4vo=-i z3{T^*zJR2iDZwHcsm)az zZmGCZy5x;qw88j}R8#!8jiNT>JkIp2>JMe&hif=Y%P|>F8%Ezn=&H`P`HEL4-MC)@ zl4H}dOk!Fjj;CLYB#(SNH}lWdr-6bNi45O;B)VrES?i4bRFeP^s3{M_GxRWKcevQP z;{PhKGVK3VVnm=C6~-@vaxV~53T10uU^kAt&y--yUk?lQgfT=HC1%(1|Bz`23C2vx zfB`puy^2uffb1s}jB>_hX&b6aVAWK;BIT{HPp|nuWrPF>MDP-V27n7}rDp`i)lL3Q zVw;TR`TKvy^x2rDIyDoLc<0#K8Q*jCz~=Fp6XuKFTDxhE{fdKpk2Dw8ulBk7dtS`# zODSB-UST)?EA7_m-Y1%-bmzxKtQ$k$8@nuK9U{7I%dx;EJAVy4oYzH^&w1IMS^Mi& zOo#P$orzzXpl{mOFj4|s?N8RW5!M2~D&=x0xZ122h{b*G!T|64-lTiNc>yDL)$j!iw zLyGc*t<-IUQLiLh)j+uvOq94*&$z^yxpG&3IRx#tBU!|nf<~l3b;DmL#BSyuLcwi@ zZu|Eo``ZsS`!shOUxVz|g0^&E7bWdTv}XU@M>X_zTN4J@wT(o zjU#is0iDJ$nYO5lQPt%Y))OQ43h3)Zvu!$$0I@zd!?PiO>kNu9bWbq~4ALMWdBRUh z(Gq3le=N{zt`fA;p?Vh^C-hG*?4nq-26Xu}7{YR!2LUI|XL1xaqD^jHx)A?3-!`5@^he?I}*qNx? zB71_ue0u$Gaer|tCiI^5=wD0JIM!vlH(Qxbzwpe>yd7){2juc9$kcf)6|IKi!sGFM zKe6X?_;*QhqLHol1HjL8A7^Gv&FktK)I&3pMFRNUc%{{FxC9>h3^{=`S{(tFh36M3 z_YwcD$9(Y9+BTg|gST1?IOgvDc-5WCry#u|)G=B)?A5)`Kt_2oDKhi>6nvAjuMi)5 z|GRS^50gT+I}&GbfYg^cF}9c)u23O3@tPeBlJM)CmbIdMc(Hl8@B{kh4?5GB+_)GZ zi*xMSg66wL(IXLhoF~`x$r@`TjXPL42_m@Ja7ZGbF_64i4fb>SI~ePzsMI;(wt z2gAuTcDy=nBGKJ+gwCtIumx`hJin_z*LTP)>3R)rFN;z-jTb+y@Do}K@wa?*w=ALr@t^XkpE2j@@V#-?1C z1(*<4q&Mow`c4>OD)@5J(+JXY~Lt#(UdL7LPuaoxd{8;Zx%x3jDBJ71kMj#AC zgi~C(J&+_<=Teda^B-#_bQr)l7#IC&7N!vAca%Z3uGEf%Um~1IA||d~0sOR@8^OlA zh2=Q%jN_*wy3LI+FZRX43mbqIVys17SCwf!!PpKhxJQvgFQcv;{mz9Bp# zYXALfb#l{F!D@mN(y);=q1pZ7<`1ph94S2a?2b1(t7!N7LZwT2ERb=-B1z2gC2@o-SnvE^9p5%P_RPsUD;f<2n&>=XBN|s z8bvLOKi$&$>mo=DlFxekQed;=g-^QS0l}bt_g#d0*qsEx;AojK2ze#=WC+)v8}xcct0=VVn$Q*s?)o>T2a!-GF7^@F3H8ZRq#8&S$Uk z^3{s;&8sW{y?Tq2Y(9<5H8RVx3K9pSI{mzrJ^taGEFAXwO@aTCr(kl9_{K+}&esu{ zg*{3-ucH8^J384L1eo*JP(64fmfYOMn&kDt*GTMQjZD|16-@6GObvuYFnUrae#=W^ z_tsv=H^;vaoHrPKqC$0hCTw$se{vHhS>jF55joRLFr!*y3%Ug7yb{x?fHBnIY-J%~ z<&gGcxI-s1d7wRB=xPZIb?;u43Hu)Ch*jCsC<4p*!yoW{)<~pIEqpVQ17B%=ry)ou zc=Fp-c(#a%P?(+Cl(CS&{Jp}KNYezY600JD6GvNg!ww?D1oO}EAROHO5#{Gqp1FePyE>orxjpmzb8EISi1w<)aaEX-hBM;?wkPo1XIMJp9W1O# zxD8Om0e0m~hokp<;@>Sr86jGk|9TjHgDge8eyBSVld-qmS$;hs86e%r-p^;g7QdP$ znZs82muxTpoW`HohvHYBv&%*$jia2bc%;l<3Y@;5I0bSR2z7Vlsz01hY}m;61K|v& zR%?|kz*bdiI`w0wzGK>5za0PJf&KwC4yL7MkyF}E*V za^2paVM`>2_iXM8pG5xOY~pb$A>WeTx2_}5`OP%VD0=I|pGgK*j+=mpQ~a{OoB>xW z$qFoK)B!LPk_e7dBLU?Mqh-A=vag(8IYFi33ZYCz}5QXI?@LN-_&7a&r3A%A` z(u86%H?uC}DmTKf(SVLadv-*8S0gx>e1qveBzmIz-)-G29d; z+cIgmoo#XvncfQ3*F*|D2m7PxQqDI8=W0?1d9(G6V=DBQ>{dEMSy#rYuTN*G&6N$Q zpzl0N1_fQHe%dKtfYRlu+_&&FzNApZ5!^Vqw z4Jmq>adyYM!HCBYe51<|=V?4D92=1X-;GFV_XKgprayBQ(1MRsAin-{i~d$V|0rG} zY!^rBrb;BfpHa@;(jU#i_?w+DS7GlZ)}a9+MgitucCWGVu-uYx zYvrah z`hBXVCN=@Z$8#^lPtUOT&H$-@7xMW0roBIPAAdQKxy*gd`8Ma?*rYV7$w2?{tblZe zCS#3EHeLQg)5g{gaA>`DDnyAGECG-1s)0}pgQ1&d0ZSv z1YObX3NMBg0)6+4OJQqbKd*9VL_QcG5wZIzWC;iI+3Gkk97_kWS00jTzSL3tWUKLg zG_t<8JhPFRU4191%DBdw4Y}(cAJoS%V9dn{u`uYGQetS!`EOb-X@|=t^yL=B7u{>X zZf{y4^&R_oC03-aQ_Wp;+wbpZ(OU{;?z>g-Fv#Dqr3~j&1-V-9ytatsn#pF@PbS5h?<<*X-6h=b=(_9M__`?<%3-r2mK#%+r zw-qvr6weDKfSJ@~S3 zJsx2yfxX@j4MYk+TB#fl2^D(GW<7JhDk$!XG4TBKBXQDbDd4&Bj7@KW#iIqgNj1o8UB} zcNcz+<0H`u9+)XDPpa1v<}mEEuF zeHb?-mh=ChH#~cVdHwnOie_n1Z=*Fh?WkV6V`FCnmiqcy-%Q@|Zl&ZYlnc++#?PYNLVg*2EQT(Y_GVMcuc+!`$!rAf|$KF9Nj3F znU@ZE19r>aO2j81KR5~oG+!@Xg|?o~;{RU26$rUf5-xApgQh@E)jy>|Nw4-d^hcK2W@Z#giqG0`2NZudR6G(LaW7j$SWfRH=-~rA% zFo`Og_Yr`Vcxq?7+?vAP6VoO!I=*-;L4o1lcuANl+r>5NQl0xI(X-Q<2|)Y@TA2e#3>^Ty>LVPeXfR#G_UvfEvJlG(96tsAnLuZ_=E6Y z#skT~eTk3rmf!uVxyRxfjX>R<97Z1DG)r>mB|oNrr+=W{ehc4`Zt79%&<&9^+#wFG zVjNMO14tA&d?&VXwPFo6`~0C{9%stEmm!?x^0{)tZ(;Pgw(m)8qNPEEXF0h49h%_n z-(AR}1v>PTpyg!kW%fY!Z4Y^>am1yF1aLt^_>@ser7$htTfQOsg)-*Hzz5-i3rk>+ zl6jqj_%x~`#9{u&Xny_oE|?KZrYsgLh~o(G9H7md)GRgpYd8z{1*vCY|N2V)5ea>m z{cB)f09)AF$8nt_+W}#K?W}QzgACU(VfkiU-Mx!wWx4rC)V0Y?D$;soJfrzu5FGV< zea<#`pLR-r77j_{q`9<+8MVe#J?7@pNucwbLb_i$a`Pps@Uh{^-T zoj++6qS_sk)*VZ^jV1@jX(#*pZVkc*HdZ_RIFUKQ@L_W$<198v9sMtn7miaGY`UY; zfi4__`@$awhsSv+AtaKC9a*CguN$7fg?#D}z?CK1i})@!xP>grp1GP>fE?fV>J>aL z$#AW6i<2bDx_3@R8Tt5Rwk=Nz@Bo6fSF#lUB2e&L@iJUUb@(d2H+s|M%}g1A(i!;) zW0~WM9m^vQcV)djGK-VQfUc;y#XNew2-B1Krs7oKb3@Mg)(DqwVK8XHt#${`y*EVQ zET=>|lmaT;>uZq8cBvvij5q<%fDywf(kcCrbiodjRO38)ZRDq`oO~i-yg)^ zXsHo4WKJU3soV9)BV9zSslNi=ybMZWjqTxBRS~ZF<8xg`xwqs>Z|pDVP08Dpvr=v- zz0VckhsVL(bwkS?i1&VNFi|_B>YMZhJ>hI=*L@n-K`zltQukAHADyG6%l7bpxnD#c zS;k-DkREN8O;WZ9+f6V~(}9!wQiaxc@dA_Qqsz45RuAYw)WseCw-dpE_}tVF ziauxXSI!d=c;GF>h}HsD?~uZ&3A3l806u5UZl=pTrc-L(lUb!TUGr@crf<{8FHc!w z`D6hXvQrT=WNM84$Yj^qoEwc(GSPyQy%53z6$wTB(^D^RM#OC`NrD{*8^(fQ`9N}K;y4{u3P5Gn*4 zGShYqSCYik(~2!d|0fDHf_7US*(P2(P&atBUEqZ2`^jyNt?Ryo zZ(Ea`$C`5QyRDvf2Ih~}rTgdw)tB>_yU6;*eh+Ve94bUcYUv4MDL zZo)m?AP>TG93<;;`xq&_f?faeIc_!;X+ig}e35Q;%6%~m?=6Cq$DI%ltsVq9A;OXhkfUW-POvt zG>t^RkBo4|bN}mcAToFOl&Fuf#d1S4(t)yl(+?8WjfgVgEakXf3yH)es89eEIT*Mh zQ|TMnMP%xJ^U>DN2M?eL9XkJqE4CGcdDSG`X-dxm7SOvGFjLtDlc|1JVZI!Ou>1G~ zJcNR2EHT=jtxn-|hv@La+ullNGtE#!*_GI_MRO_JFoUF6aC3tnIqjN7IvMjM#7H2& z{ax&w*l^-H|33DBRC5b1EbHvTi4phaooytp`&g)M`y1EXv$5x>{-dP{*|_TZRp}@F z#|BX#>Rj~n%P@4p9!J+k+EMs*YF zI?DI=Y0~^}(eNtzgv%6p_5=|UV>Oj~>E!Jd)}`JQ*t~;L=qfB*mh;G^X!dLCen{=r z<)9s|&^mPsxAgcsA(ygwYLZ9O4*A`-Fv1TQ3los~N2U1kMD#_GY*fA;Ku|LQrKqxh zqD4VNE*63+_NZbs_1IB#p47iaH+4I)4!~3JosPBr?$;CMY3ldHPJ9ZMjj3A--P*n`Fd#<9I4ztCD@w$V=dtoHXTS=0c! z@B0Ej+C;z8j~!4^#1M9bL1TqZqvL&I^OLe3r3NPk^!N5ncGi1^lzB;Uz=ksWC#H)G zu4jVVDN7#MtJfA@?7LK5>1(o8AG}wM4%W~S`E3uIGiCeyevgs}x(=^U#KOH)-9bU0 z=Ic+)K{q|+?d?m&iG>`Lb>9^Ka)B2V+AVv1Zm;4e0OiQ=l+)G#|K0GkkzT! zuY>FypX6VzS{ONDGH4<{gJdK4Co!S4z3;rq7n0ts988}Y`}j?2;>ial0Vps+UKu&} z8kDlr|KdvghSOuXZhq+`_?R&iSXq^o`tF~fkXJS4nJ4>J(1hFHbIngX;lYuuHORoU zaxCe*JWGW*6XbC(71~;C{e7E0xrFyHHlk7V)jCNpB2TP!0)9mtYEi*<7X2QlA~3RH zsqzwW;eFZECt~xFUITiTz!cefP{Z2tYje$PCUU z5lih|*2zcx0f=M7~o<#VXUC*B9r1{zD9rX)8TdQZQ!%kxDmPx!7Ys+^uE1%ldKLnM&RE=K4wowM?lw4 z2ir*xhf?6Aa57%3eklZF>Qx%cEH}OZx&-A#Dz;G=da5gUv=I9kzjnX>JeyyHg1VQG z0(sy>qj$+o<7dgh1V~h1VSHPhCF=;Lkym~>9v!d9*i%yNIX;84N%4t`gJycXFjAA> zj9~1&aptE({K_I4pnR-ARl6J6hm8ULraF9vU~v;q?xf@xDpxw8cTaQSRqZ43r+JL& z@%Rx0I{YKu-io#ip(d}>PJajPi)v^Z=}HnjsL}HFkG_1-zfX*|A^W1P$mr;Xz}QZ8 z$EOs2*B9ht*TB+<=NXULdOo`55T_nY_gT4wa}j!X%kiY&wcXK)=aUz>)|~QXWV1|e zr#^%PDW>0TJ9bK?Kwp+jZO^7Ub z$BwfJQbH3!0FWSF1`>mhvl1{6`e%!sk5 z&On|Sx)bKAG!n20HZTG>R()+l_&rWW4qPH#4*Xm+Q`qI<^=n~o88;+J>Gj4{L=J02 z-1Byh5iQo>9~8vjP;gq)5G0lIu=>va{MGwTEOOTcFnqL|=gM1!RQg+&Xt4J=H2pGdus49*A6&o>fSL?)kwPeFK~%z0}SrJs%*198?Yx zd}P#yt*={4s8HEQXELJI9OuMnr;}_p#uH`H7}0$hIYt#l?RiER5_)TQ zg3DmeMfRdR_vQU8;WN$OG(ojSz z2$#;@gomBwnhU>|?jOAZNp6FAI3`VaIL>cnQp7exVPik}8U|pDs?!_3BQSQPLVzn< z{MiL{NQhb5=H+z9SXLFf&W7uzY zb!5dGtGro*Y3@xQZ@_N|LPI&OYfc;Lw+G0}6+wq>veGqOmFwIRKCyV%WJ| zKAP8G#m}s_P4SDKKiHF|hL27pfU&!2tIflen-u}JljOx=^}>PWn)XEPRW4p1wX_o) zq5+)azVaX3rmQt$=jI68pV)Z%*h^4fZvRl=j?Le&ym|tPR~*eiXA~lSH;Q)@GvrhI z#rfPu+z>{Q4*06l2}h|J0cOT2S!w#-5t7p6n9Mfcn=LjjHGw5sq!6fIlw@e>5=?M%>{1D`)Ou>DVr5{B*Q0;p2bf zy_>O%C<&wJy1Rb(BtrXIw0B`53o)2~4>$9}gw|fO59{783-k7ei9DJ$*xc)JX@qLU zkZgGTJ?ksJKOKm+oGS6$FPBYX4LY)mlQ z5rH$eu`K8WvNS%EkkTsubT}U;fIn5kit{DhiafxUXE{ohfEZ)CY0zm^d3Y-^hon^z z(ohr(r1N{)!PI&lJ}1jj&;BOjc&Etla8e<#ye*e+NVcr77M4Gpu5#93B}u5y`<_kZ zc5|#7+SCcT8(i^uPKVdEoo!dS+8N%(jQY!IPM2#{Y7^Z__a}8ZPoX}~$61+N{^~N- zKW=^v?&y%+-VX=}=-q^tn+erC8a22sJT@)?<_p3&bay*tTYp`7%vM@`8V=5X#Qj*g z_4a&I;r8?{iBw?de{hdC1y6xm(oJ0XePlk5%|^ISI4D3F6I?j-GGOTlj9@*B#r*xiTY+qmwJvD67DGS^_G~%+?zfAZ14>RjG+ZW!98>J z&R&#O#EM0b<^n}~r|5X(+CHm~goJ>DnEdh&~5j<-Rz0$w!{CT!>7f1&jg51}*^Y?MCD_s}bNyY|U2kf;J5y}(n5-*`2Y>b0%>`AT&#OwE0sjaI6Ub751df zLvfX;4E3{U$Q*`}|I|(r9 zji!}-=J3GrWUbYoZIAe;=@>bxv5EL;;OkC91S(_uJ`#=mOj`c-v4?2Qc0t?YJr^@sKQL7N?wlWj!J4WzHAfr zHMLf0FAyVhm_Rhdcl_#p80*AOGL?4yB@7p9kS1qSxWWKkW;9+9XmR9miXKG+rn@^H*&9;&aw6j~B_2Op&l#e4p&x0hN4y zO$MzCytEbu(sIKR`Z@NYwGn+4O+V@$9%_@}=5@;qq6>GJ_oRq6=opV3-l8yiubX$b z{ej0Z+Z5L|6WBW71>W3b?Tp_WE-F8A8o3n*=qeTYqB~72nFDWL^acK+w*sW}rhrec z-dUMdFx-QG*o>|}@->K#>-MjtdVg`eRY5(U(SP&j7f`-nZ$N14Pw}9Zi$Af5Dc-{R z-Bamy=OfrMtH~sj*iR|bxg=Ue$R%cugR|}9wELiNy{b*OFL9RyUNwOjI@Z%FvZ&<( zDopJRE*D&=tw@HpBW0L6hUxmWHYMwb*x-{4%+f9ugKS6()497Z$N14sw>IzoUe|h| zunO>wAnIYYn3kUya;y9MVNwF2nIOvAva(M+ei`M&LmTy!?~_Rf65OKg%0SAD!Lo@ zbM3Q*QqN7c&4LR$f|!#OJHii<=HX~$qe?(lf#F!^gHT1s>(r!Gm=u&6??=%41vhA- zAs0$YCbIJP%8KGCGKNjLZQPU$C(+(hM{rgT*XNHuR~lsQd4V&RMQxOAE1nVaZDBGj zb2)b-9yW6&>!(n)BJitn12C6cmjA)*M9lpW-Yp!%R)UX5z2tlpyI6F+d( zFYl1WdZjp<_|gMR2%6)#?XKrK%%A4Z1_gNSOh_Myw~yIA20nQ0M>u47*{nvlN?)>} zJmfvp(YH!1yLafA=qo;MCwN3mR{!}AqIw}uZTGNB!_wZr{IcA`Q>YqrN|c)*q&H}n zB*81IY9~TX-)XrV_Jkv^EHN1XlmeY*^eH(fcv!0i$YZY~m5JZzGtyfr#i7<|Oik@v z>r6>#ECRTgYH*XtR%Iypbh7A1BIoTpv<+f?)37y0o42ne7&wAI;_YR*s81N9&FLCl zG)Ik$5d#68sZ93MqlqV`%Ln^URJS+y2~+LT^5~<}BihF5hbPKNcX5wEGE=#L#&+GI zkt_ruj8QL9!cRoqFn4UNAaEo1Q|1gy1T}OcK!{}z=J+cuYZA;+S!Apa(~?#DWN?j! zQ2tT(A>f})yCmpwkHJ9#T=?2Z+Ea;S;fvzp=fmt<4xb#nQ@`iWkH$xjn_B40OblGC z$D%nE(AvyrKXmUwn9Cp_-PR&o8w#LnHwi|_n90-#r!8Sil9F0Fky7n)#tW#?l+&9Lo;HX`-;JCWlh3T5wJ-~!*Cxh?6N zi-g9dtl{moGVtp4B4{{@Sq*oHY%$5xnLi--mSMq3BK!rqt+@w;&tz86ZQ`|029fpIlulGIgt6NId$*Xing>RV`?3i7J?Vzm`Cz!Wu@}lu%Kbo}q2&Dck zGV|5C0^7*`;Kqkx%oX}zW`X)6v1DF^J#EvM)P7`N66*)-!em&EL|3@v$N)aQMlQ}l zil(I81r1v3Y6B3*c^Pet6x2yx&VMeh<^8f((AuKKM<8I4bn1(|K zYmFgucc1`>eF9Z8Ogf#a&fvICi7^sYzN1pH(y81p3cbe(t|lXkNyi>?6cdkwP^Hd9 zUd}{wy1Ab2a3QYSp97ayJ`k7_*xeOTzPIoRH<%2)>*0gp()1>SD4o|I1MnLiBt*Lu zNDqH#`2gh)6B5bRxr4X~9-ETQU3lD&Op%V$+dJlkO1m?rLS zII~%m{hUrcI_E#LHpX|#%`Z*VL^eb5(H!as065lMd;JpX(0=9Xdqy-x+wE2AlkyB!~-`wo*G^Gs~4U)Bn#|?FCl-o*2$yvn21c<;?7<&oWp%993E<%7?dD z09W#F|ISZw*6Yy_s-NpfHNp*;9ttMm9@^?t-xtap(ugPe*4+IiTW*89$G1D(zILcv ze@JEx2=MpmAoL~~GE8CvBaf0N&`>u2iOVY~kj|$&e%SBoM zg&W(CGa$rm!2-^Uu-;jQ2eo=zuHsB=;{V@F@M}qi=Z=V#E^>=kON8ccCaZMa-mHGJ zhEimoG=;^Idfg4W?NGc3|Ax*2+_UPf!~_P|*O*w$Two=xEN~zUGc6csZiPrOcZmAf?!iDUiJjOmRs*J|;fn8&m6U$e$z7HnqAc(TMt-;c$ z$9yKs2juHk-f8Rx`0o3-v|IpV9ioCEU^K6@K7)4#?gP^Beu;m*Jl`o1y8rDUr6ts` z77UgYBmF;(MfiUjixmbg0e1G2rQ7rEa&=vmt87%hLgNqx&WoC8D1MmFAY8nmLyFSL z&aUE}^n#*KmCTdL42Qs*3s|x)hpCf^pvDq!y>o_>sU9^9S|2hJ0Y@lK64+`kV%L)| zX@vM0uwvZYTG?y!va06To*pp1U5kPgs=@+Gvitn!raO5NMyydb0lma z(=MQYz3piZKVLu&EGt6M^2`hz&6X$7Wj}gkn*#Q~I=bzVWR1Cs_JIG1OXzmTXIStv zC0@pXFba-9fw0tr)Qh=FWG>}4Vp~q*ZZ}xZ#?u?jO&M8APTob)_P%?Wf%7zE(%Ypb zNqw)S%K2@~u944Hc)_f}G{pm%B$pH?Xv)bfQE@JS!=H_7Vh-kuvRX%E`JVH*N?$)k z<{C-wX%0FH7CL0A;L-M3mf?ZspCqP8Xs(dR@~R%oUAFFH57+_8je3ta>nrJ<^c}%% zIM?O@Y&3RrsBxR1oG}l{|@}3xcghZ{WQv4X?FNd;4PLBh#?a4L~=ilh%e-S_Y$_l zabYEmUreTr93qYoO&LwQcU5bxcN5y0H|X4lg!^_(G28BPWzyvn6V6_w2|_=A$M(Td zdZujy$mv-~kOkMr`%a~p4Xe7+VPJLs-T*+D&{&RW&#*x?k0N#iS>zK5)Hz#jPc6?v z9ywE`ys9!EMiYw5&AMwOeTc7JQff z-7oUyR0lOw`tPJNvp{Lik(C8`BX&Te1omo04{<>8^+11-%ucYUOA4bSpRj#~RjDMqz&`No72=M7b#JI3Vs&yMT@|Ep<$O#Q#2*11J% z=e@-8#rkD6=u?A0C+I1}bIjeN{F2Y}u-~RpXGvYxRM_QUmr~OYGJeTJri@EwB_!J;; zQy(=(aPHSJ8mO-}o|V%Y_z4}M7aiOWH`EA6)_ro|q=u$dP@g>0;4x<9U}NH2mLG|B10lR=An%{} zkL8hTlf2qcM<+QRj>7dE7>s?8gqV0OI5LStK6 zWG7M3VBt#al^t=DbbQ}8e!drbD=Yf#j*tCra{y|L2!(xEmr=ja<*IjPex;ac(a1)w9;9s^(; z1VC=;pfLy4=T7C2*y;OS`D0Fa+=XQeYrgJh`t`OW&^q7Fbbg%%k?IL*O8P;7;wpaE zRY;VVr<0PV2*K?m09(sHWsa}nDHC(XguVoM4Xjaj|4Q>|LR(AvR%iKY3Kmbiqx{u7 z))I>ErM1cx&8gfL3QuAZv8bLn61AR@0Xh=Mj>JRMq*vT}z0XFh;s=zDjjaU2TL?*}FkWQUTB#Sl7EzwagoCwOP0R_#%|C#82B2(*Ouw}ds!dF`1=(d`$@1CI7Oz;CP$1||+l zAG{tLXH*n~H2|x%&?~8SqO!YRLVQC2_ZxujWH;UGkJm%zHMc1FgsDXJt^ajD)j=mDLQ;tc1f~+r4l77v1yW#I`20wB!+ibRsHudMk?XHmB*gp6 z<>V*^A|OOx`8uPQN4H;|1P$JWmKvi9iqf2?sC zth*M(#o2d}3G>SG<7^ZZQ2U1l<(UTc*(ag0Z+U4>z=H2}p^URUHU052t-;ct$zIB2 zlG0QiAuh{`4ye_Y_f^)p-3CjG4IJKCovy ziv3v?s!~x%Syqzfd6eY?GM#qpK&9P}Nt|RbGdxMS8+fLz`mw`WH>~giup8h0p%+op z2PTT)Igq;kPu`bpj7t+pEgqagW+Ty8QfNM6Cr9YVaZBEJ*_72l%?n2gQ(U>(3<#oZ zf=e~LB&&BNxp=JM@7Ju!7+DSC*NVNAG(OMK=TE#p5ae?H()FRk*yK{)nZg@GN$A#I zb_nFk0Sf&L(szsWLd--5v#fyU25AFj+q`uccFWxhU|gW6P|)=`#48+?(j!0`_^U#+ zVY*^hxS4<4o(?eS1o6O|43mra>mSO1YCbV zneV`3?9eV${5{Y=aaTjK=2A9TNeQ4yDyGf|@fa0@8|0rX3M@JIZdGki-yLabA!IuQ zHALXNk_V2ZjKe=*E1gKiReIEemX^Im<2+q;^L`)*+4a@%|OtMOiL zd6w}Phhtt4rF7DZPkF5H3eZ;y?%3=7;Wbevu-LY+@&QKL4a3ml-urzghuX`OmN#dWGxV| zG5>2VM8c~J|H}vWM>m84k2^n)ud}zA%x+9FI|y6DhZ`J92J_*K#kVhS?McXH_Z}A6 zFJKS&3Yp}-XSMJvE>UcTl{o&%J~80kS68~qbmb;oxKXp&-69z>czE~8?G^* zOYuv+;Kz6{mY~q&!8=(Zw#&e0cmH4n`QO4UzUMFe1LCO1 zA|5;`T{j;Gsg?O!*y;Iz-`B+yV{PaEhY`qc58z_1u(Y{ebetWP9{(sNv!&C{xW#Di z)=9k%lIeiDc2SUuNUdDe*0to^a{1yN$A-G~4&Xn?x|eXsiVkwnK_qo*%60h}#{QP0 zlDm(+G&VuOC@Twc63mByw{gstGbo_|`2$|Uhb-Ytd+#)mBzdg9^;;Qn%Xkj{NiQ_# zWow!n?Uo%p2(`%GQENDI^zFlV47o!)lm~MI=|w7os_FlwnuBAm%y``s?q00zu#-ta zj`1v&GEeAs(m{Qj@q{KOD=3|ykOuM&ki?~2?Q`hzZ!Ykj*uL&^5OQsQ&+?$HDZ zanMTY6V6I~$exovv$5W=LahDB*dqJ;?sW31Ydbz=u3AE*?UCKvt(f->7>OLi{pSzedVZZSZG)VinH}-R6sa zIq}5eUAdLL?-BD&1P_+*hb=%lCcEw5Y>5GM9!B_pA;if)Hy0rYSsEa*WQ=-Jx))~$}Brm0ilN-N@vj6h?{oraf zNCY0(ngW2Ngxrl+$z*qN8XUqHHh($#Mev-Y4bvsS^;#YXqq&k-5E*o=rQkSTS+pxt z$I^MMlPw&}Ms%xqYAGrr|HwaSk_`lU5q}cGedxCq^1p^5w1z|&L&osww1kNTBL^M? z$+tFrj$&kFeY`J)?|c~_6B&rEa_R}Aps_O%0sw^#?H?~voV)%6zIm+agS;Hn*{xK6 zMRl;Ro^z#LAcZr@;iQ}DOj=9j`A*COtHXG*Tb zqNJm3&WYpQFDcCMYxAdYXd&zPKH;N-u&*OK1cgA8$urn?vgg^96hfp{9aN_CM{4<| z6PTIxuhhC3OR^>VlT|N5Uj1a@&9n--k8by@8|kb=B)k&QQV_gwY1oSf?;~#Dhm*}y zrNu`ja}NC9Qw!L-4-fVgiY`4vSS|hG%|wY%lIr${bS$(MfnJZ+RA`S8_6=+a_uGFD z#Ye71y{mYd{o{QW{t;*3784xhz5t-Z0PSIE^PCx!1};lNg=*zbNJt(gM?M-`jWW!(6=PHf9)BB z;4&vRceF5g+87GJ|lk>2r&r_YDpQMoJVzMbN$2P{Yl)yV7>e|S|a$jNkUt1Cv6Qw4)mehFmR z$*mv$l;v5<-FCl+0jzuW)jU;^N}P( zEf49or{&?yzm7p_k;(0Wk>;3g-f-Cyxj3gG+u*YrTO)ZCA zM+4Ry+=jg25kk!@QMg-gX#PO7v~^VS@lEc<;bF2KdSlM@uETnj6|k9fsPku?kE~&h zubtNvLnq@F%a_r5G4$uZUI`|Foi`E|Qbb zy7)rvB7yQLqdDi&*LtZ@ruFK?$idMnbn%~dNoyE4y&1bm=!7gip!Qos8H=N&`!)V> zyIIk26q1KibX(CMY2e?0tycLlb;5`H7cfVbT zy%Kxek2hq)ArMr+Q>=1>%gASG1j56I9Hr$LbBWEL_F*G#rN6Ivh*HMso;Xw|p!9Z< z0rET28GaID33{{G9sZH1YI1vVW_hQO9g0Zh7mkjhPP1N`0xug?xcM?PN{E;rI3}}4 zdnpmW;-X6o`p6Am9ySv@GNQASY$NrRnod(dE-yek>)?zv)II`CxPngiN3ZKY2={Mi z`Wlf0t#h1-cZl;NKN0aR!rs8}c}^I{__uKzHj5-3a!V8f{sxoElx0FyoMrPtrYHz+ zPz<;2E!yX)flv7k{}6TY9eYN@nlwS`oexIz3XDfq@d1(S(oOsB^1+GwsA(=-_3dz0 zf6#z}=OM5%E-b$Aco0g)J2aH$URk2uT6NE~Fm3lud-b$0^*uegcZ%26;MfqLdoQ0_ z*JCi48jG(&VB%Mzbz;gkgF=4)93K=Xs;Kmm1;#QG;OC=ux978 zRl(Q?v9tnfg{?afM_PqMkCWsVU5A}jdC7QBKj~vKeE-5TlFVtM?de3g${5urv$=Jd z<&hF#B$TVvU*!b}e{j9rK}OhWx8D!q3$;}2wC0gY`KB=XN)75lUM$^dk)(?B=7Ubk z1lngfEchSq-@pdn%EpePuY-2SYHP9vZyRomamJ%aEd6l24Fsj1tDpG_O2S}_h1PO; zA|I3g#be$J*{TMM1nGULWlDA?$5bLFoUUjDkh|8KH`&G7akIIhBX52jj@w4)>D4O- zF}aVQ65d75ly{8DVP>@1J(?H zwXi>yqNT-k#0OIsp^;Zs6ee<<_{}}W$}1t$cIc9za~HxOZzFhN{j}}(+#@_HAby}n@!px=acFnR;H7baEhD`E zPchGD7h&+wyFb2AU`@s0zQt9+Ba-p;>{PW}r2Yl48AFrC3T`{TVjP%2DYfz2LKL&9 z9!~l8WAtT#fy($p3WNQ(9{gM%W=_EPO&?#5?g28_KVGCaVPOw4xB(6QT?&-=s5LKR z|1#OtZmr7bUjxR-+NURd5@NB)i`Th96%HpI_a@8DF5x-yr|tQ~=N~Eyf=j2aX46vr z+oG&tqK>b^z+qPBr9z>|D5xJRzmVUkmgZ0?VpI^V9>Tojc4EhTQ0lRr#VY~wQS&)w zOKI4e|5G+}2icd3_u!(oJxy5R?4wJX%UiASy>?}i)K}r8{AdxR#MotZRId|a8-t;* zTOpw95qs634^XCgHKO!Y&iLOH0sZQ{x%9gYlZDfIkc==L`V}crL2X~};eBTIh zE3s*nbM}eYgvc}4O;AG2qx!^_h0G#`>A5~{nc_R(8XnNn%U{zuOE!~62Mf2Qpk>-K=Rl?r%#Vg2Y&pG;BVr9oT$ikYm<($w1MX}RS(AEz&=cMGJT{HRd?wJ zifFpDOTDss$nC2nfhPGaagdI%0t>@Vm%OWB?>@41SvQH2VH**CL*>UeU&&@X0ht`WD^TH9h% zJ)i$7FUiNV0fMUf_strE5O8&26Vv>(t+q~vM!Jvi;qdup%?LCB$NLK6Fhy}E+q=@|&Y{x#op-&8xWNVC+}7zesCGki6n8k@dqG3MUv$t9M3IclKHH z@pQB}3kbMm{Lgbehi z$}bAyZ*mn`a%p(wG4Yt5v$A@OP*jz>a7i=WZ+Eer7vqwT)WJK_YiC*?)fk(pt z9^0`F3>m>X)ZQWxE~$F5d5BcRUS9o$3i2u4XLE_@5+iTq0Y8d;8ae7)*YS$#Y;_+& z9O=hS)!OzE-nt7W+Cq&foD(D5xJJ4wsZTi~CT&^I)|KT1+~Bx131%C@zPO7K0smd| zpetOJ9B@Dv%fccNv314B40u|%>U|5K+-)V1(~rRa4e!?rv(<=eZi!hTN`q=ZuL5Q) z?{gNI|LQUM#rrHD{qY+*y-4GAmc*D;I#kPoKW#y-(>U=?sq|(R=hU6=<{c%(m-HB8 zkHXe4O-1NO6;`;Kg5_GjN32I!?yU8-p%C~Q3d1FL+8C z_8PokSbdK=J3J7nE0kbEDb0Eim7i!;IgOdpxhzaH9-=iButF{4$UQnX9+ToFj!sE- z^Q**vx5AN((fGZNHcFB{!Ssv%Y#{A>DK`6e#2-3u9ra=+;@YFtME~J_c$nyddJE}< ze&4~bYe#R(dtJl!Ej_PwtCK=649j7TE2`2y92en*@}Xo<`kBfR{%I>-{4jBV>(K97 zi9e)A$-739LjM^o8#+U&uOZX7AxdZ+@cTC*!#&rPdkOC4^aK=t#_SBpXjYfjOQoz= zQJAB7evC?XZVuu_Jj=k|(1AJ1!L~Zee|bfy8KihJP|LaGMQ(rY?l8l_dF8K+X`GCq zFcIBMdMJQM(%uPnsC@|}o)x{JX#lQurZbyF0j);2!sgxenZffh&)Ums_4@yO^@XSk zf=~GF3&ns2Pl-M+9quOmIVD=HRT+1+ZslGXX*2dKwJ#w#DnK6S%eO&$92uOp4H(|#BN zax8Id&K3y*PGz(74E|bd=u#MR$-T4u(OY0~9;5+Yq+jPx-6$##GyxHOs0!xP6SNMj zuI~U0Ph1*)Z14XmyW6&Es$cC}Vr@HU8~D;^ySuK#vRSanmJr`*~wqR&`y_iy($|zp106!_0XC)w^>5ASgy63G|r!W}e|oX4Cmm-&1#3 z+F*xTTH9DU#u5S=jFuvMG4I<{A1KKCy-xb^PkmV|F=K8EME@&ghky7Lz4Z>_Dxa%W zd860c5Ygv6;_7{DoY!&)fz(7FJ7bY2l+@mTxxPz3I=M9fD-wEqblTHi#ky<46u#o^ zpZAWs2j1oU;mG5($*2UVlUZ+KTZj)Q2sgyWbYBtJ(``f+`DKZm^&3h4hRrznAZIkU zw*Mah{y+i0hdNM}$WvEG>04)ObkpAg6YUT7cj+Hx@}Rgjlh$3QOC7HFTekGe|5(|6 z2!Qd-aSLjEdkETjh9OBCOvJ})Ct4YLb5+K!`56c+#(3I)(pP;v4zUShO7pcq37->s z0_K38c}Pv?v4-?P^?kcuD}$|v7`-d$Q%*fse*cxfEh`UQ(UtXUDm8mrV8Q$a^6KZj zOfGrWi)H@2uKpePURl)p5&6BNPn|ujJG*MyJOJpj{?eOu^9Ded^$DwkiBv3*qmJ@; zX*mfi7Nl#;%E@=9F6l z(hoWm%b`2OF<0>VcgEMR-)q;8PS*?g^7=vwU0LW~>Kl1(wE)LJr0n~VD6h%mp_@1N z%l}-3uLJ0t02s6w#G%+&Rz1&+XwJN!C)o|-9-Aui`Nr6)1Z!XAaZH&r$5CMEkC-X2 zQxeC2=A88P9NTvPi3|*GRdjcjg$owSrO$o2y!@FLcl%1^5f5zKX~PT zmBW{>?1SA-8=4=xn1aq|9so>1qwY^g{WCq?{Ux;hIk+zL<;1B|)k=FO z8G01jNg0>&cqUDK_*0B9TMIeD{5 z8+5iPPm@D~s0<7yi#DsX*_-n@3gm>dPx_s=Ng(3sHe_+}XBAWC^Z+4cwK}NUEorW4 zc-AT>MItXir=0KjG<6M~iWa~FmUrL>7q!XLIIxl6{WWsN)TfH^uFO5E4EWTGDMkf< zOFVGC5x++b;cGIbq}RlNECESIqB?>P7n10KbE zbw@oYbc|aG41KhzVDa6b<5VGkR%kOyoeLbRpuf`duw5_8>p_&^4mr}2r(F7(Q?r{B zEl`euD93&$k83aaNaMA6to*UZ?v=k>dy|g&y=mO*aKw=GVVT=Ek9V9O6qJG`*2aIZ zC1bMNZ^NjKSlDdjD`mWjzs5Da$1^{3@G60ajdrM=2RkryoBV(F-ULp6vZ}ftKi#v> z;0*h|JM4%sY=bBu5+o)XRDSLnqkp4G4AEa={QZ*r5;UtxL`7tYiny?eE8>n372|@k z$>PAk48sh}470C2Gu>VP^F8-|Z=HJms=9iss_wq`)9;<_d(OT0y!Wc_c~$jl-S!WF z?Z~$OUi->lzvVr0(0F)%U|UCKFb}HP4B)|%fBu?x%7SB`->ggPaot^SmJiH-UF$oZ z*gfVO03CLGdwY93`$;q%maowo4i`%G;uY;>GJK&gQer*j0*pG!Bc&|x8OImuv=w#0 zdYzXUr;HYT=m$OKb zc|mO!FY0*CLKm)ogNmGe?1tp(8NMDs2fj$Xj=X`I-1+!Tx@6cGW}x2jDC&8vN$U-X zex!I!22bksWv}Vf;WeDwkw^B*^~W!g{rfkkZd38i^B$BuSmhz|S2oPiT^9z$>8(t< zo}+A7>>$Gj6wRCxF*8)KTYq}Z8y0vqz-BH6QXw|H$FgRB>;Kk%w^G$n^w9kdmiN8+ zF9g5go?Fg9D>5)uulGNG6HmVtZ&pe!q`)usPa z=yunxU7h(~skJ#7m%U+eg~mnJaHwCXaWO`Uc;w3{3-Y3^OwYv~u(X#^;>xJ^E%pid z$Rl^?0xZ0Lb7UvE?!sa%6xAVDma>{1-*FGhaCu;lclCXt&zk~R33hjD(XJbod|Z60 z1Dt|R_th4TQ;>o8vPRG_)}QXf4UG6z19iYn0^;$rfUp0CeoMA5psVpSH{1;L^iYS^*^~0c4t8C+g zUW0-^R5r-$**LdwUJcw7Y5Fqib>PbyW0u*nZv18d#}&;VU-FG8UW;M(uhB)>+sgRe zcdy9D7d{~`s;sUi5W~Ud&-ut>sMwsT#?Ph#W5gj0!RdO9I>@kh>1x#|cB*6S^mBpK z(-!@I;KUn(2)Tay<@&RK4}$HuHvf<#7nBD-W|7hqA8|y?I4i{4O=2o;*21WC7Gdvet zz=9{GzDNhN`y!r2J7SP0Wn7OZ&Qs!=rJOT=@n=*vhQ*q`LvIU06x&+JheaOWwMX6* zh7}!Gb(T)Wg(aWmmNpdn2^Qb&x1wBQ8$}lh5eoJo!;VncSqF|nPcI#-N}E>jJ{IDlF|O3em; z1^QN{$xq zUr(mKNb&j%9bcyhqxe5DZCbay=d7pY?Uki^Ub`zGo!r&)+?z3{gpOETU(nh09gW1q z%fJBCSqv2*^ECmX466)v9?y%;Y_Z>eZM}EN#vRuoT*tK&jyz7@`}#kXSue0_IipEU_V1QLNM1d~6 z>uSpA4{R7i&?*Qn+JFtQ0#!W>x`A-P3Ee{~9QCZoQAfd&+i){*>#Y^J0uTO+M*wjw z_h4$(Nw$o8o9E%CvK=?Xh=(VCK~%2shk*@-1Pr{1s`qNZsZYEz?2}<&3v;Q+rN=Fm z88ezMzHnXg+Vt0AnaI%;Mrzk=d}|80gpD19>qreMCtCr32MlZ+6PSKk zE33A=UD@~(wQBE_cG_{L$h%(sNBK$ropL}X`8bX~biT~dX9GO+#BVz<6J1>|kaPF? zsoc44N#_l2e2pl70-(c=S5Hq*{t7?`91|>#xIii!4(+7Gl*zC$7VSf!z5pOUUg#;O zY}17xzK|W?eaDI{t=fWrE)?^+x2N@oa-9n|(opzgQ5n!KNYGg!AKsV3Cj@Mf2&~2A z`&BAyzz{R85Op}V-~^3BGmQG8g?%5Y#m=mRmmYzozXS=<;C7kIW|)Vi$W2V1crMsDLf13V8ni=yoH;At;X-YjZFoB5x@ zPmrB(!VdZ5(Z7{FWJ|hM{OOj?dkjj?d!C8Fz@~py9WdIGKQQqb9?%184M7+PF@bX? z^29){x>V%ZZSR+VzRH^D(K+OW`g3gWxcCocN_T!gu5*q`9?AKqpDS;D`5W~)9vxRE zcF9!vto+Rp`{biEvJ7%`7?u-RTH>)G^E8x zJmfqs17n}2Qx98&+D!vsf{Z|1xSCE!k;bPs#G)OPe&Hc?-SXORSM(Vku_FY_t*H$B zAFGo1c^8iAIuQ!_UHE7lvgv<5lNX zb}j^~?X7=*U=(EETLz8WOB#IqpVv8pFc+lMQT7yk*=B>uy9u8Ge=hj*qxc5cVz0gW<(ktL%UPn&1;BNp4d;2fWZZQEoo!m!THnvSWJ|o+A{e)u2&=X3G_|5aMgkyS)Vy#v!`k~@d&desq^<1>+;?LgESE>fy9soMv z!aMwbkkM>0sUbn*VF(87!(jm`;Shx5v3Mb9^0EG+A58XraKyJLB5O40|NcyZXQqh^ z+;dMw{^((SoZ^536r7<>MFCWr>~QR>_H-<9Ahh{VJT}3gdsSFW0|wa+V3ZAyT{=G^ z1~N9av42uR6D?xtqYmdByHWcuFW8|+E2H&)e9WQ2j(!aw+0;Q9sCT@IddO&vD1AKT z|At1?|DWJH{`KgL8Qt@-XOE<3P9MS z1AOfPe^K@X{jiZ|pQcvU( zWwKwS4aReU2Ap5W74?*hlz!AxE>hadXfs%1&OLdvp71#3^~5)Vr5Va;2w3qc#h-0_ z*FDH#F$i4nuvHyIxW$->s2+>Ueth(QKfb#k-odxh=LlrHo)1RLUh^C2PCa#-+;H;4@&f&p0RF5Wu7}jz z^r;uNtycF{IVA8LG7 zWu49%AM+0HxU(>a4m=BXq=y*%ufbZ*ZWY8u9kOQ_=*>?VG_{A++WYi>kq;(&S3mk& zO!C2Oi%qm;YSbrH{+cp;<_LWJ{(jaXy=ZoXuJyXG>j}e**9gay#CVZFj?*zL{Aw_CjMT1A^|cJxF7^dG^t!Fz z@$a&$|H*=9d&TD;b)vlfrI)mK5V`l9fgxr95320IPpnLrXhN@xMm>V z0BFr=kp7Pi*4^^u%kvF@!ICu2?Od!Cr$IdzX|z*rM7eMyrflIx8>qKau1Cva7qNrI zd+ot%(`pV2v#`)p1}imN`GwiqVo`O5feJR-<5k3Wm_m%;XJO2anDN~oFsic~2;gCg zF(6ul99&4O?*TA>RiHnN5B=kN|A+;`afGplE_4YjFaEqfc{_yr&M zqZQ+J>66FLSg=`RHTSMRa6@g3JygGpAKw|^xl%@XPBfx_e0^_3{p))p9ybO~Ic2-t zxZn|ap{%O8o@y_4%{ea?ra#L58l=f6?UCXNF_xE#3e@5H+u8T9Y~FE8O^9|2M;v&V zJ@BssAFS5y)a3rhK?Z*3%ooc`^x=RV){d8{PhZ+$V;UF3$u|Hx>@Yp{*khgd8#Nu4 zqfQu3aY0poZ%p-YMLlG+GJUIb^%j8W-!J+od+Ntn7U$4IcgcQ&ds|$hg~gjK;4pDz ztZ0ghIq=vlEmapFLxcjJi^+6z06@h64EGooT0)JlQAD8iTea2{b5H}8#ujn90@2a>Um*;@~>-)P%g7bQ$35Ehk<) zFT6}1So#h2dS3P#4jte5r$1#!^(eu^?I~_V|U$k*XDYFte@B!@C!A} zl#4a$DKiU{M@qSvLmcp)mc=e&=uhhXJ@$2fU2EcE4j=i~S?E@?xYLyz7H_7Dt2~3* zl@Vs0ShX9U6v3Vf@#tUdBf)8B9Js@%8%?H)4o18IP-o+qqYAEJd>ZYdJ1X+4UwMm} zC)KW^3Hs1A6?q-S416toyIUW57cL8Q(ERW4s{6J^W*T zU_M|BI5hSJ$Hc=BWpmRVsOgkJe>mqj4p77g2Aj3YF1hf;wW@FY?mw`=)N8bP>SNaP z%lgTY0e@a##$NX4Ns;%j(XjD#d^i+00=(ZzCvBITPk%&SS6QaN1lw!ZBrXg)%k^5Z z>m?o@yM|Q91~y%z5a1N4zutg{43lAh6t`v9ZTj%Pd!gxw_MF+f$)&IR69LUFXJ9;M z0Iv~mf5n?+{vk(p(lqAE&T0SFNdp=WW3kua@i5R193yk*DfmVkmafGOKmO`VIZvFlJ#(N6hZ+Z@!>}g+rU%$Na ze~#7*WSR{LwT@3ysD1Fb!0^#QieIm?!6bLK|Ievn`7j@_? zhO~>@&}-t;r=PCKTfQ!`RA1$AOnIFA@kLgcKiZiY z^NIF^OL-+KP@mltFGA>I`e;OdUtZ7nMx%i`0HLyT!*%QJc7jA4V#9WUESI+}cqYAj z%6CgyEY+jFkOI%*%v11w!>}N;ktd}-)A5x7z7`ipU8bk5j6&!2ltKA=P95b&l&|^p z_t>Isn|`+OrU&+wZ&nV_bF@3W7U+cRGOM1lX^On=aS?$pw&aqSfU8u0w#tgl7fN4c zP0^(-GT!n3%QwDT@bUlLat0=T{>3ImcLp2vrZXMr;h`L zXKo#q0sY6BzXs4@$E2OZDK6e24`t)nhvL%+TP#M(utiKLX1e5J!8@U0L}iOQE1CRa z&n@oYRbx_{nNTOpn@M-iWkJ{v4lZ4z`%M6!Tbx(=#S%%;f%ny1`ix8FzD`oRY$H?zoA{TMLZ%w zSESUL!C@$8I{7ldbE1qwS8wBMHtm$dYj^zz0(v`dW>H5Obk3YEdE1$*)s`QbLY(MlxgWl3%frqm*r>MHG4qv4S;4dH8dRlFZpdq-g*NdKL~J0 z8S6YS7g413Mo4=-O22yc@u25I5@UVU^ET)^P1O~hE#NRoUC?pi2a$_8)2WOCz1WE1 z%8>qmri(9i5Eqf?rx-|O4#~!$GGl-NpJ;S8;$t~ISo48@ADSwHxl6vL;>kBuhNWH`sV=y*_0HxrGonEcoGrMrt++iu3V^Px0Vb zz(9pY498|l#Ek|Ji%lSHW(YPrKZz$!{hn8OR(9XLujXUX{(9i`Tc)E8;{jhrOn@l$a9-A&ho^QaM3;0astkQ^{}cM)zt4JjTlqI!bcx`p|GDK1OvDWAHE&P3 z^tJDl8PhxE1Iv|DW%|)?pNP30i#g>R0ArEW5ys4aHvmSMz)9-v7j`}cT--IHz&Elt zvK1GG#8OWgbl$vvIY~BDi#zK$6j8RYb1Ofr@gPFa;tukFj-fzEN`F{(S$%prQNRAVIWNLh2uGucP!Dpc9FvaBW8$t~qRIc7>?0Zu>v0 zt~V&#yuaX#^W>aU&TjK4a`!m{W1E3P_dnP^<$_N+c0{XG{zd-v&^7h0)(=I|7cOWv4$!y}M>{aknH-f| zs1gf|`Rk52Z=-#=c6RYk_1!Rir+nkaA_A!K)$YBwBCpr4IQ+qnE3!@Jh8baFF2Gnm zq7JjOSx2Seb!W#A#;C_Jp`ZDfQ;ZvbVNd~w#yBRZ&SVu}wqwO$rieQ47vm>K1hNhy zC4s+>p*;HnJ*cul4nKTHI`;>=E{fNhhR`{ogMrkPc{k}Yz;mQH@uI#=hL1m=h-pOm zx;<2iLf;qr@UJHydE_qn;F(M0+N1B6m&ppfMt9X*%Qn|=8C0iTka4|j-F1h5Z126R zifJQv*a3&itIvN$8%L14&KYQ322PrPg1qF6b6eM8N(UAY~&nW1Rsm3fT{3Pa7=~%WP%E4sg&PdE`zxMLz|AhWZ8b09WjPml!J$V_efkgXtsBF(}M}TR-gFl%Y?+qf68VQVZ>p z+f{L@ekI_upRGQitHzgMv_RDqwXR&?gnqW@AIY2pnw|2RwAKnFzUnOX1Xi>Cg6hN>efT zJFP`b>Z3_t;xo+|Xp{k*XJ}=#cn&s_`PvRT*jBITFVpY6cSYW|aFyJ0+5_@#SuFd@ zCcD1uveO-}EzXhGcc43Deb2wr)K)rEKMsxW{ZHw}^PO|c8JHXyc-4zvA&2gFaA!=m z()B0u&&Qn98H4HEQ50W)Q#*I0oi{S(u8czGH{57}3|epFuK`Tiuwlbh^XARFNU^!) z4Af)*Pg@@CR*Xs6Q}AV*epFV_UUKACB~>{vrStr8*_d3KxiPgU!_A zEiF)}Q(Wg-OpC`r&VelaYzV+m=?CHX7`{4K`b5fDoJ2KJ4b`O zMTIx$n@0y8NQZ#$q8{XwITk~9YJ90%-Zi0cm~>ZRoketJ=oD?G`KO&D^LFchn1|F&_(QX5-D>%#PydJP z*tN40=K5p#+sDrBgn@MG7;0AuojS_S92av}MxpcDkZu61S+nLp_S$Q&S9j*L^QhXH z0W6Hhq7~y(_7r?^^9wxiWt+bVz#9O-U2)ew@&nl?)pM8^XNQZ2JoH5wx|#+sKvfci zxc9LJ7@}W)jou4%jyN2GLVaa}bwfyF300&9b1}>x@i{3{_G$f81i*cUI)J3#@Bw@>&es?Dg3A_ z@fd+VNrw{x>K70F(qaS!U5i9Zr`Mbw% z8jkB^@Zr*BGR$?f=g8cZQRw_Oq#FRwJoC&4_TPX1{9k0Wk64a3AOl!v`Q~Nvpxl53 z?-y>Ap)1?`4FK4A6JWDG2=9&e9<5hO^`nx1yqH2iC|p8O<;R$KtG0p!KZ><83U*A> zVn<+2Tsi{kc*Y!{Lo77{$_A_zw@^SpBcPrfP=>R^ptv$9o|1i*THbtw$nX4)Xi-TN z1B@-*ytyLZ|GvoWt3`gKlS0{VY0_cXxMTOsvDu*GFq5KWoU}y>7qE0vWMK?wTC>r?Y**X*Z0b%-%{OwzI*H~fA{vk7JLODx3SN_uYY@=eClhTlfM4G zK|6cN>F3I8e&?0?+Raz#L0vLn1R40$*FPt}eCXFBh%jodD`fhtW8{4g&}WlLq$;G|2X|f6BNEGz@IMq#=6C=kz*eT6uSWsF}twSW+eJo z6{=Sq`bf>3l4J#KlGK*4F)sQwoyy4-@eJD~KUenWOBM596?vKJPt#8Z9CM7wvB!%3 zvV!k8^)hT`+qQ~4@PPJrzsNU#wg1O;5Vml_z-*u)bUYQJU>4&!w>bQ&As}rJU*HhZ zavP@*KUfej*aHU&Z1e#p!1u5yRL}=9kE3_&TrucW&u_tYPKROwxIQs98RdTR0$bFO?sdSCT|f+cEH7!{1GcDLu`tn(o2%{Tcd-ci)l#Jd3EBc zk7MOLQgn<%G4U{j7>pf#flVp}eoN(VZP(p>>U%G&{c?z6k5!w0-Vcyt4-Yp74m(Ug zrOzkk0p{AKO%;6(gQRWAvmyv}uZ|#mdk;l|DzxL81(V7w(rHK72(1njIw;Z9C(SYH zFrTC|5EQ{Z`2|;t?QQV&F)dEi1#qn$rkcJuF7_Agz}dJQg^qn&ztPu^5i0tKpo6aoRaf?FY6}|T`!TSa3f@T5 z02V67GFyy)O&^ZS<{MmW|CHjED|d%(l_k1cig8q=TY)xj1d9z_b=yQ@e>9{HRbhN} zJT@?lMO!3<7}mn6kImVQ*&I}Fc|}ZZHD=m^sTv$O;1x`2kf=lFjLE(kf;j63csAuZ zKCgzEV}hPM-AKKU^-Y6P*ml>amY;jddL7pk-3C5?xDV%lnZE2=DeBM_b>u;F%NZDM z25>&{wU~6Iu@DDEJX+b!0rbh60PG(=^z*vn%>d#^mu`7l?p%HMaECl=9!~q#ProPArc9OJd*MrmOcv;Oe8cqhVAVVW9 zi$NP`*~Y@h+n}TVrDt!J+5P&KwssYItM+0=m+nxw`O3_O6~Sgw-Y~!_)OdtJOdnK@ zNjAqA7QD7dfxb#c0<0ow~cG}>FcjGC88jm?E zk9Y1X>QK=;0QMn%<#7yH{KFsdfo0>E&<}!HJg|vTL2VF;F*({TmKlS;kD;2B`_!j0 zHV5^w5HU`*V|c~>qm4Ns#>KhOR7-wf}1u;b=s@QC5533)fEGr;qzm;~xcY4_(4ZOu@g*QD?vKN#gRFq**u zTeiXXvrl|oUppFJnVjaB(dW#0jz0A7P5N4qUM3A- z@weo=KmWmqVr1v$GH}sZ7w9Jv^*K*}?QRu$pMKZ0`mm{XkEcWW&o=;CdmzgGTR~T& ze^y&-hn0KF8K|Fu;Vu&WLJ|u$FO#SKvi(=sRbcBmUJXjQz8kQ-@>h-WC?bJ@y4V<_ zXf$keh_zHTfCht~nIoU#76t>+wt^mbst^YoW!NaN4~wB{lMRp{RycEvJ_db%k}f)@ z7|PHFoo!ABBXVcW0Zm0&jfn+AJSpw4af>z(8@DnR!xV8GYGW*O(;dty@6jAxf=zYI zLv>K9j19il4;7B`Qx*VNfAj%WKlFpf^M$exI3RWeol#k-&t%x1ZffED=DE#ty+~pA zn9w`sH}FOpZJ@N1_qNRE3=B1Y12~_2qg+OL?iHy&k9l4@yk0$B~}hnKLdE3_`~0O zy?ynfKB^^_=gMRA^DnCvQk`!A6cREoPpMVWq=Dh_E?mu zuSbb*hGGE+oTo<}wL@O6Uj?v>MAxHSl45O|E*>y6#DUO8wXJ1UX)=w9HCA_^))GU7 z>jx^eTP(2g-FLY7xHZKl4276fnNRff5bD)rzE=36UsHsgFGkHCpbinbO=D5#p->e2L&bmY@!Mp7SO3V~3ATxiV0YA^ z&y_PyICTUOvTHLLc=DNL^3j{GmK{4s_bc3AyyL6#qkHaZW(XNGf(-06Z%?`Cte1=+ z!f3g6y??YKO_VtK20#ZM$!~xA+xZ4S2OgI^q>uqF_KFl%=-7&OF7luUU!-q6YmLm6 zZJ`#^BFooatjQREo0T29qs{Qx#UX&DXsU><2^=wq3k>2}98hCmiA`my*e@*h(e3R3 z06+jqL_t*088-SN4jKzp`he1AcI>p7PIrijmhg0liZmVq0EUmsP|?m$L%?i0HCkwZ z*bgWG+I+u^LCV1}jyWI>nspjji&cneu!u2Yit0GoKW))}9J+K^>d{k|`;Ub&)r<=O z>c~e5f@X6C27>N528gvnkby@ZhBGHaS{&*woBNnP_)nj=P;yQe&vDAcLLTZCMv(V8 z17n*3oR?@rJwNN=`TAc*8@=OSv~BI%F1I}Kow1$#Akn+^h3NGcUNQ(On@5^~r&g_y zkKA;%^z7(=8EL3e{~Nw@tNiqS{KighW0?Vb6#zE^+T0e%zs|p~&12}O?%i^#qsBF< z2lKt}eQ%roRyv;ZomfpR&N1V)Uya8ojSE!{^^jXwBQPrR!#B64q?*G zia+SUE5TCL@K8|~)~~U83j|nfZ1klM-tC85970WhO&Hh1rT&OVAB$}R3VlV^)HS;} z5cv5%YdTN|^jnNk?2BVVe9J?enCan+7UNiawcEScN-dV!IF1N47w)X^hJTEO@MxqI zOvX+(K*7QXywS+hG2zvYW2^nso>mQTsX4iF+L zjYc4K)`g1+C}Sdo^#>(mR9UJ3tMVGqppi0G>^8(RkGNBV*|I2M!Gw!?IJQrc)(j0B1Ke zh=~S})F9|qj8BYFV&D`F7SidXTK4GLByTwRnNcnN%dR5~#p@}9=9V)sRvExK=Nr#K z>S(9F5#>!@kKzA;dbIe?KjdA~E7vc7`WlDO7P{N)Ir0bRzN{^MPnJ$su3ar3x$zUS zW!u&)8^?{UM&A~^cig)M8|ZWZvb@6 zp|F8)ZCTNu0?ZEr?5txmsYk>qUgN{WlX#mE3#Dk<5Fd={ifl%A9=0+?Z zFF_e3DyXLqI)N_1R7i1@=XxGGV$eH$pz!vnGQHV>i++%~`9SoCFMYtXq0clPKK@u6FCs9OxZ%&|?ez^vT~JuvqY^6`bqE zbGV+|%yr>07y;yZjo5njtj`%h26%PCSB*uycVFRJY4$4$G;;Z<_Adu_NDq0BAZ}88})Q;9`vNin7;}FQfEphH^3J=>Z4y$=gJK8c-WAE?!Wf zOp3kI7?mI_B56u7RKdb7)><)$5_Pl?-YLecfj5tvT)*6kf2TRc$BcvWdY&3hfKd?4;8)pinT{5=n;N$J{WvyIv z>bmsKX0cG=d5m+PJZahWfMG!IsR@N$vl!wE?pe$kNEzUHm=p!3Xs66`%gfF1yhecK zwLo37^tPpc|1D2#Sy>oq>qNaJC$E3$CFxpiUC)!Fr}djRSn4iZ+BSxX-to&{c#-~e=G=BpQ$Lo}|JUstK&SLwvfS&Gp-t{_Y~8vwKLcQLp8_2} z`(_q?jWAsJ)ms$4;_QvGK#MIj7H&*Rl9fSm#zGT+6gF(B$a8l1t5|I{f~sTS6b~xs zA}+y|F=)hFKo}uAd@{qP8{@`$k6{N;j>F={9en8T^%fTj*rNeB^2zRXz)=R(n+t}w zU7TBtWl-pWi*}l9e$X3;+DKIiJ8ZNQ9~2I+0E?{@pUy}*2M?GJq&(vQM; z0_3EBgH1vGI$!pIevO9>K((6=vbLx)zFU9t@BPOtQGE5|%sj^%6*k0_`FWe?twY^W z2N`^BIRov?K=B-;%=5Gn_1B2Uc|HFx6zRwB`$9XXEeoG_njCr1;cXqmMD2XzmQ7at zuh|g(-?wv~y?wp%iCaG@k1ku>&S6a0zGu#Vm?^J5|K;tT-<$MV00*^u5bf?i-vDU$ z5vbGumMvS>)G=js&OqBTz(rfL10cQ;^@~5^xcK{}G(gos4B=7Xz^XMKHsw9`#l}Moe-DO7;m5=LJX% zS7l<5g!eJQs{vCuK~^plDtm3eVSh`0#q6 z&eJ~GIY3Ezw3YbjaSO*b)EB}*Im84%EO77z8MS_2)m6_8OuX|oICU|fHL0}C+b0nG2Vn~Ux=0R8g0o3jBAE-7|0Ou zivkvhSk(P4WH1Pf!XvAB;Oo)vl z?{Wq@F9SG-eWUDYqw^d#UKd45znd3*(|6Hw{-q1gZ}-QRTR!JjbhveY`&Rv_zpLb# zHLF_D-H`g&v1_M%?3Qa}=`+iQQPdCdi{92_{7h%R}PTqcvc2Aqcy4t)AXv6K47H<(+do)Q>RplQIKbh;j0e(MY|XSlYZ?#&gjJ8+gj3yYF6+j~w`f zc7ZR!hXQRtg=Pjb54Zw{{8U-=PjU=| zPf|b!e;b<;VhrMJoFnu$Z}tag3t%2;2Qy+3YvYAX9gvRa*BsJ+yyDmZgAQ@9v5`l- zx65O4!UNzdzZ?bf>t!KLx|I1fD-LX^d+0i2()f*JcRxR(? zF^<=P;p;R<9s1mVb`JkQnR3i|?HoY6`_4B2T7Lw})|p&urqTTJm%q$608%zG(}@`< zTjXJ!gDv*Bu=6e0gw-zD$wUZT;%r83}xv5v9RhI$DAf>7LnhaMXmsmBFNFvBOp z;G2p@<*5e{VIX5?IPfvH*~|!KP+J^eRR-S7t}niGZVm>2is2MvVQm+K87S_e-D0XA zU>4h9Qs2=4EXP{J!p-avlc0%-fjJ)Nb+dknQ33Nozdn|YgMKj#?0EOyigfzGhFBn= z(I@fI1~qiH0UVp@DJZpml>%or+)qM`=o`Zu4m{yqs9g+a(Z>ZJDEsv~@(UMklQ&fKmjSeY7E1LH>LL_zAhD1G1;*4-XMngf zJB$VhSZ@#2VbsLF7~A@euI3JV6>6Ntk2+7ROWmKFjTHr>&Uoj4a$+5G9Ce#B#}*l_dW#LBbshYOw=wD>Qcx0DB?VbZmG_|$8R zSI?gHIRm4S0iI{1#hBES(oPu^&CA2#@!EgOqHi;N%jwi9Q{;j(&ue+V6S+ftwEl`O zUMowUesbJQ6JJ%hTt5l0a&6~*RbkvDv1FisCqDOhIe6c;K8x?wa>e`^B}1DOs(b^W z^A5AEL)WZX)4OZeu63O^ygZ_uf$|ItbI$2oJ=VQhqty;BV zu^Gk%f&vaQE+)vdnLfaxAz-1h!Y|tBX8|A}o)Tm~U7>77ev*|8> z!owU?Pk+RKk#>`#&JWD+u>&91@Ki7e2f|>Kl{z+9)rWZ`9D^aQMh9i=gX4#2D%f<3 zX7e{b0je<*J_dJTO%p>|4Df91({vF89reH^-Z}}MDTXq8cWsjQKYz)9bFg?$db#YJ z_2+jpJVpXsZaD+vIRo|1Vd|T?7S{HEY>@w6_OrI7Vd06V%kI0)Yg_*ltz$e~4^P-% z{L~ZUZfbZ~;fHU~hZU~R&*vV^gLlzcFB#2nLya|0Hg)~}P@N_UKHmW7%p++_(!RdF z{2;*2JU)|lR9v(%0e&$@T^XfcJ<1}=+o7XOJLq36d`1qJjiDGtoy1y6uNq^2ql^NN zCaX4Mp%;l2fQC^Jbr?H!#$$&TF?d&)Sj1)#2_74o*$E0NQ}R3L@Sz{g7ArZ|+Ii!^ zLK3Kg)rjmEMgzogC~tj4T_j;1umNs6WjJv5Pd#Kd=wja-KZinyQQ**&`Z;nA<`Xfj zaTz)|2EXL%;s6(2(~zknWeie(;vuJeL4YC7+p#JBl>Y7VuSY#9)29!-3FXg4o}Z-t zoTaWAiXpK9k5;6#d&<~em-(E5(aykN=Nav!?4Poyuz9%=|D{FWkzW06_I5Ok>!s~2 zPTDc;G3yh>|5ac5l>Bz-qhr>`SO><>6<&VB$7Sut{NCJX<@&VaPm#TUci(HY!VNu6 zmrUBP0puG1LqAhV*j zcFBL7xlE3%Y)nOL&BaqAREtI%BgUy4AaU3xKo@4Aq8hCLr9y424Bf|d0KrHsq39ybQF-gzoMH$Azz{t^^;5_$#jj})gVTXLvBkgU~TuODjWhna!izCOA3E1!{vp7`xBBXo}2x=kD8KfmyC0nKgX8R*vUI$n6@ z`6CZB{0J|T%MRat`0nG^Gv5H{jALi(&*D&edV2B=fMQaz+|mpb7iH|cp5EKR7jcxE zrS*y|{5;@?^d`W6(OvpaxOP2hL$IHNQw|rFH$&#d<_lu4=lT@y*rOR#V1cAacXxNEba!`mANp{`!AWTf#OJzDk;y5i4i&CgLD!w98=9+*cZ`l6LO`<~%~3h&|t*woFAfQ#8dk1KUohTG0q80a?(y?BuGz zObSr*ZN^&bu(!J3J!V)9YzEK6{3>FGoUMiTPflW$eU2*6+tvfRYcdICdl(?6Zz0|< zscIw4R}XhmnMUF-k|NN67kb}FxNYv}{y34Z=z(!dtMF9qjOil*!y21~7_jF8| zzK0AP};jT95qJpgc$N~eKAMS@!g32Vve-QSAqREho|RwS5Je* z{q&@yKkMPe-+rXukvT0K(^00RB59OGBxYct&Ry>X7_$=+N7Cu!&Cr?k=VVCAujNl?!NnsYcqZr4^$LO^&ArY`^$1>f%{r7OLL0Ey%GzI!9E+at-n63j`E9;h z;}#ND>hDNqtKzsnjMlVG8AdSEjK+?qIA6m)JqvFqc{c-kwgzW1%U!pfxK`LG~>T@g8Ov_pi1S0<7NCANarDWAhq#v`gE@-3_i|8ocZSy$ZlPCIf zRFqK+w`smYF!xI_oJPM(`%bma3`t~4K3_R zhP-E^o;Y8+Fux^O-e2D%+wur4pMs@j!H+^|szkwWf<8*ia=MrTEuH>P z100CMlQH>9h{dPBV+6-_dcrq}UK4k(w@D`MQ2&{E7z^j#G&D|C>5$bouznbA$2G9o zR+cn9v4fzd;hH+}N&Ct8?DxzWzSEUhHA^wX9$UhMy|Q)5(0{?>JjwF?5f8T68=#~` z%VR!G2p1{cPj;J}5e5$SHp)T)$k&hI&GcY=2uDey7vq@Vqp z_q=`}vvuvn9pD_OwT>Z^Yi%_glxVLkEF@C$zBrG#-k?Qd{Zv=?2Po^~mjWxwdo5#> z;>XzluW3iYRv;RNRgU%6?W6fw!Faif-A0gbBYqm(jSM?xGOhNdfF)ieY0`Kr>lPd8 zGlL9&V=5f_KQjGBLeO;CbJzsD* zZdZY%3m)rx>TdP&J(4!hfr!3B-vFKQQI9qQ_7TQn={Ak!&6g7EFm#Z;X(LMLR zU40;!pYZVV9O8$}M_#vkh7RcD?{XlBa1jeE{9}FyIft$^I>CNF{mVbH@pbJ%oba%t z)a2&(%X8JzEMly3uh#<3UQm{@(nJKb_jC3t1-$-Ey8o(hDo{q^)vB=!#_z>7EW!7t z#gas8svE$a8D&{r9P;=`clx{F=lbn}O1q;}1eC8D+%P*iSs9aGB49Vj* z%sQ_@EwV`~rgtT|Mmk6NBrKI`jo~dKTZ)}XtGgKR`{~Ze+NhM6yV_@Q^|Ve`q#j3t}y2tyL+f`E7J2|Z(ENZB!!9rzR2|=+ zH}f0BbNh-oNt8ZGaFTyEyZ0lmO^b%WW>WI9JfC0pFwnJ$#g?r*>^=1UR9)J#JUUl= zl9&MXdq#@q0jltfH{9M3Y0$B2mD61eaSjOo$;EeHxtNzeY8r@yM%=`O||7ml)=+ zkI&*6YRYejchDXa-F!4!pyDf(JC($@r$nOlpGxk=b4|dsbp%@CH+&`GW0Uv-ec;Gi z{$Rf$j}2CnKLOGQ`ty2VR?=$)EPn+{ce$y|(}qY+yRd(}j}jEwZEglIdks$&%ab%sF7Uk*zbs;F0 ziG(?C z`@Ue4;z#qQdCKYRt|uQ$G(t;0mA@26FH5K#4BfyshzQuu*S~r0L8!&r-EU&YvT;3| z`BEeKwk~N3Ui3WeN*B-pG>L=W8@Fp%RoWwTbSn;7JT6_O`ExsTb7C_c#?{#P(U>{Q zckzfAlT{k#isb}(N{IY0;?Bi+5+7tkxDhCa&e%gR+At$An#)Da>Al+-mXXqKAxm~H z>k@0i`HRL>|CE{$O6sDAI`WBAYMXG43W1=9s%%^Va^u*z03;*fBinn6LR_w!%Y~{7DZ8eyn&C7)KM-u#d@EG zmEtTp{B{Qx8+Q@vk84H_{y3ebGS-^$j82<7s59^I3J;%!{msFhpc~Eolzowfe=Pp6 zhRZQS6#ihEfxpewSj&OLYSGV#m1f3>#j4!S-`M<61U+xxVI4Pe3V0q__uguG>e?lC zz6j@nSTX&1dYS@*{n>{oA3o{w?5q;s8nC`yiM&(TZ zv7Ekg4XEff8#uR|ggZ^9dJQF2wteH8ey_HzJ1j9Qp@=#UJp;V%Zm8v^L+G$VdF*Fk z;;{f&dSGR&Qq#YLyTUTF;+wf_Kf;fYAWD8}MV3o;@nE)=8FCj69`$ibk*fJ!W^wBY@3cPyGaqKcG;m;2w&fb&$cmGce;0Qy>Q`T<@0w) z(la;yB6fw42kVCrJAWD<6rVpFdd`R^g)yy}JMgalSipM)IQX>;x|VTkFvfN9@TcL6A}NynVX^2D&AY!6XsE&(uOG z8dMRVHYvZMsD3$tS8wI`AVW_veag1U@@|a+hJ@5#kYafjvGh)uMUnTovsT!UKeajK z;VI`uK(NN*&2@k^@}b3(?e!jug>`q1ZG^Rxr9F8Av2O3tMip<_`}L) z+4bSKkuIm^J^ zwCH;Ojp%1bM=@TYMlq2O>;@B)kEgsQG4SvFslv{ZmBvD-W6JI9y+hfwl6QTX73sP8 zLyaQB3A(h7DfT2Sw9Bjk(oRc#&Yakgru_2ot%SNwk$rk@sK7jgrgYLED-fZ{DIlnP zuy{}jd!ryk?CG))0%KKzL(eekWxk4&ldJoEITB>fz7q-f3Ky_ty&^+2mxFT^Ste7z z`HV~UXEqLclRQ!V8i1yQMj{32vCb>y>gATlr%AP|9oq5~qqJY7s`G(7_KRFGGp1tZ z1~1LibXVZw?kh-JX+Ah{z4_$T^-I^gcAIMY_eqby2Frck_mpS;#}80l#{+Wx3AlqG z@Rj`3Ru^DRa_IQdZeVPjN;`r8f*y2lUy{64Z{enG@PzJzyhKYf)IuJQKqv@)RPRb8 zh@&^9f{K(qnYU2;(R+>OJp9fYoM|CiQV_x<^@NCJsA~IX#gtpqyAL}@eX@-|Fuq%c zV67WDiT*MYXf?@{KV*@7iDX1w9xUQRO~a><58xW$$%}K_v2~Xdk9F6}eOvn+!0w|? z+0^a-gl$MXutu(Rx|TFx?PYg&4}>hZpRaot$pW8Wv8GRa@G!~5mPt1E{$b((*Q{?n0mI@>48sBajWqoxfj5y?epyB(a!z;9~&<$*?q>Nx?!L?(JUDKZJU&>*qWRIW_<$IGJV^D`+R zvz4@UdU;8C41gc6CO^dO~#mT*C&yK`Eo1C@|+S%QAW8KbMgxN zp9{8}7d`ACT=!BYH@r3*%p*K!y>vJfJsJ6K<^kAF2@^F_NChkg0ttUhKO9jlxkpP* z;3ElK@;Gzw)r4}BbUq|7P0k9IGDm_Apte=-cp&#_XsWliJq=au9Z4H}A`{2M)~9V& zlfKIdk`t!;=x8z|G1M??id-l?yZC-qv#{tEzKSM3ThNMJ=6H9xcdwxsKR~kEgk1(< z_LVF94;KMJJTmxb!h8?i?3*vYQn!uh?WdvR!d zUS5MGHO4YwqLc0#4JN!8)g_PCe>}mi3B2%37<$H)L$ln*<@!Y6($MFF6zQ*$b{1zW za_DCYE(-MZ8#L0V0~$=j7+n5xnZqVa*>(Ha+Lpfn8VaG#lF#LpQNq0RKs7$Dr@Lu! zlkteD<7R~LVV#Sc^3N)8YGY5NOv_ICg(HbFIV1m_Dtl%e?qz5m3ECW2H&vPSFiD&W z$Wqtvodad~T4Q&8w7J3AIm16`@kY-J4%Jw53zPZMhf`8+mwxqnu&Gp*&;rqm(r4Ej zsE3!MX^a0kCG%U*UU4|^1T&6Wu?J>e71fUTixU%-0xJ+kGr9o+CM44?T+D0k=G0n_ zN6lSa*}d@DIt)M56z*MBxuajcWrJkCqC-Bhmp@a=ChyD*clO;*Edj)&#iAHp|Ym8}N&mUXNcf0~UPCtMG3 zYF}ttzKG-6l${Lmh~@dkqmtn7>hl06W@C3`8EN~Sn;OMp+al|FIIoG*JFnUYv=N=$ z6!>Tzb>+5LsIMzlQT33yswd`5`sgJJ*=p8;5#fRNq7`A&CAwZKi}gGCt3Bc zr?w;^=z?qiw@d7PE??35VMU9J>7yMKjPIxgu1i7eiZxi;j+)sb zw-Nam8Izr-q*U4ikzj3yYKz-7g`=9OxX)G7<7g9~Ueji}1Y2MS;S*Cs6UFWl1$rF5 zLb_<`k{>T1RMM7CNUY+jZ5b&W6=wy>6&30E8AbX( zOs{2HcP{N>YWGL(npY>E>{DU_`f-tHP?54wlkn@=my~xv(eg9KNG{1;QdOS+_{mGy z)(h3Te=l9S_n%14ui*ncjYiOk^9a(?-_t}oTO0AL^CJK_*on4HT@b|VQjTHb=T&|P z2er`rDX$;X-Ti1C%|&t!st}GONL+J@S0w=i%@5}TC#|~~!Ka#A58tbYMa(?Z>HfMq z!0V)687(ApE65NE?v0GH%#fGM1G|xR?TqV28;brfkM{RtS9I$n*$awd11MA2^cS1L zMP{pGoj*8>I5_Ux4&^cD2RxMjdYH((7x7&!CHxwilLbi?>Zu)~O*Gp3q&1h@-|+a%p8uxd?W9_jCL(%7Hjs9A7mlY=>k zym$^Bnh)l3FFM%!j3&bpna`0qTF!-PIu2qPf?dLKyCm+;OYipzFRQ&1ZtvkpYAudO z%=HgBg(e4A#Ymx=JUJw7BZzvy{gW#Nzlm^hQ-%8%cI^vSWPUA7Jys=PZtBbx=y1Mq zFW(N8-;hq<__5}sYkhgY0)Hg*!D*x6F&`E|=>Cg@;feY~n=CzTL-@8Af3qDEo^$h_n?|7CGhD$FuvQEN^kW9WF79-1e(~n1^`u&Sga{(je1ceIbevmJS8F-Z^@5?3P z<4;5DO61MNCyE$pQCHn{X=-spFl3Yr^am_t$_7IMP$09-uVXXr;Y@bSTJv4Uxjdm;t^q-2kBayF-(6WmOtW3y5;`X^}W=n zm~u5E0`^|%(`xmc01~Np275sPN^^G&b=TRmqeE~~WFudHeT5Rc$epIgu+z=qcgwMn z*C{Bqv3-$*T$7R0m1-wUKAf(l*W9+tfD|89!|xScUij!u0l)JbOMj%Ets*tB3w@L|~>FwwXFqf}2EfZ`#F*;K14 zs{lN^t$Gdx+c#H5aO3$gaK!2~mK{eeJ)BIVi}b~1jy;{-ZX*uamG=p~FAFiwJ|LVN zXWkNFLBTe}shB&n!9WDDIcz}{oX5sZ zX&=3gxeC2u0o%;M_&*txC#xD*z$P*&7I2o{zdUjwW~MqK*3a0D15?TK-w12b+cAC) z)dc;TA`*)p4G5@(|IF1G4#$@iz3l2UA=HRrCv_~`n7g7v=}0l-AAviKV) z7%2)_z)t(bZYAR*8tu_lxa9j8W9a+?3oQh%LW*v(u3Ea9dV? zTS{yy`+=9%y}Wj*=h?tkMkRZkx(B-w;R+NU&f%?dy4t!Z#E&$Qs~CITbgYcbUrg`h z^|yOxB=y!__`QA5!;$fIb>>F-F%MXjTg0Oy-co!prJ(gAWZYcd2GF+n$l0wV-pHpPmWb+!&>BGnI?+o$As5h&nSHAr!nG zRCH7_&Af!NMaxkpv*Fq$(BQfaMabQ`MJDU=xV+M`|Iw-*x6pKB2|>1e5AVmfDgXGy zekwkJZ{nj{SB7{FAcBAziBPnA{d{Ln>LF}A1MZ$}PSGNHwd@t!B_YZYZf2CQ+Y#vd)ypp5{}7J^n;?rayQlks_QRDLtLYZhzqlUf2Fkx% z%3kffr)XMUie`k%ohglDRZd5P&#eVCZig!@^$UuA^vi!?T8 zCU|0MjddnB;t_f%S7>@Z)C?3dkIer%!|<00zRYREX{Jsa!Ew*xmLoUY9~t|RkxIFs z+$E?_zWxo!cdPzf)k%aGP)kG+?VnBACKHdq9IZE}AN-J6JuCjMrkBghF7hkxa!IQ$ zS zD>f;sRxE5bx&+sfe*ajc$i<4r94YOug=S?_v@jNN*q$=rGXC~c$F=DoEBwt3-2T=+iaMDke1M9EPxuqPBhPf#%GC|7dN#5stf|@m-R|=oB z0v=Aathz#KAMH}A+!Y!JJEj#b89lbn9Ns8RTEdQ*~C^@#7@h5y>__wX^;@B%Lwov77O<5 z?J`;kAKT#i$l;a3r@S*%*bCygX{6eyB$jeHpuyR+bNctECQLTEKi^Fu`h@wlV6JH* z!rBhl{9kqz4lLTTon9|yQ_g`ywOtPsse@%$OudsRi#FCG`J%&jzxnPM1E!0~1KU+Uu2`ayUHk&+YzpF*bb)gJz5bGg5`nuag_m405N zqZ{NllZPAe7CGOoVmKX`jO5Z(uEyXw8Cs~>RrF)o^6?}vSP{LB=e)2qdwEpv3T8eM z06{(yo=fbsdC9E}CKf6c+rXsD5fH(<^x_F5i?+5e3E`P0qwgFee@5qY=A~)-Qs7Hj zntOv9ZeTwss=SFpz-?%Gj{0Ph5`G?K-o3}#p zUbgPLBfPqb-UP0y(EKz{`avBiGpDi2J6gMafeTlG?}OlTqFsTEnpX|G*K@h&pMSnW}VVn9Ni-O(Yso%j5UCg zLfUaLmN1M=$U|j6l_41t4PY*7pgEYr!qCh~?E(9?WhjO-&?7ggPl>cbO|zE<-4UbG^bF$ z8_txm`;%69BY1&rRyTv03_~yl^&j3}Rq6Q#rZ=Yy-lTOsX&IW`)A+%$-*2)z>a8zH za5d?rOA;=4_fa_~<(b%~BU|_3Ml^e9ryJk8EGY+OhJ3+3cG|HF?5djLi zB+!PJHH^fTwdQzi!0vP0vxlJ# z+}bpT85uXYtx^J~HCXIK67Up7?2*Mk#)de%6+=a{$^C5DYzQxjxo%lgHk}U9BygO!@dz{rX1+bx%79Crm;WZ?U9Le0-(orQ=SLZYuLV#( z>VZzBf@utcBkHHs=fS$e^(o|@H={TrrtiBMGcOsY0k!TgIHacIvYtjiUW*cnytscd zE)jp{Il0qi+ysLE*l&tLz46t|zLqE`ub5eP@@15zbLsu+Xi?ZX+Dz=iPyPHix9Ne( zce422mRRa&afyCYXqo#e(hHy$e}F1?b9xD0x`U|A<}rQ$^aGz2E(=kMA8}v9?M@U{ z4}rXbZ-Aa#gYe$reaCO)3OuTBx*z!o#SNt$NDzp0WXa{aNL(b)2RrRP`*=a=ddJ$-j zZE{*EE@(k|2fTRSf#Wx>R$7N|bA@-~0u1rah}FyjLJbq{f)t9ExYO z(v1|daXLu;Bd}1^JUu0Qz+AknIn8w*EtGP1R;b;)AZufz;~UVZcwn0kE7sHhxKo4m z9@l8&s@P}IQ@b{xa;b3Hw38BDB5e~nV-`V0Lrvq{BgUw0XrZotw?7fis7IcigPOYPCeN3J-1aGO0fJjYY^hYsZe{ zZgz9JMnuTM`S6-540-WqvTz^N%5C3<(p-0EFBcqe_!&0qJ3qrz+*}+GVOa>PTHe}h zOI5J3+^JGcR`VRvUs$ry()fI|2$&WVX$$pSkq+2V47XTrFih3z3wxqVQ1K(GE+VD5 z>3TeVl!a{=V6o z61qZ1`r?IIIb=29sVMRTNX_ARDv+9DHWLl4xwYC!V%9)uL-ofM-|+#UJHOJ@tM1;- z>H>a{QaSx$A6@G@a(cLwO`~~bcDQ_zPfPAK1o4cjEVuab8nSC+7k&)=7mOeUQN=c( z`6{&s7QLW31c;H=*gm~~AzIXAYd|@Kq%Q zK3we1Li@vq521jN)a$fybPMi$jB>BX`4Z1+r~Tq#O^pTX@vE^G$t-B@h6S14dz+%> z#-;tsQNCiYx8kHb#CovBBVU)PLUnyDTxOeA>l)vdCC_5v>^s-}q%G?sCGCDZKZ#>x z*V?E@CWwn^9a36mrc}+*V#@u`H1oNqvsFG$b8HalN+f`4hz??U&%|`xX`Nw9;9ct+ zwr_jz?ilydAqG56QBkYuqNPUHqXd47(KI(9^7lU=$Q}4)eW^UER|WST>I+oweP+v( zu0ED-6gtlfEqo{)w<-0E_C0caPzY#TDm|VwXR&HbopfJ3vTZId4An^7{{=4X0bSY= zLxN-(2}oOFh1g591xt9zHO2~!HM}8&Nbf6do2F7(UX)e{)}cv!R?7C75FkQuR`=l% zT$uc5lQdrQnX>Q%gi=5p7J^QyX+rFOXXr#AFJc&uc4{0Y!9W7yVohFspj68DT|5Gp z_F05^$rG%T(rDH$NZy}HorYzlChvc+1d4&e!7L5Z+QG@5n*8Pkr2{>_VLtP@qk%bD z5=1;k3V+e!>=lI3M)ohHfzNRbV|V5gUX)++S=fGNKYvrF{K8)nhDy)2S#$=aek|vVEFUb#IjM#Qmc=O%fX%AmjD2&%GIu0Za4=cs^58RS>EWT4};}8VY zo1?XA+CMKb4P^`JdgfM{nlH^44(Ge=bMGy=W*6OeQAnR`M&%!hoJ|jV)Ex}-{XJQ4 z4C!(ts^13z!QPk!?>}(w1!e||U>--xrcE!N7%j$?zr_-^YHBVh>}q-ETcr`b|=-`5p9PT~8;gZb^;nX9z%6yDt86q(%N7+6@E zt1oO!3WE5Z8n4S3LNhO>Lu^3Ol;pG?Ponj?KpN4U4A6S@(-Ff!uHsiLz}$KdDTAnd z;kOE;e%0qj57RR}IH!W~fPi)jcpC=(Gnmu6|XBnSv+R}N{` z_$EWW`+Zv$?-X1Xa*niyX`@r4r-u(tC%on|zCw`K<*5?LAraP;?00YD`1ai6MO=-> zdJO$c@OIT^Ig=^YOj>kA61nQYH?&&Vff^Cvuu6RbE-&!UFz9*>Mf2R z{aI2XN5l*KAweq)=|AQ2yE>d}jPyB^(&#s&>6UilCgJ5nK4b@COJOjgY`|x3t57rq zRK4y==I{EC-$D){yB_k-o6`Ck7Roh@O8MruqxKmhqo${)hqne|S8~JtiqU6`S(6D5 zfk@@TnTB}_(Gcgyf|KJN>w((CE1QG;i9)u>VNw0ohW+BIM*%8`|2b`0YqO@%cy_Bz zM6;$|Jq7F@xQeyYJNr zrdFfYyO#5Mc`+uUWFP;gn)N5;BmQ>t%{oz} zx_8oxk6xB3F_YDi`Bjx{FpJC|VbAX0b(9|#qu#bR*LHDFs)dVcid~ij8 z>)q{Xyp`WWV>=GiK~&LcnQQW*KSvXqtFZm6 zA`@3a@J1q?-x%3-9KJmVJ3wHPcclRAU;t#m%27Uh3DBA`7({B8(rEuam;sKby>4Ci z7q1Ktl=QV~#6UJdKzGM48!0I*-P@Q_SJ!p2vQmX@kb&Az%s*xt-8ZCE>4g1p@SQLs z79@M?h<{%4?E^w)S}?@YywT;>V=p^)7G+iLg(&hl)oLu+ef?#nM)TE#XMJzl#e3n} z!R~e&WpJNw2>ldg1xM%l-x`98*XHEskND0Tu$f z2_0VFPF+nTIYe^=8}<9kRfR{Gw>vc*q$viLxy_%3^b$Q&WcQAh(HJ>9^@phqhU^^EKl)<*cYO{gS5+2XLs(TE5mNo$i5&ZQO zqYQ}(_-P&*M~%nk|E2_9t46VuNDcv;NGnK|;%67$-qKyo=McCp-0lN6e<*Di!J^>Q zNeD;)X=SPfj+MFjC7xb0{XAFl+R?{Jj;Dxtd8~-4hmb&%1AEitk7ii@8BZ;2gH4E( z3%x%ZYO693`a9Vo5+hvVNeK~QF7^S_cQ!!nk}E?aIgh3s_9f z0~LQCtxBH$suMI)!BYAO0(xgCBo@+n6oQ9~ysn%^2dZRNNGH5Fq8FXF{Tjg3TSz)j zqg`?C|J1q>ChR-R4&kT*wFm+_$f$UMU%+RjC6l?Re_12qA3+!!Ng?xY2*Qx{GtE(2 zy-bH`n>h-l{3GT@HW5N3+om&FR|H0KT5ucxJRd<2XoMzV!jBi6#D^e}CW2mulxDvZ zf#TOuj(yOV+~frXK#Nneq&f4bxph>#GTaPl+Wl)f{(1gCesfu=2hg|E=LeqH8oKl) zi5Z&2ni6%2H|VpSSbt1b6I!sDn{$10+qeQ_Z-gv%{-wY_l*GgEXC#Ew9L~Pz(;)$= z%ZTmICS3EZTUCH#5s8Y7qevI|6&K)^kEBrzDE-!j_zN1N|7X{J68IRGg-6=bC(9-L zHYQx+Kej`unJox8^x1pqk{q~!Cj4d_3fZwIQ` zj4Ob)9%??2D-wNPO6;_==S%)~I}rbId;!Z*{A|)euBVLqxkTR96~2I?1#sQ4$>>5?s4VY@?0OHgyb-lQU{(r z!%a=8Hc^&sEo?z!UI(=dC{IscYb~b1`G?*9E)WmJ|E*MawD%`hNEDeM((5!TJP^b#T0HQ( z&-n3K=%u}-(q5xWSGiy3JTyB;(HIdz);&J*I?U_>RmU;DN20Aaq)2Y5m!x)0V-JHo zBa21J5&v#ZA}tD;{t1bG|5`(L&?dbRT`C>8DA0kf0_Shm!WZ1oupno*Ar=|OVZC6V z>4efi`qm0;X=UiMrKQ%YvjXVH{zG>J^r$awS?L?^xCSMSXL}&?i9a1AAOK?D%fHLi z0vT(1A&W~oaLf7FxaInv^t_K9^sY#8>eLZyb2D4Ni?!Zqg1+ zzJFg@0d|xR3Uhicl)d#G;drEXHeaEDebCT_PF!7GkW`F33k~#_d)a%rDTO{UX-vZ z=qnDwn&w=+>P%~|jym;hCiN|D%fo#RTeY;brVEV!zm*aC_krqrRSeQ4lzHdtn2u65iM=Amjn+{5I=DD4v6G+Vee&H{pM_hK-I$Vj^HW{zraWDJTmoRvm=^C z<56fgZT5faOb4Uspcj~MI!e%J?X4l)dCr?mts;p0vgr{>UOc7eM<`0F)mk^(SGqbv zUKG+6-;MQ^Te4X&bsLi*f|;ze_^=f5{7-GDup*vNkPabAIBN$7%RFtxW8^@@_mxd$ z=lC5k{DT}4!2R=GW?$XPP0bR8?OgHEW1)>@u9y_imn|R52L|<)W?WodT?LZWzzg<& z8SOjm=`qcU>KiwI9|xMYwmi;n612!K7amjJ4TYL?(2+%<_&x1lZ&OKF6*kS=T<%=0 zay!A^{d~W#(R$}8CG}?n3y+8Wzwg5H^JDPOM581b@`2RYMdXMIiyFTMJqbWs+2D3R z&~?qNY9!S6sw>nF#c%zb?VFoo|JOUmc`HGN+vV$)>yl=#>lO-UgTw!Oox~@^h$S?G z57HR2pCo3b(mK#*58(W^3uIkI1CMtARy2wqy!ZnfYOLy>JpbR`( zaS(PYTQEGghqan^AWH1I$!3v1{DuQ*ZyzOFPZQ%!3f*o+4~i-u%@3xFM`VSZQ2*8B zX{;F1E|h*(VXi+&XFD?n= z@h*s)E;K#69#^90xrWZ!(f0N>@BTB8;QzIQm@-u0j-{^vdE@l9H8ez1S%dc9fxa*z zO%DDhO?-Y-Lj!n*A2e% zY{+{&zkUo`=T21a~=GZoivoQL*agHV;>{Cs?m6>*Vm{Qt6a^grAF z)PIq=;Haa?5I+aJro!@nBOaVzP_Nm+l4wQ<`3*29zimwpopv$ved{}XH=!ha#31Z? z=&pn&@vrfL_=6D;@Jx6Ur~7^slU_VYeFWVz3gkoEB%+w6sDOZ`hLYHW81|6?sV_p6 zkY8z$(bVdScgfsuzN}mfw49OGEly5OKISX?0Q(DUY;0CMozevVt`QGiVYPW<7~NXi zLdq8PlSRhOR|x^cfo02IIimPW;WTv0--G$)rvEyz51(J2giR`+)Huyl>+79^bvN>n z^-Qb$gNg`=OGqmJau5X35X0Mk{r0`u6pMB3m)Q~iYlJtH6+bJeN&p8?&4Y$>@1>6U zT|0z2CKLmVX*w~BGCbw$!)?N93z_zSPHAv}VCBcHUST1ilmB09`HhM*Yed2WK6ZjR zmT8}};A$KD+)9IRm^uaY;oFes=NC-YDrEeRu&ml|tzMAARUXb2aSh zozGDW8=rT!G-pbs#KF}iz1NTt@z7-r95$Y6)_V8=oEsh5#W8zN0G6f&cP|qJs^uMq znO!gziko|>u#7uvkw_2s_r2x!@jB$Qo*ngE_So^U0z02dXZ;2LrwrMV#T*{!>YZ8M zq_#G5D_`-Rumo}>fmEEs5D~I-b1fotphwb40m^;Z7zksizn{QE1-N0y=AIlR{f zhK7c$eg^~uQUm{9v=Ss-3bfdTuhx4z;x5)F#^*n(ULyyG@FHpO`S z&WzvDQ_tu7`uWRWbI$vH?)QCP*L_|0Ilv{XDb;2Er%0A`aJUb6=e(4My&K=t7d8+ryyNTOXDt}@9qZ(^gpnSMp*JWFZ= zurJ0n-TzYX-NBhcRr)cq{%|QxmO#7VNH&qjLelUi3b$PlIY8H82FH3Wcgc*Cqg`BF zFtw@^;{Q9YY7-UT4efr$xP6WYe`E(gHZ<&r+dk@ZeC1nBuGv;5#=rmD=6QrtuL055 zQY~E4)s{AktXC|wEGLBmrYs5R1_$(SgTiSQDe&qaFV7r(JkSK>7~As4-!uJ}u***G zHo5V(+8b1CyU15{JR7vUlnQXGX2mf&k5@JZ)U&I-o`A0}%b2Kh!V+vik}OE+iCnH^ z_!j>u?JBuFb;=0?E(6%l1^m2bI#UjvjlUDLWXu7zKc$Or9{RqHsiDkYVZ`!ce9-s%69x)pB`fT)N@w1Q-x2^SQxb%<{tX*Y3>vj zWdu5|qqdw4IOu^CTAD1c zx2}P+`a$dQl_nOx)3e(vL`>(gFJN>1_fa4-kUQp)Z)+DG;AY+fi_6zLm{YWAkNUHt zj7Jd2H_)!hl47_{8Fjd$qzD#Qqz9+Hkn|03S$$1J?I%5?gw%=SZwKJBbj%7R({b8Y z_I~0s0tnhdyFSk}^VGD7TbWffs{d6FqD zpB#WbzM@FrmE0@Yh;9gs8-LTv=35hSxxc8&>j>4O%}{~qM}dG9qUxnN?-y?iBLm!L zYi2VK^v$YVDVFE{52hJ~Qnw<2n0zBoOEdZ24EOQEl$DaBb_gwlf;~@OjmzvdP2%lq znmMkCoaVmTr;lsCTm(_rPy5fkn+WPB$iLI4pi|thgfs9~XGH;rU@PcDu(m<-^ z?Q^#tHiLBWio<(Px5w@zp6?6GKU@d>?&P)MMx4xn97A|V2A7PhbB3(j&&`)Fk0~Xa z=LY|`k=2X=2ZiFb_XJVh0qf@-9i7DXs+kxh;BusHiA=F6i-p&k+Eo$2*YR z2ssNpFOX==AFGS;Znw+~RER4Ddq$f4kKp?ba4N^zcL8kv$}8EIrYFJ2RH&z}68e2= zv^&qGO5Iex(p%`jc=n!22HIbYfqRM+Nb(=Ikr@xzaOkvw40_#e`Ck@(8r)FTO*WVk zwHNo%l7^470>0c(nh;sGlIVl-Xi7L$<4~vgK3aZX_9q)H*jKp0arc&WJV_@E?G(3? zm^$GQXQ2tG5i18RFiSn!;*=@yElD$We?>|E3GPeb4Zf53gkClMNY9?-bLZ9xExgxo zS#yKg8jV&@8Jgl6*fx-Hkp$`6=gi70a^S#gxmVSZ;F?D98b2n#XDg;TP%K5`jV$$2 zME0r>sY_10xP6uV79Rh?`MD3#)R8i~jukw+?DC&TH#!yKgpZ(F&>);Pmi9a@AD5GQ z0b_s^NEarCWm279@!Xcen%Nf)J-kL@^y-AbZt6db{esr4Rg~1!oyw2|=0JqK7cvDN zAo-{pGs#GW{kac=$p?@n(y7S*u&|M2h_)Tm1 zmA9z}`Z!j9Mp%=2n5Qw3+l{G|JCi=xG&Au%G=~vGs4;^tZnp|lMjOsx7_#b5-RG_b zM?o^H=Rc+a#n*P|CxGD7 zVY_;Q3ldkGOW!i6;2TE|hUm)dS_aY&I0|jFcw)E`i$s%glI~3q7-vQ&MDMH6BzWEH zR^IJ=;WPu(7y;$bVvwCJqTu9)<4UU{9+p7xtn(x8|2FeVh`v50CW6bybc$xFiv~E@ z?QEUYu%_V;JC#(MI%4`#39)&)G~)7#N|zb=StqdkRrdMt`FT94`FxCQa|4(`y0zSF zdY%&%-~6}cm*&uK^((h&bH@_p9lA4#o>Q^v7L`wbeBlKNFR(7!UEJIFJ3?X8r#}@H z$MR+Z=AuGM@HNQMu@<$~G+;ppx18o@jy7+VE^bthcy0dBjro(m#M0;F=PC87A5lJH zLZ6$iL@W&5z6Hy<5VOwNS~OUT+;ro&TBeX?xAM?v^k#^pw zwJav!55TfxNtRrC?CZL$y>8!|+A2)m&$n}5C>7QoAKQv;iOZ(h@85~%umD7i&m+C} zF;mZ9x3paPSbf|EwS(L8_HIRI5GGj`jPssQN;-#!xx*g)JWB^Qfqaa$*y5>QR(QIO zGOBIdNQ(#-0g(l!P0VtyJiZYKOh(ESCoA}_JAh2KQohp~Hs#GZuh#TC7(jJQb7J5G zJSH{YB8R)jqi`nCzUDHIjM7GgcyYU<(03(DwV^fJ*s6-^bSSA-R(ef9Fh*Hn>s4K) z#QuwFSBt!P_vM9inpPaQ(?Mb2nO|LVpXCDaZp{|xa#*20@CFD4O7I%+v21n+ZI>q< zV>-LKRN>gGmtRzLF1^Z-`wx7JISXlAINpIzBuc`G9kDH=75=%&x$JETYw`Tif||5C zJo0x3oF53ArM}0yrR!30o3Y((-)I9em^P^Q*JliB#HDvWYltPFr!5m}6qO&oOwsx} z^u*m5kYKZaAI8$U&GQuPbR)jPWhIH|__NPZ5&So0q)6FCUpM*cJG{b`)eg0wg$7f# zBV6|@T<;v&8&=+GDr4?QuMk=Hj0|TM@yeD|J9gTenXf(N#5_2ZE(2GijYYQ%&luz- zq$@5n?d|R*X_>p2x3*p;1PqQ5*8zaEUvJ78$}g6;IqYseS$DRHb&cUX2@wq_ zjzi7jfT@MJ$Rx+Cpsm1Zf=Q678WT@qTZA+-WTs5-KF;ey;Yi5?#1imiz2stgzP>q} zQ)XY|hIQYM(!hUIe%PD&=({YttbZ6EyAtU%E?T#duJ92M>*Ydq<~hCa>JcdZ^0CWP zk-^qqT$WIot~nx&OOkgJH^MsA#p^58jCZC;;go{NyU{+KY-j!;Haj&w7X&$TW3dC{ z`q$a8ypu9*hd>pI%rOslb#I{!ap!;J?Mx;!dv|Deuz$6Cg312qQuYx0#O5L7jR!ZV zS>PRVD@q+f+@FszUkvK$j$R;AjF8bw>or!5FVVb*yDi;OU@3i9BQSB+10MWtPd4X2 zn7$_TsA>$Uuwc4JGU2(ZO}nks_?_n<71+^iTsX6S$|DrB@TA^V-Cz1F_8W8sNm2J* z>EC;SNW$-be1sb|$`AfhzTU?VG`VQQFrl@n3_*yr59qM~x{ zY*dnNbTruf-vrrz#~_EO>1r-$UMTO*QVIQ-eE8gd1S|L9kD|nv0>vwk1!|nW)0N?{ zg6wQVKt*7Ajmikm#>2fy>(k6CFg{+0cpbHj-2Gu^cJlpdpuC|;tBi${Xx-%cRx1Ry zmq`e4NEFjV94&st^x0BNFLkduNaOI#W#fubu({TqVosy4n<3}rj8qD&)|@z>aOd}l ziPO!h|5&w&TD}aJuX#EPStFw@%mJdd5RaRuv-JfQhUbEh#2xpBNx=Dxc~ihYTT zA0JCR@;v?7X)aODO(-8aw^f5remHyl)krs5z9VScYEzLqgU`TF)Rp(YTk0#UHN7mg zY2g_!FhNnRxUE1H_SeN>b&Tl>`?9`|_qc~EWJYG&>Bud_p|NW)~ja;7i`3{`W z`0IN{uNhy`2REhXx6*YbM#vK~?7Sz?T?OXer>d93Ei5Y@f4A_s-yo%{s~fGCBAFA^ z5KPO~d6NcX^F}X|_IKoe<$pTxL%74k$udzUZQyTsOiU(0eq{Qqj72OUGAY!aMWs{S zZsvyM@RxWWTGUL}6YRD=R_1VB8`4P2#%=_zXP)y9O|h94YJdc%F?cCMEHp8_1H{at zm8G;i?&j!m@xvg$b5%|edmFPP>RL3=c{A8R<#)4=Rfo?m2wpw$seD=nr6}M}*lw{G zI?8Qd7RB4X17Xog@94ssgswnBf>}!lRNyJer3|qlckk=%k2#kpr)#Xf7Pv89eC<|3 z6Vp`A?$WvPeDqu-hIrpQkw|&gx3SD?%Or7v7PE9SxaQWxchHJbPi@GdU1DIk#mxUZ z`T`g>rSze)LAwHb%W>*I*%Dr7V?Q*CLh3}-fd~a1wNsp@3x*gzmN7azjtD95B9W~# z%Vs~1Ul3D{nUC~t5-+j64I-*Cyb1UFuEggU0%gH9Fu7*BcQ7j6MIB}$dSr?W1YbE# zb|Ii$5a+X)PtaQFokstQszQ8Nl4WfRmz;^CfaPvgdcRM7-jgYeh&s4hD%NwqBOR*pNBAqIBQme z>mMxBLY=>W5e}A5=CJU2=XAbdiDCD$JY>}Kj{^Nue?rlwI|g?R|2EQpa;xAYR$`)~ z!}7We{gUvc8ZRdhbITM!Lye1p4uu6$ZkhjhrYzpAYIq-bN8X6rRUk-3B|w_NmBa2N zpS#Itxb7NB{N*}Su+4&8A_wj5^zvS-SYa@&awYP!3F$oMlzlo;4f=qTj&t4xRl8r& z2Yw1HzaW2FaS|Vc;pj?0hc&CBRJr2~+5`)j)bkfdf(803!D5#z6q~#tf zt9r42z zzvfa~0ZnJi2hAXT00Pm3}yrL>w^X&UC%Ch9mAVwUwpb3nu=kTC`ocN0pPZvg6BTo}CCO z{M=3`FL{C@oc{ES`oY$scY@2r9|p~*1VyB9K{9uNaBW*V!=+647@gyrVfxh<%oZY) zg@f(6i?FOa(4~_X4_Ev6C7r18FWm1lDZ9iK%V`%|Zd*&Fo0RFNeR~SaiUDy_?k_W{ z+58p%{(ig&g>^5>Pg#EUEWT`d=pHIBFHbUwG2LhFD+k~?)f!8>j)4rh7`A$I)`I~8 z934?#mSkK|Y&r-`vK8xb0qqmi&?#+RY9Y7RP_=@+mI(v5PQ%L8nj<0vf`#KUO(;Yq z7^NQMFIqvj1O(fZ!`w1Lbe~I|TR}LOcU;N{8r^|B9n3)IT-j-|Ha6~!R#?Jzwehd&^u@aI}VvV)UtP;4j z{I*Vh5>a)~PxQ-;woY=nNeZyzLOIYjI1YXLR&od`bp2&%@cKQV^nSTL5zbEcPZt)_ zgOCV5pqJIW`&$D{h-wh|5S@gMlHMbv?yg)#M>9TLpWza+A_%nbD&F=>5vG3%;}Z?3 z*poZht-ImA!@u*!-1N;>Y+Ox`@xf`|?!=+7WWE711j=FOeuhs$r#%>k-bpsWEErun zR%DhZPWTAep%4yfi4^qq!F>5vFTz{Ym7=m7FQl7~0of^Db~?du47A84d-!iH^pF4Z zKlCjJF;Q}_B>Sx)wPYSe@kjn6XHZWDG5?&Eg3m?u=VyjpEH{E`X1jOZUWeG|IK&2mvF#2Fw-;1K-tSw&Usd2Zt*5sDNUh(7#(f%yo+b z)+xM6-rT^G5QU!~(-{kgEA&=&DdM);y=Va)4{Wx4cg&(mq2^7XL^JAce2hSM$WXir z-<*G!Y3;}6e=ON)!)Y3R52i{ravqb*mhJTz%cHrUU)3|IRjzHhjXPfFz!VZ|6d zMg;rw0PpsyByp{qC7RK9*>bYGLw6_jk8ZK4y~ zEhiIf?zNr2KJ5=w)nBK6IU$}djaV9TYz$*Y4q&`V5(CLc?y{ro8}fz46z5Q$?$+I6 z+f{t>g`26Zcv$pVeq`;OB&V{ybFBIo@cWMp*OrGxcDnaNMIY{K8GLb#$M@ZKZ(JYN zWR#tEdt#li>B|DFgG7VmTUnr&gMYB7=h&gL@FYo7t(NBLqd0s`D=2VEfbX{uMUnW6$DKyJ@@Zxy4= zhwbWx$X-ec##&8{zUXe}MN-SJRW*^-0DNzP7Vx0hi5zKoyQUg?E$`yWMW3*ScVOPx zA&=Zc87MjtMTmB&+Ws2Lfn2jBePTD#47K&`NO#IV+#kdRk=ulk3NC%0?izO4K_?d% z7StZ7|7m#u3{c_K%>{b*AA!iX#v9Lrv$^RGPR4Xx*?pBRIo*`~Tqm7gpajGtdtH{K zq_>OXm$C-qs%tGi%8+q!5lwuGP-lZi+K`Kk&_HIn<#anP%s{9{Zlst$wlCMj%+y@S z5-*J^TX2uFznj%<2lnWvKz7}nqRt$}1(qw*a=`FWdQJ93D_AxESxorv$*D4uSGI7i zXMp{ezCNk5Y(dP+ENoqUj4f?vz!_+!bFu>i)2 zcd0d+)Wg!VQEMqF!MgUcd@O@+KcE z@;V-jH11cZw~yJbwqHhZd*E-(Mx0X)BFlQ{hq#3vJNXX?bjM4tU%wt&TewU2FRcIc z6e6PxBt4`|0YXtXi+l|lj^ioH?w{vLr;AVNjLx6nUj5lDxNhbVj{_x><11`jjTPkk zLe~Q{s1|b8Y=-po?==Axdfk+~=5#PGWt(8ka<}+;Mr4;OR&qVim=5+Lv)Mv0`n~XF z%eh-OTV3JDyYG1^Qo$F5>@e3(#c4N#kk^j#x6GiP-{2R@4W|3`fe!ixK(WS~zsT)(RDz!J5m&AhAeeOYCOtRySiG@tH&h`a`1Qj>QUVGJchD;qJJ}$htq$=I+bRj(THSU zPb*%)>*eoECJ+mAs5Pu#-}Rn~N?Osj-nE9a`fOK7P5mqvpDGK!mHD|U^q20(PSvIE zkFvGZwv7`EOLFMJR3DU5DiA_oKb5Hw=akAM;CrgcVhlVV>e!Kcxdx1mL~S{*m9nCP zdC<%(x}cw9I4de2D8B_7<|_f+z@b{jisCY}19bfzuhJbppIQ0w8=VSykCJPShYa7j z>iNnyz>0SxU*-ffu&W^YzQ89L%wM$@XlIU-ou@+UXL#rXI}7we|G@qC0#BC>m1ELo zC<^T?>;GVC^B>?9et6c*6`rsi%6jL!_uj*i@mgBbVH*cBR(J+b7WCgCi7ijO;1+uu zWbj~7>2chl;tS7k)GBmT6XwIb84Pm+w?BHnvcMuoZNAWHSj1)ceig+ix2LG1YGr$I zRy@suP}J8rPgrm!@?63=y+9r8-NR~mbLS_WSAA*3>pkkWHQ5qPIx1uJ_O$QD<`#~h z;x>gNxHj`p0E*;<;NFxt!MLT?N4QN_?sLb*(*FFr5!rlcTmZN=&e)_p6Ha-vV##R> z^yiUtk4a@!(rDL%eCC33uiO%R=2}P%dh~|B~Smp$WS8Wv!MsNUt991SVT1N`;TCwxc+xk+5l3(E#(Tc-1y6HQf7F%to}0Fzd7ioH7nG!S)^edG;6 zvww!<<6)O1Z6Z@&FGn!p;S1=lkbs~;guT+${pLS17j{;pUkBLzik60h$p

XPp(MxU!gqXiHt$CZ`P7f9HD=u15N4SIu#0HM2PX31F1c*tYsKV2 z`}P24F=eSjH^`jfRsrz&jp6F2nyIrL9n#2ut&wjhPTN(a0WdL_wQSy^J-LRK^ZCD2fxtCPzSzfqo4qEdGy(fj35FXiDID@n1d<9s=(zRQCRTq z#vCX6*|Ui#OEAU|;N(I^ni&#~H4WN`3=$ocf(WIpJm@Av3;Sj=4x zGMJqn%q*xk1%f;x!-9U@(py-`Ek%Wli6C+Ci)naH&!qd%vz$T6wwrT=Tnjzr?S$eC zS{rrVl!z=F)@jhGBH2yuIUM~-U*>y|n0)JA!qo@5>xYc-cyR>Yj>SgRnd#Vz8?SCJlMs4xVPS%KW)t;b)N+%fw0arOs1CTzylPTC0IvjAp!Hi zbkQAG=(GA<%2M5?YsSF6OR7b)7d+-|TDk_r&77?W#BG&Dt7Y;M2()HVTMzBtk*DO8 zD8HzE)-~u~Z(pBVa7b-?DbBfV*@M|1?a>k3zpKW?dBw0u{gpLO9? z7WRX=aiO^gyzt?`+f`hpRix)fd4T_wK-~H9g#1nQE+W-3%GUGPN!?&^?7P_S=dHl| zYLObQAygC_#6Bj9xnRspKKTiaA5EdPfP;>94w$2C#z0uho4<&I0wc*%^eqZ7QNr$97~HxZ4#Y}cIsu`Jy@MemJx zy`7(RiZL^Yu-2RrApIoXN7Ff(=N$X6mDSUcgn{1~A6_Dl5chBPQ^=nza_}aL7Lu=ShN%-x|q7!iiA3^(CI-sBt<%PnonE^hg0z42 z>Lzu|5QN$cD? z2_&_hjP&>%s{^sBmlgJSdFv!NKK4AY`(W6Ao+yX&lMXCiMtmF@6nlG98Y~dzgH%_n zrJ_k7I%uT0=UmbPQSws;h8G;s0r&AD9P&BNZ=>7+#zaJX@EdHMZ6T-inE=v{aBr@a z>vNvH(R76&`9(_MP)^WM!Du{npv71 z5FWUkq&rhgmi{sRm@O!Ni6Fo2VJom2p@HhK1+Cta55Avuf&_3zZOxyrW@TYG;B2)e zxo#93%rARZ>i)u6gbY73bQro|X~2FEv;1tJD8pY=+5Czhp@ql7#AVL$Ht3?A=) z+3b|SK6-RyRFP$I@+@O{<=YXlB@Ti z%O}?iOT|J92|)JXMhCtWoLW>$r;tY|n=5YQrLy@@bU_AkGrXmn=ilmPbSxyGywRD` zyZ%~&&CZ=dG{{Ib<kc}i2Aj&iwoIZ-bG|b7tb|rpK#(8 zFvgj>|C{4`6xEgGH-B?s9cUffo{nNIL2?J<%fV$nt>_uxranIAHhCY)GNHJ`RDkF&0XX|Ao6Sc%57`#V_?plL5Sh zKr+CY&BQRZf4^;@8%5M6<&-}r`gxnL9q&J0*)cPCS$g?H54}5aiATx~bLa0sAm`$=4o#md9O_cH`mus%qt9Qs z(2z9sszJ(mn5A_~Dj^SPX?7>@j=UnkXt8Y}=frD_bYybz&{96s<3hO?Q|bcV{no5@ zPlJ9S6j2{pGj8|cWt#*ACw$#K1xdHba`8e4ee+I|tzYBi+uU@666YI|W|GqxzG#Ss zJXBU4-nVnAY9KrRl`|Osa~5@HS%vZ`BdL@9g9)$a??+Msl@tcnQ?Pa<|K+=+#QJ+x zsYDue2gL2mM~>~Jn#My*LU}YwB>b2jQUq#B@uyGWb@4 zU&&esGR(HGgB^F>*xra-YiXTWKx*AvSgO($QQ?C_MyJH#&)X0U`POCKyx)bBVD)WI z^^|z+sMhoUS}oW3CNiqSqPqy)bsvk$0Q&>f^w4Lg9FqmnNwmJtAjo%^Y5n7IX4z=! z2hdNLxcOMbh?_R<)f@R~9a$mhI%Vm_GHP$(oUgJ_2S|zK|4LS>-=C@;$_vt2_MyF6f&-gLo#_Wk} zBszwsG}w8i4_1LqU1KDs7m>Z)%zu`A1zIM&^11HVjt6Dvbq{9dfk%A9RlZ`ZycPR{?$0JVub2X zg!jW=zDSn-uzuX<$&&?0|FY*&h+^vOcrnVIKxlN zKxhqDyf!bH&TV*!g|=RUgF(QRkA)5Lf~vy-j3BKqC0cGp|6$=FuvJ^-Ugu)uRSUmx z?6ryB=0c%(5f?knM^QI+gw`xw(PR%8pA>EVbB7t#%g{?NU?PWN7pG0%x>J*de=z}p zB$yRD?Go7`g6s1286MgTND0(~jh|o_!ZAhg-n~PUVzX`Bw1V!8u_+_~I4v%!U#G&C z2i2m$Rq|T27ktmV{;6g!w5b{CuG~O&wx79;5mH8+9g^**x+Y{)W63YQSB8trQ4l{`IH?FWecTr*ZfuqbJv5q|BeU zInFgaK78v28Y-t_8=c~Th^`n=6qQP>XqGmBXfx5)CkW3Noxb=-eK|Vl>jGD8bg+E` zK$DMzJe>haA})YWKl}C^wRX)nx(}$Js1;jOmNHP??tg~vHkhooIe;V1|BZ8;(V1vo zv&qTd*D7aun)B|d5qb zOtNM6nB)f1#a_v5L@qOd^Rl$bg4r|Q79@;52sQ~Aykhy?QU0~NulZMrHZQemH*Uo< z>Bkz)O4y4v)HT(&Pb)#T^(fjH3lU#c0j!Z+K1avN4$9fz{2fKx@c(uJP=Y1;qF zqc<4?0CxbG*WtBcKOPmUSI!rsr7Iy-dV-Fvvp~qcT+(dUumBV1pSG0SRd9*&GFv{e zee-RaHT&fsFurTx>TdFXp!>g1i!Vkdgp;%)SjiR5>PQ+B`zF%ZCB08=h6C|F%yS~) zB4*}01xi!ZMa@A;zROChlG7C;wkE@vHIlT=k|gF#YNs93NduRl@9^O&9s9y@4tJ)` z^Puqww7dWRL47Gb7<>B1;^e+IYJqC-R#N`N(#??Adl~(4EBzULCOHT%!JVRhj9oK0 nDce9>ex7y=%E`waa>!iCzTaB;{^=SG_@{YW?^f~6N6-Er#1!Kx From 881d863bb878ad2df784a91db7047f7d5c5188bb Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 01:35:41 +0100 Subject: [PATCH 043/194] =?UTF-8?q?=F0=9F=91=8C=20Add=20notarized=20update?= =?UTF-8?q?r=20&=20include=20in=20target?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 + .../Contents/CodeResources | Bin 0 -> 1674 bytes .../Contents/Info.plist | 58 ++++++++ .../Contents/MacOS/PHP Monitor Self-Updater | Bin 0 -> 212048 bytes .../Contents/PkgInfo | 1 + .../Contents/Resources/AppIcon.icns | Bin 0 -> 49457 bytes .../Contents/Resources/Assets.car | Bin 0 -> 447864 bytes .../Contents/_CodeSignature/CodeResources | 139 ++++++++++++++++++ phpmon/Domain/App/AppDelegate.swift | 8 - 9 files changed, 202 insertions(+), 8 deletions(-) create mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/CodeResources create mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist create mode 100755 phpmon-updater/PHP Monitor Self-Updater.app/Contents/MacOS/PHP Monitor Self-Updater create mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/PkgInfo create mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/AppIcon.icns create mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/Assets.car create mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 15e7cc6..2c426b9 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -192,6 +192,7 @@ C469E706294CFDF700A82AB2 /* DomainsListTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E702294CFDF700A82AB2 /* DomainsListTest.swift */; }; C46B2648298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; C46B2649298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; + C46B2650298B3C2100084651 /* PHP Monitor Self-Updater.app in Resources */ = {isa = PBXBuildFile; fileRef = C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */; }; C46E206D28299B3800D909D6 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; C46E206E28299B3800D909D6 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; C46E20702829D27F00D909D6 /* AppUpdaterCheckTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */; }; @@ -850,6 +851,7 @@ C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeValetProxy.swift; sourceTree = ""; }; C469E702294CFDF700A82AB2 /* DomainsListTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainsListTest.swift; sourceTree = ""; }; C46B2647298B324100084651 /* ReleaseManifest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseManifest.swift; sourceTree = ""; }; + C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "PHP Monitor Self-Updater.app"; sourceTree = ""; }; C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateChecker.swift; sourceTree = ""; }; C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUpdaterCheckTest.swift; sourceTree = ""; }; C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShellProtocol.swift; sourceTree = ""; }; @@ -1108,6 +1110,7 @@ C406A5F2298AD2CE00B5B85A /* main.swift */, C406A5F6298AD2CF00B5B85A /* Assets.xcassets */, C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */, + C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */, ); path = "phpmon-updater"; sourceTree = ""; @@ -1971,6 +1974,7 @@ C41C1B3B22B0098000E7CF16 /* Assets.xcassets in Resources */, C41C1B3E22B0098000E7CF16 /* Main.storyboard in Resources */, C405A4D124B9B9140062FAFA /* InternetAccessPolicy.plist in Resources */, + C46B2650298B3C2100084651 /* PHP Monitor Self-Updater.app in Resources */, C44C1991276E44CB0072762D /* ProgressWindow.storyboard in Resources */, C4232EE52612526500158FC6 /* Credits.html in Resources */, 54FCFD26276C883F004CE748 /* SelectPreferenceView.xib in Resources */, diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/CodeResources b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/CodeResources new file mode 100644 index 0000000000000000000000000000000000000000..9727e936edd677671ec0d6b201d84aa2a48ac133 GIT binary patch literal 1674 zcmXT6NX}qnU|{&b%D~_Rqz#%_-xxG8{R8493z(T0nV2|S1O$J7v)Zm@z{SR))#h=| zmW7$gpvX|oK!uGtl!ci`*0G=Y@V zwWuUBEi)OS#Idv_BfluKq|#8>KoDde7Y`T2JkPvjJwt8-PLLp*FjHu-ft)z6k&%Ik zp{0?rvAMBf6p(9dU<&0LL>agkDj3K?+$0{HpH@|lQ~F+x4e%*f8{#K5xgztn~6g;7&B%*@(#Q>-|cB{j5*Tg0YnwNUWtg@GG) zy$iR$JGo}@!g#^w)n-Dr8+A@<=j*r}Sk$~_zH;hGg^tBdi~$Bsj6McDKu5|7Gcx{X zVKQJakO%RUStJa^8bqqxcUg3as(2{5o!!?jrBZFetd(it$i|_~#>mRb&dA7OYG7<& z2;&6loVL$>*psI7w9E|B0?`YKNrk3FxE{h28OeVfssMuG>|05UOUwbOhD2gOQGQBka!Ij5VqS_qP%T8XpeR2% zwYWI7SkFKfRWw+_HOZ)$ZOEqSJw?{}~YHLUVvI@4FxS zeKPcrEMqoEHv^dvR+HN>+8L@ zUc$JAQP`y>N^R|eIhv|nPoJ^n``1J*Zv1Z0_{D%96!G9J!fL<_jDM6|vU|h5g%QRb zvzBztyti-f>-D!ztE@I~gC$~MF0nGOFffDhfw@Ere=Y%Kn<8N3B`2mE8<>M^mS-_A z&@<3kptV4wO%19!xhMxIhk^4NOp_i^4k;;P&BZ85nUM`SDKiP8C1qyjbOwVICIeBP zm3_z7Ps_|+KL2ja73RpCbwO7Wj&+wk*nV`;N6wlDvmR$}d|YFAM7?TxU+3S|N z#tI)b|Nm?^TBms;#kQz1W4t z*((Z`hjTk6e=u-iQYf=srB@sF%p-Y5w3<_N)8<*vnYehB!whY{T1?NWR6ow75F)Yp lX5;kt_sTCWR46*K)YkgY-O&4UN*-8V{&X(D__QDc0{|B=5N-ef literal 0 HcmV?d00001 diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist new file mode 100644 index 0000000..7a132a4 --- /dev/null +++ b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist @@ -0,0 +1,58 @@ + + + + + BuildMachineOSBuild + 22D49 + CFBundleDevelopmentRegion + en + CFBundleDisplayName + PHP Monitor Self-Updater + CFBundleExecutable + PHP Monitor Self-Updater + CFBundleIconFile + AppIcon + CFBundleIconName + AppIcon + CFBundleIdentifier + com.nicoverbruggen.phpmon-updater + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + PHP Monitor Self-Updater + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 10 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 14C18 + DTPlatformName + macosx + DTPlatformVersion + 13.1 + DTSDKBuild + 22C55 + DTSDKName + macosx13.1 + DTXcode + 1420 + DTXcodeBuild + 14C18 + LSApplicationCategoryType + public.app-category.developer-tools + LSMinimumSystemVersion + 11.0 + NSHumanReadableCopyright + Copyright © 2023 Nico Verbruggen. All rights reserved. + NSPrincipalClass + NSApplication + + diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/MacOS/PHP Monitor Self-Updater b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/MacOS/PHP Monitor Self-Updater new file mode 100755 index 0000000000000000000000000000000000000000..095568daf11d8cd33b9f130ab41b5671b28c4212 GIT binary patch literal 212048 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

{RvFX#)LLD-I~set|)LI{LR>wYm+=o!*(_@QN=k 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 z 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⁣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 literal 0 HcmV?d00001 diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/Assets.car b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/Assets.car new file mode 100644 index 0000000000000000000000000000000000000000..b2ba8ddf3eae156d6beff352a46a75468172caae GIT binary patch literal 447864 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

Uw6f=XcW)R!d~~U8>sM#R%c-ZgOPUQMKXlnf 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

RxaxR&lP3a3~P?FYJ0f>Cy^LaQCy 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 z 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 literal 0 HcmV?d00001 diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources new file mode 100644 index 0000000..e2f3383 --- /dev/null +++ b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources @@ -0,0 +1,139 @@ + + + + + files + + Resources/AppIcon.icns + + VSWqKULiztWm5Fyz1TCdIXiaCYA= + + Resources/Assets.car + + caD2DnkshwxF8ZF+a32TEMM92WM= + + + files2 + + Resources/AppIcon.icns + + hash2 + + n12aznY7p1uQCn1BLtTKlXdwvn0PGi1gV/8Tma6fPNA= + + + Resources/Assets.car + + hash2 + + 57U75dK4YztzTep0qmB9Oeb0N7OhhGTEau78EmC2SzY= + + + + rules + + ^Resources/ + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^Resources/ + + weight + 20 + + ^Resources/.*\.lproj/ + + optional + + weight + 1000 + + ^Resources/.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Resources/Base\.lproj/ + + weight + 1010 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index b8a93af..fc72c1f 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -69,14 +69,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele } #endif - // swiftlint:disable line_length - let url = NSURL(fileURLWithPath: "/Users/nicoverbruggen/Library/Developer/Xcode/DerivedData/PHP_Monitor-fqtxcemylaleoneoclkzipwmyxxw/Build/Products/Debug/PHP Monitor Self-Updater", isDirectory: true) as URL - let configuration = NSWorkspace.OpenConfiguration() - NSWorkspace.shared.openApplication(at: url, - configuration: configuration) - - // exit(1) - if CommandLine.arguments.contains("--v") { logger.verbosity = .performance Log.info("Extra verbose mode has been activated.") From 202f9ed9d1d356b98d82fb85380872b9df0fa170 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 01:57:38 +0100 Subject: [PATCH 044/194] =?UTF-8?q?=F0=9F=8F=97=20Add=20'Install=20Update'?= =?UTF-8?q?=20button=20to=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdateChecker.swift | 24 +++++++++++++++++++++--- phpmon/Localizable.strings | 6 +++--- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/phpmon/Domain/App/AppUpdateChecker.swift b/phpmon/Domain/App/AppUpdateChecker.swift index 0593b2b..e4e1855 100644 --- a/phpmon/Domain/App/AppUpdateChecker.swift +++ b/phpmon/Domain/App/AppUpdateChecker.swift @@ -11,6 +11,8 @@ import AppKit class AppUpdateChecker { + public static var latestCaskFileContents: String = "" + public static var enabled: Bool = { return Preferences.isEnabled(.automaticBackgroundUpdateCheck) }() @@ -32,9 +34,8 @@ class AppUpdateChecker { command = "curl -s --max-time 5" } - return await Shell.pipe( - "\(command) '\(caskFile)' | grep version" - ).out + AppUpdateChecker.latestCaskFileContents = await Shell.pipe("\(command) '\(caskFile)'").out + return await Shell.pipe("echo \"\(Self.latestCaskFileContents)\" | grep version").out } public static func checkIfNewerVersionIsAvailable( @@ -143,6 +144,23 @@ class AppUpdateChecker { : "updater.installation_source.direct".localized ) .withPrimary( + text: "updater.alerts.buttons.install".localized, + action: { vc in + print(Self.latestCaskFileContents) + let sha256 = system("echo \"\(Self.latestCaskFileContents)\" | grep sha256") + .trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "'", with: "") + .split(separator: " ").last ?? "" + let url = system("echo \"\(Self.latestCaskFileContents)\" | grep url") + .trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "'", with: "") + .split(separator: " ").last ?? "" + + print(sha256) + print(url) + } + ) + .withSecondary( text: "updater.alerts.buttons.release_notes".localized, action: { vc in vc.close(with: .OK) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 97054c1..f59c9b4 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -620,9 +620,8 @@ COMMON TROUBLESHOOTING TIPS "updater.alerts.newer_version_available.title" = "PHP Monitor v%@ is now available!"; "updater.alerts.newer_version_available.subtitle" = "Keeping PHP Monitor up-to-date is highly recommended, since newer versions usually fix bugs and include fixes to support the latest versions of Valet and PHP."; -"updater.alerts.newer_version_available.description" = "PHP Monitor is supposed to be updated via Homebrew, so there is no built-in updater. This check is only meant to inform you of the existence of a new version, you do not need to upgrade."; -"updater.installation_source.brew" = "You appear to have installed PHP Monitor via Homebrew (or have at least tapped the required Caskfile) so it is recommended that you upgrade via the terminal by running `%@`."; -"updater.installation_source.direct" = "You do not appear to have installed PHP Monitor via Homebrew, so you will need to visit GitHub to download the latest update."; +"updater.installation_source.brew" = "The recommended method of installing updates to PHP Monitor is to simply press 'Install Update'. This will launch the separate PHP Monitor Self-Updater, which will update the app. You may also upgrade via the terminal by running `%@`."; +"updater.installation_source.direct" = "The recommended method of installing updates to PHP Monitor is to simply press 'Install Update'. This will launch the separate PHP Monitor Self-Updater, which will update the app."; "updater.alerts.buttons.release_notes" = "View Release Notes"; "updater.alerts.is_latest_version.title" = "PHP Monitor is up-to-date!"; @@ -632,6 +631,7 @@ COMMON TROUBLESHOOTING TIPS "updater.alerts.cannot_check_for_update.subtitle" = "You might not be connected to the internet, are blocking traffic or GitHub is down and won't allow you to check for updates. If you keep seeing this message, you may want to manually check the releases page."; "updater.alerts.cannot_check_for_update.description" = "The currently installed version is: %@. You can go to the list of the latest releases (on GitHub) by clicking on the button on the left."; "updater.alerts.buttons.releases_on_github" = "View Releases"; +"updater.alerts.buttons.install" = "Install Update"; // WARNINGS ABOUT NON-DEFAULT TLD From 1a17a275d4552ab15bac6368524257de1fbd38f2 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 02:02:21 +0100 Subject: [PATCH 045/194] =?UTF-8?q?=F0=9F=8F=97=20Add=20instructions=20for?= =?UTF-8?q?=20next=20step?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdateChecker.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/phpmon/Domain/App/AppUpdateChecker.swift b/phpmon/Domain/App/AppUpdateChecker.swift index e4e1855..0ab6fd8 100644 --- a/phpmon/Domain/App/AppUpdateChecker.swift +++ b/phpmon/Domain/App/AppUpdateChecker.swift @@ -147,6 +147,12 @@ class AppUpdateChecker { text: "updater.alerts.buttons.install".localized, action: { vc in print(Self.latestCaskFileContents) + + // TODO: Find the bundle asset named 'PHP Monitor Self-Updater.app' + // TODO: Move the self-updater to ~/.config/phpmon + // TODO: Write the manifest file to disk (~/.config/phpmon/updater/update.json) + // TODO: Launch the updater app + let sha256 = system("echo \"\(Self.latestCaskFileContents)\" | grep sha256") .trimmingCharacters(in: .whitespacesAndNewlines) .replacingOccurrences(of: "'", with: "") From ca72b799243ea5899c584ff4448e698c66d0d06d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 12:14:30 +0100 Subject: [PATCH 046/194] =?UTF-8?q?=F0=9F=8F=97=20Initial=20working=20vers?= =?UTF-8?q?ion=20of=20the=20updater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This class is in dire need of a refactor, however. --- phpmon/Domain/App/AppDelegate.swift | 1 - phpmon/Domain/App/AppUpdateChecker.swift | 26 +++++++++++++++++------- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index fc72c1f..eea5904 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -63,7 +63,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele override init() { #if DEBUG logger.verbosity = .performance - if let profile = CommandLine.arguments.first(where: { $0.matches(pattern: "--configuration:*") }) { Self.initializeTestingProfile(profile.replacingOccurrences(of: "--configuration:", with: "")) } diff --git a/phpmon/Domain/App/AppUpdateChecker.swift b/phpmon/Domain/App/AppUpdateChecker.swift index 0ab6fd8..3ef34ad 100644 --- a/phpmon/Domain/App/AppUpdateChecker.swift +++ b/phpmon/Domain/App/AppUpdateChecker.swift @@ -146,12 +146,12 @@ class AppUpdateChecker { .withPrimary( text: "updater.alerts.buttons.install".localized, action: { vc in - print(Self.latestCaskFileContents) + let updater = Bundle.main.resourceURL!.path + "/PHP Monitor Self-Updater.app" - // TODO: Find the bundle asset named 'PHP Monitor Self-Updater.app' - // TODO: Move the self-updater to ~/.config/phpmon - // TODO: Write the manifest file to disk (~/.config/phpmon/updater/update.json) - // TODO: Launch the updater app + let updaterDirectory = "~/.config/phpmon/updater" + .replacingOccurrences(of: "~", with: NSHomeDirectory()) + + system_quiet("cp -R \"\(updater)\" \"\(updaterDirectory)/PHP Monitor Self-Updater.app\"") let sha256 = system("echo \"\(Self.latestCaskFileContents)\" | grep sha256") .trimmingCharacters(in: .whitespacesAndNewlines) @@ -162,8 +162,20 @@ class AppUpdateChecker { .replacingOccurrences(of: "'", with: "") .split(separator: " ").last ?? "" - print(sha256) - print(url) + try! FileSystem.writeAtomicallyToFile("\(updaterDirectory)/update.json", content: """ + { + "url": "\(url)", + "sha256": "\(sha256)" + } + """) + + vc.close(with: .OK) + + let updaterUrl = NSURL(fileURLWithPath: updater, isDirectory: true) as URL + let configuration = NSWorkspace.OpenConfiguration() + NSWorkspace.shared.openApplication(at: updaterUrl, configuration: configuration) { _, _ in + print("The updater has been launched successfully") + } } ) .withSecondary( From 1260022d517041b66852e883fdca6b070553bf55 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 12:20:12 +0100 Subject: [PATCH 047/194] =?UTF-8?q?=E2=9C=A8=20Working=20self-updater=20(n?= =?UTF-8?q?eeds=20refactor)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdateChecker.swift | 66 +++++++++++++----------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/phpmon/Domain/App/AppUpdateChecker.swift b/phpmon/Domain/App/AppUpdateChecker.swift index 3ef34ad..fd85ca9 100644 --- a/phpmon/Domain/App/AppUpdateChecker.swift +++ b/phpmon/Domain/App/AppUpdateChecker.swift @@ -77,6 +77,10 @@ class AppUpdateChecker { _ onlineVersion: AppVersion, _ background: Bool ) { + // TODO: Restore original behaviour + notifyAboutNewerVersion(version: onlineVersion) + return + switch onlineVersion.version.versionCompare(currentVersion.version) { case .orderedAscending: Log.info("You are running a newer version of PHP Monitor " @@ -146,36 +150,8 @@ class AppUpdateChecker { .withPrimary( text: "updater.alerts.buttons.install".localized, action: { vc in - let updater = Bundle.main.resourceURL!.path + "/PHP Monitor Self-Updater.app" - - let updaterDirectory = "~/.config/phpmon/updater" - .replacingOccurrences(of: "~", with: NSHomeDirectory()) - - system_quiet("cp -R \"\(updater)\" \"\(updaterDirectory)/PHP Monitor Self-Updater.app\"") - - let sha256 = system("echo \"\(Self.latestCaskFileContents)\" | grep sha256") - .trimmingCharacters(in: .whitespacesAndNewlines) - .replacingOccurrences(of: "'", with: "") - .split(separator: " ").last ?? "" - let url = system("echo \"\(Self.latestCaskFileContents)\" | grep url") - .trimmingCharacters(in: .whitespacesAndNewlines) - .replacingOccurrences(of: "'", with: "") - .split(separator: " ").last ?? "" - - try! FileSystem.writeAtomicallyToFile("\(updaterDirectory)/update.json", content: """ - { - "url": "\(url)", - "sha256": "\(sha256)" - } - """) - + Self.installUpdate() vc.close(with: .OK) - - let updaterUrl = NSURL(fileURLWithPath: updater, isDirectory: true) as URL - let configuration = NSWorkspace.OpenConfiguration() - NSWorkspace.shared.openApplication(at: updaterUrl, configuration: configuration) { _, _ in - print("The updater has been launched successfully") - } } ) .withSecondary( @@ -195,6 +171,38 @@ class AppUpdateChecker { } } + private static func installUpdate() { + let updater = Bundle.main.resourceURL!.path + "/PHP Monitor Self-Updater.app" + + let updaterDirectory = "~/.config/phpmon/updater" + .replacingOccurrences(of: "~", with: NSHomeDirectory()) + + system_quiet("cp -R \"\(updater)\" \"\(updaterDirectory)/PHP Monitor Self-Updater.app\"") + + let sha256 = system("echo \"\(Self.latestCaskFileContents)\" | grep sha256") + .trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "'", with: "") + .split(separator: " ").last ?? "" + + let url = system("echo \"\(Self.latestCaskFileContents)\" | grep url") + .trimmingCharacters(in: .whitespacesAndNewlines) + .replacingOccurrences(of: "'", with: "") + .split(separator: " ").last ?? "" + + try! FileSystem.writeAtomicallyToFile( + "\(updaterDirectory)/update.json", + content: """ + { "url": "\(url)", "sha256": "\(sha256)" } + """ + ) + + let updaterUrl = NSURL(fileURLWithPath: updater, isDirectory: true) as URL + let configuration = NSWorkspace.OpenConfiguration() + NSWorkspace.shared.openApplication(at: updaterUrl, configuration: configuration) { _, _ in + print("The updater has been launched successfully!") + } + } + private static func notifyAboutConnectionIssue() { Task { @MainActor in BetterAlert().withInformation( From 4fd48baf63e8a1d50d7c0143f643a7e33a578b75 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 19:22:52 +0100 Subject: [PATCH 048/194] =?UTF-8?q?=E2=9C=A8=20Use=20concurrency=20for=20u?= =?UTF-8?q?pdater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 20 +++-- phpmon-updater/Alert.swift | 29 ++++++ phpmon-updater/LaunchControl.swift | 52 +++++++++++ phpmon-updater/Updater.swift | 124 +++++++++----------------- 4 files changed, 136 insertions(+), 89 deletions(-) create mode 100644 phpmon-updater/Alert.swift create mode 100644 phpmon-updater/LaunchControl.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 2c426b9..ddebf97 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -579,6 +579,8 @@ C4C3643A28AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3643828AE4FCE00C0770E /* StatusMenu+Items.swift */; }; C4C3ED412783497000AB15D8 /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */; }; C4C3ED4327834C5200AB15D8 /* CustomPrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED4227834C5200AB15D8 /* CustomPrefs.swift */; }; + C4C75F5A298C2D5700DFD82E /* LaunchControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C75F59298C2D5700DFD82E /* LaunchControl.swift */; }; + C4C75F5C298C31C000DFD82E /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C75F5B298C31C000DFD82E /* Alert.swift */; }; C4C8900328F0E28800CE5E97 /* FileSystemProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900228F0E28800CE5E97 /* FileSystemProtocol.swift */; }; C4C8900528F0E3D100CE5E97 /* RealFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900428F0E3D100CE5E97 /* RealFileSystem.swift */; }; C4C8900728F0E3EF00CE5E97 /* ActiveFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900628F0E3EF00CE5E97 /* ActiveFileSystem.swift */; }; @@ -908,6 +910,8 @@ C4C3643828AE4FCE00C0770E /* StatusMenu+Items.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusMenu+Items.swift"; sourceTree = ""; }; C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+Startup.swift"; sourceTree = ""; }; C4C3ED4227834C5200AB15D8 /* CustomPrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPrefs.swift; sourceTree = ""; }; + C4C75F59298C2D5700DFD82E /* LaunchControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchControl.swift; sourceTree = ""; }; + C4C75F5B298C31C000DFD82E /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = ""; }; C4C8900228F0E28800CE5E97 /* FileSystemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSystemProtocol.swift; sourceTree = ""; }; C4C8900428F0E3D100CE5E97 /* RealFileSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealFileSystem.swift; sourceTree = ""; }; C4C8900628F0E3EF00CE5E97 /* ActiveFileSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveFileSystem.swift; sourceTree = ""; }; @@ -1105,9 +1109,11 @@ C406A5F1298AD2CE00B5B85A /* phpmon-updater */ = { isa = PBXGroup; children = ( - C406A601298AD50D00B5B85A /* Updater.swift */, - C46B2647298B324100084651 /* ReleaseManifest.swift */, C406A5F2298AD2CE00B5B85A /* main.swift */, + C4C75F5B298C31C000DFD82E /* Alert.swift */, + C4C75F59298C2D5700DFD82E /* LaunchControl.swift */, + C46B2647298B324100084651 /* ReleaseManifest.swift */, + C406A601298AD50D00B5B85A /* Updater.swift */, C406A5F6298AD2CF00B5B85A /* Assets.xcassets */, C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */, C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */, @@ -2064,7 +2070,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C4C75F5C298C31C000DFD82E /* Alert.swift in Sources */, C406A602298AD50D00B5B85A /* Updater.swift in Sources */, + C4C75F5A298C2D5700DFD82E /* LaunchControl.swift in Sources */, C46B2649298B324100084651 /* ReleaseManifest.swift in Sources */, C41F3D08298AED0D0042ACBF /* System.swift in Sources */, C406A5F3298AD2CE00B5B85A /* main.swift in Sources */, @@ -2802,7 +2810,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 20; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2834,7 +2842,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 20; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2866,7 +2874,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 20; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2898,7 +2906,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 10; + CURRENT_PROJECT_VERSION = 20; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; diff --git a/phpmon-updater/Alert.swift b/phpmon-updater/Alert.swift new file mode 100644 index 0000000..6619b44 --- /dev/null +++ b/phpmon-updater/Alert.swift @@ -0,0 +1,29 @@ +// +// Alert.swift +// PHP Monitor Self-Updater +// +// Created by Nico Verbruggen on 02/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import Cocoa + +class Alert { + public static func show(description: String, shouldExit: Bool = true) async { + await withUnsafeContinuation { continuation in + DispatchQueue.main.async { + let alert = NSAlert() + alert.messageText = "The app could not be updated." + alert.informativeText = description + alert.addButton(withTitle: "OK") + alert.alertStyle = .critical + alert.runModal() + if shouldExit { + exit(0) + } + continuation.resume() + } + } + } +} diff --git a/phpmon-updater/LaunchControl.swift b/phpmon-updater/LaunchControl.swift new file mode 100644 index 0000000..4adceff --- /dev/null +++ b/phpmon-updater/LaunchControl.swift @@ -0,0 +1,52 @@ +// +// LaunchControl.swift +// PHP Monitor Self-Updater +// +// Created by Nico Verbruggen on 02/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import Cocoa + +class LaunchControl { + public static func smartRestart(priority: [String]) async { + for appPath in priority { + if FileManager.default.fileExists(atPath: appPath) { + let app = await LaunchControl.startApplication(at: appPath) + if app != nil { + return + } + } + } + } + + public static func terminateApplications(bundleIds: [String]) async { + let runningApplications = NSWorkspace.shared.runningApplications + + // Look for these instances + let ids = [ + "com.nicoverbruggen.phpmon.dev", + "com.nicoverbruggen.phpmon" + ] + + // Terminate all instances found + for id in ids { + if let phpmon = runningApplications.first(where: { + (application) in return application.bundleIdentifier == id + }) { + phpmon.terminate() + } + } + } + + public static func startApplication(at path: String) async -> NSRunningApplication? { + await withCheckedContinuation { continuation in + let url = NSURL(fileURLWithPath: path, isDirectory: true) as URL + let configuration = NSWorkspace.OpenConfiguration() + NSWorkspace.shared.openApplication(at: url, configuration: configuration) { phpmon, error in + continuation.resume(returning: phpmon) + } + } + } +} diff --git a/phpmon-updater/Updater.swift b/phpmon-updater/Updater.swift index f9abc56..df2bae1 100644 --- a/phpmon-updater/Updater.swift +++ b/phpmon-updater/Updater.swift @@ -15,7 +15,12 @@ class Updater: NSObject, NSApplicationDelegate { var manifest: ReleaseManifest! = nil func applicationDidFinishLaunching(_ aNotification: Notification) { + Task { await self.installUpdate() } + } + + func installUpdate() async { print("PHP MONITOR SELF-UPDATER by Nico Verbruggen") + print("===========================================") self.updaterDirectory = "~/.config/phpmon/updater" .replacingOccurrences(of: "~", with: NSHomeDirectory()) @@ -24,32 +29,25 @@ class Updater: NSObject, NSApplicationDelegate { self.manifestPath = "\(updaterDirectory)/update.json" - print("Checking manifest file at \(manifestPath)") - - // Read out the correct information from the manifest JSON - do { - let manifestText = try String(contentsOfFile: manifestPath) - manifest = try JSONDecoder().decode(ReleaseManifest.self, from: manifestText.data(using: .utf8)!) - } catch { - print("Parsing the manifest failed (or the manifest file doesn't exist)") - showAlert( - title: "Key information about the update is missing", - description: "The app has not been updated. The self-updater only works in combination with PHP Monitor. Please try searching for updates again in PHP Monitor." - ) - exit(0) - } + // Fetch the manifest on the local filesystem + let manifest = await parseManifest()! // Download the latest file - let zipPath = download(manifest) + let zipPath = await download(manifest) // Terminate all instances of PHP Monitor first - terminatePhpMon() + await LaunchControl.terminateApplications(bundleIds: [ + "com.nicoverbruggen.phpmon.dev", + "com.nicoverbruggen.phpmon" + ]) // Install the app based on the zip - let appPath = extractAndInstall(zipPath: zipPath) + let appPath = await extractAndInstall(zipPath: zipPath) // Restart PHP Monitor, this will also close the updater - restartPhpMon(at: appPath) + _ = await LaunchControl.startApplication(at: appPath) + + exit(1) } func applicationWillTerminate(_ aNotification: Notification) { @@ -60,7 +58,23 @@ class Updater: NSObject, NSApplicationDelegate { return false } - private func download(_ manifest: ReleaseManifest) -> String { + private func parseManifest() async -> ReleaseManifest? { + // Read out the correct information from the manifest JSON + print("Checking manifest file at \(manifestPath)...") + + do { + let manifestText = try String(contentsOfFile: manifestPath) + manifest = try JSONDecoder().decode(ReleaseManifest.self, from: manifestText.data(using: .utf8)!) + return manifest + } catch { + print("Parsing the manifest failed (or the manifest file doesn't exist)!") + await Alert.show(description: "The manifest file for a potential update was not found. Please try searching for updates again in PHP Monitor.") + } + + return nil + } + + private func download(_ manifest: ReleaseManifest) async -> String { // Remove all zips system_quiet("rm -rf \(updaterDirectory)/*.zip") @@ -74,9 +88,7 @@ class Updater: NSObject, NSApplicationDelegate { // Ensure the zip exists if filename.isEmpty { print("The update has not been downloaded. Sadly, that means that PHP Monitor cannot not updated!") - showAlert(title: "The update was not downloaded.", - description: "PHP Monitor has not been updated. You may not be connected to the internet or the server may be encountering issues, or the file could not be written to disk. Please try again later!") - exit(1) + await Alert.show(description: "PHP Monitor has not been updated. The update was not downloaded, or the file could not be written to disk. Please try again.") } // Calculate the checksum for the downloaded file @@ -93,18 +105,14 @@ class Updater: NSObject, NSApplicationDelegate { // Make sure the checksum matches before we do anything with the file if checksum != manifest.sha256 { print("The checksums failed to match. Cancelling!") - showAlert( - title: "The downloaded update failed checksum validation", - description: "Please try again! If this issue persists, there may be an issue with the server and I do not recommend upgrading." - ) - exit(0) + await Alert.show(description: "The downloaded update failed checksum validation. Please try again. If this issue persists, there may be an issue with the server and I do not recommend upgrading.") } // Return the path to the zip return "\(updaterDirectory)/\(filename)" } - private func extractAndInstall(zipPath: String) -> String { + private func extractAndInstall(zipPath: String) async -> String { // Remove the directory that will contain the extracted update system_quiet("rm -rf \(updaterDirectory)/extracted") @@ -114,11 +122,7 @@ class Updater: NSObject, NSApplicationDelegate { // Make sure the updater directory exists var isDirectory: ObjCBool = true if !FileManager.default.fileExists(atPath: "\(updaterDirectory)/extracted", isDirectory: &isDirectory) { - showAlert( - title: "The updater directory is missing", - description: "The automatic updater will quit. Make sure that ` ~/.config/phpmon/updater` is writeable." - ) - exit(0) + await Alert.show(description: "The updater directory is missing. The automatic updater will quit. Make sure that ` ~/.config/phpmon/updater` is writeable.") } // Unzip the file @@ -132,11 +136,7 @@ class Updater: NSObject, NSApplicationDelegate { // Make sure the file was extracted if app.isEmpty { - showAlert( - title: "The downloaded file could not be extracted", - description: "The automatic updater will quit. Make sure that ` ~/.config/phpmon/updater` is writeable." - ) - exit(0) + await Alert.show(description: "The downloaded file could not be extracted. The automatic updater will quit. Make sure that ` ~/.config/phpmon/updater` is writeable.") } // Remove the original app @@ -152,52 +152,10 @@ class Updater: NSObject, NSApplicationDelegate { // Remove the manifest system_quiet("rm \(manifestPath)") + // Write a file that is only written when we upgraded successfully + system_quiet("touch \(updaterDirectory)/upgrade.success") + // Return the new location of the app return "/Applications/\(app)" } - - private func terminatePhpMon() { - let runningApplications = NSWorkspace.shared.runningApplications - - // Look for these instances - let ids = [ - "com.nicoverbruggen.phpmon.dev", - "com.nicoverbruggen.phpmon" - ] - - // Terminate all instances found - for id in ids { - if let phpmon = runningApplications.first(where: { - (application) in return application.bundleIdentifier == id - }) { - phpmon.terminate() - } - } - } - - private func smartRestartPhpMon() { - if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor.app") { - restartPhpMon(at: "/Applications/PHP Monitor.app") - } - else if FileManager.default.fileExists(atPath: "/Applications/PHP Monitor DEV.app") { - restartPhpMon(at: "/Applications/PHP Monitor DEV.app") - } - } - - private func restartPhpMon(at path: String) { - let url = NSURL(fileURLWithPath: path, isDirectory: true) as URL - let configuration = NSWorkspace.OpenConfiguration() - NSWorkspace.shared.openApplication(at: url, configuration: configuration) { phpmon, error in - exit(0) - } - } - - private func showAlert(title: String, description: String) { - let alert = NSAlert() - alert.messageText = title - alert.informativeText = description - alert.addButton(withTitle: "OK") - alert.alertStyle = .critical - alert.runModal() - } } From 6d1ea4e93ba519372dbdf9311d19adb357cab7a6 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 19:27:58 +0100 Subject: [PATCH 049/194] =?UTF-8?q?=E2=9C=A8=20Add=20timeout=20for=20updat?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon-updater/Updater.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/phpmon-updater/Updater.swift b/phpmon-updater/Updater.swift index df2bae1..5d6e314 100644 --- a/phpmon-updater/Updater.swift +++ b/phpmon-updater/Updater.swift @@ -79,7 +79,7 @@ class Updater: NSObject, NSApplicationDelegate { system_quiet("rm -rf \(updaterDirectory)/*.zip") // Download the file (and follow redirects + no output on failure) - system_quiet("cd \(updaterDirectory) && curl \(manifest.url) -fLO") + system_quiet("cd \(updaterDirectory) && curl \(manifest.url) -fLO --max-time 20") // Identify the downloaded file let filename = system("cd \(updaterDirectory) && ls | grep .zip") @@ -88,7 +88,7 @@ class Updater: NSObject, NSApplicationDelegate { // Ensure the zip exists if filename.isEmpty { print("The update has not been downloaded. Sadly, that means that PHP Monitor cannot not updated!") - await Alert.show(description: "PHP Monitor has not been updated. The update was not downloaded, or the file could not be written to disk. Please try again.") + await Alert.show(description: "The update could not be downloaded, or the file was not correctly written to disk. \n\nPlease try again. \n\n(Note that the download will time-out after 20 seconds, so for slow connections it is recommended to manually download the update.)") } // Calculate the checksum for the downloaded file From 04c6cef2778b2f0a122dd7b8d5c72ce0a7dbbb76 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 19:31:12 +0100 Subject: [PATCH 050/194] =?UTF-8?q?=F0=9F=94=A5=20Remove=20signed=20Self-U?= =?UTF-8?q?pdater=20from=20repository?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contents/CodeResources | Bin 1674 -> 0 bytes .../Contents/Info.plist | 58 -------- .../Contents/MacOS/PHP Monitor Self-Updater | Bin 212048 -> 0 bytes .../Contents/PkgInfo | 1 - .../Contents/Resources/AppIcon.icns | Bin 49457 -> 0 bytes .../Contents/Resources/Assets.car | Bin 447864 -> 0 bytes .../Contents/_CodeSignature/CodeResources | 139 ------------------ 7 files changed, 198 deletions(-) delete mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/CodeResources delete mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist delete mode 100755 phpmon-updater/PHP Monitor Self-Updater.app/Contents/MacOS/PHP Monitor Self-Updater delete mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/PkgInfo delete mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/AppIcon.icns delete mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/Assets.car delete mode 100644 phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/CodeResources b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/CodeResources deleted file mode 100644 index 9727e936edd677671ec0d6b201d84aa2a48ac133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1674 zcmXT6NX}qnU|{&b%D~_Rqz#%_-xxG8{R8493z(T0nV2|S1O$J7v)Zm@z{SR))#h=| zmW7$gpvX|oK!uGtl!ci`*0G=Y@V zwWuUBEi)OS#Idv_BfluKq|#8>KoDde7Y`T2JkPvjJwt8-PLLp*FjHu-ft)z6k&%Ik zp{0?rvAMBf6p(9dU<&0LL>agkDj3K?+$0{HpH@|lQ~F+x4e%*f8{#K5xgztn~6g;7&B%*@(#Q>-|cB{j5*Tg0YnwNUWtg@GG) zy$iR$JGo}@!g#^w)n-Dr8+A@<=j*r}Sk$~_zH;hGg^tBdi~$Bsj6McDKu5|7Gcx{X zVKQJakO%RUStJa^8bqqxcUg3as(2{5o!!?jrBZFetd(it$i|_~#>mRb&dA7OYG7<& z2;&6loVL$>*psI7w9E|B0?`YKNrk3FxE{h28OeVfssMuG>|05UOUwbOhD2gOQGQBka!Ij5VqS_qP%T8XpeR2% zwYWI7SkFKfRWw+_HOZ)$ZOEqSJw?{}~YHLUVvI@4FxS zeKPcrEMqoEHv^dvR+HN>+8L@ zUc$JAQP`y>N^R|eIhv|nPoJ^n``1J*Zv1Z0_{D%96!G9J!fL<_jDM6|vU|h5g%QRb zvzBztyti-f>-D!ztE@I~gC$~MF0nGOFffDhfw@Ere=Y%Kn<8N3B`2mE8<>M^mS-_A z&@<3kptV4wO%19!xhMxIhk^4NOp_i^4k;;P&BZ85nUM`SDKiP8C1qyjbOwVICIeBP zm3_z7Ps_|+KL2ja73RpCbwO7Wj&+wk*nV`;N6wlDvmR$}d|YFAM7?TxU+3S|N z#tI)b|Nm?^TBms;#kQz1W4t z*((Z`hjTk6e=u-iQYf=srB@sF%p-Y5w3<_N)8<*vnYehB!whY{T1?NWR6ow75F)Yp lX5;kt_sTCWR46*K)YkgY-O&4UN*-8V{&X(D__QDc0{|B=5N-ef diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist deleted file mode 100644 index 7a132a4..0000000 --- a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Info.plist +++ /dev/null @@ -1,58 +0,0 @@ - - - - - BuildMachineOSBuild - 22D49 - CFBundleDevelopmentRegion - en - CFBundleDisplayName - PHP Monitor Self-Updater - CFBundleExecutable - PHP Monitor Self-Updater - CFBundleIconFile - AppIcon - CFBundleIconName - AppIcon - CFBundleIdentifier - com.nicoverbruggen.phpmon-updater - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - PHP Monitor Self-Updater - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 10 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 14C18 - DTPlatformName - macosx - DTPlatformVersion - 13.1 - DTSDKBuild - 22C55 - DTSDKName - macosx13.1 - DTXcode - 1420 - DTXcodeBuild - 14C18 - LSApplicationCategoryType - public.app-category.developer-tools - LSMinimumSystemVersion - 11.0 - NSHumanReadableCopyright - Copyright © 2023 Nico Verbruggen. All rights reserved. - NSPrincipalClass - NSApplication - - diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/MacOS/PHP Monitor Self-Updater b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/MacOS/PHP Monitor Self-Updater deleted file mode 100755 index 095568daf11d8cd33b9f130ab41b5671b28c4212..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 212048 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

{RvFX#)LLD-I~set|)LI{LR>wYm+=o!*(_@QN=k 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 z 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⁣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 diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/Assets.car b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/Resources/Assets.car deleted file mode 100644 index b2ba8ddf3eae156d6beff352a46a75468172caae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447864 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

Uw6f=XcW)R!d~~U8>sM#R%c-ZgOPUQMKXlnf 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

RxaxR&lP3a3~P?FYJ0f>Cy^LaQCy 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 z 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 diff --git a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources b/phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources deleted file mode 100644 index e2f3383..0000000 --- a/phpmon-updater/PHP Monitor Self-Updater.app/Contents/_CodeSignature/CodeResources +++ /dev/null @@ -1,139 +0,0 @@ - - - - - files - - Resources/AppIcon.icns - - VSWqKULiztWm5Fyz1TCdIXiaCYA= - - Resources/Assets.car - - caD2DnkshwxF8ZF+a32TEMM92WM= - - - files2 - - Resources/AppIcon.icns - - hash2 - - n12aznY7p1uQCn1BLtTKlXdwvn0PGi1gV/8Tma6fPNA= - - - Resources/Assets.car - - hash2 - - 57U75dK4YztzTep0qmB9Oeb0N7OhhGTEau78EmC2SzY= - - - - rules - - ^Resources/ - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^version.plist$ - - - rules2 - - .*\.dSYM($|/) - - weight - 11 - - ^(.*/)?\.DS_Store$ - - omit - - weight - 2000 - - ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ - - nested - - weight - 10 - - ^.* - - ^Info\.plist$ - - omit - - weight - 20 - - ^PkgInfo$ - - omit - - weight - 20 - - ^Resources/ - - weight - 20 - - ^Resources/.*\.lproj/ - - optional - - weight - 1000 - - ^Resources/.*\.lproj/locversion.plist$ - - omit - - weight - 1100 - - ^Resources/Base\.lproj/ - - weight - 1010 - - ^[^/]+$ - - nested - - weight - 10 - - ^embedded\.provisionprofile$ - - weight - 20 - - ^version\.plist$ - - weight - 20 - - - - From e541dced4a582b122449195cd4d4c52ebc212498 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 19:32:11 +0100 Subject: [PATCH 051/194] =?UTF-8?q?=E2=9C=A8=20Add=20Self-Updater=20to=20g?= =?UTF-8?q?itignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 80b325c..7602bc9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ phpmon.xcodeproj/project.xcworkspace phpmon.xcodeproj/xcuserdata PHP Monitor.xcodeproj/project.xcworkspace PHP Monitor.xcodeproj/xcuserdata +phpmon-updater/PHP Monitor Self-Updater.app/ .DS_Store \ No newline at end of file From 0bb3e5c173f274cb5e9d797de06855bb2ea192b3 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 19:34:18 +0100 Subject: [PATCH 052/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20information=20a?= =?UTF-8?q?bout=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEVELOPER.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/DEVELOPER.md b/DEVELOPER.md index ff43b26..3856261 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -31,9 +31,10 @@ defaults delete com.nicoverbruggen.phpmon && killall cfprefsd If you'd like to build PHP Monitor yourself, you need: * Xcode (usually the latest version) +* *PHP Monitor Self-Updater.app* in the `phpmon-updater` directory. You can build it yourself, it is included as a target) or copy the signed app so it is included w/ PHP Monitor * The contents of this repository -Once you have downloaded this repository, open `PHP Monitor.xcodeproj`, and you should be able to immediately build the app for your system by pressing Cmd-R. This will create a debug build. (If Xcode complains about code signing, you can turn it off.) +Once you have downloaded this repository, open `PHP Monitor.xcodeproj`, and you should be able to build the app for your system by pressing Cmd-R. This will create a debug build. (If Xcode complains about code signing, you can turn it off.) If you'd like to create a production build, choose "Any Mac" as the target and select Product > Archive. From b182218cadb67f856020c44365e32df719aad05e Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 19:46:07 +0100 Subject: [PATCH 053/194] =?UTF-8?q?=E2=9C=A8=20Notify=20about=20installed?= =?UTF-8?q?=20update?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Filesystem/RealFileSystem.swift | 17 +++++++++++++---- phpmon/Common/Helpers/LocalNotification.swift | 4 ++-- phpmon/Domain/Menu/MainMenu+Startup.swift | 17 +++++++++++++++++ phpmon/Localizable.strings | 3 +++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/phpmon/Common/Filesystem/RealFileSystem.swift b/phpmon/Common/Filesystem/RealFileSystem.swift index e7b87f3..67cfa91 100644 --- a/phpmon/Common/Filesystem/RealFileSystem.swift +++ b/phpmon/Common/Filesystem/RealFileSystem.swift @@ -41,21 +41,30 @@ class RealFileSystem: FileSystemProtocol { } func getShallowContentsOfDirectory(_ path: String) throws -> [String] { - return try FileManager.default.contentsOfDirectory(atPath: path) + return try FileManager.default.contentsOfDirectory( + atPath: path.replacingTildeWithHomeDirectory + ) } func getDestinationOfSymlink(_ path: String) throws -> String { - return try FileManager.default.destinationOfSymbolicLink(atPath: path) + return try FileManager.default.destinationOfSymbolicLink( + atPath: path.replacingTildeWithHomeDirectory + ) } // MARK: - Move & Delete Files func move(from path: String, to newPath: String) throws { - try FileManager.default.moveItem(atPath: path, toPath: newPath) + try FileManager.default.moveItem( + atPath: path.replacingTildeWithHomeDirectory, + toPath: newPath.replacingTildeWithHomeDirectory + ) } func remove(_ path: String) throws { - try FileManager.default.removeItem(atPath: path) + try FileManager.default.removeItem( + atPath: path.replacingTildeWithHomeDirectory + ) } // MARK: — FS Attributes diff --git a/phpmon/Common/Helpers/LocalNotification.swift b/phpmon/Common/Helpers/LocalNotification.swift index 6e4f7bc..eb8de9a 100644 --- a/phpmon/Common/Helpers/LocalNotification.swift +++ b/phpmon/Common/Helpers/LocalNotification.swift @@ -10,8 +10,8 @@ import UserNotifications class LocalNotification { - @MainActor public static func send(title: String, subtitle: String, preference: PreferenceName) { - if !Preferences.isEnabled(preference) { + @MainActor public static func send(title: String, subtitle: String, preference: PreferenceName?) { + if preference != nil && !Preferences.isEnabled(preference!) { return } diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 97cb19c..73d2d4d 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -120,6 +120,9 @@ extension MainMenu { // We are ready! Log.info("PHP Monitor is ready to serve!") + + // Check if we upgraded just now + self.checkIfUpgradeWasPerformed() } /** @@ -188,4 +191,18 @@ extension MainMenu { Log.info("Detected applications: \(appNames)") } + + private func checkIfUpgradeWasPerformed() { + if FileSystem.fileExists("~/.config/phpmon/updater/upgrade.success") { + // Send a notification about the update + Task { @MainActor in + LocalNotification.send( + title: "notification.phpmon_updated.title".localized, + subtitle: "notification.phpmon_updated.desc".localized(App.shortVersion), + preference: nil + ) + try! FileSystem.remove("~/.config/phpmon/updater/upgrade.success") + } + } + } } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index f59c9b4..6c052e4 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -358,6 +358,9 @@ This has no effect on other terminals, only for the particular terminal session "notification.preset_reverted_title" = "Preset reverted"; "notification.preset_reverted_desc" = "The last preset you applied has been undone. Your previous configuration is now active."; +"notification.phpmon_updated.title" = "PHP Monitor has been updated!"; +"notification.phpmon_updated.desc" = "You are now running PHP Monitor v%@."; + // Composer Update "alert.composer_missing.title" = "Composer not found!"; "alert.composer_missing.subtitle" = "PHP Monitor could not find Composer. Make sure that Composer is installed and try again."; From f8642b21e6231bed8272cf3452997c4cd23f80dc Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Feb 2023 19:50:41 +0100 Subject: [PATCH 054/194] =?UTF-8?q?=F0=9F=8F=97=20Test=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/Startup.swift | 5 +++-- phpmon/Domain/Integrations/Valet/Valet.swift | 6 ++---- phpmon/Domain/Menu/MainMenu+Startup.swift | 2 +- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index c3e7ccc..6f7e601 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -134,7 +134,7 @@ class Startup { Paths.optPath ), descriptionText: "startup.errors.php_opt.desc".localized - ), + ) ]), EnvironmentCheckGroup(name: "valet", condition: { return Valet.shared.installed }, checks: [ // ================================================================================= @@ -142,7 +142,8 @@ class Startup { // ================================================================================= EnvironmentCheck( command: { - return !(FileSystem.fileExists(Paths.valet) || FileSystem.fileExists("~/.composer/vendor/bin/valet")) + return !(FileSystem.fileExists(Paths.valet) + || FileSystem.fileExists("~/.composer/vendor/bin/valet")) }, name: "`valet` binary exists", titleText: "startup.errors.valet_executable.title".localized, diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 8b7057e..93a8907 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -62,10 +62,8 @@ class Valet { } lazy var installed: Bool = { - return false - - // TODO: Make this lazy - // return FileSystem.fileExists(Paths.binPath.appending("/valet")) + // TODO: Make this properly lazy + return FileSystem.fileExists(Paths.binPath.appending("/valet")) }() /** diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 73d2d4d..5df6eab 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -122,7 +122,7 @@ extension MainMenu { Log.info("PHP Monitor is ready to serve!") // Check if we upgraded just now - self.checkIfUpgradeWasPerformed() + // self.checkIfUpgradeWasPerformed() } /** From 121a227510d743b23fb03477483c1c62d46c1f35 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 4 Feb 2023 14:47:19 +0100 Subject: [PATCH 055/194] =?UTF-8?q?=F0=9F=91=8C=20Create=20the=20updater?= =?UTF-8?q?=20directory=20to=20prevent=20crash?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdateChecker.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/phpmon/Domain/App/AppUpdateChecker.swift b/phpmon/Domain/App/AppUpdateChecker.swift index fd85ca9..a591d16 100644 --- a/phpmon/Domain/App/AppUpdateChecker.swift +++ b/phpmon/Domain/App/AppUpdateChecker.swift @@ -174,6 +174,8 @@ class AppUpdateChecker { private static func installUpdate() { let updater = Bundle.main.resourceURL!.path + "/PHP Monitor Self-Updater.app" + system_quiet("mkdir -p ~/.config/phpmon/updater 2> /dev/null") + let updaterDirectory = "~/.config/phpmon/updater" .replacingOccurrences(of: "~", with: NSHomeDirectory()) From 5c92d47ff09704cf7c794efec334d5aa86f973cb Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 4 Feb 2023 22:13:43 +0100 Subject: [PATCH 056/194] =?UTF-8?q?=E2=9C=A8=20Parse=20CaskFile,=20WIP=20f?= =?UTF-8?q?or=20new=20AppUpdater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 32 ++++++++++++ phpmon/Common/Core/Constants.swift | 2 +- phpmon/Common/Core/Logger.swift | 2 +- phpmon/Domain/App/AppUpdater.swift | 51 +++++++++++++++++++ .../DomainList/Cells/DomainListPhpCell.swift | 2 +- .../Integrations/Homebrew/CaskFile.swift | 47 +++++++++++++++++ tests/unit/Parsers/CaskFileParserTest.swift | 48 +++++++++++++++++ tests/unit/Test Files/brew/phpmon-dev.rb | 13 +++++ 8 files changed, 194 insertions(+), 3 deletions(-) create mode 100644 phpmon/Domain/App/AppUpdater.swift create mode 100644 phpmon/Domain/Integrations/Homebrew/CaskFile.swift create mode 100644 tests/unit/Parsers/CaskFileParserTest.swift create mode 100644 tests/unit/Test Files/brew/phpmon-dev.rb diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index ddebf97..8aab78f 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -56,6 +56,18 @@ C4080FF727BD8C6400BF2C6B /* BetterAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */; }; C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF927BD956700BF2C6B /* BetterAlertVC.swift */; }; C4080FFB27BD956700BF2C6B /* BetterAlertVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4080FF927BD956700BF2C6B /* BetterAlertVC.swift */; }; + C409349D298EE8E900D25014 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = C409349C298EE8E900D25014 /* AppUpdater.swift */; }; + C409349E298EE8E900D25014 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = C409349C298EE8E900D25014 /* AppUpdater.swift */; }; + C409349F298EE8E900D25014 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = C409349C298EE8E900D25014 /* AppUpdater.swift */; }; + C40934A0298EE8E900D25014 /* AppUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = C409349C298EE8E900D25014 /* AppUpdater.swift */; }; + C40934A2298EEB2C00D25014 /* CaskFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40934A1298EEB2C00D25014 /* CaskFile.swift */; }; + C40934A3298EEB2C00D25014 /* CaskFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40934A1298EEB2C00D25014 /* CaskFile.swift */; }; + C40934A4298EEB2C00D25014 /* CaskFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40934A1298EEB2C00D25014 /* CaskFile.swift */; }; + C40934A5298EEB2C00D25014 /* CaskFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40934A1298EEB2C00D25014 /* CaskFile.swift */; }; + C40934A7298EEB8700D25014 /* phpmon-dev.rb in Resources */ = {isa = PBXBuildFile; fileRef = C40934A6298EEB8700D25014 /* phpmon-dev.rb */; }; + C40934A8298EEB8700D25014 /* phpmon-dev.rb in Resources */ = {isa = PBXBuildFile; fileRef = C40934A6298EEB8700D25014 /* phpmon-dev.rb */; }; + C40934A9298EEB8700D25014 /* phpmon-dev.rb in Resources */ = {isa = PBXBuildFile; fileRef = C40934A6298EEB8700D25014 /* phpmon-dev.rb */; }; + C40934AB298EEDA900D25014 /* CaskFileParserTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40934AA298EEDA900D25014 /* CaskFileParserTest.swift */; }; C40B24F227A310770018C7D2 /* Events.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EC1E72279DFCF40010F296 /* Events.swift */; }; C40B24F427A310830018C7D2 /* StatusMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47331A1247093B7009A0597 /* StatusMenu.swift */; }; C40C5C9C2846A40600E28255 /* Preset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C5C9B2846A40600E28255 /* Preset.swift */; }; @@ -773,6 +785,10 @@ C406A601298AD50D00B5B85A /* Updater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Updater.swift; sourceTree = ""; }; C4080FF527BD8C6400BF2C6B /* BetterAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BetterAlert.swift; sourceTree = ""; }; C4080FF927BD956700BF2C6B /* BetterAlertVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BetterAlertVC.swift; sourceTree = ""; }; + C409349C298EE8E900D25014 /* AppUpdater.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdater.swift; sourceTree = ""; }; + C40934A1298EEB2C00D25014 /* CaskFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskFile.swift; sourceTree = ""; }; + C40934A6298EEB8700D25014 /* phpmon-dev.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = "phpmon-dev.rb"; sourceTree = ""; }; + C40934AA298EEDA900D25014 /* CaskFileParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskFileParserTest.swift; sourceTree = ""; }; C40C5C9B2846A40600E28255 /* Preset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preset.swift; sourceTree = ""; }; C40C7F1D2772136000DDDCDC /* PhpEnv.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpEnv.swift; sourceTree = ""; }; C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = ""; }; @@ -1347,6 +1363,7 @@ C459B4BF27F6094100E9B4B4 /* brew */ = { isa = PBXGroup; children = ( + C40934A6298EEB8700D25014 /* phpmon-dev.rb */, C4E2E85228FC256B003B070C /* brew-services-normal.json */, C4E2E85128FC256B003B070C /* brew-services-sudo.json */, C43A8A1F25D9D1D700591B77 /* brew-formula.json */, @@ -1520,6 +1537,7 @@ isa = PBXGroup; children = ( C4F2E4362752F0870020E974 /* HomebrewDiagnostics.swift */, + C40934A1298EEB2C00D25014 /* CaskFile.swift */, ); path = Homebrew; sourceTree = ""; @@ -1542,6 +1560,7 @@ C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */, C40FE736282ABA4F00A302C2 /* AppVersion.swift */, C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */, + C409349C298EE8E900D25014 /* AppUpdater.swift */, ); path = App; sourceTree = ""; @@ -1628,6 +1647,7 @@ C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */, C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */, C4551656297AED18009B8466 /* ValetRcTest.swift */, + C40934AA298EEDA900D25014 /* CaskFileParserTest.swift */, ); path = Parsers; sourceTree = ""; @@ -1998,6 +2018,7 @@ C4570C3B28FC355300D18420 /* Localizable.strings in Resources */, C4E2E85528FC256B003B070C /* brew-services-sudo.json in Resources */, C4E2E85928FC256B003B070C /* brew-services-normal.json in Resources */, + C40934A8298EEB8700D25014 /* phpmon-dev.rb in Resources */, C4E2E84F28FC22E4003B070C /* brew-formula.json in Resources */, C4E2E86228FC28A6003B070C /* brew-services.json in Resources */, ); @@ -2010,6 +2031,7 @@ C4570C3A28FC355300D18420 /* Localizable.strings in Resources */, C4E2E85628FC256B003B070C /* brew-services-sudo.json in Resources */, C4E2E85A28FC256B003B070C /* brew-services-normal.json in Resources */, + C40934A9298EEB8700D25014 /* phpmon-dev.rb in Resources */, C4E2E85028FC22E4003B070C /* brew-formula.json in Resources */, C4E2E86128FC28A6003B070C /* brew-services.json in Resources */, ); @@ -2036,6 +2058,7 @@ C455165B297AEDB5009B8466 /* valetrc.broken in Resources */, 54A18D40282A566E000A0D81 /* nginx-secure-proxy-custom-tld.test in Resources */, C42CFB1627DFDE7900862737 /* nginx-site.test in Resources */, + C40934A7298EEB8700D25014 /* phpmon-dev.rb in Resources */, C459B4BD27F6093700E9B4B4 /* nginx-proxy.test in Resources */, C4E2E85428FC256B003B070C /* brew-services-sudo.json in Resources */, ); @@ -2088,6 +2111,7 @@ C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */, C4D3661A291173EA006BD146 /* DictionaryExtension.swift in Sources */, C4C8900728F0E3EF00CE5E97 /* ActiveFileSystem.swift in Sources */, + C409349D298EE8E900D25014 /* AppUpdater.swift in Sources */, C4D8016622B1584700C6DA1B /* Startup.swift in Sources */, C42C49DB27C2806F0074ABAC /* MainMenu+FixMyValet.swift in Sources */, C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */, @@ -2157,6 +2181,7 @@ C4CE3BB827B31F2E0086CA49 /* MainMenu+Switcher.swift in Sources */, C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */, C4811D2422D70A4700B5F6B3 /* App.swift in Sources */, + C40934A2298EEB2C00D25014 /* CaskFile.swift in Sources */, C495F5AF28A42E080087F70A /* EnvironmentCheck.swift in Sources */, C46EBC4428DB95F0007ACC74 /* ShellProtocol.swift in Sources */, C41C1B4922B00A9800E7CF16 /* MenuBarImageGenerator.swift in Sources */, @@ -2283,6 +2308,7 @@ C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */, C471E84D28F9BB650021E251 /* ActivePhpInstallation+Checks.swift in Sources */, C471E84E28F9BB650021E251 /* MainMenu.swift in Sources */, + C40934A4298EEB2C00D25014 /* CaskFile.swift in Sources */, C471E84F28F9BB650021E251 /* MainMenu+Startup.swift in Sources */, C471E85028F9BB650021E251 /* MainMenu+Async.swift in Sources */, C471E85128F9BB650021E251 /* MainMenu+Switcher.swift in Sources */, @@ -2382,6 +2408,7 @@ C471E81C28F9BB250021E251 /* BetterAlert.swift in Sources */, C471E7DB28F9BA8F0021E251 /* RealShell.swift in Sources */, C471E7FF28F9BAD10021E251 /* Xdebug.swift in Sources */, + C409349F298EE8E900D25014 /* AppUpdater.swift in Sources */, C471E7F228F9BAC70021E251 /* PhpEnv.swift in Sources */, C471E7E628F9BAC20021E251 /* Process.swift in Sources */, C471E81928F9BAE80021E251 /* NSMenuItemExtension.swift in Sources */, @@ -2422,6 +2449,7 @@ C471E89228F9BB8F0021E251 /* Alert.swift in Sources */, C471E89328F9BB8F0021E251 /* Application.swift in Sources */, C471E89428F9BB8F0021E251 /* LocalNotification.swift in Sources */, + C40934A5298EEB2C00D25014 /* CaskFile.swift in Sources */, C471E89528F9BB8F0021E251 /* MenuBarImageGenerator.swift in Sources */, C471E89628F9BB8F0021E251 /* PMWindowController.swift in Sources */, C471E89728F9BB8F0021E251 /* VersionExtractor.swift in Sources */, @@ -2526,6 +2554,7 @@ C4BB393C2981AFC700F8E797 /* PhpVersionSource.swift in Sources */, C471E7F628F9BAC80021E251 /* PhpHelper.swift in Sources */, C471E7EE28F9BAC30021E251 /* Constants.swift in Sources */, + C40934A0298EE8E900D25014 /* AppUpdater.swift in Sources */, C471E80E28F9BAE80021E251 /* DateExtension.swift in Sources */, C471E7D028F9BA630021E251 /* FileSystemProtocol.swift in Sources */, C471E81228F9BAE80021E251 /* TimeIntervalExtension.swift in Sources */, @@ -2592,6 +2621,7 @@ C485707128BF452E00539B36 /* WarningManager.swift in Sources */, C41CA5EE2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */, C4FACE81288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */, + C40934A3298EEB2C00D25014 /* CaskFile.swift in Sources */, 54D9E0B727E4F51E003B9AD9 /* HotKey.swift in Sources */, C413E43528DA3EB100AE33C7 /* TestableShellTest.swift in Sources */, C4205A7F27F4D21800191A39 /* ValetProxy.swift in Sources */, @@ -2730,6 +2760,7 @@ C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */, C4C0E8E027F88AEB002D32A9 /* FakeDomainScanner.swift in Sources */, C4463FCD29804BCB007B93D5 /* RCFile.swift in Sources */, + C409349E298EE8E900D25014 /* AppUpdater.swift in Sources */, C4AF9F7D275454A900D44ED0 /* ValetVersionExtractorTest.swift in Sources */, C4B56362276AB0A500F12CCB /* VersionExtractorTest.swift in Sources */, C4B585452770FE3900DA4FBE /* RealCommand.swift in Sources */, @@ -2755,6 +2786,7 @@ C4A81CA528C67101008DD9D1 /* PMTableView.swift in Sources */, C45E76152854A65300B4FE0C /* ServicesManager.swift in Sources */, C4D36602291132B7006BD146 /* ValetScanners.swift in Sources */, + C40934AB298EEDA900D25014 /* CaskFileParserTest.swift in Sources */, C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */, C464ADAD275A7A3F003FCD53 /* DomainListWindowController.swift in Sources */, C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */, diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 85fe851..96b5e26 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -41,7 +41,7 @@ struct Constants { 3: // Valet v3 dropped support for v5.6 [ "7.0", "7.1", "7.2", "7.3", "7.4", - "8.0", "8.1", "8.2", + "8.0", "8.1", "8.2", "8.3" // dev ], 4: // Valet v4 dropped support for v7.0 diff --git a/phpmon/Common/Core/Logger.swift b/phpmon/Common/Core/Logger.swift index 8f940b2..c7f331f 100644 --- a/phpmon/Common/Core/Logger.swift +++ b/phpmon/Common/Core/Logger.swift @@ -13,7 +13,7 @@ class Log { static var shared = Log() var logFilePath = "~/.config/phpmon/last_session.log" - + var logExists = false enum Verbosity: Int { diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift new file mode 100644 index 0000000..dfc25ea --- /dev/null +++ b/phpmon/Domain/App/AppUpdater.swift @@ -0,0 +1,51 @@ +// +// AppUpdater.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 04/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class AppUpdater { + + var caskFile: CaskFile? + + public func checkForUpdates(background: Bool) { + guard let caskFile = CaskFile.from( + url: App.version.contains("-dev") + ? Constants.Urls.DevBuildCaskFile + : Constants.Urls.StableBuildCaskFile + ) else { + return presentCouldNotRetrieveUpdate() + } + + self.caskFile = caskFile + + if newerVersionExists() { + presentNewerVersionAvailableAlert() + } else { + if !background { + presentNoNewerVersionAvailableAlert() + } + } + } + + public func newerVersionExists() -> Bool { + // Do the comparison w/ current version + return true + } + + public func presentNewerVersionAvailableAlert() { + + } + + public func presentNoNewerVersionAvailableAlert() { + + } + + public func presentCouldNotRetrieveUpdate() { + + } +} diff --git a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift index 882ff56..5ee78f5 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift @@ -57,7 +57,7 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol { if site.isolatedPhpVersion != nil { return [] } - + guard let install = PhpEnv.phpInstall else { return [] } diff --git a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift new file mode 100644 index 0000000..b2db7f7 --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift @@ -0,0 +1,47 @@ +// +// CaskFile.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 04/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +struct CaskFile { + var properties: [String: String] + + public static func from(url: URL) -> CaskFile? { + let string = try? String(contentsOf: url) + + guard let string else { + return nil + } + + let lines = string.split(separator: "\n") + .filter { $0 != "" } + + if lines.count < 4 { + return nil + } + + if !lines.first!.starts(with: "cask") || !lines.last!.starts(with: "end") { + return nil + } + + var props: [String: String] = [:] + + lines.forEach { line in + let text = line.trimmingCharacters(in: .whitespacesAndNewlines) + let parts = text.split(separator: " ") + + if parts.count == 2 { + props[String(parts[0])] = String(parts[1]) + .replacingOccurrences(of: "\'", with: "") + } + } + + return CaskFile(properties: props) + } + +} diff --git a/tests/unit/Parsers/CaskFileParserTest.swift b/tests/unit/Parsers/CaskFileParserTest.swift new file mode 100644 index 0000000..8cc661b --- /dev/null +++ b/tests/unit/Parsers/CaskFileParserTest.swift @@ -0,0 +1,48 @@ +// +// CaskFileParserTest.swift +// Unit Tests +// +// Created by Nico Verbruggen on 04/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import XCTest + +class CaskFileParserTest: XCTestCase { + + // MARK: - Test Files + static var exampleFilePath: URL { + return Bundle(for: Self.self) + .url(forResource: "phpmon-dev", withExtension: "rb")! + } + + func test_can_extract_fields_from_cask_file() throws { + let caskFile = CaskFile.from(url: CaskFileParserTest.exampleFilePath) + + XCTAssertEqual( + caskFile!.properties["version"], + "5.7.2_1035" + ) + XCTAssertEqual( + caskFile!.properties["homepage"], + "https://phpmon.app" + ) + XCTAssertEqual( + caskFile!.properties["appcast"], + "https://github.com/nicoverbruggen/phpmon/releases.atom" + ) + XCTAssertEqual( + caskFile!.properties["url"], + "https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon-dev.zip" + ) + } + + func test_can_extract_fields_from_remote_cask_file() throws { + let caskFile = CaskFile.from(url: Constants.Urls.StableBuildCaskFile) + + XCTAssertTrue(caskFile!.properties.keys.contains("version")) + XCTAssertTrue(caskFile!.properties.keys.contains("homepage")) + XCTAssertTrue(caskFile!.properties.keys.contains("url")) + XCTAssertTrue(caskFile!.properties.keys.contains("appcast")) + } +} diff --git a/tests/unit/Test Files/brew/phpmon-dev.rb b/tests/unit/Test Files/brew/phpmon-dev.rb new file mode 100644 index 0000000..2b487c9 --- /dev/null +++ b/tests/unit/Test Files/brew/phpmon-dev.rb @@ -0,0 +1,13 @@ +cask 'phpmon-dev' do + depends_on formula: 'gnu-sed' + + version '5.7.2_1035' + sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' + + url 'https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon-dev.zip' + appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom' + name 'PHP Monitor DEV' + homepage 'https://phpmon.app' + + app 'PHP Monitor DEV.app', target: "PHP Monitor DEV.app" +end From 208a4300663533b057bc93e0373bb297f8f14026 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 5 Feb 2023 13:16:04 +0100 Subject: [PATCH 057/194] =?UTF-8?q?=F0=9F=8F=97=20Parse=20CaskFile=20using?= =?UTF-8?q?=20regex?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdater.swift | 4 ++ .../DomainList/Cells/DomainListPhpCell.swift | 3 +- .../Integrations/Homebrew/CaskFile.swift | 38 ++++++++++++++++--- tests/unit/Parsers/CaskFileParserTest.swift | 28 ++++++++------ 4 files changed, 54 insertions(+), 19 deletions(-) diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index dfc25ea..a214c42 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -48,4 +48,8 @@ class AppUpdater { public func presentCouldNotRetrieveUpdate() { } + + private func prepareForDownload() { + + } } diff --git a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift index 5ee78f5..a875ed6 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift @@ -37,7 +37,8 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol { imageViewPhpVersionOK.image = NSImage(named: "Isolated") imageViewPhpVersionOK.toolTip = "domain_list.tooltips.isolated".localized(site.servingPhpVersion) } else { - imageViewPhpVersionOK.isHidden = (site.preferredPhpVersion == "???" || !site.isCompatibleWithPreferredPhpVersion) + imageViewPhpVersionOK.isHidden = (site.preferredPhpVersion == "???" + || !site.isCompatibleWithPreferredPhpVersion) imageViewPhpVersionOK.image = NSImage(named: "Checkmark") imageViewPhpVersionOK.toolTip = "domain_list.tooltips.checkmark".localized(site.preferredPhpVersion) diff --git a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift index b2db7f7..c3f916d 100644 --- a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift +++ b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift @@ -11,10 +11,24 @@ import Foundation struct CaskFile { var properties: [String: String] + var name: String { + return self.properties["name"]! + } + var url: String { + return self.properties["url"]! + } + var sha256: String { + return self.properties["sha256"]! + } + var version: String { + return self.properties["version"]! + } + public static func from(url: URL) -> CaskFile? { let string = try? String(contentsOf: url) guard let string else { + Log.err("The content of the URL for the CaskFile could not be retrieved") return nil } @@ -22,25 +36,37 @@ struct CaskFile { .filter { $0 != "" } if lines.count < 4 { + Log.err("The CaskFile is <4 lines long, which is too short") return nil } if !lines.first!.starts(with: "cask") || !lines.last!.starts(with: "end") { + Log.err("The CaskFile does not start with 'cask' or does not end with 'end'") return nil } var props: [String: String] = [:] - lines.forEach { line in - let text = line.trimmingCharacters(in: .whitespacesAndNewlines) - let parts = text.split(separator: " ") + let regex = try! NSRegularExpression(pattern: "(\\w+)\\s+'([^']+)'") - if parts.count == 2 { - props[String(parts[0])] = String(parts[1]) - .replacingOccurrences(of: "\'", with: "") + for line in lines { + if let match = regex.firstMatch( + in: String(line), + range: NSRange(location: 0, length: line.utf16.count) + ) { + let keyRange = match.range(at: 1) + let valueRange = match.range(at: 2) + let key = (line as NSString).substring(with: keyRange) + let value = (line as NSString).substring(with: valueRange) + props[key] = value } } + for required in ["version", "sha256", "url", "name"] where !props.keys.contains(required) { + Log.err("Property '\(required)' expected on CaskFile, assuming CaskFile is invalid") + return nil + } + return CaskFile(properties: props) } diff --git a/tests/unit/Parsers/CaskFileParserTest.swift b/tests/unit/Parsers/CaskFileParserTest.swift index 8cc661b..314c473 100644 --- a/tests/unit/Parsers/CaskFileParserTest.swift +++ b/tests/unit/Parsers/CaskFileParserTest.swift @@ -17,32 +17,36 @@ class CaskFileParserTest: XCTestCase { } func test_can_extract_fields_from_cask_file() throws { - let caskFile = CaskFile.from(url: CaskFileParserTest.exampleFilePath) + guard let caskFile = CaskFile.from(url: CaskFileParserTest.exampleFilePath) else { + return XCTFail("The CaskFile could not be parsed, check the log for more info") + } XCTAssertEqual( - caskFile!.properties["version"], + caskFile.version, "5.7.2_1035" ) XCTAssertEqual( - caskFile!.properties["homepage"], - "https://phpmon.app" + caskFile.sha256, + "1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a" ) XCTAssertEqual( - caskFile!.properties["appcast"], - "https://github.com/nicoverbruggen/phpmon/releases.atom" + caskFile.name, + "PHP Monitor DEV" ) XCTAssertEqual( - caskFile!.properties["url"], + caskFile.url, "https://github.com/nicoverbruggen/phpmon/releases/download/v5.7.2/phpmon-dev.zip" ) } func test_can_extract_fields_from_remote_cask_file() throws { - let caskFile = CaskFile.from(url: Constants.Urls.StableBuildCaskFile) + guard let caskFile = CaskFile.from(url: Constants.Urls.StableBuildCaskFile) else { + return XCTFail("The remote CaskFile could not be parsed, check the log for more info") + } - XCTAssertTrue(caskFile!.properties.keys.contains("version")) - XCTAssertTrue(caskFile!.properties.keys.contains("homepage")) - XCTAssertTrue(caskFile!.properties.keys.contains("url")) - XCTAssertTrue(caskFile!.properties.keys.contains("appcast")) + XCTAssertTrue(caskFile.properties.keys.contains("version")) + XCTAssertTrue(caskFile.properties.keys.contains("homepage")) + XCTAssertTrue(caskFile.properties.keys.contains("url")) + XCTAssertTrue(caskFile.properties.keys.contains("appcast")) } } From 78e682688b4d0039147de0fea827d33d3be8bc90 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 5 Feb 2023 17:18:09 +0100 Subject: [PATCH 058/194] =?UTF-8?q?=F0=9F=8F=97=20Improved=20version=20com?= =?UTF-8?q?parison?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xcschemes/PHP Monitor DEV.xcscheme | 4 +- phpmon/Domain/App/AppDelegate.swift | 2 +- phpmon/Domain/App/AppUpdateChecker.swift | 4 +- phpmon/Domain/App/AppUpdater.swift | 54 +++++++++++++++---- phpmon/Domain/App/AppVersion.swift | 26 +++++++-- .../Integrations/Homebrew/CaskFile.swift | 10 +++- phpmon/Domain/Menu/MainMenu+Startup.swift | 21 ++------ tests/unit/Parsers/CaskFileParserTest.swift | 8 +-- tests/unit/Versions/AppVersionTest.swift | 24 +++++++-- 9 files changed, 109 insertions(+), 44 deletions(-) diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index fad7a23..4b4f8a9 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -91,7 +91,7 @@ + isEnabled = "NO"> + isEnabled = "NO"> Bool { - if Int(onlineVersion.build!)! > Int(currentVersion.build!)! { + if onlineVersion.build! > currentVersion.build! { Log.info("There is a newer build of PHP Monitor available! " + "(\(onlineVersion.computerReadable) > \(currentVersion.computerReadable))") notifyAboutNewerVersion(version: onlineVersion) return true - } else if Int(onlineVersion.build!)! < Int(currentVersion.build!)! { + } else if onlineVersion.build! < currentVersion.build! { Log.info("You are running a newer build of PHP Monitor " + "(\(currentVersion.computerReadable) > \(onlineVersion.computerReadable)).") if !background { notifyVersionDoesNotNeedUpgrade() } diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index a214c42..4517e5e 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -10,15 +10,26 @@ import Foundation class AppUpdater { - var caskFile: CaskFile? + public func checkForUpdates(background: Bool) async { + if background && !Preferences.isEnabled(.automaticBackgroundUpdateCheck) { + Log.info("Skipping automatic update check due to user preference.") + return + } - public func checkForUpdates(background: Bool) { - guard let caskFile = CaskFile.from( - url: App.version.contains("-dev") + Log.info("The app will search for updates...") + + let caskUrl = App.version.contains("-dev") ? Constants.Urls.DevBuildCaskFile : Constants.Urls.StableBuildCaskFile - ) else { - return presentCouldNotRetrieveUpdate() + + guard let caskFile = await CaskFile.from(url: caskUrl) else { + Log.err("The contents of the CaskFile at '\(caskUrl.absoluteString)' could not be retrieved.") + + if !background { + return presentCouldNotRetrieveUpdate() + } else { + return + } } self.caskFile = caskFile @@ -32,24 +43,49 @@ class AppUpdater { } } + var caskFile: CaskFile! + public func newerVersionExists() -> Bool { + let currentVersion = AppVersion.fromCurrentVersion() + + guard let onlineVersion = AppVersion.from(caskFile.version) else { + Log.err("The version string from the CaskFile could not be read.") + return false + } + + Log.info("You are running \(currentVersion.computerReadable). The latest version is: \(onlineVersion.computerReadable).") + // Do the comparison w/ current version return true } public func presentNewerVersionAvailableAlert() { - + print("A newer version is available") } public func presentNoNewerVersionAvailableAlert() { - + print("No newer version is available") } public func presentCouldNotRetrieveUpdate() { - + print("Could not retrieve update") } private func prepareForDownload() { } + + public static func checkIfUpgradeWasPerformed() { + if FileSystem.fileExists("~/.config/phpmon/updater/upgrade.success") { + // Send a notification about the update + Task { @MainActor in + LocalNotification.send( + title: "notification.phpmon_updated.title".localized, + subtitle: "notification.phpmon_updated.desc".localized(App.shortVersion), + preference: nil + ) + try! FileSystem.remove("~/.config/phpmon/updater/upgrade.success") + } + } + } } diff --git a/phpmon/Domain/App/AppVersion.swift b/phpmon/Domain/App/AppVersion.swift index 62231b4..04d0f69 100644 --- a/phpmon/Domain/App/AppVersion.swift +++ b/phpmon/Domain/App/AppVersion.swift @@ -8,14 +8,14 @@ import Foundation -class AppVersion { +class AppVersion: Comparable { var version: String - var build: String? + var build: Int? var suffix: String? init(version: String, build: String?, suffix: String? = nil) { self.version = version - self.build = build + self.build = Int(build ?? "0") self.suffix = suffix } @@ -75,11 +75,27 @@ class AppVersion { } var computerReadable: String { - return "\(version)_\(build ?? "0")" + return "\(version)_\(build ?? 0)" } var humanReadable: String { - return "\(version) (\(build ?? "???"))" + return "\(version) (\(build ?? 0))" } + // MARK: - Comparable Protocol + + static func < (lhs: AppVersion, rhs: AppVersion) -> Bool { + let comparisonResult = lhs.version.versionCompare(rhs.version) + + if comparisonResult == .orderedDescending { + return true + } + + return lhs.build ?? 0 < rhs.build ?? 0 + } + + static func == (lhs: AppVersion, rhs: AppVersion) -> Bool { + lhs.version.versionCompare(rhs.version) == .orderedSame + && lhs.build == rhs.build + } } diff --git a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift index c3f916d..c1ebea1 100644 --- a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift +++ b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift @@ -24,8 +24,14 @@ struct CaskFile { return self.properties["version"]! } - public static func from(url: URL) -> CaskFile? { - let string = try? String(contentsOf: url) + public static func from(url: URL) async -> CaskFile? { + var string: String? + + if url.scheme == "file" { + string = try? String(contentsOf: url) + } else { + string = await Shell.pipe("curl -s --max-time 10 '\(url.absoluteString)'").out + } guard let string else { Log.err("The content of the URL for the CaskFile could not be retrieved") diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 5df6eab..c25bebe 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -112,7 +112,10 @@ extension MainMenu { } } - await AppUpdateChecker.checkIfNewerVersionIsAvailable() + // await AppUpdateChecker.checkIfNewerVersionIsAvailable() + await AppUpdater().checkForUpdates(background: true) + + exit(0) } // Check if the linked version has changed between launches of phpmon @@ -122,7 +125,7 @@ extension MainMenu { Log.info("PHP Monitor is ready to serve!") // Check if we upgraded just now - // self.checkIfUpgradeWasPerformed() + AppUpdater.checkIfUpgradeWasPerformed() } /** @@ -191,18 +194,4 @@ extension MainMenu { Log.info("Detected applications: \(appNames)") } - - private func checkIfUpgradeWasPerformed() { - if FileSystem.fileExists("~/.config/phpmon/updater/upgrade.success") { - // Send a notification about the update - Task { @MainActor in - LocalNotification.send( - title: "notification.phpmon_updated.title".localized, - subtitle: "notification.phpmon_updated.desc".localized(App.shortVersion), - preference: nil - ) - try! FileSystem.remove("~/.config/phpmon/updater/upgrade.success") - } - } - } } diff --git a/tests/unit/Parsers/CaskFileParserTest.swift b/tests/unit/Parsers/CaskFileParserTest.swift index 314c473..df065d3 100644 --- a/tests/unit/Parsers/CaskFileParserTest.swift +++ b/tests/unit/Parsers/CaskFileParserTest.swift @@ -16,8 +16,8 @@ class CaskFileParserTest: XCTestCase { .url(forResource: "phpmon-dev", withExtension: "rb")! } - func test_can_extract_fields_from_cask_file() throws { - guard let caskFile = CaskFile.from(url: CaskFileParserTest.exampleFilePath) else { + func test_can_extract_fields_from_cask_file() async throws { + guard let caskFile = await CaskFile.from(url: CaskFileParserTest.exampleFilePath) else { return XCTFail("The CaskFile could not be parsed, check the log for more info") } @@ -39,8 +39,8 @@ class CaskFileParserTest: XCTestCase { ) } - func test_can_extract_fields_from_remote_cask_file() throws { - guard let caskFile = CaskFile.from(url: Constants.Urls.StableBuildCaskFile) else { + func test_can_extract_fields_from_remote_cask_file() async throws { + guard let caskFile = await CaskFile.from(url: Constants.Urls.StableBuildCaskFile) else { return XCTFail("The remote CaskFile could not be parsed, check the log for more info") } diff --git a/tests/unit/Versions/AppVersionTest.swift b/tests/unit/Versions/AppVersionTest.swift index c2ac087..1ff9836 100644 --- a/tests/unit/Versions/AppVersionTest.swift +++ b/tests/unit/Versions/AppVersionTest.swift @@ -28,7 +28,7 @@ class AppVersionTest: XCTestCase { XCTAssertNotNil(version) XCTAssertEqual("1.0.0", version?.version) - XCTAssertEqual("600", version?.build) + XCTAssertEqual(600, version?.build) XCTAssertEqual(nil, version?.suffix) } @@ -46,7 +46,7 @@ class AppVersionTest: XCTestCase { XCTAssertNotNil(version) XCTAssertEqual("1.0.0", version?.version) - XCTAssertEqual("870", version?.build) + XCTAssertEqual(870, version?.build) XCTAssertEqual("dev", version?.suffix) } @@ -55,8 +55,26 @@ class AppVersionTest: XCTestCase { XCTAssertNotNil(version) XCTAssertEqual("1.0.0", version?.version) - XCTAssertEqual("870", version?.build) + XCTAssertEqual(870, version?.build) XCTAssertEqual("dev", version?.suffix) } + func test_can_compare_version_numbers() { + var first = AppVersion.from("5.0_100")! + var second = AppVersion.from("5.0_101")! + XCTAssertTrue(second > first) + + first = AppVersion.from("5.0_100")! + second = AppVersion.from("5.0_100")! + XCTAssertFalse(second > first) + + first = AppVersion.from("5.0_100")! + second = AppVersion.from("5.0.1_100")! + XCTAssertFalse(second > first) + + first = AppVersion.from("5.0_102")! + second = AppVersion.from("5.0_101")! + XCTAssertFalse(second > first) + } + } From 300880f3e5fc5162b9f1af9c872247b4a8c24caf Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 5 Feb 2023 17:58:44 +0100 Subject: [PATCH 059/194] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Reworked=20updater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 - phpmon/Domain/App/AppUpdateChecker.swift | 228 ------------------ phpmon/Domain/App/AppUpdater.swift | 143 ++++++++--- phpmon/Domain/App/AppVersion.swift | 2 +- .../Integrations/Homebrew/CaskFile.swift | 1 - phpmon/Domain/Menu/MainMenu+Startup.swift | 7 +- phpmon/Domain/Menu/MainMenu.swift | 2 +- phpmon/Localizable.strings | 5 +- tests/unit/Parsers/CaskFileParserTest.swift | 1 + tests/unit/Versions/AppVersionTest.swift | 20 +- 10 files changed, 130 insertions(+), 289 deletions(-) delete mode 100644 phpmon/Domain/App/AppUpdateChecker.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8aab78f..d12de6e 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -205,8 +205,6 @@ C46B2648298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; C46B2649298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; C46B2650298B3C2100084651 /* PHP Monitor Self-Updater.app in Resources */ = {isa = PBXBuildFile; fileRef = C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */; }; - C46E206D28299B3800D909D6 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; - C46E206E28299B3800D909D6 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; C46E20702829D27F00D909D6 /* AppUpdaterCheckTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */; }; C46EBC4428DB95F0007ACC74 /* ShellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */; }; C46EBC4528DB95F0007ACC74 /* ShellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */; }; @@ -347,7 +345,6 @@ C471E84628F9BB650021E251 /* InterAppHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EED88827A48778006D7272 /* InterAppHandler.swift */; }; C471E84728F9BB650021E251 /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; C471E84828F9BB650021E251 /* EnvironmentCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */; }; - C471E84928F9BB650021E251 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; C471E84A28F9BB650021E251 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C471E84B28F9BB650021E251 /* ServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E76132854A65300B4FE0C /* ServicesManager.swift */; }; C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; @@ -437,7 +434,6 @@ C471E8A928F9BB8F0021E251 /* InterAppHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EED88827A48778006D7272 /* InterAppHandler.swift */; }; C471E8AA28F9BB8F0021E251 /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; C471E8AB28F9BB8F0021E251 /* EnvironmentCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */; }; - C471E8AC28F9BB8F0021E251 /* AppUpdateChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */; }; C471E8AD28F9BB8F0021E251 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C471E8AE28F9BB8F0021E251 /* ServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E76132854A65300B4FE0C /* ServicesManager.swift */; }; C471E8AF28F9BB8F0021E251 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; @@ -870,7 +866,6 @@ C469E702294CFDF700A82AB2 /* DomainsListTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainsListTest.swift; sourceTree = ""; }; C46B2647298B324100084651 /* ReleaseManifest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseManifest.swift; sourceTree = ""; }; C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "PHP Monitor Self-Updater.app"; sourceTree = ""; }; - C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppUpdateChecker.swift; sourceTree = ""; }; C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUpdaterCheckTest.swift; sourceTree = ""; }; C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShellProtocol.swift; sourceTree = ""; }; C46EBC4628DB9644007ACC74 /* RealShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealShell.swift; sourceTree = ""; }; @@ -1557,7 +1552,6 @@ C4EED88827A48778006D7272 /* InterAppHandler.swift */, C4D8016522B1584700C6DA1B /* Startup.swift */, C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */, - C46E206C28299B3800D909D6 /* AppUpdateChecker.swift */, C40FE736282ABA4F00A302C2 /* AppVersion.swift */, C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */, C409349C298EE8E900D25014 /* AppUpdater.swift */, @@ -2198,7 +2192,6 @@ C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */, C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */, C41CA5ED2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */, - C46E206D28299B3800D909D6 /* AppUpdateChecker.swift in Sources */, C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */, 03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */, C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */, @@ -2302,7 +2295,6 @@ C471E84628F9BB650021E251 /* InterAppHandler.swift in Sources */, C471E84728F9BB650021E251 /* Startup.swift in Sources */, C471E84828F9BB650021E251 /* EnvironmentCheck.swift in Sources */, - C471E84928F9BB650021E251 /* AppUpdateChecker.swift in Sources */, C471E84A28F9BB650021E251 /* AppVersion.swift in Sources */, C471E84B28F9BB650021E251 /* ServicesManager.swift in Sources */, C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */, @@ -2472,7 +2464,6 @@ C471E8A928F9BB8F0021E251 /* InterAppHandler.swift in Sources */, C471E8AA28F9BB8F0021E251 /* Startup.swift in Sources */, C471E8AB28F9BB8F0021E251 /* EnvironmentCheck.swift in Sources */, - C471E8AC28F9BB8F0021E251 /* AppUpdateChecker.swift in Sources */, C471E8AD28F9BB8F0021E251 /* AppVersion.swift in Sources */, C471E8AE28F9BB8F0021E251 /* ServicesManager.swift in Sources */, C471E8AF28F9BB8F0021E251 /* EnvironmentManager.swift in Sources */, @@ -2795,7 +2786,6 @@ C46EBC4B28DB966A007ACC74 /* TestableShell.swift in Sources */, C40FE73B282ABB2E00A302C2 /* AppVersionTest.swift in Sources */, C4F780C625D80B75000DBC97 /* XibLoadable.swift in Sources */, - C46E206E28299B3800D909D6 /* AppUpdateChecker.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/phpmon/Domain/App/AppUpdateChecker.swift b/phpmon/Domain/App/AppUpdateChecker.swift deleted file mode 100644 index 6eabd73..0000000 --- a/phpmon/Domain/App/AppUpdateChecker.swift +++ /dev/null @@ -1,228 +0,0 @@ -// -// Updater.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 09/05/2022. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation -import AppKit - -class AppUpdateChecker { - - public static var latestCaskFileContents: String = "" - - public static var enabled: Bool = { - return Preferences.isEnabled(.automaticBackgroundUpdateCheck) - }() - - public static var isDev: Bool = { - return App.version.contains("-dev") - }() - - public static func retrieveVersionFromCask( - _ initiatedFromBackground: Bool = true - ) async -> String { - let caskFile = App.version.contains("-dev") - ? Constants.Urls.DevBuildCaskFile.absoluteString - : Constants.Urls.StableBuildCaskFile.absoluteString - - var command = "curl -s" - - if initiatedFromBackground { - command = "curl -s --max-time 5" - } - - AppUpdateChecker.latestCaskFileContents = await Shell.pipe("\(command) '\(caskFile)'").out - return await Shell.pipe("echo \"\(Self.latestCaskFileContents)\" | grep version").out - } - - public static func checkIfNewerVersionIsAvailable( - initiatedFromBackground: Bool = true - ) async { - if initiatedFromBackground { - if !Preferences.isEnabled(.automaticBackgroundUpdateCheck) { - Log.info("Automatic updates are disabled. No check will be performed.") - return - } - - Log.info("Automatic updates are enabled, a check will be performed.") - } - - let versionString = await retrieveVersionFromCask(initiatedFromBackground) - - guard let onlineVersion = AppVersion.from(versionString) else { - Log.err("We couldn't check for updates!") - - // Only notify about connection issues if the request to check for updates was explicit - if !initiatedFromBackground { - notifyAboutConnectionIssue() - } - - return - } - - let currentVersion = AppVersion.fromCurrentVersion() - - handleVersionComparison( - currentVersion, - onlineVersion, - initiatedFromBackground - ) - } - - private static func handleVersionComparison( - _ currentVersion: AppVersion, - _ onlineVersion: AppVersion, - _ background: Bool - ) { - // TODO: Restore original behaviour - notifyAboutNewerVersion(version: onlineVersion) - return - - switch onlineVersion.version.versionCompare(currentVersion.version) { - case .orderedAscending: - Log.info("You are running a newer version of PHP Monitor " - + "(\(currentVersion.computerReadable) > \(onlineVersion.computerReadable)).") - if !background { notifyVersionDoesNotNeedUpgrade() } - case .orderedDescending: - Log.info("There is a newer version (\(onlineVersion)) available! " - + "(\(onlineVersion.computerReadable) > \(currentVersion.computerReadable))") - notifyAboutNewerVersion(version: onlineVersion) - case .orderedSame: - if currentVersion.build != nil - && onlineVersion.build != nil - && buildDiffers(currentVersion, onlineVersion, background) { - return - } - - Log.info("The installed version (\(currentVersion.computerReadable)) matches the latest release " - + "(\(onlineVersion.computerReadable)).") - if !background { notifyVersionDoesNotNeedUpgrade() } - } - } - - private static func buildDiffers( - _ currentVersion: AppVersion, - _ onlineVersion: AppVersion, - _ background: Bool - ) -> Bool { - if onlineVersion.build! > currentVersion.build! { - Log.info("There is a newer build of PHP Monitor available! " - + "(\(onlineVersion.computerReadable) > \(currentVersion.computerReadable))") - notifyAboutNewerVersion(version: onlineVersion) - return true - } else if onlineVersion.build! < currentVersion.build! { - Log.info("You are running a newer build of PHP Monitor " - + "(\(currentVersion.computerReadable) > \(onlineVersion.computerReadable)).") - if !background { notifyVersionDoesNotNeedUpgrade() } - return true - } - - return false - } - - private static func notifyVersionDoesNotNeedUpgrade() { - Task { @MainActor in - BetterAlert().withInformation( - title: "updater.alerts.is_latest_version.title".localized, - subtitle: "updater.alerts.is_latest_version.subtitle".localized(App.shortVersion), - description: "" - ) - .withPrimary(text: "generic.ok".localized) - .show() - } - } - - private static func notifyAboutNewerVersion(version: AppVersion) { - let devSuffix = isDev ? "-dev" : "" - let command = isDev ? "brew upgrade phpmon-dev" : "brew upgrade phpmon" - - Task { @MainActor in - BetterAlert().withInformation( - title: "updater.alerts.newer_version_available.title".localized(version.humanReadable), - subtitle: "updater.alerts.newer_version_available.subtitle".localized, - description: HomebrewDiagnostics.customCaskInstalled - ? "updater.installation_source.brew".localized(command) - : "updater.installation_source.direct".localized - ) - .withPrimary( - text: "updater.alerts.buttons.install".localized, - action: { vc in - Self.installUpdate() - vc.close(with: .OK) - } - ) - .withSecondary( - text: "updater.alerts.buttons.release_notes".localized, - action: { vc in - vc.close(with: .OK) - - NSWorkspace.shared.open( - Constants.Urls.GitHubReleases.appendingPathComponent("/tag/v\(version.tagged)\(devSuffix)") - ) - } - ) - .withTertiary(text: "Dismiss", action: { vc in - vc.close(with: .OK) - }) - .show() - } - } - - private static func installUpdate() { - let updater = Bundle.main.resourceURL!.path + "/PHP Monitor Self-Updater.app" - - system_quiet("mkdir -p ~/.config/phpmon/updater 2> /dev/null") - - let updaterDirectory = "~/.config/phpmon/updater" - .replacingOccurrences(of: "~", with: NSHomeDirectory()) - - system_quiet("cp -R \"\(updater)\" \"\(updaterDirectory)/PHP Monitor Self-Updater.app\"") - - let sha256 = system("echo \"\(Self.latestCaskFileContents)\" | grep sha256") - .trimmingCharacters(in: .whitespacesAndNewlines) - .replacingOccurrences(of: "'", with: "") - .split(separator: " ").last ?? "" - - let url = system("echo \"\(Self.latestCaskFileContents)\" | grep url") - .trimmingCharacters(in: .whitespacesAndNewlines) - .replacingOccurrences(of: "'", with: "") - .split(separator: " ").last ?? "" - - try! FileSystem.writeAtomicallyToFile( - "\(updaterDirectory)/update.json", - content: """ - { "url": "\(url)", "sha256": "\(sha256)" } - """ - ) - - let updaterUrl = NSURL(fileURLWithPath: updater, isDirectory: true) as URL - let configuration = NSWorkspace.OpenConfiguration() - NSWorkspace.shared.openApplication(at: updaterUrl, configuration: configuration) { _, _ in - print("The updater has been launched successfully!") - } - } - - private static func notifyAboutConnectionIssue() { - Task { @MainActor in - BetterAlert().withInformation( - title: "updater.alerts.cannot_check_for_update.title".localized, - subtitle: "updater.alerts.cannot_check_for_update.subtitle".localized, - description: "updater.alerts.cannot_check_for_update.description".localized( - App.version - ) - ) - .withTertiary( - text: "updater.alerts.buttons.releases_on_github".localized, - action: { _ in - NSWorkspace.shared.open(Constants.Urls.GitHubReleases) - } - ) - .withPrimary(text: "generic.ok".localized) - .show() - } - } - -} diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index 4517e5e..9e867d9 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -7,75 +7,160 @@ // import Foundation +import Cocoa class AppUpdater { + var caskFile: CaskFile! + var latestVersionOnline: AppVersion! + var interactive: Bool = false - public func checkForUpdates(background: Bool) async { - if background && !Preferences.isEnabled(.automaticBackgroundUpdateCheck) { + public func checkForUpdates(interactive: Bool) async { + self.interactive = interactive + + if interactive && !Preferences.isEnabled(.automaticBackgroundUpdateCheck) { Log.info("Skipping automatic update check due to user preference.") return } Log.info("The app will search for updates...") - let caskUrl = App.version.contains("-dev") + let caskUrl = App.identifier.contains(".dev") ? Constants.Urls.DevBuildCaskFile : Constants.Urls.StableBuildCaskFile guard let caskFile = await CaskFile.from(url: caskUrl) else { Log.err("The contents of the CaskFile at '\(caskUrl.absoluteString)' could not be retrieved.") - - if !background { - return presentCouldNotRetrieveUpdate() - } else { - return - } + return presentCouldNotRetrieveUpdateIfInteractive() } self.caskFile = caskFile - if newerVersionExists() { - presentNewerVersionAvailableAlert() - } else { - if !background { - presentNoNewerVersionAvailableAlert() - } - } - } - - var caskFile: CaskFile! - - public func newerVersionExists() -> Bool { let currentVersion = AppVersion.fromCurrentVersion() guard let onlineVersion = AppVersion.from(caskFile.version) else { Log.err("The version string from the CaskFile could not be read.") - return false + return presentCouldNotRetrieveUpdateIfInteractive() } - Log.info("You are running \(currentVersion.computerReadable). The latest version is: \(onlineVersion.computerReadable).") + latestVersionOnline = onlineVersion + Log.info("The latest version read from '\(caskUrl.lastPathComponent)' is: v\(onlineVersion.computerReadable).") - // Do the comparison w/ current version - return true + if latestVersionOnline > currentVersion { + presentNewerVersionAvailableAlert() + } else if interactive { + presentNoNewerVersionAvailableAlert() + } } + private func presentCouldNotRetrieveUpdateIfInteractive() { + if interactive { + return presentCouldNotRetrieveUpdate() + } else { + return + } + } + + // MARK: - Alerts + public func presentNewerVersionAvailableAlert() { - print("A newer version is available") + let command = App.identifier.contains(".dev") + ? "brew upgrade phpmon-dev" + : "brew upgrade phpmon" + + Task { @MainActor in + BetterAlert().withInformation( + title: "updater.alerts.newer_version_available.title" + .localized(latestVersionOnline.humanReadable), + subtitle: "updater.alerts.newer_version_available.subtitle" + .localized, + description: HomebrewDiagnostics.customCaskInstalled + ? "updater.installation_source.brew".localized(command) + : "updater.installation_source.direct".localized + ) + .withPrimary( + text: "updater.alerts.buttons.install".localized, + action: { vc in + self.prepareForDownload() + vc.close(with: .OK) + } + ) + .withSecondary( + text: "updater.alerts.buttons.release_notes".localized, + action: { _ in + let urlSegments = self.caskFile.url.split(separator: "/") + let tag = urlSegments[urlSegments.count - 2] // ../download/{tag}/{file.zip} + NSWorkspace.shared.open( + Constants.Urls.GitHubReleases.appendingPathComponent("/tag/\(tag)") + ) + } + ) + .withTertiary(text: "updater.alerts.buttons.dismiss".localized, action: { vc in + vc.close(with: .OK) + }) + .show() + } } public func presentNoNewerVersionAvailableAlert() { - print("No newer version is available") + Task { @MainActor in + BetterAlert().withInformation( + title: "updater.alerts.is_latest_version.title".localized, + subtitle: "updater.alerts.is_latest_version.subtitle".localized(App.shortVersion), + description: "" + ) + .withPrimary(text: "generic.ok".localized) + .show() + } } public func presentCouldNotRetrieveUpdate() { - print("Could not retrieve update") + Task { @MainActor in + BetterAlert().withInformation( + title: "updater.alerts.cannot_check_for_update.title".localized, + subtitle: "updater.alerts.cannot_check_for_update.subtitle".localized, + description: "updater.alerts.cannot_check_for_update.description".localized( + App.version + ) + ) + .withTertiary( + text: "updater.alerts.buttons.releases_on_github".localized, + action: { _ in + NSWorkspace.shared.open(Constants.Urls.GitHubReleases) + } + ) + .withPrimary(text: "generic.ok".localized) + .show() + } } + // MARK: - Preparing for Self-Updater + private func prepareForDownload() { + let updater = Bundle.main.resourceURL!.path + "/PHP Monitor Self-Updater.app" + system_quiet("mkdir -p ~/.config/phpmon/updater 2> /dev/null") + + let updaterDirectory = "~/.config/phpmon/updater" + .replacingOccurrences(of: "~", with: NSHomeDirectory()) + + system_quiet("cp -R \"\(updater)\" \"\(updaterDirectory)/PHP Monitor Self-Updater.app\"") + + try! FileSystem.writeAtomicallyToFile( + "\(updaterDirectory)/update.json", + content: "{ \"url\": \"\(caskFile.url)\", \"sha256\": \"\(caskFile.sha256)\" }" + ) + + let updaterUrl = NSURL(fileURLWithPath: updater, isDirectory: true) as URL + let configuration = NSWorkspace.OpenConfiguration() + + NSWorkspace.shared.openApplication(at: updaterUrl, configuration: configuration) { _, _ in + Log.info("The updater has been launched successfully!") + } } - public static func checkIfUpgradeWasPerformed() { + // MARK: - Checking if Self-Updater Worked + + public static func checkIfUpdateWasPerformed() { if FileSystem.fileExists("~/.config/phpmon/updater/upgrade.success") { // Send a notification about the update Task { @MainActor in diff --git a/phpmon/Domain/App/AppVersion.swift b/phpmon/Domain/App/AppVersion.swift index 04d0f69..5d020af 100644 --- a/phpmon/Domain/App/AppVersion.swift +++ b/phpmon/Domain/App/AppVersion.swift @@ -87,7 +87,7 @@ class AppVersion: Comparable { static func < (lhs: AppVersion, rhs: AppVersion) -> Bool { let comparisonResult = lhs.version.versionCompare(rhs.version) - if comparisonResult == .orderedDescending { + if comparisonResult == .orderedAscending { return true } diff --git a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift index c1ebea1..c2ddf0b 100644 --- a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift +++ b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift @@ -75,5 +75,4 @@ struct CaskFile { return CaskFile(properties: props) } - } diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index c25bebe..dc5d183 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -112,10 +112,7 @@ extension MainMenu { } } - // await AppUpdateChecker.checkIfNewerVersionIsAvailable() - await AppUpdater().checkForUpdates(background: true) - - exit(0) + await AppUpdater().checkForUpdates(interactive: false) } // Check if the linked version has changed between launches of phpmon @@ -125,7 +122,7 @@ extension MainMenu { Log.info("PHP Monitor is ready to serve!") // Check if we upgraded just now - AppUpdater.checkIfUpgradeWasPerformed() + AppUpdater.checkIfUpdateWasPerformed() } /** diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index f8fd480..1675fe7 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -199,7 +199,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate } @objc func checkForUpdates() { - Task { await AppUpdateChecker.checkIfNewerVersionIsAvailable(initiatedFromBackground: false) } + Task { await AppUpdater().checkForUpdates(interactive: true) } } // MARK: - Menu Delegate diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 6c052e4..eaa0e4d 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -623,8 +623,8 @@ COMMON TROUBLESHOOTING TIPS "updater.alerts.newer_version_available.title" = "PHP Monitor v%@ is now available!"; "updater.alerts.newer_version_available.subtitle" = "Keeping PHP Monitor up-to-date is highly recommended, since newer versions usually fix bugs and include fixes to support the latest versions of Valet and PHP."; -"updater.installation_source.brew" = "The recommended method of installing updates to PHP Monitor is to simply press 'Install Update'. This will launch the separate PHP Monitor Self-Updater, which will update the app. You may also upgrade via the terminal by running `%@`."; -"updater.installation_source.direct" = "The recommended method of installing updates to PHP Monitor is to simply press 'Install Update'. This will launch the separate PHP Monitor Self-Updater, which will update the app."; +"updater.installation_source.brew" = "The recommended method of installing updates to PHP Monitor is to simply press 'Install Update'.\n\n(You may also upgrade via the terminal by running `%@`, but this is not recommended.)"; +"updater.installation_source.direct" = "The recommended method of installing updates to PHP Monitor is to simply press 'Install Update'."; "updater.alerts.buttons.release_notes" = "View Release Notes"; "updater.alerts.is_latest_version.title" = "PHP Monitor is up-to-date!"; @@ -635,6 +635,7 @@ COMMON TROUBLESHOOTING TIPS "updater.alerts.cannot_check_for_update.description" = "The currently installed version is: %@. You can go to the list of the latest releases (on GitHub) by clicking on the button on the left."; "updater.alerts.buttons.releases_on_github" = "View Releases"; "updater.alerts.buttons.install" = "Install Update"; +"updater.alerts.buttons.dismiss" = "Dismiss"; // WARNINGS ABOUT NON-DEFAULT TLD diff --git a/tests/unit/Parsers/CaskFileParserTest.swift b/tests/unit/Parsers/CaskFileParserTest.swift index df065d3..5e1c18b 100644 --- a/tests/unit/Parsers/CaskFileParserTest.swift +++ b/tests/unit/Parsers/CaskFileParserTest.swift @@ -49,4 +49,5 @@ class CaskFileParserTest: XCTestCase { XCTAssertTrue(caskFile.properties.keys.contains("url")) XCTAssertTrue(caskFile.properties.keys.contains("appcast")) } + } diff --git a/tests/unit/Versions/AppVersionTest.swift b/tests/unit/Versions/AppVersionTest.swift index 1ff9836..6886bae 100644 --- a/tests/unit/Versions/AppVersionTest.swift +++ b/tests/unit/Versions/AppVersionTest.swift @@ -60,21 +60,17 @@ class AppVersionTest: XCTestCase { } func test_can_compare_version_numbers() { - var first = AppVersion.from("5.0_100")! - var second = AppVersion.from("5.0_101")! - XCTAssertTrue(second > first) + // Build is newer + XCTAssertTrue(AppVersion.from("5.0_101")! > AppVersion.from("5.0_100")!) - first = AppVersion.from("5.0_100")! - second = AppVersion.from("5.0_100")! - XCTAssertFalse(second > first) + // Version and build is the same + XCTAssertFalse(AppVersion.from("5.0.0_100")! > AppVersion.from("5.0_100")!) - first = AppVersion.from("5.0_100")! - second = AppVersion.from("5.0.1_100")! - XCTAssertFalse(second > first) + // Version is newer + XCTAssertTrue(AppVersion.from("5.1_100")! > AppVersion.from("5.0_100")!) - first = AppVersion.from("5.0_102")! - second = AppVersion.from("5.0_101")! - XCTAssertFalse(second > first) + // Build is older + XCTAssertFalse(AppVersion.from("5.0_101")! > AppVersion.from("5.0_102")!) } } From 762527ece9e35319d6da3bef6c6e7a0b411dbafe Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 5 Feb 2023 18:11:47 +0100 Subject: [PATCH 060/194] =?UTF-8?q?=F0=9F=91=8C=20Add=20quotes=20around=20?= =?UTF-8?q?paths?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 40 ++++++++----------- phpmon-updater/ReleaseManifest.swift | 14 ------- phpmon-updater/Updater.swift | 22 +++++----- phpmon-updater/{Alert.swift => Utility.swift} | 7 +++- phpmon-updater/main.swift | 2 +- 5 files changed, 35 insertions(+), 50 deletions(-) delete mode 100644 phpmon-updater/ReleaseManifest.swift rename phpmon-updater/{Alert.swift => Utility.swift} (88%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index d12de6e..b09885e 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -202,9 +202,6 @@ C469E700294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */; }; C469E701294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */; }; C469E706294CFDF700A82AB2 /* DomainsListTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E702294CFDF700A82AB2 /* DomainsListTest.swift */; }; - C46B2648298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; - C46B2649298B324100084651 /* ReleaseManifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46B2647298B324100084651 /* ReleaseManifest.swift */; }; - C46B2650298B3C2100084651 /* PHP Monitor Self-Updater.app in Resources */ = {isa = PBXBuildFile; fileRef = C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */; }; C46E20702829D27F00D909D6 /* AppUpdaterCheckTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */; }; C46EBC4428DB95F0007ACC74 /* ShellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */; }; C46EBC4528DB95F0007ACC74 /* ShellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */; }; @@ -530,6 +527,7 @@ C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; C48D6C71279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; C48D6C75279CD3E400F26D7E /* PhpVersionNumberTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C73279CD3E400F26D7E /* PhpVersionNumberTest.swift */; }; + C491997029901AF6001F3A21 /* PHP Monitor Self-Updater.app in Resources */ = {isa = PBXBuildFile; fileRef = C491996F29901AF5001F3A21 /* PHP Monitor Self-Updater.app */; }; C4927F0B27B2DFC200C55AFD /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4927F0A27B2DFC200C55AFD /* Errors.swift */; }; C4927F0C27B2DFC200C55AFD /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4927F0A27B2DFC200C55AFD /* Errors.swift */; }; C493084A279F331F009C240B /* AddSiteVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4930849279F331F009C240B /* AddSiteVC.swift */; }; @@ -588,7 +586,7 @@ C4C3ED412783497000AB15D8 /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */; }; C4C3ED4327834C5200AB15D8 /* CustomPrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED4227834C5200AB15D8 /* CustomPrefs.swift */; }; C4C75F5A298C2D5700DFD82E /* LaunchControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C75F59298C2D5700DFD82E /* LaunchControl.swift */; }; - C4C75F5C298C31C000DFD82E /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C75F5B298C31C000DFD82E /* Alert.swift */; }; + C4C75F5C298C31C000DFD82E /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C75F5B298C31C000DFD82E /* Utility.swift */; }; C4C8900328F0E28800CE5E97 /* FileSystemProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900228F0E28800CE5E97 /* FileSystemProtocol.swift */; }; C4C8900528F0E3D100CE5E97 /* RealFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900428F0E3D100CE5E97 /* RealFileSystem.swift */; }; C4C8900728F0E3EF00CE5E97 /* ActiveFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8900628F0E3EF00CE5E97 /* ActiveFileSystem.swift */; }; @@ -864,8 +862,6 @@ C464ADB1275A87CA003FCD53 /* DomainListCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListCellProtocol.swift; sourceTree = ""; }; C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeValetProxy.swift; sourceTree = ""; }; C469E702294CFDF700A82AB2 /* DomainsListTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainsListTest.swift; sourceTree = ""; }; - C46B2647298B324100084651 /* ReleaseManifest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReleaseManifest.swift; sourceTree = ""; }; - C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "PHP Monitor Self-Updater.app"; sourceTree = ""; }; C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUpdaterCheckTest.swift; sourceTree = ""; }; C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShellProtocol.swift; sourceTree = ""; }; C46EBC4628DB9644007ACC74 /* RealShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealShell.swift; sourceTree = ""; }; @@ -890,6 +886,7 @@ C48D0C9225CC804200CC7490 /* XibLoadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XibLoadable.swift; sourceTree = ""; }; C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionNumber.swift; sourceTree = ""; }; C48D6C73279CD3E400F26D7E /* PhpVersionNumberTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpVersionNumberTest.swift; sourceTree = ""; }; + C491996F29901AF5001F3A21 /* PHP Monitor Self-Updater.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "PHP Monitor Self-Updater.app"; sourceTree = ""; }; C4927F0A27B2DFC200C55AFD /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; C4930849279F331F009C240B /* AddSiteVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddSiteVC.swift; sourceTree = ""; }; C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentCheck.swift; sourceTree = ""; }; @@ -922,7 +919,7 @@ C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+Startup.swift"; sourceTree = ""; }; C4C3ED4227834C5200AB15D8 /* CustomPrefs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomPrefs.swift; sourceTree = ""; }; C4C75F59298C2D5700DFD82E /* LaunchControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchControl.swift; sourceTree = ""; }; - C4C75F5B298C31C000DFD82E /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = ""; }; + C4C75F5B298C31C000DFD82E /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C4C8900228F0E28800CE5E97 /* FileSystemProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSystemProtocol.swift; sourceTree = ""; }; C4C8900428F0E3D100CE5E97 /* RealFileSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealFileSystem.swift; sourceTree = ""; }; C4C8900628F0E3EF00CE5E97 /* ActiveFileSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveFileSystem.swift; sourceTree = ""; }; @@ -1121,13 +1118,12 @@ isa = PBXGroup; children = ( C406A5F2298AD2CE00B5B85A /* main.swift */, - C4C75F5B298C31C000DFD82E /* Alert.swift */, - C4C75F59298C2D5700DFD82E /* LaunchControl.swift */, - C46B2647298B324100084651 /* ReleaseManifest.swift */, C406A601298AD50D00B5B85A /* Updater.swift */, + C4C75F5B298C31C000DFD82E /* Utility.swift */, + C4C75F59298C2D5700DFD82E /* LaunchControl.swift */, C406A5F6298AD2CF00B5B85A /* Assets.xcassets */, C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */, - C46B264F298B3C2100084651 /* PHP Monitor Self-Updater.app */, + C491996F29901AF5001F3A21 /* PHP Monitor Self-Updater.app */, ); path = "phpmon-updater"; sourceTree = ""; @@ -1994,7 +1990,7 @@ C41C1B3B22B0098000E7CF16 /* Assets.xcassets in Resources */, C41C1B3E22B0098000E7CF16 /* Main.storyboard in Resources */, C405A4D124B9B9140062FAFA /* InternetAccessPolicy.plist in Resources */, - C46B2650298B3C2100084651 /* PHP Monitor Self-Updater.app in Resources */, + C491997029901AF6001F3A21 /* PHP Monitor Self-Updater.app in Resources */, C44C1991276E44CB0072762D /* ProgressWindow.storyboard in Resources */, C4232EE52612526500158FC6 /* Credits.html in Resources */, 54FCFD26276C883F004CE748 /* SelectPreferenceView.xib in Resources */, @@ -2087,10 +2083,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C4C75F5C298C31C000DFD82E /* Alert.swift in Sources */, + C4C75F5C298C31C000DFD82E /* Utility.swift in Sources */, C406A602298AD50D00B5B85A /* Updater.swift in Sources */, C4C75F5A298C2D5700DFD82E /* LaunchControl.swift in Sources */, - C46B2649298B324100084651 /* ReleaseManifest.swift in Sources */, C41F3D08298AED0D0042ACBF /* System.swift in Sources */, C406A5F3298AD2CE00B5B85A /* main.swift in Sources */, ); @@ -2236,7 +2231,6 @@ C4D9ADC8277611A0007277F4 /* InternalSwitcher.swift in Sources */, C4FACE83288F1F9700FC478F /* OnboardingWindowController.swift in Sources */, C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */, - C46B2648298B324100084651 /* ReleaseManifest.swift in Sources */, C4BF56AB2949381100379603 /* FakeValetInteractor.swift in Sources */, C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */, C451AFF62969E40F0078E617 /* HelpButton.swift in Sources */, @@ -2832,7 +2826,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 20; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2864,7 +2858,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 20; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2896,7 +2890,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 20; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -2928,7 +2922,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 20; + CURRENT_PROJECT_VERSION = 25; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3077,7 +3071,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1100; + CURRENT_PROJECT_VERSION = 1200; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3106,7 +3100,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1100; + CURRENT_PROJECT_VERSION = 1200; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3334,7 +3328,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1100; + CURRENT_PROJECT_VERSION = 1200; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3444,7 +3438,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1100; + CURRENT_PROJECT_VERSION = 1200; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon-updater/ReleaseManifest.swift b/phpmon-updater/ReleaseManifest.swift deleted file mode 100644 index 117ba7c..0000000 --- a/phpmon-updater/ReleaseManifest.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// UpdateManifest.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 02/02/2023. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation - -struct ReleaseManifest: Codable { - let url: String - let sha256: String -} diff --git a/phpmon-updater/Updater.swift b/phpmon-updater/Updater.swift index 5d6e314..abbfa89 100644 --- a/phpmon-updater/Updater.swift +++ b/phpmon-updater/Updater.swift @@ -1,5 +1,5 @@ // -// AppDelegate.swift +// Updater.swift // PHP Monitor Updater // // Created by Nico Verbruggen on 01/02/2023. @@ -79,10 +79,10 @@ class Updater: NSObject, NSApplicationDelegate { system_quiet("rm -rf \(updaterDirectory)/*.zip") // Download the file (and follow redirects + no output on failure) - system_quiet("cd \(updaterDirectory) && curl \(manifest.url) -fLO --max-time 20") + system_quiet("cd \"\(updaterDirectory)\" && curl \(manifest.url) -fLO --max-time 20") // Identify the downloaded file - let filename = system("cd \(updaterDirectory) && ls | grep .zip") + let filename = system("cd \"\(updaterDirectory)\" && ls | grep .zip") .trimmingCharacters(in: .whitespacesAndNewlines) // Ensure the zip exists @@ -92,7 +92,7 @@ class Updater: NSObject, NSApplicationDelegate { } // Calculate the checksum for the downloaded file - let checksum = system("openssl dgst -sha256 \(updaterDirectory)/\(filename) | awk '{print $NF}'") + let checksum = system("openssl dgst -sha256 \"\(updaterDirectory)/\(filename)\" | awk '{print $NF}'") .trimmingCharacters(in: .whitespacesAndNewlines) // Compare the checksums @@ -114,10 +114,10 @@ class Updater: NSObject, NSApplicationDelegate { private func extractAndInstall(zipPath: String) async -> String { // Remove the directory that will contain the extracted update - system_quiet("rm -rf \(updaterDirectory)/extracted") + system_quiet("rm -rf \"\(updaterDirectory)/extracted\"") // Recreate the directory where we will unzip the .app file - system_quiet("mkdir -p \(updaterDirectory)/extracted") + system_quiet("mkdir -p \"\(updaterDirectory)/extracted\"") // Make sure the updater directory exists var isDirectory: ObjCBool = true @@ -126,10 +126,10 @@ class Updater: NSObject, NSApplicationDelegate { } // Unzip the file - system_quiet("unzip \(zipPath) -d \(updaterDirectory)/extracted") + system_quiet("unzip \"\(zipPath)\" -d \"\(updaterDirectory)/extracted\"") // Find the .app file - let app = system("ls \(updaterDirectory)/extracted | grep .app") + let app = system("ls \"\(updaterDirectory)/extracted\" | grep .app") .trimmingCharacters(in: .whitespacesAndNewlines) print("Finished extracting: \(updaterDirectory)/extracted/\(app)") @@ -147,13 +147,13 @@ class Updater: NSObject, NSApplicationDelegate { system_quiet("mv \"\(updaterDirectory)/extracted/\(app)\" \"/Applications/\(app)\"") // Remove the zip - system_quiet("rm \(zipPath)") + system_quiet("rm \"\(zipPath)\"") // Remove the manifest - system_quiet("rm \(manifestPath)") + system_quiet("rm \"\(manifestPath)\"") // Write a file that is only written when we upgraded successfully - system_quiet("touch \(updaterDirectory)/upgrade.success") + system_quiet("touch \"\(updaterDirectory)/upgrade.success\"") // Return the new location of the app return "/Applications/\(app)" diff --git a/phpmon-updater/Alert.swift b/phpmon-updater/Utility.swift similarity index 88% rename from phpmon-updater/Alert.swift rename to phpmon-updater/Utility.swift index 6619b44..e980ba6 100644 --- a/phpmon-updater/Alert.swift +++ b/phpmon-updater/Utility.swift @@ -1,5 +1,5 @@ // -// Alert.swift +// Utility.swift // PHP Monitor Self-Updater // // Created by Nico Verbruggen on 02/02/2023. @@ -27,3 +27,8 @@ class Alert { } } } + +public struct ReleaseManifest: Codable { + let url: String + let sha256: String +} diff --git a/phpmon-updater/main.swift b/phpmon-updater/main.swift index 46757f2..6008aa0 100644 --- a/phpmon-updater/main.swift +++ b/phpmon-updater/main.swift @@ -1,6 +1,6 @@ // // AppDelegate.swift -// PHP Monitor Updater +// PHP Monitor Self-Updater // // Created by Nico Verbruggen on 01/02/2023. // Copyright © 2023 Nico Verbruggen. All rights reserved. From e7e8658ea6fc7f014aa422189dc7e244b73cbc62 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 5 Feb 2023 18:51:49 +0100 Subject: [PATCH 061/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20README=20about?= =?UTF-8?q?=20new=20updater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e467e1a..abd66dd 100644 --- a/README.md +++ b/README.md @@ -43,22 +43,24 @@ valet install valet trust ``` -Once that's done, you can install PHP Monitor via Homebrew (recommended), or (alternatively) you may download the latest release on GitHub. +#### Manual installation (first time only) -To install via Homebrew, run: +Once that's done, you can [download the latest release](https://github.com/nicoverbruggen/phpmon/releases/latest), unzip it and place it in `/Applications`. + +#### Installation via Homebrew + +If you prefer to install the app via Homebrew, you can also do this: ```sh brew tap nicoverbruggen/homebrew-cask brew install --cask phpmon ``` -To upgrade your existing installation, run: +## ⬆️ How to update -```sh -brew upgrade phpmon -``` +The recommended method of updating your app to the latest version is to use **the built-in updater**. -(You may need to run `brew update` or `brew update-reset` first in order to update the cask file if you ran a Homebrew operation recently.) +If that doesn't work or you prefer Homebrew, you can also upgrade via those methods. ## ⚡️ Launchers (Alfred, Raycast) From a36487f6e027494842291f2fe995af3ea62d509a Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 6 Feb 2023 19:09:14 +0100 Subject: [PATCH 062/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20generated=20script?= =?UTF-8?q?=20(#231)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Actions.swift | 19 ++++++++++--------- phpmon/Common/Core/Homebrew.swift | 6 +++++- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/phpmon/Common/Core/Actions.swift b/phpmon/Common/Core/Actions.swift index 86408df..8abc354 100644 --- a/phpmon/Common/Core/Actions.swift +++ b/phpmon/Common/Core/Actions.swift @@ -13,21 +13,21 @@ class Actions { // MARK: - Services public static func restartPhpFpm() async { - await brew("services restart \(Homebrew.Formulae.php.name)", sudo: Homebrew.Formulae.php.elevated) + await brew("services restart \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) } public static func restartNginx() async { - await brew("services restart \(Homebrew.Formulae.nginx.name)", sudo: Homebrew.Formulae.nginx.elevated) + await brew("services restart \(Homebrew.Formulae.nginx)", sudo: Homebrew.Formulae.nginx.elevated) } public static func restartDnsMasq() async { - await brew("services restart \(Homebrew.Formulae.dnsmasq.name)", sudo: Homebrew.Formulae.dnsmasq.elevated) + await brew("services restart \(Homebrew.Formulae.dnsmasq)", sudo: Homebrew.Formulae.dnsmasq.elevated) } public static func stopValetServices() async { - await brew("services stop \(Homebrew.Formulae.php.name)", sudo: Homebrew.Formulae.php.elevated) - await brew("services stop \(Homebrew.Formulae.nginx.name)", sudo: Homebrew.Formulae.nginx.elevated) - await brew("services stop \(Homebrew.Formulae.dnsmasq.name)", sudo: Homebrew.Formulae.dnsmasq.elevated) + await brew("services stop \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) + await brew("services stop \(Homebrew.Formulae.nginx)", sudo: Homebrew.Formulae.nginx.elevated) + await brew("services stop \(Homebrew.Formulae.dnsmasq)", sudo: Homebrew.Formulae.dnsmasq.elevated) } public static func fixHomebrewPermissions() throws { @@ -54,9 +54,10 @@ class Actions { + " && " + cellarCommands.joined(separator: " && ") - let appleScript = NSAppleScript( - source: "do shell script \"\(script)\" with administrator privileges" - ) + let source = "do shell script \"\(script)\" with administrator privileges" + + Log.perf(source) + let appleScript = NSAppleScript(source: source) let eventResult: NSAppleEventDescriptor? = appleScript?.executeAndReturnError(nil) diff --git a/phpmon/Common/Core/Homebrew.swift b/phpmon/Common/Core/Homebrew.swift index 72bd71b..0204277 100644 --- a/phpmon/Common/Core/Homebrew.swift +++ b/phpmon/Common/Core/Homebrew.swift @@ -34,10 +34,14 @@ class Homebrew { } } -class HomebrewFormula: Equatable, Hashable { +class HomebrewFormula: Equatable, Hashable, CustomStringConvertible { let name: String let elevated: Bool + var description: String { + return name + } + init(_ name: String, elevated: Bool = true) { self.name = name self.elevated = elevated From f6d2f09b8d594abb2427ff8df35eefe27fbe29c4 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 7 Feb 2023 22:02:34 +0100 Subject: [PATCH 063/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20first=20launch?= =?UTF-8?q?=20onboarding=20experience?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/MainMenu+Startup.swift | 4 ++-- .../Domain/Onboarding/OnboardingWindowController.swift | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index dc5d183..93430dd 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -110,9 +110,9 @@ extension MainMenu { Task { @MainActor in OnboardingWindowController.show() } + } else { + await AppUpdater().checkForUpdates(interactive: false) } - - await AppUpdater().checkForUpdates(interactive: false) } // Check if the linked version has changed between launches of phpmon diff --git a/phpmon/Domain/Onboarding/OnboardingWindowController.swift b/phpmon/Domain/Onboarding/OnboardingWindowController.swift index 5b65200..3ac430b 100644 --- a/phpmon/Domain/Onboarding/OnboardingWindowController.swift +++ b/phpmon/Domain/Onboarding/OnboardingWindowController.swift @@ -42,4 +42,13 @@ class OnboardingWindowController: PMWindowController { NSApp.activate(ignoringOtherApps: true) } + + override func close() { + super.close() + + // Search for updates after closing the window + if Stats.successfulLaunchCount == 1 { + Task { await AppUpdater().checkForUpdates(interactive: false) } + } + } } From 64567418807980ece1d1dd0dc76ca6875ebd5a22 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 10 Feb 2023 19:31:07 +0100 Subject: [PATCH 064/194] =?UTF-8?q?=E2=9C=A8=20Add=20support=20for=20wildc?= =?UTF-8?q?ard=20constraints=20(#224)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PhpVersionNumberCollection.swift | 17 +++++++ .../PHP/PHP Version/VersionNumber.swift | 36 +++++++++----- .../PHP/Switcher/InternalSwitcher.swift | 1 - .../unit/Versions/PhpVersionNumberTest.swift | 47 +++++++++++++++++++ 4 files changed, 87 insertions(+), 14 deletions(-) diff --git a/phpmon/Common/PHP/PHP Version/PhpVersionNumberCollection.swift b/phpmon/Common/PHP/PHP Version/PhpVersionNumberCollection.swift index 029e262..3a408c5 100644 --- a/phpmon/Common/PHP/PHP Version/PhpVersionNumberCollection.swift +++ b/phpmon/Common/PHP/PHP Version/PhpVersionNumberCollection.swift @@ -35,6 +35,7 @@ public struct PhpVersionNumberCollection: Equatable { - Parameter strict: Whether the patch version check is strict. See more below. The strict mode does not matter if a patch version is provided for all versions in the collection. + It also does not matter for certain comparisons (e.g. when dealing with wildcards). Strict mode assumes that any PHP version lacking precise patch information, e.g. inferred from Homebrew corresponds to the .0 patch version of that version. The default, which is imprecise, @@ -45,6 +46,7 @@ public struct PhpVersionNumberCollection: Equatable { Given versions 8.0.? and 8.1.?, but the requirement is ^8.0.1, in strict mode only 8.1.? will be considered valid (8.0 translates to 8.0.0 and as such is older than 8.0.1, 8.1.0 is OK). + When checking against actual PHP versions installed by the user (with patch precision), use strict mode. @@ -52,11 +54,26 @@ public struct PhpVersionNumberCollection: Equatable { Given versions 8.0.? and 8.1.?, but the requirement is ^8.0.1, in non-strict mode version 8.0 is assumed to be equal to version 8.0.999, which is actually fine if 8.0.1 is the required version. + In non-strict mode, the patch version is ignored for regular version checks (no caret / tilde). If checking compatibility with general Homebrew versions of PHP, do NOT use strict mode, since the patch version there is not used. (The formula php@8.0 suffices for ^8.0.1.) */ public func matching(constraint: String, strict: Bool = false) -> [VersionNumber] { + if constraint == "*" { + return self.versions + } + + if let version = VersionNumber.make(from: constraint, type: .wildCardPatch) { + // Wildcard for patch (e.g. "7.4.*") must match major and minor (any patch) + return self.versions.filter { $0.hasSameMajorAndMinor(version) } + } + + if let version = VersionNumber.make(from: constraint, type: .wildCardMinor) { + // Strict constraint (e.g. "7.*") -> must only match major (any patch, minor) + return self.versions.filter { $0.isSameMajorVersionAs(version) } + } + if let version = VersionNumber.make(from: constraint, type: .versionOnly) { // Strict constraint (e.g. "7.0") -> returns specific version return self.versions.filter { $0.isSameAs(version, strict) } diff --git a/phpmon/Common/PHP/PHP Version/VersionNumber.swift b/phpmon/Common/PHP/PHP Version/VersionNumber.swift index b01e6c0..fc400ec 100644 --- a/phpmon/Common/PHP/PHP Version/VersionNumber.swift +++ b/phpmon/Common/PHP/PHP Version/VersionNumber.swift @@ -39,6 +39,8 @@ public struct VersionNumber: Equatable, Hashable { public enum MatchType: String { case versionOnly = #"^(?\d+).(?\d+).?(?\d+)?\z"# + case wildCardPatch = #"^(?\d+).(?\d+).?(?\*)?\z"# + case wildCardMinor = #"^(?\d+).(?\*)?\z"# case caretVersionRange = #"^\^(?\d+).(?\d+).?(?\d+)?\z"# case tildeVersionRange = #"^~(?\d+).(?\d+).?(?\d+)?\z"# case greaterThanOrEqual = #"^>=(?\d+).(?\d+).?(?\d+)?\z"# @@ -64,21 +66,25 @@ public struct VersionNumber: Equatable, Hashable { range: NSRange(location: 0, length: versionString.count) ).first - if match != nil { - let major = Int( - versionString[Range(match!.range(withName: "major"), in: versionString)!] - )! - let minor = Int( - versionString[Range(match!.range(withName: "minor"), in: versionString)!] - )! - var patch: Int? - if let minorRange = Range(match!.range(withName: "patch"), in: versionString) { - patch = Int(versionString[minorRange]) - } - return Self(major: major, minor: minor, patch: patch) + guard let match else { return nil } + + let major = Int(versionString[Range(match.range(withName: "major"), in: versionString)!])! + var minor: Int = 0 + var patch: Int? + + if let minorRange = Range(match.range(withName: "minor"), in: versionString) { + let value = versionString[minorRange] as String + // Zero is the fallback if a wildcard was used + minor = Int(value) ?? 0 } - return nil + if let patchRange = Range(match.range(withName: "patch"), in: versionString) { + let value = versionString[patchRange] as String + // nil is the fallback if a wildcard was used + patch = Int(value) ?? nil + } + + return Self(major: major, minor: minor, patch: patch) } // MARK: Comparison Logic @@ -93,6 +99,10 @@ public struct VersionNumber: Equatable, Hashable { && (strict ? self.patch(strict, version) == version.patch(strict) : true) } + internal func hasSameMajorAndMinor(_ version: VersionNumber) -> Bool { + return self.major == version.major && self.minor == version.minor + } + internal func isNewerThan(_ version: VersionNumber, _ strict: Bool) -> Bool { return ( self.major > version.major || diff --git a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift index 9526b93..5b465aa 100644 --- a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift +++ b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift @@ -22,7 +22,6 @@ class InternalSwitcher: PhpSwitcher { */ func performSwitch(to version: String) async { Log.info("Switching to \(version), unlinking all versions...") - let versions = getVersionsToBeHandled(version) await withTaskGroup(of: String.self, body: { group in diff --git a/tests/unit/Versions/PhpVersionNumberTest.swift b/tests/unit/Versions/PhpVersionNumberTest.swift index e2744b0..d12f3dc 100644 --- a/tests/unit/Versions/PhpVersionNumberTest.swift +++ b/tests/unit/Versions/PhpVersionNumberTest.swift @@ -44,6 +44,53 @@ class PhpVersionNumberTest: XCTestCase { } } + func test_can_parse_wildcard() throws { + let version = VersionNumber.make(from: "7.*", type: .wildCardMinor) + XCTAssertNotNil(version) + XCTAssertEqual(version!.major, 7) + XCTAssertEqual(version!.minor, 0) + } + + + func test_can_check_wildcard_version_constraint() throws { + // Wildcard for patch only + XCTAssertEqual( + PhpVersionNumberCollection + .make(from: ["7.4.10", "7.3.10", "7.3.9"]) + .matching(constraint: "7.3.*", strict: false), + PhpVersionNumberCollection + .make(from: ["7.3.10", "7.3.9"]).all + ) + + // Wildcard for minor + XCTAssertEqual( + PhpVersionNumberCollection + .make(from: ["8.0.0", "7.4.10", "7.3.10", "7.3.9"]) + .matching(constraint: "7.*", strict: false), + PhpVersionNumberCollection + .make(from: ["7.4.10", "7.3.10", "7.3.9"]).all + ) + + // Full wildcard + XCTAssertEqual( + PhpVersionNumberCollection + .make(from: ["7.4.10", "7.3.10", "7.2.10", "7.1.10", "7.0.10"]) + .matching(constraint: "*", strict: false), + PhpVersionNumberCollection + .make(from: ["7.4.10", "7.3.10", "7.2.10", "7.1.10", "7.0.10"]).all + ) + } + + func test_can_check_any_version_constraint() throws { + XCTAssertEqual( + PhpVersionNumberCollection + .make(from: ["7.4.10", "7.3.10", "7.2.10", "7.1.10", "7.0.10"]) + .matching(constraint: "*", strict: false), + PhpVersionNumberCollection + .make(from: ["7.4.10", "7.3.10", "7.2.10", "7.1.10", "7.0.10"]).all + ) + } + func test_can_check_fixed_constraints() throws { XCTAssertEqual( PhpVersionNumberCollection From babb734c252d63dfbf45b57f8727ae90146a28c9 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 11 Feb 2023 20:46:05 +0100 Subject: [PATCH 065/194] =?UTF-8?q?=F0=9F=91=8C=20Do=20not=20load=20identi?= =?UTF-8?q?ty=20asynchronously?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Paths.swift | 10 +++------- phpmon/Common/Helpers/System.swift | 27 ++++++++++++++++++++++++--- phpmon/Domain/App/AppDelegate.swift | 1 - 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/phpmon/Common/Core/Paths.swift b/phpmon/Common/Core/Paths.swift index 3c25bb4..822ed4d 100644 --- a/phpmon/Common/Core/Paths.swift +++ b/phpmon/Common/Core/Paths.swift @@ -16,16 +16,12 @@ public class Paths { public static let shared = Paths() internal var baseDir: Paths.HomebrewDir - - private var userName: String! = nil + private var userName: String init() { baseDir = App.architecture != "x86_64" ? .opt : .usr - } - - public func loadUser() async { - let output = await Shell.pipe("id -un").out - userName = String(output.split(separator: "\n")[0]) + userName = identity() + Log.info("[ID] The current username is `\(userName)`.") } public func detectBinaryPaths() { diff --git a/phpmon/Common/Helpers/System.swift b/phpmon/Common/Helpers/System.swift index e12e546..f3a1305 100644 --- a/phpmon/Common/Helpers/System.swift +++ b/phpmon/Common/Helpers/System.swift @@ -28,9 +28,7 @@ public func system(_ command: String) -> String { } /** - Run a simple blocking Shell command on the user's own system. - This variation does not return the output. - Avoid using this method in favor of the fakeable Shell class unless needed for express system operations. + Same as the `system` command, but does not return the output. */ public func system_quiet(_ command: String) { let task = Process() @@ -44,3 +42,26 @@ public func system_quiet(_ command: String) { _ = pipe.fileHandleForReading.readDataToEndOfFile() return } + +/** + Retrieves the username for the currently signed in user via `/usr/bin/id`. + This cannot fail or the application will crash. + */ +public func identity() -> String { + let task = Process() + task.launchPath = "/usr/bin/id" + task.arguments = ["-un"] + + let pipe = Pipe() + task.standardOutput = pipe + task.launch() + + guard let output = String( + data: pipe.fileHandleForReading.readDataToEndOfFile(), + encoding: String.Encoding.utf8 + ) else { + fatalError("Could not retrieve username via `id -un`!") + } + + return output.trimmingCharacters(in: .whitespacesAndNewlines) +} diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index 7e28fe9..6012996 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -119,7 +119,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele // self.watchHomebrewBinFolder() Task { // Make sure the menu performs its initial checks - await paths.loadUser() await menu.startup() } } From 67a91e1211ffa7270a13cce1549ff39f0f4df9f0 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 11 Feb 2023 20:48:14 +0100 Subject: [PATCH 066/194] =?UTF-8?q?=F0=9F=91=8C=20Fix=20warnings=20and=20u?= =?UTF-8?q?pdate=20schemes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 6 +++++- .../xcshareddata/xcschemes/PHP Monitor DEV.xcscheme | 2 +- .../xcshareddata/xcschemes/PHP Monitor.xcscheme | 2 +- .../xcshareddata/xcschemes/Unit Tests.xcscheme | 2 +- phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index b09885e..c2a9e8c 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -1929,7 +1929,7 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1420; - LastUpgradeCheck = 1400; + LastUpgradeCheck = 1420; ORGANIZATIONNAME = "Nico Verbruggen"; TargetAttributes = { C406A5EF298AD2CE00B5B85A = { @@ -2823,6 +2823,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; @@ -2855,6 +2856,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; @@ -2887,6 +2889,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; @@ -2919,6 +2922,7 @@ ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 4b4f8a9..9f9fe5d 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -1,6 +1,6 @@ String { - return self.servingPhpVersion ?? "—" + return self.servingPhpVersion } func getListableKind() -> String { From 5fc159ae5a28ea06e94dbac3bcb08c33e21f5084 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Feb 2023 17:30:01 +0100 Subject: [PATCH 067/194] =?UTF-8?q?=F0=9F=90=9B=20Adjusted=20for=20new=20H?= =?UTF-8?q?omebrew=20JSON=20output=20(#235)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Common/PHP/Homebrew/HomebrewPackage.swift | 2 - tests/unit/Parsers/HomebrewPackageTest.swift | 5 +- tests/unit/Test Files/brew/brew-formula.json | 143 ++++++++++-------- 3 files changed, 84 insertions(+), 66 deletions(-) diff --git a/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift b/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift index 100a6a3..b250c80 100644 --- a/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift +++ b/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift @@ -8,8 +8,6 @@ import Foundation struct HomebrewPackage: Decodable { - - let name: String let full_name: String let aliases: [String] let installed: [HomebrewInstalled] diff --git a/tests/unit/Parsers/HomebrewPackageTest.swift b/tests/unit/Parsers/HomebrewPackageTest.swift index a622070..a8a8916 100644 --- a/tests/unit/Parsers/HomebrewPackageTest.swift +++ b/tests/unit/Parsers/HomebrewPackageTest.swift @@ -23,11 +23,10 @@ class HomebrewPackageTest: XCTestCase { [HomebrewPackage].self, from: json.data(using: .utf8)! ).first! - XCTAssertEqual(package.name, "php") XCTAssertEqual(package.full_name, "php") - XCTAssertEqual(package.aliases.first!, "php@8.1") + XCTAssertEqual(package.aliases.first!, "php@8.2") XCTAssertEqual(package.installed.contains(where: { installed in - installed.version.starts(with: "8.1") + installed.version.starts(with: "8.2") }), true) } diff --git a/tests/unit/Test Files/brew/brew-formula.json b/tests/unit/Test Files/brew/brew-formula.json index 1029156..895492a 100644 --- a/tests/unit/Test Files/brew/brew-formula.json +++ b/tests/unit/Test Files/brew/brew-formula.json @@ -1,69 +1,77 @@ [ { - "name": "php", "full_name": "php", "tap": "homebrew/core", "oldname": null, "aliases": [ - "php@8.1" + "php@8.2" ], "versioned_formulae": [ + "php@8.1", "php@8.0", - "php@7.4", - "php@7.3", - "php@7.2" + "php@7.4" ], "desc": "General-purpose scripting language", "license": "PHP-3.01", "homepage": "https://www.php.net/", "versions": { - "stable": "8.1.10", + "stable": "8.2.2", "head": "HEAD", "bottle": true }, "urls": { "stable": { - "url": "https://www.php.net/distributions/php-8.1.10.tar.xz", + "url": "https://www.php.net/distributions/php-8.2.2.tar.xz", "tag": null, - "revision": null + "revision": null, + "checksum": "bdc4aa38e652bac86039601840bae01c0c3653972eaa6f9f93d5f71953a7ee33" + }, + "head": { + "url": "https://github.com/php/php-src.git", + "branch": "master" } }, - "revision": 1, + "revision": 0, "version_scheme": 0, "bottle": { "stable": { "rebuild": 0, "root_url": "https://ghcr.io/v2/homebrew/core", "files": { + "arm64_ventura": { + "cellar": "/opt/homebrew/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:ad2e6a6f1cdc65c22b39bd607cbb7305958951cf58ee87d5060717be5a8b5a45", + "sha256": "ad2e6a6f1cdc65c22b39bd607cbb7305958951cf58ee87d5060717be5a8b5a45" + }, "arm64_monterey": { "cellar": "/opt/homebrew/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:dcee33c9f445db3026a7e867805eb8f6d82e9e5599599b8c6cd8645475f7961c", - "sha256": "dcee33c9f445db3026a7e867805eb8f6d82e9e5599599b8c6cd8645475f7961c" + "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:27069c973e63f38a3cb4fad1c7a2e17853bcffe318c8a957ff96a1026dff0cac", + "sha256": "27069c973e63f38a3cb4fad1c7a2e17853bcffe318c8a957ff96a1026dff0cac" }, "arm64_big_sur": { "cellar": "/opt/homebrew/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:e0590064cd32f2baa4102fa49c80056f3886a0a89aec0589d0134ecbf0e7923e", - "sha256": "e0590064cd32f2baa4102fa49c80056f3886a0a89aec0589d0134ecbf0e7923e" + "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:ceef280bcd57e5f794ae59cc75e83d407c9704aa3d238b282bda52cbc644d0dd", + "sha256": "ceef280bcd57e5f794ae59cc75e83d407c9704aa3d238b282bda52cbc644d0dd" + }, + "ventura": { + "cellar": "/usr/local/Cellar", + "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:22f733b7b0b0ed95cd6b0a1534b9eca4cf63fe54647394c3f7e7ac019eb019ff", + "sha256": "22f733b7b0b0ed95cd6b0a1534b9eca4cf63fe54647394c3f7e7ac019eb019ff" }, "monterey": { "cellar": "/usr/local/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:62481320613b19c6ff310bf6ed50c7d2a2253cdbf403af12ec97bccd8a97a84c", - "sha256": "62481320613b19c6ff310bf6ed50c7d2a2253cdbf403af12ec97bccd8a97a84c" + "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:9ff8f5e1df5e849567cdb2ddea6d3c2a2b9cae024842c9ac65b35a01657bfc37", + "sha256": "9ff8f5e1df5e849567cdb2ddea6d3c2a2b9cae024842c9ac65b35a01657bfc37" }, "big_sur": { "cellar": "/usr/local/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:b34d96f7aad3c580a7cbdaadb8054fb9b6872111a5eec8e1bcb4a529970c8e03", - "sha256": "b34d96f7aad3c580a7cbdaadb8054fb9b6872111a5eec8e1bcb4a529970c8e03" - }, - "catalina": { - "cellar": "/usr/local/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:cc0b85dcfdd60e1d8d7fa74c9f53be5d249d068835dbc7a81edacb7a076b6c76", - "sha256": "cc0b85dcfdd60e1d8d7fa74c9f53be5d249d068835dbc7a81edacb7a076b6c76" + "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:11fd1ea6da8ef728b7cacd4da8a51ed125069595abf4e37ae1552d418560c5fb", + "sha256": "11fd1ea6da8ef728b7cacd4da8a51ed125069595abf4e37ae1552d418560c5fb" }, "x86_64_linux": { "cellar": "/home/linuxbrew/.linuxbrew/Cellar", - "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:b934a5a4ad2d29b629f83962b57f638a654801d1ba21ba659a42da2e5afe3fae", - "sha256": "b934a5a4ad2d29b629f83962b57f638a654801d1ba21ba659a42da2e5afe3fae" + "url": "https://ghcr.io/v2/homebrew/core/php/blobs/sha256:baaa41e60f9e8125fe8f549d4813a8476a8947a1f10d7817a2ee36d8baa625f3", + "sha256": "baaa41e60f9e8125fe8f549d4813a8476a8947a1f10d7817a2ee36d8baa625f3" } } } @@ -127,34 +135,35 @@ "conflicts_with": [ ], - "caveats": "To enable PHP in Apache add the following to httpd.conf and restart Apache:\n LoadModule php_module $(brew --prefix)/opt/php/lib/httpd/modules/libphp.so\n\n \n SetHandler application/x-httpd-php\n \n\nFinally, check DirectoryIndex includes index.php\n DirectoryIndex index.php index.html\n\nThe php.ini and php-fpm.ini file can be found in:\n $(brew --prefix)/etc/php/8.1/\n", + "caveats": "To enable PHP in Apache add the following to httpd.conf and restart Apache:\n LoadModule php_module $(brew --prefix)/opt/php/lib/httpd/modules/libphp.so\n\n \n SetHandler application/x-httpd-php\n \n\nFinally, check DirectoryIndex includes index.php\n DirectoryIndex index.php index.html\n\nThe php.ini and php-fpm.ini file can be found in:\n $(brew --prefix)/etc/php/8.2/\n", "installed": [ { - "version": "8.1.10_1", + "version": "8.2.2", "used_options": [ ], "built_as_bottle": true, "poured_from_bottle": true, + "time": 1675654665, "runtime_dependencies": [ { "full_name": "apr", - "version": "1.7.0", + "version": "1.7.2", "declared_directly": true }, { "full_name": "ca-certificates", - "version": "2022-07-19", + "version": "2023-01-10", "declared_directly": false }, { "full_name": "openssl@1.1", - "version": "1.1.1q", + "version": "1.1.1s", "declared_directly": true }, { "full_name": "apr-util", - "version": "1.6.1", + "version": "1.6.3", "declared_directly": true }, { @@ -182,24 +191,24 @@ "version": "1.0.9", "declared_directly": false }, - { - "full_name": "gettext", - "version": "0.21", - "declared_directly": true - }, { "full_name": "libunistring", - "version": "1.0", + "version": "1.1", "declared_directly": false }, + { + "full_name": "gettext", + "version": "0.21.1", + "declared_directly": true + }, { "full_name": "libidn2", - "version": "2.3.3", + "version": "2.3.4", "declared_directly": false }, { "full_name": "libnghttp2", - "version": "1.49.0", + "version": "1.51.0", "declared_directly": false }, { @@ -224,7 +233,7 @@ }, { "full_name": "xz", - "version": "5.2.6", + "version": "5.4.1", "declared_directly": false }, { @@ -234,7 +243,7 @@ }, { "full_name": "curl", - "version": "7.85.0", + "version": "7.87.0", "declared_directly": true }, { @@ -249,12 +258,12 @@ }, { "full_name": "freetds", - "version": "1.3.13", + "version": "1.3.17", "declared_directly": true }, { "full_name": "libpng", - "version": "1.6.37", + "version": "1.6.39", "declared_directly": false }, { @@ -264,12 +273,12 @@ }, { "full_name": "fontconfig", - "version": "2.14.0", + "version": "2.14.2", "declared_directly": false }, { "full_name": "jpeg-turbo", - "version": "2.1.4", + "version": "2.1.5", "declared_directly": false }, { @@ -278,13 +287,13 @@ "declared_directly": false }, { - "full_name": "imath", - "version": "3.1.5", + "full_name": "highway", + "version": "1.0.3", "declared_directly": false }, { - "full_name": "openexr", - "version": "3.1.5", + "full_name": "imath", + "version": "3.1.6", "declared_directly": false }, { @@ -292,14 +301,24 @@ "version": "4.4.0", "declared_directly": false }, + { + "full_name": "little-cms2", + "version": "2.14", + "declared_directly": false + }, + { + "full_name": "openexr", + "version": "3.1.5", + "declared_directly": false + }, { "full_name": "webp", - "version": "1.2.4", + "version": "1.3.0", "declared_directly": false }, { "full_name": "jpeg-xl", - "version": "0.6.1", + "version": "0.8.1", "declared_directly": false }, { @@ -309,12 +328,12 @@ }, { "full_name": "aom", - "version": "3.4.0", + "version": "3.5.0", "declared_directly": false }, { "full_name": "libavif", - "version": "0.10.1", + "version": "0.11.1", "declared_directly": false }, { @@ -329,17 +348,17 @@ }, { "full_name": "icu4c", - "version": "71.1", + "version": "72.1", "declared_directly": true }, { "full_name": "krb5", - "version": "1.20", + "version": "1.20.1", "declared_directly": true }, { "full_name": "libpq", - "version": "14.5", + "version": "15.1", "declared_directly": true }, { @@ -359,17 +378,17 @@ }, { "full_name": "pcre2", - "version": "10.40", + "version": "10.42", "declared_directly": true }, { "full_name": "readline", - "version": "8.1.2", + "version": "8.2.1", "declared_directly": false }, { "full_name": "sqlite", - "version": "3.39.2", + "version": "3.40.1", "declared_directly": true }, { @@ -382,7 +401,7 @@ "installed_on_request": true } ], - "linked_keg": "8.1.10_1", + "linked_keg": "8.2.2", "pinned": false, "outdated": false, "deprecated": false, @@ -390,6 +409,8 @@ "deprecation_reason": null, "disabled": false, "disable_date": null, - "disable_reason": null + "disable_reason": null, + "tap_git_head": "0bbb89420e74756a5a5c145ed7efa4a32f7e7e7c" } - ] + +] From 26a097ed070cbf0232515f9b01c89720449dfcf0 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 15 Feb 2023 19:30:55 +0100 Subject: [PATCH 068/194] =?UTF-8?q?=E2=9C=A8=20On=20macOS=2013=20and=20new?= =?UTF-8?q?er,=20add=20"Start=20at=20login"=20(#210)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 +++ phpmon/Common/Helpers/LoginItemManager.swift | 25 ++++++ phpmon/Domain/Preferences/PrefsVC.swift | 6 +- .../Views/CheckboxPreferenceView.swift | 77 ++++++++++++++++--- .../Views/CheckboxPreferenceView.xib | 4 +- phpmon/Localizable.strings | 4 + 6 files changed, 112 insertions(+), 14 deletions(-) create mode 100644 phpmon/Common/Helpers/LoginItemManager.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index c2a9e8c..50305b0 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -502,6 +502,10 @@ C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; C47699F128A2F3150060FEB8 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.swift */; }; C476FF9822B0DD830098105B /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; }; + C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; + C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; + C47DF1B1299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; + C47DF1B2299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; C4811D2422D70A4700B5F6B3 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2322D70A4700B5F6B3 /* App.swift */; }; C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; }; C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PrefsVC.swift */; }; @@ -881,6 +885,7 @@ C47699EE28A2F2A30060FEB8 /* WarningManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningManager.swift; sourceTree = ""; }; C47699F028A2F3150060FEB8 /* Warning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Warning.swift; sourceTree = ""; }; C476FF9722B0DD830098105B /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = ""; }; + C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginItemManager.swift; sourceTree = ""; }; C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = ""; }; C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = ""; }; C48D0C9225CC804200CC7490 /* XibLoadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XibLoadable.swift; sourceTree = ""; }; @@ -1485,6 +1490,7 @@ C4D3660A29113F20006BD146 /* System.swift */, C4D36614291160A1006BD146 /* WIP.swift */, C41ADCE72970CCC700120423 /* FSNotifier.swift */, + C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */, ); path = Helpers; sourceTree = ""; @@ -2098,6 +2104,7 @@ C41ADCE82970CCC700120423 /* FSNotifier.swift in Sources */, C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */, C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */, + C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4D3661A291173EA006BD146 /* DictionaryExtension.swift in Sources */, C4C8900728F0E3EF00CE5E97 /* ActiveFileSystem.swift in Sources */, C409349D298EE8E900D25014 /* AppUpdater.swift in Sources */, @@ -2306,6 +2313,7 @@ C4D36617291160A1006BD146 /* WIP.swift in Sources */, C471E85728F9BB650021E251 /* DomainListTLSCell.swift in Sources */, C471E85828F9BB650021E251 /* DomainListNameCell.swift in Sources */, + C47DF1B1299D5A3B0007055D /* LoginItemManager.swift in Sources */, C471E85928F9BB650021E251 /* DomainListPhpCell.swift in Sources */, C471E85A28F9BB650021E251 /* DomainListTypeCell.swift in Sources */, C471E85B28F9BB650021E251 /* DomainListKindCell.swift in Sources */, @@ -2439,6 +2447,7 @@ C471E89528F9BB8F0021E251 /* MenuBarImageGenerator.swift in Sources */, C471E89628F9BB8F0021E251 /* PMWindowController.swift in Sources */, C471E89728F9BB8F0021E251 /* VersionExtractor.swift in Sources */, + C47DF1B2299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4E2E86728FC2F1B003B070C /* XCPMApplication.swift in Sources */, C471E89828F9BB8F0021E251 /* ValetProxy.swift in Sources */, C471E89A28F9BB8F0021E251 /* DomainScanner.swift in Sources */, @@ -2650,6 +2659,7 @@ C4AF9F7B2754499000D44ED0 /* Valet.swift in Sources */, C4C1019C27C65C6F001FACC2 /* Process.swift in Sources */, C451AFF72969E40F0078E617 /* HelpButton.swift in Sources */, + C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */, C45B914A295607F400F4EC78 /* Service.swift in Sources */, C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */, diff --git a/phpmon/Common/Helpers/LoginItemManager.swift b/phpmon/Common/Helpers/LoginItemManager.swift new file mode 100644 index 0000000..bea1aa1 --- /dev/null +++ b/phpmon/Common/Helpers/LoginItemManager.swift @@ -0,0 +1,25 @@ +// +// LoginItemManager.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 15/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import AppKit +import ServiceManagement + +@available(macOS 13.0, *) +class LoginItemManager { + func loginItemIsEnabled() -> Bool { + return SMAppService.mainApp.status == .enabled + } + + func disableLoginItem() { + try? SMAppService.mainApp.unregister() + } + + func enableLoginItem() { + try? SMAppService.mainApp.register() + } +} diff --git a/phpmon/Domain/Preferences/PrefsVC.swift b/phpmon/Domain/Preferences/PrefsVC.swift index 4bb5ab4..87594c7 100644 --- a/phpmon/Domain/Preferences/PrefsVC.swift +++ b/phpmon/Domain/Preferences/PrefsVC.swift @@ -231,7 +231,7 @@ class GeneralPreferencesVC: GenericPreferenceVC { // MARK: - Lifecycle public static func fromStoryboard() -> GenericPreferenceVC { - let vc = NSStoryboard(name: "Main", bundle: nil) + var vc = NSStoryboard(name: "Main", bundle: nil) .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC vc.views = [ @@ -243,6 +243,10 @@ class GeneralPreferencesVC: GenericPreferenceVC { vc.getAutomaticUpdateCheckPV() ] + if #available(macOS 13, *) { + vc.views.append(CheckboxPreferenceView.makeLoginItemView()) + } + return vc } } diff --git a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift index d70c7f2..eee6b21 100644 --- a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift +++ b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift @@ -10,18 +10,12 @@ import Foundation import Cocoa class CheckboxPreferenceView: NSView, XibLoadable { - @IBOutlet weak var labelSection: NSTextField! @IBOutlet weak var labelDescription: NSTextField! @IBOutlet weak var buttonCheckbox: NSButton! var action: (() -> Void)! - - var preference: PreferenceName! { - didSet { - self.buttonCheckbox.state = Preferences.isEnabled(self.preference) ? .on : .off - } - } + var behavior: CheckboxPreferenceViewBehavior! static func make( sectionText: String, @@ -31,17 +25,78 @@ class CheckboxPreferenceView: NSView, XibLoadable { action: @escaping () -> Void ) -> NSView { let view = Self.createFromXib()! + view.behavior = CheckboxPreferenceBehavior( + button: view.buttonCheckbox, + preference: preference + ) view.labelSection.stringValue = sectionText view.labelDescription.stringValue = descriptionText view.buttonCheckbox.title = checkboxText - view.preference = preference view.action = action return view } - @IBAction func toggled(_ sender: Any) { - Preferences.update(self.preference, value: buttonCheckbox.state == .on) - self.action() + @available(macOS 13.0, *) + static func makeLoginItemView() -> NSView { + let view = Self.createFromXib()! + view.behavior = CheckboxLaunchItemBehavior(button: view.buttonCheckbox) + view.labelSection.stringValue = "prefs.startup".localized + view.labelDescription.stringValue = "prefs.auto_start_desc".localized + view.buttonCheckbox.title = "prefs.auto_start_title".localized + view.action = {} + return view } + @IBAction func toggled(_ sender: Any) { + self.behavior.toggled(checked: buttonCheckbox.state == .on) + self.action() + } +} + +protocol CheckboxPreferenceViewBehavior { + func toggled(checked: Bool) +} + +class CheckboxPreferenceBehavior: CheckboxPreferenceViewBehavior { + var button: NSButton + var preference: PreferenceName { + didSet { + button.state = Preferences.isEnabled(self.preference) ? .on : .off + } + } + + init(button: NSButton, preference: PreferenceName) { + self.button = button + self.preference = preference + } + + public func toggled(checked: Bool) { + Preferences.update(self.preference, value: checked) + } +} + +@available(macOS 13.0, *) +class CheckboxLaunchItemBehavior: CheckboxPreferenceViewBehavior { + var manager = LoginItemManager() + var button: NSButton + + init(button: NSButton) { + self.button = button + + if manager.loginItemIsEnabled() { + self.button.state = .on + } else { + self.button.state = .off + } + } + + public func toggled(checked: Bool) { + if checked { + self.manager.enableLoginItem() + } else { + self.manager.disableLoginItem() + } + + self.button.state = self.manager.loginItemIsEnabled() ? .on : .off + } } diff --git a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.xib b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.xib index 589e766..42fd99a 100644 --- a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.xib +++ b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.xib @@ -1,8 +1,8 @@ - + - + diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index eaa0e4d..fb3b41c 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -257,6 +257,10 @@ This has no effect on other terminals, only for the particular terminal session "prefs.notifications" = "Notifications:"; "prefs.warnings" = "Warnings:"; "prefs.menu_contents" = "Features in Menu:"; +"prefs.startup" = "Startup:"; + +"prefs.auto_start_desc" = "Automatically starts PHP Monitor when you log into your Mac."; +"prefs.auto_start_title" = "Start PHP Monitor at login"; "prefs.icon_options.php" = "Display PHP Icon"; "prefs.icon_options.elephant" = "Display Elephant Icon"; From 32a44524efd3873b534a42574277291e237c0285 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 17 Feb 2023 17:19:56 +0100 Subject: [PATCH 069/194] =?UTF-8?q?=F0=9F=90=9B=20Ensure=20checkbox=20show?= =?UTF-8?q?s=20correct=20initial=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Preferences/PrefsVC.swift | 2 +- .../Preferences/Views/CheckboxPreferenceView.swift | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/phpmon/Domain/Preferences/PrefsVC.swift b/phpmon/Domain/Preferences/PrefsVC.swift index 87594c7..8091174 100644 --- a/phpmon/Domain/Preferences/PrefsVC.swift +++ b/phpmon/Domain/Preferences/PrefsVC.swift @@ -231,7 +231,7 @@ class GeneralPreferencesVC: GenericPreferenceVC { // MARK: - Lifecycle public static func fromStoryboard() -> GenericPreferenceVC { - var vc = NSStoryboard(name: "Main", bundle: nil) + let vc = NSStoryboard(name: "Main", bundle: nil) .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC vc.views = [ diff --git a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift index eee6b21..a5e8f3e 100644 --- a/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift +++ b/phpmon/Domain/Preferences/Views/CheckboxPreferenceView.swift @@ -59,15 +59,12 @@ protocol CheckboxPreferenceViewBehavior { class CheckboxPreferenceBehavior: CheckboxPreferenceViewBehavior { var button: NSButton - var preference: PreferenceName { - didSet { - button.state = Preferences.isEnabled(self.preference) ? .on : .off - } - } + var preference: PreferenceName init(button: NSButton, preference: PreferenceName) { - self.button = button self.preference = preference + self.button = button + self.button.state = Preferences.isEnabled(self.preference) ? .on : .off } public func toggled(checked: Bool) { From 2d4112708e0110e7cf0d4ca06c0d0e03a2b83fee Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 20 Feb 2023 18:13:51 +0100 Subject: [PATCH 070/194] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20PHP=20Guard=20chan?= =?UTF-8?q?ges?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Notice/BetterAlert.swift | 1 + phpmon/Domain/Preferences/Stats.swift | 73 ++++++++++++++------------ 2 files changed, 39 insertions(+), 35 deletions(-) diff --git a/phpmon/Domain/Notice/BetterAlert.swift b/phpmon/Domain/Notice/BetterAlert.swift index 33ad04c..1f2ccdc 100644 --- a/phpmon/Domain/Notice/BetterAlert.swift +++ b/phpmon/Domain/Notice/BetterAlert.swift @@ -9,6 +9,7 @@ import Foundation import Cocoa +@MainActor class BetterAlert { var windowController: NSWindowController! diff --git a/phpmon/Domain/Preferences/Stats.swift b/phpmon/Domain/Preferences/Stats.swift index c892413..815732c 100644 --- a/phpmon/Domain/Preferences/Stats.swift +++ b/phpmon/Domain/Preferences/Stats.swift @@ -143,47 +143,50 @@ class Stats { public static func evaluateLastLinkedPhpVersion() { guard let linked = PhpEnv.phpInstall else { - // TODO: Actually notify the user that no version is linked. - Log.info("No version is currently linked.") - return + return Log.warn(" PHP Guard is unable to determine the current PHP version!") } let currentVersion = linked.version.short let previousVersion = Stats.lastGlobalPhpVersion - // Save the PHP version that is currently in use (only if unknown) - if Stats.lastGlobalPhpVersion == "" { + Log.info(" The currently linked version of PHP is: \(currentVersion).") + + if previousVersion == "" { Stats.persistCurrentGlobalPhpVersion(version: currentVersion) - Log.info("Persisting the currently linked PHP version (first time only).") - } else { - Log.info("Previously, the globally linked PHP version was: \(previousVersion).") - if previousVersion != currentVersion { - Log.info("Currently, that version is: \(currentVersion). This is a mismatch.") - Task { @MainActor in - BetterAlert() - .withInformation( - title: "startup.version_mismatch.title".localized, - subtitle: "startup.version_mismatch.subtitle".localized( - currentVersion, - previousVersion - ), - description: "startup.version_mismatch.desc".localized() - ) - .withPrimary(text: "startup.version_mismatch.button_switch_back".localized( - previousVersion - ), action: { alert in - alert.close(with: .OK) - Task { MainMenu.shared.switchToAnyPhpVersion(previousVersion) } - }) - .withTertiary(text: "startup.version_mismatch.button_stay".localized( - currentVersion - ), action: { alert in - Stats.persistCurrentGlobalPhpVersion(version: currentVersion) - alert.close(with: .OK) - }) - .show() - } - } + return Log.warn(" PHP Guard is saving the currently linked PHP version (first time only).") + } + Log.info(" Previously, the globally linked PHP version was: \(previousVersion).") + + if previousVersion == currentVersion { + return Log.info(" PHP Guard did not notice any changes in the linked PHP version.") + } + + // At this point, the version is *not* a match + Log.info(" PHP Guard noticed a different PHP version. An alert will be displayed!") + + Task { @MainActor in + BetterAlert() + .withInformation( + title: "startup.version_mismatch.title".localized, + subtitle: "startup.version_mismatch.subtitle".localized( + currentVersion, + previousVersion + ), + description: "startup.version_mismatch.desc".localized() + ) + .withPrimary(text: "startup.version_mismatch.button_switch_back".localized( + previousVersion + ), action: { alert in + alert.close(with: .OK) + Task { MainMenu.shared.switchToAnyPhpVersion(previousVersion) } + }) + .withTertiary(text: "startup.version_mismatch.button_stay".localized( + currentVersion + ), action: { alert in + Stats.persistCurrentGlobalPhpVersion(version: currentVersion) + alert.close(with: .OK) + }) + .show() } } } From b5758dfca7c7259f00ff2e01edf3e3a168375539 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 21 Feb 2023 02:26:45 +0100 Subject: [PATCH 071/194] =?UTF-8?q?=F0=9F=94=A7=20Use=20macOS=2012.4=20dep?= =?UTF-8?q?loyment=20target?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 24 ++++++++++++------------ README.md | 2 +- SECURITY.md | 3 ++- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 50305b0..86524fe 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -2849,7 +2849,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2882,7 +2882,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2915,7 +2915,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2948,7 +2948,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3010,7 +3010,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -3067,7 +3067,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -3096,7 +3096,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3125,7 +3125,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3324,7 +3324,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; SDKROOT = macosx; @@ -3352,7 +3352,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; PRODUCT_NAME = "$(TARGET_NAME) DEV"; @@ -3433,7 +3433,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; @@ -3462,7 +3462,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/README.md b/README.md index abd66dd..6822683 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ You can also add new domains as links, isolate sites, manage various services, a PHP Monitor is a universal application that runs natively on Apple Silicon **and** Intel-based Macs. * Your user account can administer your computer (required for some functionality, e.g. certificate generation) -* macOS 11 Big Sur or later +* macOS 12.4 or later (Monterey and Ventura are supported) * Homebrew is installed in `/usr/local/homebrew` or `/opt/homebrew` * Homebrew `php` formula is installed * Laravel Valet (works with Valet v2, v3 and v4) diff --git a/SECURITY.md b/SECURITY.md index 0f1912e..624eb62 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ Generally speaking, only the latest version of **PHP Monitor** is supported, exc | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Recommended Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- -| 6.0 | ✅ Universal binary | ✅ Yes | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | +| 6.0 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | (*) Preliminary listing. Valet 4 hasn't been released yet and the versions of PHP Valet can work with might still change. @@ -16,6 +16,7 @@ These versions of PHP Monitor are no longer supported, but if you’re using an | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Minimum Required Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- +| 5.8 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | | 5.7 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | | 5.6 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0)* | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x) | 3.0 recommended
2.16.2 minimum | | 4.1 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0) | macOS 11+ | PHP 5.6—PHP 8.2 | 2.16.2 | From e1adcbcde649e8da2ded89ab4cc718bd5c78d6d9 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 24 Feb 2023 19:36:12 +0100 Subject: [PATCH 072/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20PHP=20Doctor?= =?UTF-8?q?=20w/=20async=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - This fixes an issue with PHP Doctor's "Scan Again" button not working. - This also adds a new check which verifies if "php.ini", "php-fpm.conf" and "php-fpm.d/valet-fpm.conf" exist (all required files). --- PHP Monitor.xcodeproj/project.pbxproj | 12 +++++ .../SwiftUI/Warning/WarningListView.swift | 18 ++++--- .../Domain/SwiftUI/Warning/WarningView.swift | 2 +- .../Warnings/Services/PhpConfigChecker.swift | 39 +++++++++++++++ phpmon/Domain/Warnings/Warning.swift | 22 +++++++-- phpmon/Domain/Warnings/WarningManager.swift | 47 +++++++++++++------ phpmon/Localizable.strings | 7 +++ 7 files changed, 122 insertions(+), 25 deletions(-) create mode 100644 phpmon/Domain/Warnings/Services/PhpConfigChecker.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 86524fe..100b0b5 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -132,6 +132,7 @@ C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; }; C43A8A2025D9D1D700591B77 /* brew-formula.json in Resources */ = {isa = PBXBuildFile; fileRef = C43A8A1F25D9D1D700591B77 /* brew-formula.json */; }; C43A8A2425D9D20D00591B77 /* HomebrewPackageTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */; }; + C43FDBE929A932B0003D85EC /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; C44067F527E2582B0045BD4E /* DomainListNameCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F427E2582B0045BD4E /* DomainListNameCell.swift */; }; C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F627E258410045BD4E /* DomainListPhpCell.swift */; }; C44067F927E2585E0045BD4E /* DomainListTypeCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F827E2585E0045BD4E /* DomainListTypeCell.swift */; }; @@ -834,6 +835,7 @@ C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = ""; }; C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackageTest.swift; sourceTree = ""; }; + C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpConfigChecker.swift; sourceTree = ""; }; C44067F427E2582B0045BD4E /* DomainListNameCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListNameCell.swift; sourceTree = ""; }; C44067F627E258410045BD4E /* DomainListPhpCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListPhpCell.swift; sourceTree = ""; }; C44067F827E2585E0045BD4E /* DomainListTypeCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainListTypeCell.swift; sourceTree = ""; }; @@ -1263,6 +1265,7 @@ C422DDAB28A2DAA100CEAC97 /* Warnings */ = { isa = PBXGroup; children = ( + C43FDBE729A9329A003D85EC /* Services */, C47699F028A2F3150060FEB8 /* Warning.swift */, C47699EE28A2F2A30060FEB8 /* WarningManager.swift */, C422DDAC28A2DAC600CEAC97 /* WarningsWindowController.swift */, @@ -1288,6 +1291,14 @@ path = Warning; sourceTree = ""; }; + C43FDBE729A9329A003D85EC /* Services */ = { + isa = PBXGroup; + children = ( + C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */, + ); + path = Services; + sourceTree = ""; + }; C44067F327E256560045BD4E /* Cells */ = { isa = PBXGroup; children = ( @@ -2238,6 +2249,7 @@ C4D9ADC8277611A0007277F4 /* InternalSwitcher.swift in Sources */, C4FACE83288F1F9700FC478F /* OnboardingWindowController.swift in Sources */, C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */, + C43FDBE929A932B0003D85EC /* PhpConfigChecker.swift in Sources */, C4BF56AB2949381100379603 /* FakeValetInteractor.swift in Sources */, C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */, C451AFF62969E40F0078E617 /* HelpButton.swift in Sources */, diff --git a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift index 0c24b8b..7ccd9e8 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift @@ -9,10 +9,14 @@ import SwiftUI struct WarningListView: View { - @State var warnings: [Warning] + @ObservedObject var warningManager: WarningManager init(empty: Bool = false) { - self.warnings = empty ? [] : WarningManager.shared.warnings + if empty { + WarningManager.shared.warnings = [] + } + + warningManager = WarningManager.shared } var body: some View { @@ -40,7 +44,6 @@ struct WarningListView: View { Button("warnings.refresh.button".localizedForSwiftUI) { Task { // Reload warnings await WarningManager.shared.checkEnvironment() - self.warnings = WarningManager.shared.warnings } } Text("warnings.refresh.button.description".localizedForSwiftUI) @@ -51,14 +54,14 @@ struct WarningListView: View { List { VStack(alignment: .leading, spacing: 0) { - if warnings.isEmpty { + if warningManager.warnings.isEmpty { NoWarningsView() } else { - ForEach(warnings) { warning in + ForEach(warningManager.warnings) { warning in Group { WarningView( title: warning.title, - paragraphs: warning.paragraphs, + paragraphs: warning.paragraphs(), documentationUrl: warning.url ) .fixedSize(horizontal: false, vertical: true) @@ -67,7 +70,8 @@ struct WarningListView: View { }.padding(5) } } - }.frame(minHeight: 0, maxHeight: .infinity).padding(5) + } + .frame(minHeight: 0, maxHeight: .infinity).padding(5) } .listRowInsets(EdgeInsets()) .listStyle(.plain) diff --git a/phpmon/Domain/SwiftUI/Warning/WarningView.swift b/phpmon/Domain/SwiftUI/Warning/WarningView.swift index 446e4f5..1fa4241 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningView.swift @@ -26,7 +26,7 @@ struct WarningView: View { Text(title.localizedForSwiftUI) .fontWeight(.bold) ForEach(paragraphs, id: \.self) { paragraph in - Text(paragraph.localizedForSwiftUI) + Text(paragraph) .font(.system(size: 13)) } } diff --git a/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift b/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift new file mode 100644 index 0000000..656959f --- /dev/null +++ b/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift @@ -0,0 +1,39 @@ +// +// PhpConfigChecker.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 24/02/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class PhpConfigChecker { + + public static var shared = PhpConfigChecker() + + var missing: [String] = [] + + public func check() { + missing = [] + + let shouldExist = [ + "php.ini", + "php-fpm.conf", + "php-fpm.d/valet-fpm.conf" + ] + + for version in PhpEnv.shared.availablePhpVersions { + for file in shouldExist { + let fullFilePath = Paths.etcPath.appending("/php/\(version)/\(file)") + if !FileSystem.fileExists(fullFilePath) { + missing.append(fullFilePath) + } + } + } + + if !missing.isEmpty { + Log.warn("The following config file(s) were missing: \(missing)") + } + } +} diff --git a/phpmon/Domain/Warnings/Warning.swift b/phpmon/Domain/Warnings/Warning.swift index 8bf3ec2..cb9cd2f 100644 --- a/phpmon/Domain/Warnings/Warning.swift +++ b/phpmon/Domain/Warnings/Warning.swift @@ -8,19 +8,27 @@ import Foundation -struct Warning: Identifiable { +struct Warning: Identifiable, Hashable { var id = UUID() let command: () async -> Bool let name: String let title: String - let paragraphs: [String] + let paragraphs: () -> [String] let url: String? + /** + - Parameters: + - command: The command that, if it returns true, means that a warning applies + - name: The internal name or description for this warning + - title: The title displayed for the user + - paragraphs: The main body of text displayed for the user + - url: The URL that one can navigate to for more information (if applicable) + */ init( command: @escaping () async -> Bool, name: String, title: String, - paragraphs: [String], + paragraphs: @escaping () -> [String], url: String? ) { self.command = command @@ -33,4 +41,12 @@ struct Warning: Identifiable { public func applies() async -> Bool { return await self.command() } + + public static func == (lhs: Warning, rhs: Warning) -> Bool { + return lhs.hashValue == rhs.hashValue + } + + public func hash(into hasher: inout Hasher) { + hasher.combine(self.id) + } } diff --git a/phpmon/Domain/Warnings/WarningManager.swift b/phpmon/Domain/Warnings/WarningManager.swift index d001dab..da9d8fd 100644 --- a/phpmon/Domain/Warnings/WarningManager.swift +++ b/phpmon/Domain/Warnings/WarningManager.swift @@ -9,9 +9,9 @@ import Foundation import Cocoa -class WarningManager { +class WarningManager: ObservableObject { - static var shared = WarningManager() + static var shared: WarningManager = WarningManager() init() { if isRunningSwiftUIPreview { @@ -26,8 +26,8 @@ class WarningManager { .trimmingCharacters(in: .whitespacesAndNewlines) == "1" }, name: "Running PHP Monitor with Rosetta on M1", - title: "warnings.arm_compatibility.title", - paragraphs: ["warnings.arm_compatibility.description"], + title: "warnings.arm_compatibility.title".localized, + paragraphs: { return ["warnings.arm_compatibility.description".localized] }, url: "https://github.com/nicoverbruggen/phpmon/wiki/PHP-Monitor-and-Apple-Silicon" ), Warning( @@ -36,13 +36,27 @@ class WarningManager { !FileSystem.isWriteableFile("/usr/local/bin/") }, name: "Helpers cannot be symlinked and not in PATH", - title: "warnings.helper_permissions.title", - paragraphs: [ - "warnings.helper_permissions.description", - "warnings.helper_permissions.unavailable", - "warnings.helper_permissions.symlink" - ], + title: "warnings.helper_permissions.title".localized, + paragraphs: { return [ + "warnings.helper_permissions.description".localized, + "warnings.helper_permissions.unavailable".localized, + "warnings.helper_permissions.symlink".localized + ] }, url: "https://github.com/nicoverbruggen/phpmon/wiki/PHP-Monitor-helper-binaries" + ), + Warning( + command: { + PhpConfigChecker.shared.check() + return !PhpConfigChecker.shared.missing.isEmpty + }, + name: "Your PHP installation is missing configuration files", + title: "warnings.files_missing.title".localized, + paragraphs: { return [ + "warnings.files_missing.description".localized( + PhpConfigChecker.shared.missing.joined(separator: "\n• ") + ) + ] }, + url: nil ) ] @@ -60,11 +74,11 @@ class WarningManager { Checks the user's environment and checks if any special warnings apply. */ func checkEnvironment() async { - self.warnings = [] - if ProcessInfo.processInfo.environment["EXTREME_DOCTOR_MODE"] != nil { // For debugging purposes, we may wish to see all possible evaluations listed - self.warnings = self.evaluations + Task { @MainActor in + self.warnings = self.evaluations + } } else { // Otherwise, loop over the actual evaluations and list the warnings await loopOverEvaluations() @@ -74,9 +88,14 @@ class WarningManager { } private func loopOverEvaluations() async { + Task { @MainActor in + self.warnings = [] + } for check in self.evaluations where await check.applies() { Log.info("[DOCTOR] \(check.name) (!)") - self.warnings.append(check) + Task { @MainActor in + self.warnings.append(check) + } continue } } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index fb3b41c..8f77739 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -664,6 +664,13 @@ COMMON TROUBLESHOOTING TIPS "warnings.arm_compatibility.title" = "You are running PHP Monitor using Rosetta on Apple Silicon, which means your PHP environment is also running via Rosetta."; "warnings.arm_compatibility.description" = "You appear to be running an ARM-compatible version of macOS, but you are currently running PHP Monitor using Rosetta. While this will work correctly, it is recommended that you use the native version of Homebrew."; +"warnings.files_missing.title" = "Your PHP installation is lacking required configuration files"; +"warnings.files_missing.description" = "The following files normally exist on a functional system: + +• %@ + +When files like these are missing, it's recommended to reinstall the appropriate PHP version(s) via Homebrew again, which should restore the configuration files that are missing. Missing configuration files can be the reason why you get '502 Bad Gateway' errors, even after running Fix My Valet."; + "warnings.none" = "There are no recommendations available for you right now. You're all good!"; // ONBOARDING From eb664477f93ef1fb4e08a1849ec5372c61666e82 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 25 Feb 2023 15:48:01 +0100 Subject: [PATCH 073/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20async=20PHP=20?= =?UTF-8?q?Doctor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/Warning/WarningListView.swift | 4 +- phpmon/Domain/Warnings/WarningManager.swift | 42 ++++++++++++------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift index 7ccd9e8..7c6ae02 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift @@ -13,7 +13,7 @@ struct WarningListView: View { init(empty: Bool = false) { if empty { - WarningManager.shared.warnings = [] + WarningManager.shared.clearWarnings() } warningManager = WarningManager.shared @@ -54,7 +54,7 @@ struct WarningListView: View { List { VStack(alignment: .leading, spacing: 0) { - if warningManager.warnings.isEmpty { + if !warningManager.hasWarnings() { NoWarningsView() } else { ForEach(warningManager.warnings) { warning in diff --git a/phpmon/Domain/Warnings/WarningManager.swift b/phpmon/Domain/Warnings/WarningManager.swift index da9d8fd..603edd1 100644 --- a/phpmon/Domain/Warnings/WarningManager.swift +++ b/phpmon/Domain/Warnings/WarningManager.swift @@ -13,6 +13,14 @@ class WarningManager: ObservableObject { static var shared: WarningManager = WarningManager() + /// These warnings are the ones that are ready to be displayed. + @Published public var warnings: [Warning] = [] + + /// This variable is thread-safe and may be modified at any time. + /// When all temporary warnings are set, you may broadcast these changes + /// and they will be sent to the @Published variable via the main thread. + private var temporaryWarnings: [Warning] = [] + init() { if isRunningSwiftUIPreview { self.warnings = self.evaluations @@ -60,8 +68,6 @@ class WarningManager: ObservableObject { ) ] - @Published public var warnings: [Warning] = [] - public func hasWarnings() -> Bool { return !warnings.isEmpty } @@ -70,33 +76,37 @@ class WarningManager: ObservableObject { Task { await WarningManager.shared.checkEnvironment() } } + @MainActor func clearWarnings() { + self.warnings = [] + } + + @MainActor func broadcastWarnings() { + self.warnings = temporaryWarnings + } + /** Checks the user's environment and checks if any special warnings apply. */ func checkEnvironment() async { if ProcessInfo.processInfo.environment["EXTREME_DOCTOR_MODE"] != nil { - // For debugging purposes, we may wish to see all possible evaluations listed - Task { @MainActor in - self.warnings = self.evaluations - } - } else { - // Otherwise, loop over the actual evaluations and list the warnings - await loopOverEvaluations() + self.temporaryWarnings = self.evaluations + await self.broadcastWarnings() + return } + await evaluate() await MainMenu.shared.rebuild() } - private func loopOverEvaluations() async { - Task { @MainActor in - self.warnings = [] - } + private func evaluate() async { + self.temporaryWarnings = [] + for check in self.evaluations where await check.applies() { Log.info("[DOCTOR] \(check.name) (!)") - Task { @MainActor in - self.warnings.append(check) - } + self.temporaryWarnings.append(check) continue } + + await self.broadcastWarnings() } } From 2eea15aac255ac79f3d81b429096999ee748951f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 25 Feb 2023 15:57:39 +0100 Subject: [PATCH 074/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20`WarningListVi?= =?UTF-8?q?ew`=20and=20modify=20body?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/Warning/WarningListView.swift | 24 +++++++++++++------ phpmon/Domain/Warnings/WarningManager.swift | 6 ++++- phpmon/Localizable.strings | 4 ++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift index 7c6ae02..075bb4a 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift @@ -11,12 +11,22 @@ import SwiftUI struct WarningListView: View { @ObservedObject var warningManager: WarningManager - init(empty: Bool = false) { - if empty { - WarningManager.shared.clearWarnings() + init(empty: Bool = false, fake: Bool = false, manager: WarningManager? = nil) { + if manager == nil { + // Use the singleton by default + warningManager = WarningManager.shared + } else { + // Use a provided instance (for e.g. preview purposes) + warningManager = manager! } - warningManager = WarningManager.shared + if fake { + warningManager.warnings = warningManager.evaluations + } + + if empty { + warningManager.clearWarnings() + } } var body: some View { @@ -43,7 +53,7 @@ struct WarningListView: View { HStack(alignment: .center, spacing: 15) { Button("warnings.refresh.button".localizedForSwiftUI) { Task { // Reload warnings - await WarningManager.shared.checkEnvironment() + await self.warningManager.checkEnvironment() } } Text("warnings.refresh.button.description".localizedForSwiftUI) @@ -82,11 +92,11 @@ struct WarningListView: View { struct WarningListView_Previews: PreviewProvider { static var previews: some View { - WarningListView(empty: true) + WarningListView(empty: true, fake: true, manager: WarningManager()) .frame(width: 600, height: 480) .previewDisplayName("Empty List") - WarningListView(empty: false) + WarningListView(empty: false, fake: true, manager: WarningManager()) .frame(width: 600, height: 480) .previewDisplayName("List With All Warnings") } diff --git a/phpmon/Domain/Warnings/WarningManager.swift b/phpmon/Domain/Warnings/WarningManager.swift index 603edd1..af30420 100644 --- a/phpmon/Domain/Warnings/WarningManager.swift +++ b/phpmon/Domain/Warnings/WarningManager.swift @@ -10,7 +10,6 @@ import Foundation import Cocoa class WarningManager: ObservableObject { - static var shared: WarningManager = WarningManager() /// These warnings are the ones that are ready to be displayed. @@ -23,6 +22,7 @@ class WarningManager: ObservableObject { init() { if isRunningSwiftUIPreview { + /// SwiftUI previews will always list all possible evaluations. self.warnings = self.evaluations } } @@ -98,6 +98,10 @@ class WarningManager: ObservableObject { await MainMenu.shared.rebuild() } + /** + Runs through all evaluations and appends any applicable warning results. + Will automatically broadcast these warnings. + */ private func evaluate() async { self.temporaryWarnings = [] diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 8f77739..4fc0c11 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -664,8 +664,8 @@ COMMON TROUBLESHOOTING TIPS "warnings.arm_compatibility.title" = "You are running PHP Monitor using Rosetta on Apple Silicon, which means your PHP environment is also running via Rosetta."; "warnings.arm_compatibility.description" = "You appear to be running an ARM-compatible version of macOS, but you are currently running PHP Monitor using Rosetta. While this will work correctly, it is recommended that you use the native version of Homebrew."; -"warnings.files_missing.title" = "Your PHP installation is lacking required configuration files"; -"warnings.files_missing.description" = "The following files normally exist on a functional system: +"warnings.files_missing.title" = "Your PHP installation is missing important required configuration files."; +"warnings.files_missing.description" = "The following key configuration files should exist after installing PHP: • %@ From 81eb2fee90caf6b90fb9cce71eedcdbc021f607f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 12:41:16 +0100 Subject: [PATCH 075/194] =?UTF-8?q?=F0=9F=91=8C=20Tweak=20logging?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Paths.swift | 2 +- phpmon/Domain/App/Startup.swift | 10 ++++------ phpmon/Domain/Preferences/Stats.swift | 12 ++++++------ 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/phpmon/Common/Core/Paths.swift b/phpmon/Common/Core/Paths.swift index 822ed4d..82e42db 100644 --- a/phpmon/Common/Core/Paths.swift +++ b/phpmon/Common/Core/Paths.swift @@ -21,7 +21,7 @@ public class Paths { init() { baseDir = App.architecture != "x86_64" ? .opt : .usr userName = identity() - Log.info("[ID] The current username is `\(userName)`.") + Log.info("The current username is `\(userName)`.") } public func detectBinaryPaths() { diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 6f7e601..7a469c3 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -19,16 +19,14 @@ class Startup { */ func checkEnvironment() async -> Bool { // Do the important system setup checks - Log.info("[ARCH] The user is running PHP Monitor with the architecture: \(App.architecture)") + Log.info("The user is running PHP Monitor with the architecture: \(App.architecture)") for group in self.groups { if group.condition() { - Log.line() - Log.info("Running \(group.name) checks!") - Log.line() + Log.info("Now running \(group.checks.count) \(group.name) checks!") for check in group.checks { if await check.succeeds() { - Log.info("[OK] \(check.name)") + Log.info("[PASS] \(check.name)") continue } @@ -46,8 +44,8 @@ class Startup { // If we get here, nothing has gone wrong. That's what we want! initializeSwitcher() - Log.separator(as: .info) Log.info("PHP Monitor has determined the application has successfully passed all checks.") + Log.separator(as: .info) return true } diff --git a/phpmon/Domain/Preferences/Stats.swift b/phpmon/Domain/Preferences/Stats.swift index 815732c..004c2e2 100644 --- a/phpmon/Domain/Preferences/Stats.swift +++ b/phpmon/Domain/Preferences/Stats.swift @@ -143,26 +143,26 @@ class Stats { public static func evaluateLastLinkedPhpVersion() { guard let linked = PhpEnv.phpInstall else { - return Log.warn(" PHP Guard is unable to determine the current PHP version!") + return Log.warn("PHP Guard is unable to determine the current PHP version!") } let currentVersion = linked.version.short let previousVersion = Stats.lastGlobalPhpVersion - Log.info(" The currently linked version of PHP is: \(currentVersion).") + Log.info("The currently linked version of PHP is: \(currentVersion).") if previousVersion == "" { Stats.persistCurrentGlobalPhpVersion(version: currentVersion) - return Log.warn(" PHP Guard is saving the currently linked PHP version (first time only).") + return Log.warn("PHP Guard is saving the currently linked PHP version (first time only).") } - Log.info(" Previously, the globally linked PHP version was: \(previousVersion).") + Log.info("Previously, the globally linked PHP version was: \(previousVersion).") if previousVersion == currentVersion { - return Log.info(" PHP Guard did not notice any changes in the linked PHP version.") + return Log.info("PHP Guard did not notice any changes in the linked PHP version.") } // At this point, the version is *not* a match - Log.info(" PHP Guard noticed a different PHP version. An alert will be displayed!") + Log.info("PHP Guard noticed a different PHP version. An alert will be displayed!") Task { @MainActor in BetterAlert() From c7eb1d5ce58c69707192038f59ed5559955bb2d7 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 14:45:15 +0100 Subject: [PATCH 076/194] =?UTF-8?q?=E2=9C=85=20Fix=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 6 ++++++ phpmon/Domain/App/AppVersion.swift | 2 +- phpmon/Domain/Integrations/Homebrew/CaskFile.swift | 5 +++++ tests/Shared/TestableConfigurations.swift | 2 +- tests/unit/Versions/ValetVersionExtractorTest.swift | 6 ------ 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 100b0b5..a2ab4ea 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -723,6 +723,9 @@ C4FACE83288F1F9700FC478F /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; C4FBFC532616485F00CDB8E1 /* PhpVersionDetectionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FBFC512616485F00CDB8E1 /* PhpVersionDetectionTest.swift */; }; C4FC21B128391F8E00D368BB /* MainMenu+Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F361602836BFD9003598CC /* MainMenu+Actions.swift */; }; + C4FD87A829AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; + C4FD87A929AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; + C4FD87AA29AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; C4FE011128084FC200D1DE6D /* SelectionVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FE011028084FC200D1DE6D /* SelectionVC.swift */; }; C4FE011228084FC200D1DE6D /* SelectionVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FE011028084FC200D1DE6D /* SelectionVC.swift */; }; /* End PBXBuildFile section */ @@ -2282,6 +2285,7 @@ C471E82D28F9BB650021E251 /* AlertableError.swift in Sources */, C471E82E28F9BB650021E251 /* Errors.swift in Sources */, C471E82F28F9BB650021E251 /* Alert.swift in Sources */, + C4FD87A929AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, C471E83028F9BB650021E251 /* Application.swift in Sources */, C471E83128F9BB650021E251 /* LocalNotification.swift in Sources */, C471E83228F9BB650021E251 /* MenuBarImageGenerator.swift in Sources */, @@ -2546,6 +2550,7 @@ C471E8EA28F9BB8F0021E251 /* SectionHeaderView.swift in Sources */, C4D36604291132B7006BD146 /* ValetScanners.swift in Sources */, C471E8EB28F9BB8F0021E251 /* HeaderView.swift in Sources */, + C4FD87A829AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, C45B9151295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C471E8EC28F9BB8F0021E251 /* SwiftUIHelper.swift in Sources */, C471E8EE28F9BB8F0021E251 /* HotKey.swift in Sources */, @@ -2734,6 +2739,7 @@ C4E49DE828F764050026AC4E /* ActiveCommand.swift in Sources */, C4CE3BBB27B324230086CA49 /* MainMenu+Switcher.swift in Sources */, C46E20702829D27F00D909D6 /* AppUpdaterCheckTest.swift in Sources */, + C4FD87AA29AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, C485707D28BF45A200539B36 /* WarningView.swift in Sources */, C4F7809C25D80344000DBC97 /* CommandTest.swift in Sources */, C44CCD4127AFE2FC00CE40E5 /* AlertableError.swift in Sources */, diff --git a/phpmon/Domain/App/AppVersion.swift b/phpmon/Domain/App/AppVersion.swift index 5d020af..5bd3303 100644 --- a/phpmon/Domain/App/AppVersion.swift +++ b/phpmon/Domain/App/AppVersion.swift @@ -15,7 +15,7 @@ class AppVersion: Comparable { init(version: String, build: String?, suffix: String? = nil) { self.version = version - self.build = Int(build ?? "0") + self.build = build == nil ? nil : Int(build!) self.suffix = suffix } diff --git a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift index c2ddf0b..cd4e01e 100644 --- a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift +++ b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift @@ -40,12 +40,17 @@ struct CaskFile { let lines = string.split(separator: "\n") .filter { $0 != "" } + .map { line in + return line.trimmingCharacters(in: .whitespacesAndNewlines) + } if lines.count < 4 { Log.err("The CaskFile is <4 lines long, which is too short") return nil } + print(lines) + if !lines.first!.starts(with: "cask") || !lines.last!.starts(with: "end") { Log.err("The CaskFile does not start with 'cask' or does not end with 'end'") return nil diff --git a/tests/Shared/TestableConfigurations.swift b/tests/Shared/TestableConfigurations.swift index a7b6173..2caa086 100644 --- a/tests/Shared/TestableConfigurations.swift +++ b/tests/Shared/TestableConfigurations.swift @@ -138,7 +138,7 @@ class TestableConfigurations { : .instant(ShellStrings.shared.brewServicesAsRoot), "/opt/homebrew/bin/brew services info --all --json" : .instant(ShellStrings.shared.brewServicesAsUser), - "curl -s --max-time 5 '\(Constants.Urls.StableBuildCaskFile.absoluteString)' | grep version" + "curl -s --max-time 10 '\(Constants.Urls.DevBuildCaskFile.absoluteString)'" : .instant("version '5.6.2_976'"), "/opt/homebrew/bin/brew unlink php" : .delayed(0.2, "OK"), diff --git a/tests/unit/Versions/ValetVersionExtractorTest.swift b/tests/unit/Versions/ValetVersionExtractorTest.swift index 769e692..cb294cc 100644 --- a/tests/unit/Versions/ValetVersionExtractorTest.swift +++ b/tests/unit/Versions/ValetVersionExtractorTest.swift @@ -37,10 +37,4 @@ class ValetVersionExtractorTest: XCTestCase { XCTAssertEqual(version.major, 3) } - - func test_can_determine_valet_version() async { - let version = await valet("--version", sudo: false) - XCTAssert(version.contains("Laravel Valet 2") || version.contains("Laravel Valet 3")) - } - } From 608525209b0ddb64c076b62d743da85b0a4c46bd Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 14:50:31 +0100 Subject: [PATCH 077/194] =?UTF-8?q?=E2=9C=85=20Remove=20unused=20test=20th?= =?UTF-8?q?at=20caused=20failing=20suite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 -- tests/unit/Versions/AppUpdaterCheckTest.swift | 47 ------------------- 2 files changed, 51 deletions(-) delete mode 100644 tests/unit/Versions/AppUpdaterCheckTest.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index a2ab4ea..0aa078f 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -203,7 +203,6 @@ C469E700294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */; }; C469E701294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */; }; C469E706294CFDF700A82AB2 /* DomainsListTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C469E702294CFDF700A82AB2 /* DomainsListTest.swift */; }; - C46E20702829D27F00D909D6 /* AppUpdaterCheckTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */; }; C46EBC4428DB95F0007ACC74 /* ShellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */; }; C46EBC4528DB95F0007ACC74 /* ShellProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */; }; C46EBC4728DB9644007ACC74 /* RealShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46EBC4628DB9644007ACC74 /* RealShell.swift */; }; @@ -871,7 +870,6 @@ C464ADB1275A87CA003FCD53 /* DomainListCellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListCellProtocol.swift; sourceTree = ""; }; C469E6FD294CF7B200A82AB2 /* FakeValetProxy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeValetProxy.swift; sourceTree = ""; }; C469E702294CFDF700A82AB2 /* DomainsListTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainsListTest.swift; sourceTree = ""; }; - C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppUpdaterCheckTest.swift; sourceTree = ""; }; C46EBC4328DB95F0007ACC74 /* ShellProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShellProtocol.swift; sourceTree = ""; }; C46EBC4628DB9644007ACC74 /* RealShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealShell.swift; sourceTree = ""; }; C46EBC4928DB966A007ACC74 /* TestableShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableShell.swift; sourceTree = ""; }; @@ -1670,7 +1668,6 @@ C4B56360276AB0A500F12CCB /* VersionExtractorTest.swift */, C4AF9F7C275454A900D44ED0 /* ValetVersionExtractorTest.swift */, C40FE739282ABB2E00A302C2 /* AppVersionTest.swift */, - C46E206F2829D27F00D909D6 /* AppUpdaterCheckTest.swift */, ); path = Versions; sourceTree = ""; @@ -2738,7 +2735,6 @@ C4E2E86528FC2F1B003B070C /* XCPMApplication.swift in Sources */, C4E49DE828F764050026AC4E /* ActiveCommand.swift in Sources */, C4CE3BBB27B324230086CA49 /* MainMenu+Switcher.swift in Sources */, - C46E20702829D27F00D909D6 /* AppUpdaterCheckTest.swift in Sources */, C4FD87AA29AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, C485707D28BF45A200539B36 /* WarningView.swift in Sources */, C4F7809C25D80344000DBC97 /* CommandTest.swift in Sources */, diff --git a/tests/unit/Versions/AppUpdaterCheckTest.swift b/tests/unit/Versions/AppUpdaterCheckTest.swift deleted file mode 100644 index 463635e..0000000 --- a/tests/unit/Versions/AppUpdaterCheckTest.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// AppUpdaterCheckTest.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 10/05/2022. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import XCTest - -class AppUpdaterCheckTest: XCTestCase { - - func test_can_retrieve_version_from_cask() async { - let caskVersion = await AppUpdateChecker.retrieveVersionFromCask() - - let version = VersionExtractor.from(caskVersion) - - XCTAssertNotNil(version) - } - - func test_tagged_release_omits_zero_patch() { - let version = AppVersion.from("3.5.0_333")! - - XCTAssertEqual(version.tagged, "3.5") - XCTAssertEqual(version.version, "3.5.0") - } - - func test_tagged_release_doesnt_omit_non_zero_patch() { - let version = AppVersion.from("3.5.1_333")! - - XCTAssertEqual(version.tagged, "3.5.1") - XCTAssertEqual(version.version, "3.5.1") - } - - func test_tag_truncation_does_not_affect_major_versions() { - var version = AppVersion.from("5.0_333")! - - XCTAssertEqual(version.tagged, "5.0") - XCTAssertEqual(version.version, "5.0") - - version = AppVersion.from("5.0.0_333")! - - XCTAssertEqual(version.tagged, "5.0") - XCTAssertEqual(version.version, "5.0.0") - } - -} From 089ebe7b4e44614d41aecd1f67881d7fd203bcfd Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 15:02:29 +0100 Subject: [PATCH 078/194] =?UTF-8?q?=F0=9F=91=8C=20More=20strict=20Valet=20?= =?UTF-8?q?check,=20remove=20print?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Integrations/Homebrew/CaskFile.swift | 2 -- phpmon/Domain/Integrations/Valet/Valet.swift | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift index cd4e01e..a929b36 100644 --- a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift +++ b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift @@ -49,8 +49,6 @@ struct CaskFile { return nil } - print(lines) - if !lines.first!.starts(with: "cask") || !lines.last!.starts(with: "end") { Log.err("The CaskFile does not start with 'cask' or does not end with 'end'") return nil diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 93a8907..13e0631 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -62,8 +62,7 @@ class Valet { } lazy var installed: Bool = { - // TODO: Make this properly lazy - return FileSystem.fileExists(Paths.binPath.appending("/valet")) + return FileSystem.fileExists(Paths.binPath.appending("/valet")) && FileSystem.anyExists("~/.config/valet") }() /** From 98fcb686bf5288c2fdeb380e48663eeb901fd66e Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 15:23:10 +0100 Subject: [PATCH 079/194] =?UTF-8?q?=F0=9F=91=8C=20Avoid=20certain=20things?= =?UTF-8?q?=20when=20Valet-less?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PHP/Switcher/InternalSwitcher.swift | 39 ++++++++---- .../Homebrew/HomebrewDiagnostics.swift | 4 +- phpmon/Domain/Menu/MainMenu+Switcher.swift | 4 +- phpmon/Domain/Menu/StatusMenu+Items.swift | 62 +++++++++++-------- phpmon/Domain/Menu/StatusMenu.swift | 2 +- 5 files changed, 69 insertions(+), 42 deletions(-) diff --git a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift index 5b465aa..b5b250e 100644 --- a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift +++ b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift @@ -28,7 +28,7 @@ class InternalSwitcher: PhpSwitcher { for available in PhpEnv.shared.availablePhpVersions { group.addTask { await self.disableDefaultPhpFpmPool(available) - await self.stopPhpVersion(available) + await self.unlinkAndStopPhpVersion(available) return available } } @@ -43,11 +43,13 @@ class InternalSwitcher: PhpSwitcher { for formula in versions { Log.info("Will start PHP \(version)... (primary: \(version == formula))") - await self.startPhpVersion(formula, primary: (version == formula)) + await self.linkAndStartPhpVersion(formula, primary: (version == formula)) } - Log.info("Restarting nginx, just to be sure!") - await brew("services restart nginx", sudo: true) + if Valet.installed { + Log.info("Restarting nginx, just to be sure!") + await brew("services restart nginx", sudo: true) + } Log.info("The new version(s) have been linked!") }) @@ -75,6 +77,12 @@ class InternalSwitcher: PhpSwitcher { } func disableDefaultPhpFpmPool(_ version: String) async { + if Valet.installed { + Log.info("Skipping adjustment of php-fpm.d pools, because Valet is disabled or not installed.") + Log.info("This behaviour may not be desirable with this system configuration.") + return + } + let pool = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf" if FileSystem.fileExists(pool) { Log.info("A default `www.conf` file was found in the php-fpm.d directory for PHP \(version).") @@ -94,31 +102,36 @@ class InternalSwitcher: PhpSwitcher { } } - func stopPhpVersion(_ version: String) async { + func unlinkAndStopPhpVersion(_ version: String) async { let formula = (version == PhpEnv.brewPhpAlias) ? "php" : "php@\(version)" await brew("unlink \(formula)") - await brew("services stop \(formula)", sudo: true) - Log.info("Unlinked and stopped services for \(formula)") + + if Valet.installed { + await brew("services stop \(formula)", sudo: true) + Log.info("Unlinked and stopped services for \(formula)") + } else { + Log.info("Unlinked \(formula)") + } } - func startPhpVersion(_ version: String, primary: Bool) async { + func linkAndStartPhpVersion(_ version: String, primary: Bool) async { let formula = (version == PhpEnv.brewPhpAlias) ? "php" : "php@\(version)" if primary { - Log.info("\(formula) is the primary formula, linking and starting services...") + Log.info("\(formula) is the primary formula, linking...") await brew("link \(formula) --overwrite --force") } else { - Log.info("\(formula) is an isolated PHP version, starting services only...") + Log.info("\(formula) is an isolated PHP version, not linking!") } - await brew("services start \(formula)", sudo: true) + if Valet.installed { + await brew("services start \(formula)", sudo: true) + } if Valet.enabled(feature: .isolatedSites) && primary { let socketVersion = version.replacingOccurrences(of: ".", with: "") await Shell.quiet("ln -sF ~/.config/valet/valet\(socketVersion).sock ~/.config/valet/valet.sock") Log.info("Symlinked new socket version (valet\(socketVersion).sock → valet.sock).") } - } - } diff --git a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift index 39a5bc3..7da4495 100644 --- a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift +++ b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift @@ -88,8 +88,8 @@ class HomebrewDiagnostics { versions.forEach { version in Task { // Fix each pool concurrently (but perform the tasks sequentially) await switcher.disableDefaultPhpFpmPool(version) - await switcher.stopPhpVersion(version) - await switcher.startPhpVersion(version, primary: version == primary) + await switcher.unlinkAndStopPhpVersion(version) + await switcher.linkAndStartPhpVersion(version, primary: version == primary) } } } diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index f2e0c75..9cad14f 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -19,7 +19,9 @@ extension MainMenu { PhpEnv.shared.isBusy = false Task { // Things to do after reloading domain list data - await self.reloadDomainListData() + if Valet.installed { + await self.reloadDomainListData() + } // Perform UI updates on main thread Task { @MainActor [self] in diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 8b49aeb..0e9bfb4 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -286,42 +286,54 @@ extension StatusMenu { func addFirstAidAndServicesMenuItems() { let services = NSMenuItem(title: "mi_other".localized) - let servicesMenu = NSMenu() - servicesMenu.addItems([ + var items: [NSMenuItem] = [ // FIRST AID HeaderView.asMenuItem(text: "mi_first_aid".localized), NSMenuItem(title: "mi_view_onboarding".localized, action: #selector(MainMenu.showWelcomeTour)), - NSMenuItem(title: "mi_fa_php_doctor".localized, action: #selector(MainMenu.openWarnings)), - NSMenuItem.separator(), - NSMenuItem(title: "mi_fix_my_valet".localized(PhpEnv.brewPhpAlias), - action: #selector(MainMenu.fixMyValet), - toolTip: "mi_fix_my_valet_tooltip".localized), - NSMenuItem(title: "mi_fix_brew_permissions".localized(), action: #selector(MainMenu.fixHomebrewPermissions), - toolTip: "mi_fix_brew_permissions_tooltip".localized), - NSMenuItem.separator(), + NSMenuItem(title: "mi_fa_php_doctor".localized, action: #selector(MainMenu.openWarnings)) + ] - // SERVICES - HeaderView.asMenuItem(text: "mi_services".localized), - NSMenuItem(title: "mi_restart_dnsmasq".localized, action: #selector(MainMenu.restartDnsMasq), - keyEquivalent: "d"), - NSMenuItem(title: "mi_restart_php_fpm".localized, action: #selector(MainMenu.restartPhpFpm), - keyEquivalent: "p"), - NSMenuItem(title: "mi_restart_nginx".localized, action: #selector(MainMenu.restartNginx), - keyEquivalent: "n"), - NSMenuItem(title: "mi_restart_valet_services".localized, action: #selector(MainMenu.restartValetServices), - keyEquivalent: "s"), - NSMenuItem(title: "mi_stop_valet_services".localized, action: #selector(MainMenu.stopValetServices), - keyEquivalent: "s", - keyModifier: [.command, .shift]), - NSMenuItem.separator(), + if Valet.installed { + items.append(contentsOf: [ + NSMenuItem.separator(), + NSMenuItem(title: "mi_fix_my_valet".localized(PhpEnv.brewPhpAlias), + action: #selector(MainMenu.fixMyValet), + toolTip: "mi_fix_my_valet_tooltip".localized), + NSMenuItem(title: "mi_fix_brew_permissions".localized(), + action: #selector(MainMenu.fixHomebrewPermissions), + toolTip: "mi_fix_brew_permissions_tooltip".localized), + NSMenuItem.separator(), + // SERVICES + HeaderView.asMenuItem(text: "mi_services".localized), + NSMenuItem(title: "mi_restart_dnsmasq".localized, action: #selector(MainMenu.restartDnsMasq), + keyEquivalent: "d"), + NSMenuItem(title: "mi_restart_php_fpm".localized, action: #selector(MainMenu.restartPhpFpm), + keyEquivalent: "p"), + NSMenuItem(title: "mi_restart_nginx".localized, action: #selector(MainMenu.restartNginx), + keyEquivalent: "n"), + NSMenuItem(title: "mi_restart_valet_services".localized, + action: #selector(MainMenu.restartValetServices), + keyEquivalent: "s"), + NSMenuItem(title: "mi_stop_valet_services".localized, action: #selector(MainMenu.stopValetServices), + keyEquivalent: "s", + keyModifier: [.command, .shift]), + NSMenuItem.separator() + ]) + } else { + items.append(NSMenuItem.separator()) + } + + items.append(contentsOf: [ // MANUAL ACTIONS HeaderView.asMenuItem(text: "mi_manual_actions".localized), NSMenuItem(title: "mi_php_refresh".localized, action: #selector(MainMenu.reloadPhpMonitorMenuInForeground), keyEquivalent: "r") - ], target: MainMenu.shared) + ]) + let servicesMenu = NSMenu() + servicesMenu.addItems(items, target: MainMenu.shared) setSubmenu(servicesMenu, for: services) addItem(services) } diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 1701e94..88d6623 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -17,7 +17,7 @@ class StatusMenu: NSMenu { addItem(NSMenuItem.separator()) } - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayServicesManager) { + if PhpEnv.phpInstall != nil && Valet.installed && Preferences.isEnabled(.displayServicesManager) { addServicesManagerMenuItem() addItem(NSMenuItem.separator()) } From bc22129399de2b7e5ee200bd5ae9f2735bb4a019 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 15:25:06 +0100 Subject: [PATCH 080/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20logic=20in=20I?= =?UTF-8?q?nternalSwitcher?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/Switcher/InternalSwitcher.swift | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift index b5b250e..e1cc30f 100644 --- a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift +++ b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift @@ -126,12 +126,12 @@ class InternalSwitcher: PhpSwitcher { if Valet.installed { await brew("services start \(formula)", sudo: true) - } - if Valet.enabled(feature: .isolatedSites) && primary { - let socketVersion = version.replacingOccurrences(of: ".", with: "") - await Shell.quiet("ln -sF ~/.config/valet/valet\(socketVersion).sock ~/.config/valet/valet.sock") - Log.info("Symlinked new socket version (valet\(socketVersion).sock → valet.sock).") + if Valet.enabled(feature: .isolatedSites) && primary { + let socketVersion = version.replacingOccurrences(of: ".", with: "") + await Shell.quiet("ln -sF ~/.config/valet/valet\(socketVersion).sock ~/.config/valet/valet.sock") + Log.info("Symlinked new socket version (valet\(socketVersion).sock → valet.sock).") + } } } } From 47d921547f570c1a43575db14caa7c3f58506bbf Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 22:28:40 +0100 Subject: [PATCH 081/194] =?UTF-8?q?=F0=9F=91=8C=20Move=20Valet-specific=20?= =?UTF-8?q?check=20to=20Valet=20class?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/ActivePhpInstallation.swift | 19 ----------- phpmon/Domain/App/Startup.swift | 4 +-- phpmon/Domain/Integrations/Valet/Valet.swift | 32 +++++++++++++++---- phpmon/Domain/Menu/MainMenu+Startup.swift | 19 ++++++----- phpmon/Domain/Menu/MainMenu+Switcher.swift | 2 +- .../PHP/ActivePhpInstallation+Checks.swift | 32 ++++++++----------- 6 files changed, 52 insertions(+), 56 deletions(-) diff --git a/phpmon/Common/PHP/ActivePhpInstallation.swift b/phpmon/Common/PHP/ActivePhpInstallation.swift index 00c5f44..df23aac 100644 --- a/phpmon/Common/PHP/ActivePhpInstallation.swift +++ b/phpmon/Common/PHP/ActivePhpInstallation.swift @@ -135,25 +135,6 @@ class ActivePhpInstallation { return (match == nil) ? "⚠️" : "\(value)B" } - /** - Determine if PHP-FPM is configured correctly. - - For PHP 5.6, we'll check if `valet.sock` is included in the main `php-fpm.conf` file, but for more recent - versions of PHP, we can just check for the existence of the `valet-fpm.conf` file. If the check here fails, - that means that Valet won't work properly. - */ - func checkPhpFpmStatus() async -> Bool { - if self.version.short == "5.6" { - // The main PHP config file should contain `valet.sock` and then we're probably fine? - let fileName = "\(Paths.etcPath)/php/5.6/php-fpm.conf" - return await Shell.pipe("cat \(fileName)").out - .contains("valet.sock") - } - - // Make sure to check if valet-fpm.conf exists. If it does, we should be fine :) - return FileSystem.fileExists("\(Paths.etcPath)/php/\(self.version.short)/php-fpm.d/valet-fpm.conf") - } - // MARK: - Structs /** diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 7a469c3..c53b54b 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -36,9 +36,7 @@ class Startup { return false } } else { - Log.line() Log.info("Skipping \(group.name) checks!") - Log.line() } } @@ -134,7 +132,7 @@ class Startup { descriptionText: "startup.errors.php_opt.desc".localized ) ]), - EnvironmentCheckGroup(name: "valet", condition: { return Valet.shared.installed }, checks: [ + EnvironmentCheckGroup(name: "valet", condition: { return Valet.installed }, checks: [ // ================================================================================= // The Valet binary must exist. // ================================================================================= diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 13e0631..2a287fd 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -83,10 +83,6 @@ class Valet { Notify the user about a non-default TLD being set. */ public static func notifyAboutUnsupportedTLD() { - if !Valet.shared.installed { - return - } - if Valet.shared.config.tld != "test" && Preferences.isEnabled(.warnAboutNonStandardTLD) { Task { @MainActor in BetterAlert().withInformation( @@ -129,9 +125,7 @@ class Valet { handle all PHP versions including isolation, it needs to know about all sites. */ public func startPreloadingSites() async { - if Valet.shared.installed { - await self.reloadSites() - } + await self.reloadSites() } /** @@ -221,6 +215,30 @@ class Valet { .out.contains("Composer detected issues in your platform") } + /** + Determine if PHP-FPM is configured correctly. + + For PHP 5.6, we'll check if `valet.sock` is included in the main `php-fpm.conf` file, but for more recent + versions of PHP, we can just check for the existence of the `valet-fpm.conf` file. If the check here fails, + that means that Valet won't work properly. + */ + func phpFpmConfigurationValid() async -> Bool { + guard let version = PhpEnv.shared.currentInstall?.version else { + Log.info("Cannot check PHP-FPM status: no version of PHP is active") + return true + } + + if version.short == "5.6" { + // The main PHP config file should contain `valet.sock` and then we're probably fine? + let fileName = "\(Paths.etcPath)/php/5.6/php-fpm.conf" + return await Shell.pipe("cat \(fileName)").out + .contains("valet.sock") + } + + // Make sure to check if valet-fpm.conf exists. If it does, we should be fine :) + return FileSystem.fileExists("\(Paths.etcPath)/php/\(version.short)/php-fpm.d/valet-fpm.conf") + } + /** Returns a count of how many sites are linked and parked. */ diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 93430dd..a653dc3 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -66,9 +66,7 @@ extension MainMenu { updatePhpVersionInStatusBar() // Attempt to find out if PHP-FPM is broken - Log.info("Determining broken PHP-FPM...") let installation = PhpEnv.phpInstall - installation?.notifyAboutBrokenPhpFpm() // Check for other problems WarningManager.shared.evaluateWarnings() @@ -86,14 +84,19 @@ extension MainMenu { // Load the global hotkey App.shared.loadGlobalHotkey() - // Preload sites - await Valet.shared.startPreloadingSites() + if Valet.installed { + // Preload all sites + await Valet.shared.startPreloadingSites() - // After preloading sites, check for PHP-FPM pool conflicts - HomebrewDiagnostics.checkForPhpFpmPoolConflicts() + // Check if PHP-FPM is broken + await Valet.shared.notifyAboutBrokenPhpFpm() - // A non-default TLD is not officially supported since Valet 3.2.x - Valet.notifyAboutUnsupportedTLD() + // After preloading sites, check for PHP-FPM pool conflicts + HomebrewDiagnostics.checkForPhpFpmPoolConflicts() + + // A non-default TLD is not officially supported since Valet 3.2.x + Valet.notifyAboutUnsupportedTLD() + } // Find out which services are active Log.info("The services manager knows about \(ServicesManager.shared.services.count) services.") diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index 9cad14f..087e0cc 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -125,6 +125,6 @@ extension MainMenu { return } - Task { install.notifyAboutBrokenPhpFpm() } + Task { await Valet.shared.notifyAboutBrokenPhpFpm() } } } diff --git a/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift b/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift index 010dcbc..4e14004 100644 --- a/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift +++ b/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift @@ -8,7 +8,7 @@ import Foundation -extension ActivePhpInstallation { +extension Valet { /** It is always possible that the system configuration for PHP-FPM has not been set up for Valet. @@ -18,24 +18,20 @@ extension ActivePhpInstallation { - Important: The underlying check is `checkPhpFpmStatus`, which can be run multiple times. This method actively presents a modal if said checks fails, so don't call this method too many times. */ - public func notifyAboutBrokenPhpFpm() { - Task { // Determine whether FPM status is configured correctly in the background - let fpmStatusConfiguredCorrectly = await self.checkPhpFpmStatus() + public func notifyAboutBrokenPhpFpm() async { + if await Valet.shared.phpFpmConfigurationValid() { + return + } - if fpmStatusConfiguredCorrectly { - return - } - - Task { @MainActor in - BetterAlert() - .withInformation( - title: "alert.php_fpm_broken.title".localized, - subtitle: "alert.php_fpm_broken.info".localized, - description: "alert.php_fpm_broken.description".localized - ) - .withPrimary(text: "generic.ok".localized) - .show() - } + Task { @MainActor in + BetterAlert() + .withInformation( + title: "alert.php_fpm_broken.title".localized, + subtitle: "alert.php_fpm_broken.info".localized, + description: "alert.php_fpm_broken.description".localized + ) + .withPrimary(text: "generic.ok".localized) + .show() } } From d679c7e75cc02fae82b8f07d57c274db77d754b1 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 22:50:55 +0100 Subject: [PATCH 082/194] =?UTF-8?q?=F0=9F=91=8C=20Tweak=20onboarding=20for?= =?UTF-8?q?=20Valet-less=20users?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/Onboarding/OnboardingView.swift | 68 +++++++++++-------- phpmon/Localizable.strings | 5 +- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift index 7cb5fe5..b1261be 100644 --- a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift +++ b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift @@ -12,30 +12,36 @@ struct OnboardingTextItem: View { @State var icon: String @State var title: String @State var description: String + @State var unavailable: Bool = false var body: some View { - HStack(alignment: .top, spacing: 5) { - Image(systemName: icon) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 24, height: 24) - .foregroundColor(Color.appPrimary) - .padding(.trailing, 10) - VStack(alignment: .leading, spacing: 4) { - Text(title.localizedForSwiftUI) - .font(.system(size: 14)) - .lineLimit(3) - Text(description.localizedForSwiftUI) - .foregroundColor(Color.secondary) - .font(.system(size: 13)) - .lineLimit(4) - .fixedSize(horizontal: false, vertical: true) - .frame(minWidth: 0, maxWidth: 800, alignment: .leading) + ZStack { + HStack(alignment: .top, spacing: 5) { + Image(systemName: icon) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 24, height: 24) + .foregroundColor(unavailable ? .gray : Color.appPrimary) + .padding(.trailing, 10) + .opacity(self.unavailable ? 0.2 : 1) + VStack(alignment: .leading, spacing: 4) { + Text(title.localizedForSwiftUI) + .font(.system(size: 14)) + .lineLimit(3) + .opacity(self.unavailable ? 0.5 : 1) + Text(description.localizedForSwiftUI) + .foregroundColor(Color.secondary) + .font(.system(size: 13)) + .lineLimit(4) + .fixedSize(horizontal: false, vertical: true) + .frame(minWidth: 0, maxWidth: 800, alignment: .leading) + .opacity(self.unavailable ? 0.5 : 1) + } } + .padding() + .overlay(RoundedRectangle(cornerRadius: 5) + .stroke(Color.gray.opacity(self.unavailable ? 0.1 : 0.3), lineWidth: 1)) } - .padding() - .overlay(RoundedRectangle(cornerRadius: 5) - .stroke(Color.gray.opacity(0.3), lineWidth: 1)) } } @@ -53,9 +59,13 @@ struct OnboardingView: View { .font(.title) .bold() .padding(.bottom, 5) - Text("onboarding.explore".localized) - .padding(.bottom) - .padding(.trailing) + Text( + Valet.installed + ? "onboarding.explore".localized + : "onboarding.explore.lite".localized + ) + .padding(.bottom) + .padding(.trailing) } .padding(.top, 10) } @@ -72,17 +82,20 @@ struct OnboardingView: View { OnboardingTextItem( icon: "checkmark.circle.fill", title: "onboarding.tour.services.title", - description: "onboarding.tour.services" + description: "onboarding.tour.services", + unavailable: !Valet.installed ) OnboardingTextItem( icon: "list.bullet.circle.fill", title: "onboarding.tour.domains.title", - description: "onboarding.tour.domains" + description: "onboarding.tour.domains", + unavailable: !Valet.installed ) OnboardingTextItem( icon: "pin.circle.fill", title: "onboarding.tour.isolation.title", - description: "onboarding.tour.isolation" + description: "onboarding.tour.isolation", + unavailable: !Valet.installed ) } }.padding() @@ -111,6 +124,8 @@ struct OnboardingView: View { Button("onboarding.tour.close".localized) { App.shared.onboardingWindowController?.close() } + .padding(.bottom, 5) + .padding(.top, 10) } } .padding(.leading) @@ -123,7 +138,6 @@ struct OnboardingView_Previews: PreviewProvider { static var previews: some View { Group { OnboardingView() - OnboardingView().preferredColorScheme(.dark) } } } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 4fc0c11..bcb17ff 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -678,14 +678,17 @@ When files like these are missing, it's recommended to reinstall the appropriate "onboarding.title" = "Welcome Tour"; "onboarding.welcome" = "Welcome to PHP Monitor!"; "onboarding.explore" = "Congrats, you now have access to PHP Monitor's entire suite of functionality. You can learn more about some of the features that PHP Monitor has to offer on this screen."; +"onboarding.explore.lite" = "Congrats, you now have access to a subset of PHP Monitor's features. Please note that some features are currently disabled because Laravel Valet is not installed (or disabled.)"; "onboarding.tour.menu_bar.title" = "Power In Your Menu Bar"; "onboarding.tour.menu_bar" = "PHP Monitor lives in your menu bar. From this menu, you can access most of PHP Monitor's key functionality, including switching the globally linked PHP version, locating config files, and much more."; -"onboarding.tour.faq_hint" = "I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; +"onboarding.tour.faq_hint" = "**Questions? Unsure why features are unavailable?** +I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; "onboarding.tour.services.title" = "Manage Homebrew Services"; "onboarding.tour.services" = "Once you click on the menu bar item, you can see at a glance based on the checkmarks or crosses if all of the Homebrew services are up and running. You can also click on a service to quickly toggle it."; "onboarding.tour.domains.title" = "Manage Domains"; "onboarding.tour.domains" = "By opening the Domains window via the menu bar item, you can view which domains are linked and parked, as well as active nginx proxies."; "onboarding.tour.isolation.title" = "Isolate Domains"; "onboarding.tour.isolation" = "If you have Valet 3 installed, you can even use domain isolation by right-clicking on a given domain in the Domains window. This allows you to pick a specific version of PHP to use for that domain, and that domain only."; +"onboarding.tour.feature_unavailable" = "This feature is currently unavailable and requires Laravel Valet to be installed."; "onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (available in the menu, under First Aid & Services)."; "onboarding.tour.close" = "Close Tour"; From ae9863b962700620fd54641733a5168a7705bf6f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 26 Feb 2023 23:28:24 +0100 Subject: [PATCH 083/194] =?UTF-8?q?=F0=9F=91=8C=20Use=20classic=20DEV=20ch?= =?UTF-8?q?annel=20icon=20again?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 +- .../AppColorBeta.colorset/Contents.json | 38 ++++++++++ .../AppIconEA.appiconset/Contents.json | 68 ------------------ .../AppIconEA.appiconset/icon_128x128.png | Bin 5622 -> 0 bytes .../AppIconEA.appiconset/icon_128x128@2x.png | Bin 12448 -> 0 bytes .../AppIconEA.appiconset/icon_16x16.png | Bin 575 -> 0 bytes .../AppIconEA.appiconset/icon_16x16@2x.png | Bin 1208 -> 0 bytes .../AppIconEA.appiconset/icon_256x256.png | Bin 12448 -> 0 bytes .../AppIconEA.appiconset/icon_256x256@2x.png | Bin 28480 -> 0 bytes .../AppIconEA.appiconset/icon_32x32.png | Bin 1208 -> 0 bytes .../AppIconEA.appiconset/icon_32x32@2x.png | Bin 2628 -> 0 bytes .../AppIconEA.appiconset/icon_512x512.png | Bin 28480 -> 0 bytes .../AppIconEA.appiconset/icon_512x512@2x.png | Bin 42434 -> 0 bytes .../SwiftUI/Onboarding/OnboardingView.swift | 6 +- phpmon/Localizable.strings | 8 +-- 15 files changed, 48 insertions(+), 76 deletions(-) create mode 100644 phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/Contents.json delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_128x128.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_128x128@2x.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_16x16.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_16x16@2x.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_256x256.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_256x256@2x.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_32x32.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_32x32@2x.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_512x512.png delete mode 100644 phpmon/Assets.xcassets/AppIconEA.appiconset/icon_512x512@2x.png diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 0aa078f..b955110 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3350,7 +3350,7 @@ C4975D0828CD190C00FFB4E8 /* Release.Dev */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIconEA; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppColor; CODE_SIGN_ENTITLEMENTS = phpmon/phpmon.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; @@ -3460,7 +3460,7 @@ C4975D0B28CD193A00FFB4E8 /* Debug.Dev */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIconEA; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppColor; CODE_SIGN_ENTITLEMENTS = phpmon/phpmon.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; diff --git a/phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json b/phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json new file mode 100644 index 0000000..4fc8e42 --- /dev/null +++ b/phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.988", + "green" : "0.580", + "red" : "0.278" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.988", + "green" : "0.723", + "red" : "0.277" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon/Assets.xcassets/AppIconEA.appiconset/Contents.json b/phpmon/Assets.xcassets/AppIconEA.appiconset/Contents.json deleted file mode 100644 index 64dc11e..0000000 --- a/phpmon/Assets.xcassets/AppIconEA.appiconset/Contents.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "images" : [ - { - "filename" : "icon_16x16.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "16x16" - }, - { - "filename" : "icon_16x16@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "16x16" - }, - { - "filename" : "icon_32x32.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "32x32" - }, - { - "filename" : "icon_32x32@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "32x32" - }, - { - "filename" : "icon_128x128.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "128x128" - }, - { - "filename" : "icon_128x128@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "128x128" - }, - { - "filename" : "icon_256x256.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "256x256" - }, - { - "filename" : "icon_256x256@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "256x256" - }, - { - "filename" : "icon_512x512.png", - "idiom" : "mac", - "scale" : "1x", - "size" : "512x512" - }, - { - "filename" : "icon_512x512@2x.png", - "idiom" : "mac", - "scale" : "2x", - "size" : "512x512" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_128x128.png b/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_128x128.png deleted file mode 100644 index 82ddfd30e702d44ee41dcf720d5a02485fa80342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5622 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 QiU0rr07*qoM6N<$f(vJtiU0rr diff --git a/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_128x128@2x.png b/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_128x128@2x.png deleted file mode 100644 index 58966ccfc379a2f84787eed8a16b3269582fd139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12448 zcmZWwWn5HG)V{lPgY?qf0t&iPE?o+XG)Rebcf-;M5-Ol{hjb&obTcV^C+bD#5^GoRop@&vdLTmS$F6cuFN0RRY91OeEXsM~wzLURBRuuznd z)bIrDO^p)(OxQB*!Mkl1G>j`VCC~edVc&^R4gdeOjGGW=%-~LRA6Xbq8%f#Qir<{` z8Z6v$>r5p@b!W208m$tB*yi!n0!5`DSaixrNbZwn(FA`5%a65 zNz`J2nwy2blHdQvBjsQu=1NO-G9gLxT<#g6veBQ`*4DD5q@*u;r7v{LXDEG_mRPWZ z&^iUghNxUhoWmkgMMXt@KKZxFHAn`u>b5QAFXSy0x4kZ0V$ky-_K7{Ly}Wy&A4~%$ z)lYFzvkp+jHd)96-K=ZGg`>)OFjWQg$5u2Ifmhj`u{_}bY$A!_W*0xxRH8w~9S|_6?j$R1+%#I$C zr*U_8d(Yf^vRv~a>sTLz397OD+(0p>kzD{XEVlPA*hS;V4r)0M3z&@*l~|z$)!;;P zr{~P$OB)Z%`TLGio2tyv+{xp4_;pwTcUgMk1j(AuZ0epkt}j{o`uf6T?4#9ZI8rfX z)+sD0A%^z}h|MJphkql_ z1+JG|8*3y5+c6IN1ZefIZ3*CyzNtd>13>B+Y$ z(EwvY=*Gg8cFsus*a0^<7srx*E*xv33bzJiaW?8u)z6N0HJcY7^AJ*uv^fHrmrGD% z+FoqS{MaEN7MSx|@wyt^tG`CMz{R+Y6@cM$bjj9)sw6vNYX($hXtCMrZY_ctq0x&O zxpba@p<~MmI*i%lk@<S_Q>Gk{-!D zDFEtkzk8oO`C>tdh9JfS#KspF7x7|$slz5316uV;4@yi&GkEWqLy)99(P_(HSl@yU ziXW7eB=9?B)hk$CZ(9K{mTW47YNB6+5t>*n!s ztpzxlo16RiRgAB_W?EPEL^o9IfGqpZ$}4hRwFW%v4UkH_wMF(%-?3dvORxIhEP*}? zUh;|p*d_py~(<_@!7YwFx$%jc&QeVj{hY`$bVglk>@zXWL#8cV^3m{3dOLi=yzH)inCb48Y#e4Jo!5sf^{01BF#7M9F+uth) zETAEu<{8PPTbBZv{U&>IZmrwJ{j!gB!!Pn1PVFDs_WayDHD*p9RPmg6J;92OA5wAy zDeRm)JUH7?i@dlf-p%*RHuvD*pv<-P)bK)Vqnc>t+i-)0$D#AXj{>W{fyI{7^e-NN zvj`Wnw|{=wuv%WP5^{DYJ7>_2nREM;uUAWYRPR|bclmP*T-Ir^EULwajtd-h%3fVx zhaPvgZ0AD|?#>cFNkhK%LQ};kR312g7p5x^BzLJ7&?o$SymA)u)8x`~DuM35<(J|3 zi(9y9bK9%K{kHpmdmQaGdoZV++3IJ1R=*xYtji>$LYhGtP5>eU z0E$l@gLN-Uz(!M)5a7+T)Kx-`*x1{de!I%M>yty9={LD@!>fhLhe|@0?{t$J>c~n( z3_o93kmss1gpB>p0QWt_W;i-_KKrxse0FbLzP`HB^}*wAfB*HpW%tUeMtv(mxx>S` z6>yd6moMfkzyBWL4PYZ>k3@30eNA3BT$%iX)2Z0II6FU31Mrm2;~u`%Lj5Hrp^w(o z$t{AZ)2ZBYSm`_p1+Q`QZQ9T)I&a3GtEi+uO?}^SbY*dUt

?RXW#eNi6VZndgWa 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 diff --git a/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_16x16.png b/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_16x16.png deleted file mode 100644 index 3fdda5be5ff5e373305c4380e55a807d02e3df21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 575 zcmV-F0>J%=P)0g^0_~ zi%n-ele66Fe!T($*hFpA!-uFWaKZ%QLMB?U?K~GEPhoW859tPu*4A~ z-833a96gXaWBdz~_*c#|jW6^@7{Z$6Vir+RQ9;7J$eaef5k`!>vqZv4Coc*o@t6Pr N002ovPDHLkV1l1=1d0Fv diff --git a/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_16x16@2x.png b/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_16x16@2x.png deleted file mode 100644 index 64ac9c33ee644b51eedee8b5fdb75d06131617c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1208 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

?RXW#eNi6VZndgWa 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 diff --git a/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_256x256@2x.png b/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_256x256@2x.png deleted file mode 100644 index 22c2b158ef17842e30ab96f6a58ad62f87267d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28480 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 diff --git a/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_512x512.png b/phpmon/Assets.xcassets/AppIconEA.appiconset/icon_512x512.png deleted file mode 100644 index 22c2b158ef17842e30ab96f6a58ad62f87267d64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28480 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 Ux`&QSH)+6j=U%J)?OxIU2MX8fw*UYD diff --git a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift index b1261be..740d23b 100644 --- a/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift +++ b/phpmon/Domain/SwiftUI/Onboarding/OnboardingView.swift @@ -59,10 +59,12 @@ struct OnboardingView: View { .font(.title) .bold() .padding(.bottom, 5) + .padding(.top, 8) + .foregroundColor(Color.appPrimary) Text( Valet.installed - ? "onboarding.explore".localized - : "onboarding.explore.lite".localized + ? "onboarding.explore".localizedForSwiftUI + : "onboarding.explore.lite".localizedForSwiftUI ) .padding(.bottom) .padding(.trailing) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index bcb17ff..0a2e2b6 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -677,12 +677,12 @@ When files like these are missing, it's recommended to reinstall the appropriate "onboarding.title" = "Welcome Tour"; "onboarding.welcome" = "Welcome to PHP Monitor!"; -"onboarding.explore" = "Congrats, you now have access to PHP Monitor's entire suite of functionality. You can learn more about some of the features that PHP Monitor has to offer on this screen."; -"onboarding.explore.lite" = "Congrats, you now have access to a subset of PHP Monitor's features. Please note that some features are currently disabled because Laravel Valet is not installed (or disabled.)"; +"onboarding.explore" = "You now have access to PHP Monitor's entire suite of functionality. You can learn more about some of the features that PHP Monitor has to offer on this screen."; +"onboarding.explore.lite" = "You now have access to PHP Monitor's most important features. +Please note that some features (greyed out below) are currently unavailable because Laravel Valet is not active."; "onboarding.tour.menu_bar.title" = "Power In Your Menu Bar"; "onboarding.tour.menu_bar" = "PHP Monitor lives in your menu bar. From this menu, you can access most of PHP Monitor's key functionality, including switching the globally linked PHP version, locating config files, and much more."; -"onboarding.tour.faq_hint" = "**Questions? Unsure why features are unavailable?** -I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; +"onboarding.tour.faq_hint" = "**Questions?** I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; "onboarding.tour.services.title" = "Manage Homebrew Services"; "onboarding.tour.services" = "Once you click on the menu bar item, you can see at a glance based on the checkmarks or crosses if all of the Homebrew services are up and running. You can also click on a service to quickly toggle it."; "onboarding.tour.domains.title" = "Manage Domains"; From a25f8c9748d43151248f6e067a87391739674e10 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 1 Mar 2023 19:21:40 +0100 Subject: [PATCH 084/194] =?UTF-8?q?=F0=9F=91=8C=20Use=20same=20cleanup=20c?= =?UTF-8?q?ode=20as=20used=20on=205.8=20branch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdater.swift | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index 2adb89d..68df607 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -176,16 +176,24 @@ class AppUpdater { // MARK: - Checking if Self-Updater Worked public static func checkIfUpdateWasPerformed() { + // Cleanup the upgrade.success file if FileSystem.fileExists("~/.config/phpmon/updater/upgrade.success") { - // Send a notification about the update Task { @MainActor in LocalNotification.send( title: "notification.phpmon_updated.title".localized, subtitle: "notification.phpmon_updated.desc".localized(App.shortVersion), preference: nil ) - try! FileSystem.remove("~/.config/phpmon/updater/upgrade.success") } + + Log.info("The `upgrade.success` file was found! An update was installed. Cleaning up...") + try? FileSystem.remove("~/.config/phpmon/updater/upgrade.success") + } + + // Cleanup the previous updater + if FileSystem.anyExists("~/.config/phpmon/updater/PHP Monitor Self-Updater.app") { + Log.info("A remnant of the self-updater must still be removed...") + try? FileSystem.remove("~/.config/phpmon/updater/PHP Monitor Self-Updater.app") } } } From aaa814ac9c46f720399e47d30e099a4f8f1fb129 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Mar 2023 20:27:30 +0100 Subject: [PATCH 085/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Respond=20directl?= =?UTF-8?q?y=20to=20PHP=20binary=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 ++++++++++ phpmon/Common/Helpers/FSNotifier.swift | 23 +--------------------- phpmon/Common/Helpers/Measurements.swift | 17 ++++++++++++++++ phpmon/Common/PHP/PHP Version/PhpEnv.swift | 4 ++++ phpmon/Domain/App/App.swift | 3 +++ phpmon/Domain/App/AppDelegate.swift | 20 ------------------- phpmon/Domain/App/Startup.swift | 7 ++++--- phpmon/Domain/Menu/MainMenu+Startup.swift | 17 +++++++++++++++- 8 files changed, 55 insertions(+), 46 deletions(-) create mode 100644 phpmon/Common/Helpers/Measurements.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index b955110..3ba8f76 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -540,6 +540,10 @@ C495F5B028A42E080087F70A /* EnvironmentCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */; }; C4998F0A2617633900B2526E /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; C4998F0B2617633900B2526E /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; + C49EAA5229B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C49EAA5329B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C49EAA5429B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C49EAA5529B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C4A6957728D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C4A81CA428C67101008DD9D1 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; @@ -899,6 +903,7 @@ C4930849279F331F009C240B /* AddSiteVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddSiteVC.swift; sourceTree = ""; }; C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentCheck.swift; sourceTree = ""; }; C4998F092617633900B2526E /* PreferencesWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesWindowController.swift; sourceTree = ""; }; + C49EAA5129B12A5A00AB28FC /* Measurements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Measurements.swift; sourceTree = ""; }; C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentManager.swift; sourceTree = ""; }; C4A81CA328C67101008DD9D1 /* PMTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMTableView.swift; sourceTree = ""; }; C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainListKindCell.swift; sourceTree = ""; }; @@ -1503,6 +1508,7 @@ C4D36614291160A1006BD146 /* WIP.swift */, C41ADCE72970CCC700120423 /* FSNotifier.swift */, C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */, + C49EAA5129B12A5A00AB28FC /* Measurements.swift */, ); path = Helpers; sourceTree = ""; @@ -2225,6 +2231,7 @@ C4EC1E73279DFCF40010F296 /* Events.swift in Sources */, C44067FB27E25FD70045BD4E /* DomainListTLSCell.swift in Sources */, C4C8900528F0E3D100CE5E97 /* RealFileSystem.swift in Sources */, + C49EAA5229B12A5A00AB28FC /* Measurements.swift in Sources */, C4A81CA428C67101008DD9D1 /* PMTableView.swift in Sources */, C4927F0B27B2DFC200C55AFD /* Errors.swift in Sources */, C4CE7F9629683B43000102CF /* PhpVersionNumberCollection.swift in Sources */, @@ -2337,6 +2344,7 @@ C4E2E86628FC2F1B003B070C /* XCPMApplication.swift in Sources */, C471E85F28F9BB650021E251 /* DomainListVC+Actions.swift in Sources */, C471E86028F9BB650021E251 /* SelectionVC.swift in Sources */, + C49EAA5429B12A5A00AB28FC /* Measurements.swift in Sources */, C471E86128F9BB650021E251 /* AddSiteVC.swift in Sources */, C471E86228F9BB650021E251 /* AddProxyVC.swift in Sources */, C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, @@ -2486,6 +2494,7 @@ C471E8B028F9BB8F0021E251 /* ActivePhpInstallation+Checks.swift in Sources */, C471E8B128F9BB8F0021E251 /* MainMenu.swift in Sources */, C471E8B228F9BB8F0021E251 /* MainMenu+Startup.swift in Sources */, + C49EAA5529B12A5A00AB28FC /* Measurements.swift in Sources */, C471E8B328F9BB8F0021E251 /* MainMenu+Async.swift in Sources */, C471E8B428F9BB8F0021E251 /* MainMenu+Switcher.swift in Sources */, C471E8B528F9BB8F0021E251 /* MainMenu+FixMyValet.swift in Sources */, @@ -2716,6 +2725,7 @@ C4CE7F9729683B43000102CF /* PhpVersionNumberCollection.swift in Sources */, C4F30B09278E1A0E00755FCE /* CustomPrefs.swift in Sources */, C40FE738282ABA4F00A302C2 /* AppVersion.swift in Sources */, + C49EAA5329B12A5A00AB28FC /* Measurements.swift in Sources */, C415D3E92770F692005EF286 /* AppDelegate+InterApp.swift in Sources */, C4E49DEE28F764A00026AC4E /* TestableCommand.swift in Sources */, C4AF9F78275447F100D44ED0 /* ValetConfigurationTest.swift in Sources */, diff --git a/phpmon/Common/Helpers/FSNotifier.swift b/phpmon/Common/Helpers/FSNotifier.swift index ca4a678..349d78e 100644 --- a/phpmon/Common/Helpers/FSNotifier.swift +++ b/phpmon/Common/Helpers/FSNotifier.swift @@ -16,9 +16,7 @@ class FSNotifier { public static var shared: FSNotifier! = nil let queue = DispatchQueue(label: "FSWatch2Queue", attributes: .concurrent) - var lastUpdate: TimeInterval? - var linked: Bool private var fileDescriptor: CInt = -1 private var dispatchSource: DispatchSourceFileSystemObject? @@ -28,9 +26,6 @@ class FSNotifier { init(for url: URL, eventMask: DispatchSource.FileSystemEvent, onChange: @escaping () -> Void) { self.url = url - self.linked = FileSystem.fileExists(Paths.php) - Log.info("[FSN] Initial PHP linked state: \(linked ? "linked" : "unlinked")") - fileDescriptor = open(url.path, O_EVTONLY) dispatchSource = DispatchSource.makeFileSystemObjectSource( @@ -43,27 +38,11 @@ class FSNotifier { let distance = self.lastUpdate?.distance(to: Date().timeIntervalSince1970) if distance == nil || distance != nil && distance! > 1.00 { - print("FS event fired, checking in 1s, no duplicate FS events will be acted upon") - + // FS event fired, checking in 1s, no duplicate FS events will be acted upon self.lastUpdate = Date().timeIntervalSince1970 Task { await delay(seconds: 1) - - let newLinked = FileSystem.fileExists(Paths.php) - - if newLinked != self.linked { - self.linked = newLinked - - Log.info("The status of the PHP binary has changed!") - - if newLinked { - Log.info("php is linked") - } else { - Log.info("php is not linked") - } - } - onChange() } } diff --git a/phpmon/Common/Helpers/Measurements.swift b/phpmon/Common/Helpers/Measurements.swift new file mode 100644 index 0000000..d0ff231 --- /dev/null +++ b/phpmon/Common/Helpers/Measurements.swift @@ -0,0 +1,17 @@ +// +// Measurements.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 02/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +public struct Measurement { + let started = Date() + + var milliseconds: Double { + return round(Date().timeIntervalSince(started) * 1000 * 1000) / 1000 + } +} diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index 198687e..d5cb0bb 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -16,6 +16,10 @@ class PhpEnv { self.currentInstall = ActivePhpInstallation.load() } + static func prepare() { + _ = Self.shared + } + func determinePhpAlias() async { let brewPhpAlias = await Shell.pipe("\(Paths.brew) info php --json").out diff --git a/phpmon/Domain/App/App.swift b/phpmon/Domain/App/App.swift index bfb5659..8adc4c0 100644 --- a/phpmon/Domain/App/App.swift +++ b/phpmon/Domain/App/App.swift @@ -86,6 +86,9 @@ class App { /** The warning manager, responsible for keeping track of warnings. */ var warnings = WarningManager.shared + /** The filesystem watchers, responsible for keeping track of changes to the PHP installation. */ + var watchers: [FSNotifier.Kind: FSNotifier] = [:] + /** Timer that will periodically reload info about the user's PHP installation. */ var timer: Timer? diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index 6012996..f0cf1d3 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -50,11 +50,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele */ var logger = Log.shared - /** - - */ - var watchers: [FSNotifier.Kind: FSNotifier] = [:] - // MARK: - Initializer /** @@ -114,24 +109,9 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele func applicationDidFinishLaunching(_ aNotification: Notification) { // Make sure notifications will work setupNotifications() - // Make sure the watchers are set up - // TODO: Move to after startup - // self.watchHomebrewBinFolder() Task { // Make sure the menu performs its initial checks await menu.startup() } } - - func watchHomebrewBinFolder() { - self.watchers[.homebrewLocks] = FSNotifier( - for: URL(fileURLWithPath: Paths.binPath), - eventMask: .all, - onChange: { - // Removing requires termination and then removing reference - // self.watchers[.homebrewLocks]?.terminate() - // self.watchers[.homebrewLocks] = nil - } - ) - } } diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index c53b54b..448209c 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -25,13 +25,14 @@ class Startup { if group.condition() { Log.info("Now running \(group.checks.count) \(group.name) checks!") for check in group.checks { + let start = Measurement() if await check.succeeds() { - Log.info("[PASS] \(check.name)") + Log.info("[PASS] \(check.name) (\(start.milliseconds) ms)") continue } // If we get here, something's gone wrong and the check has failed... - Log.info("[FAIL] \(check.name)") + Log.info("[FAIL] \(check.name) (\(start.milliseconds) ms)") await showAlert(for: check) return false } @@ -232,7 +233,7 @@ class Startup { return await Shell.pipe("valet --version").out .contains("Composer detected issues in your platform") }, - name: "`no global composer issues", + name: "no global composer issues", titleText: "startup.errors.global_composer_platform_issues.title".localized, subtitleText: "startup.errors.global_composer_platform_issues.subtitle".localized, descriptionText: "startup.errors.global_composer_platform_issues.desc".localized diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 8ed3b95..afbd036 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -66,7 +66,22 @@ extension MainMenu { updatePhpVersionInStatusBar() // Attempt to find out if PHP-FPM is broken - let installation = PhpEnv.phpInstall + PhpEnv.prepare() + + // Set up the filesystem watcher for the Homebrew binaries + App.shared.watchers[.homebrewBinaries] = FSNotifier( + for: URL(fileURLWithPath: Paths.binPath), + eventMask: .all, + onChange: { + Task { + await PhpEnv.detectPhpVersions() + MainMenu.shared.refreshActiveInstallation() + } + // Removing requires termination and then removing reference + // self.watchers[.homebrewBinaries]?.terminate() + // self.watchers[.homebrewBinaries] = nil + } + ) // Check for other problems WarningManager.shared.evaluateWarnings() From b925262620938d4ad2fe2d5a499a07b87f406d84 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 2 Mar 2023 20:53:39 +0100 Subject: [PATCH 086/194] =?UTF-8?q?=F0=9F=8F=97=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/MainMenu+Startup.swift | 41 +++++++++++++---------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index afbd036..30db231 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -74,8 +74,31 @@ extension MainMenu { eventMask: .all, onChange: { Task { + #warning("This functionality working means that switcher code needs to change") + let previous = PhpEnv.shared.currentInstall?.version.text + Log.info("Something changed in the Homebrew binary directory...") await PhpEnv.detectPhpVersions() MainMenu.shared.refreshActiveInstallation() + let new = PhpEnv.shared.currentInstall?.version.text + if previous != new { + Log.info("The PHP version has changed, new version is now: \(new ?? "unlinked")") + /* + // These notifications will cause duplicate notifications if using the switcher + if new != nil { + LocalNotification.send( + title: "Globally linked PHP version has changed!", + subtitle: "PHP \(new!) is now active.", + preference: nil + ) + } else { + LocalNotification.send( + title: "Globally linked PHP version has changed!", + subtitle: "PHP is now unlinked.", + preference: nil + ) + } + */ + } } // Removing requires termination and then removing reference // self.watchers[.homebrewBinaries]?.terminate() @@ -116,9 +139,6 @@ extension MainMenu { // Find out which services are active Log.info("The services manager knows about \(ServicesManager.shared.services.count) services.") - // Start the background refresh timer - startSharedTimer() - if !isRunningSwiftUIPreview { Stats.incrementSuccessfulLaunchCount() Stats.evaluateSponsorMessageShouldBeDisplayed() @@ -170,21 +190,6 @@ extension MainMenu { } } - /** - Schedule a request to fetch the PHP version every 60 seconds. - */ - private func startSharedTimer() { - DispatchQueue.main.async { [self] in - App.shared.timer = Timer.scheduledTimer( - timeInterval: 60, - target: self, - selector: #selector(refreshActiveInstallation), - userInfo: nil, - repeats: true - ) - } - } - /** Detect which applications are installed that can be used to open a domain's source directory. */ From 7a02fb8a1a51c157db738d90157feb86382884ec Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 3 Mar 2023 00:48:48 +0100 Subject: [PATCH 087/194] =?UTF-8?q?=20=F0=9F=8F=97=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 +++++ phpmon/Common/Core/Actions.swift | 6 +++ phpmon/Domain/App/Startup.swift | 20 ++++----- phpmon/Domain/Menu/MainMenu+Actions.swift | 6 +++ phpmon/Domain/Menu/MainMenu+Startup.swift | 37 +-------------- phpmon/Domain/Menu/StatusMenu+Items.swift | 2 +- phpmon/Domain/Watcher/App+BrewWatch.swift | 55 +++++++++++++++++++++++ 7 files changed, 89 insertions(+), 47 deletions(-) create mode 100644 phpmon/Domain/Watcher/App+BrewWatch.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 3ba8f76..8b548c6 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -544,6 +544,10 @@ C49EAA5329B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; C49EAA5429B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; C49EAA5529B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C49EAA5729B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C49EAA5829B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C49EAA5929B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C49EAA5A29B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C4A6957728D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C4A81CA428C67101008DD9D1 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; @@ -904,6 +908,7 @@ C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentCheck.swift; sourceTree = ""; }; C4998F092617633900B2526E /* PreferencesWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesWindowController.swift; sourceTree = ""; }; C49EAA5129B12A5A00AB28FC /* Measurements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Measurements.swift; sourceTree = ""; }; + C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+BrewWatch.swift"; sourceTree = ""; }; C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentManager.swift; sourceTree = ""; }; C4A81CA328C67101008DD9D1 /* PMTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMTableView.swift; sourceTree = ""; }; C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainListKindCell.swift; sourceTree = ""; }; @@ -1699,6 +1704,7 @@ C4C8E81D276F5686003AC782 /* Watcher */ = { isa = PBXGroup; children = ( + C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */, C4C8E817276F54D8003AC782 /* App+ConfigWatch.swift */, C4C8E81A276F54E5003AC782 /* PhpConfigWatcher.swift */, ); @@ -2236,6 +2242,7 @@ C4927F0B27B2DFC200C55AFD /* Errors.swift in Sources */, C4CE7F9629683B43000102CF /* PhpVersionNumberCollection.swift in Sources */, C4B5853E2770FE3900DA4FBE /* Paths.swift in Sources */, + C49EAA5729B1689200AB28FC /* App+BrewWatch.swift in Sources */, C41C1B4B22B019FF00E7CF16 /* ActivePhpInstallation.swift in Sources */, C4FE011128084FC200D1DE6D /* SelectionVC.swift in Sources */, C4709CA228524B3400088BB8 /* StatsView.swift in Sources */, @@ -2347,6 +2354,7 @@ C49EAA5429B12A5A00AB28FC /* Measurements.swift in Sources */, C471E86128F9BB650021E251 /* AddSiteVC.swift in Sources */, C471E86228F9BB650021E251 /* AddProxyVC.swift in Sources */, + C49EAA5929B1689200AB28FC /* App+BrewWatch.swift in Sources */, C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, C471E86428F9BB650021E251 /* Warning.swift in Sources */, C40175BA2903108900763A68 /* ValetInteractor.swift in Sources */, @@ -2625,6 +2633,7 @@ C471E80F28F9BAE80021E251 /* NSMenuExtension.swift in Sources */, C471E80B28F9BAE80021E251 /* XibLoadable.swift in Sources */, C471E7F428F9BAC80021E251 /* VersionNumber.swift in Sources */, + C49EAA5A29B1689200AB28FC /* App+BrewWatch.swift in Sources */, C471E7CB28F9BA5B0021E251 /* TestableCommand.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2687,6 +2696,7 @@ C45B914A295607F400F4EC78 /* Service.swift in Sources */, C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */, C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */, + C49EAA5829B1689200AB28FC /* App+BrewWatch.swift in Sources */, C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, C463E381284930EE00422731 /* PresetHelper.swift in Sources */, C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */, diff --git a/phpmon/Common/Core/Actions.swift b/phpmon/Common/Core/Actions.swift index 8abc354..38d33f3 100644 --- a/phpmon/Common/Core/Actions.swift +++ b/phpmon/Common/Core/Actions.swift @@ -12,6 +12,12 @@ class Actions { // MARK: - Services + public static func linkPhp() async { + await brew("link php --overwrite --force") + + // TODO: Verify that this worked, if not, notify the user + } + public static func restartPhpFpm() async { await brew("services restart \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) } diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 448209c..47f3bb5 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -109,16 +109,6 @@ class Startup { requiresAppRestart: true ), // ================================================================================= - // The PHP binary must exist. - // ================================================================================= - EnvironmentCheck( - command: { return !FileSystem.fileExists(Paths.php) }, - name: "`\(Paths.php)` exists", - titleText: "startup.errors.php_binary.title".localized, - subtitleText: "startup.errors.php_binary.subtitle".localized, - descriptionText: "startup.errors.php_binary.desc".localized(Paths.php) - ), - // ================================================================================= // Make sure we can detect one or more PHP installations. // ================================================================================= EnvironmentCheck( @@ -134,6 +124,16 @@ class Startup { ) ]), EnvironmentCheckGroup(name: "valet", condition: { return Valet.installed }, checks: [ + // ================================================================================= + // The PHP binary must exist. + // ================================================================================= + EnvironmentCheck( + command: { return !FileSystem.fileExists(Paths.php) }, + name: "`\(Paths.php)` exists", + titleText: "startup.errors.php_binary.title".localized, + subtitleText: "startup.errors.php_binary.subtitle".localized, + descriptionText: "startup.errors.php_binary.desc".localized(Paths.php) + ), // ================================================================================= // The Valet binary must exist. // ================================================================================= diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift index f27cea2..b94f5df 100644 --- a/phpmon/Domain/Menu/MainMenu+Actions.swift +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -12,6 +12,12 @@ extension MainMenu { // MARK: - Actions + @MainActor @objc func linkPhpBinary() { + Task { + await Actions.linkPhp() + } + } + @MainActor @objc func fixHomebrewPermissions() { if !BetterAlert() .withInformation( diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 30db231..520b931 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -69,42 +69,7 @@ extension MainMenu { PhpEnv.prepare() // Set up the filesystem watcher for the Homebrew binaries - App.shared.watchers[.homebrewBinaries] = FSNotifier( - for: URL(fileURLWithPath: Paths.binPath), - eventMask: .all, - onChange: { - Task { - #warning("This functionality working means that switcher code needs to change") - let previous = PhpEnv.shared.currentInstall?.version.text - Log.info("Something changed in the Homebrew binary directory...") - await PhpEnv.detectPhpVersions() - MainMenu.shared.refreshActiveInstallation() - let new = PhpEnv.shared.currentInstall?.version.text - if previous != new { - Log.info("The PHP version has changed, new version is now: \(new ?? "unlinked")") - /* - // These notifications will cause duplicate notifications if using the switcher - if new != nil { - LocalNotification.send( - title: "Globally linked PHP version has changed!", - subtitle: "PHP \(new!) is now active.", - preference: nil - ) - } else { - LocalNotification.send( - title: "Globally linked PHP version has changed!", - subtitle: "PHP is now unlinked.", - preference: nil - ) - } - */ - } - } - // Removing requires termination and then removing reference - // self.watchers[.homebrewBinaries]?.terminate() - // self.watchers[.homebrewBinaries] = nil - } - ) + App.shared.prepareHomebrewWatchers() // Check for other problems WarningManager.shared.evaluateWarnings() diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 0e9bfb4..403cea1 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -18,7 +18,7 @@ extension StatusMenu { addItems([ // TODO: Make sure these buttons do something NSMenuItem.separator(), - NSMenuItem(title: "mi_fix_php_link".localized), + NSMenuItem(title: "mi_fix_php_link".localized, action: #selector(MainMenu.linkPhpBinary)), NSMenuItem(title: "mi_no_php_linked_explain".localized) ]) return diff --git a/phpmon/Domain/Watcher/App+BrewWatch.swift b/phpmon/Domain/Watcher/App+BrewWatch.swift new file mode 100644 index 0000000..1929040 --- /dev/null +++ b/phpmon/Domain/Watcher/App+BrewWatch.swift @@ -0,0 +1,55 @@ +// +// App+BrewWatch.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 03/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +extension App { + + public func prepareHomebrewWatchers() { + let notifier = FSNotifier( + for: URL(fileURLWithPath: Paths.binPath), + eventMask: .all, + onChange: { + Task { await self.onHomebrewPhpModification() } + // Removing requires termination and then removing reference + // self.watchers[.homebrewBinaries]?.terminate() + // self.watchers[.homebrewBinaries] = nil + } + ) + + App.shared.watchers[.homebrewBinaries] = notifier + } + + public func onHomebrewPhpModification() async { + #warning("This functionality working means that switcher code needs to change") + let previous = PhpEnv.shared.currentInstall?.version.text + Log.info("Something changed in the Homebrew binary directory...") + await PhpEnv.detectPhpVersions() + await MainMenu.shared.refreshActiveInstallation() + let new = PhpEnv.shared.currentInstall?.version.text + if previous != new { + Log.info("The PHP version has changed, new version is now: \(new ?? "unlinked")") + /* + // These notifications will cause duplicate notifications if using the switcher + if new != nil { + LocalNotification.send( + title: "Globally linked PHP version has changed!", + subtitle: "PHP \(new!) is now active.", + preference: nil + ) + } else { + LocalNotification.send( + title: "Globally linked PHP version has changed!", + subtitle: "PHP is now unlinked.", + preference: nil + ) + } + */ + } + } +} From d1498eb07079fef97ba14eb54f1e8986e5d10f35 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 3 Mar 2023 14:44:15 +0100 Subject: [PATCH 088/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20issue=20with=20par?= =?UTF-8?q?sing=20CaskFile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Integrations/Homebrew/CaskFile.swift | 2 +- tests/unit/Test Files/brew/phpmon-dev.rb | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift index a929b36..2fb9470 100644 --- a/phpmon/Domain/Integrations/Homebrew/CaskFile.swift +++ b/phpmon/Domain/Integrations/Homebrew/CaskFile.swift @@ -39,10 +39,10 @@ struct CaskFile { } let lines = string.split(separator: "\n") - .filter { $0 != "" } .map { line in return line.trimmingCharacters(in: .whitespacesAndNewlines) } + .filter { $0 != "" } if lines.count < 4 { Log.err("The CaskFile is <4 lines long, which is too short") diff --git a/tests/unit/Test Files/brew/phpmon-dev.rb b/tests/unit/Test Files/brew/phpmon-dev.rb index 2b487c9..60badb9 100644 --- a/tests/unit/Test Files/brew/phpmon-dev.rb +++ b/tests/unit/Test Files/brew/phpmon-dev.rb @@ -11,3 +11,4 @@ cask 'phpmon-dev' do app 'PHP Monitor DEV.app', target: "PHP Monitor DEV.app" end + From 063a729d67a9f4644cfbe335eb3d4aafcf62904f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 3 Mar 2023 15:28:00 +0100 Subject: [PATCH 089/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20user=20initiated?= =?UTF-8?q?=20issue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdater.swift | 6 +++--- phpmon/Domain/Menu/MainMenu+Startup.swift | 2 +- phpmon/Domain/Menu/MainMenu.swift | 2 +- phpmon/Domain/Onboarding/OnboardingWindowController.swift | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index 68df607..26b9d7c 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -14,10 +14,10 @@ class AppUpdater { var latestVersionOnline: AppVersion! var interactive: Bool = false - public func checkForUpdates(interactive: Bool) async { - self.interactive = interactive + public func checkForUpdates(userInitiated: Bool) async { + self.interactive = userInitiated - if interactive && !Preferences.isEnabled(.automaticBackgroundUpdateCheck) { + if !interactive && !Preferences.isEnabled(.automaticBackgroundUpdateCheck) { Log.info("Skipping automatic update check due to user preference.") return } diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 520b931..f0d7df5 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -114,7 +114,7 @@ extension MainMenu { OnboardingWindowController.show() } } else { - await AppUpdater().checkForUpdates(interactive: false) + await AppUpdater().checkForUpdates(userInitiated: false) } } diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 1675fe7..3b5943c 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -199,7 +199,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate } @objc func checkForUpdates() { - Task { await AppUpdater().checkForUpdates(interactive: true) } + Task { await AppUpdater().checkForUpdates(userInitiated: true) } } // MARK: - Menu Delegate diff --git a/phpmon/Domain/Onboarding/OnboardingWindowController.swift b/phpmon/Domain/Onboarding/OnboardingWindowController.swift index 3ac430b..5ef4d62 100644 --- a/phpmon/Domain/Onboarding/OnboardingWindowController.swift +++ b/phpmon/Domain/Onboarding/OnboardingWindowController.swift @@ -48,7 +48,7 @@ class OnboardingWindowController: PMWindowController { // Search for updates after closing the window if Stats.successfulLaunchCount == 1 { - Task { await AppUpdater().checkForUpdates(interactive: false) } + Task { await AppUpdater().checkForUpdates(userInitiated: false) } } } } From ed1d7f8aed4a925699ec2eb96ec3d0344e9ccddd Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 3 Mar 2023 16:49:17 +0100 Subject: [PATCH 090/194] =?UTF-8?q?=E2=9C=85=20Test=20improvements?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 + .../xcschemes/PHP Monitor DEV.xcscheme | 2 +- phpmon/Common/Core/Homebrew.swift | 2 +- .../Testables/TestableConfiguration.swift | 5 + .../Domain/Preferences/PreferenceName.swift | 2 +- tests/Shared/TestableConfigurations.swift | 48 +++++-- tests/ui/DomainsListTest.swift | 18 +-- tests/ui/UITestCase.swift | 26 +++- tests/ui/UpdateCheckTest.swift | 121 ++++++++++++++++++ 9 files changed, 196 insertions(+), 32 deletions(-) create mode 100644 tests/ui/UpdateCheckTest.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8b548c6..6f9cd36 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -161,6 +161,7 @@ C44CCD4127AFE2FC00CE40E5 /* AlertableError.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD3F27AFE2FC00CE40E5 /* AlertableError.swift */; }; C44CCD4927AFF3B700CE40E5 /* MainMenu+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */; }; C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */; }; + C44E985F29B23EBF0059F773 /* UpdateCheckTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44E985E29B23EBF0059F773 /* UpdateCheckTest.swift */; }; C44F868E2835BD8D005C353A /* phpmon-config.json in Resources */ = {isa = PBXBuildFile; fileRef = C44F868D2835BD8D005C353A /* phpmon-config.json */; }; C450C8C628C919EC002A2B4B /* PreferenceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = C450C8C528C919EC002A2B4B /* PreferenceName.swift */; }; C450C8C728C919EC002A2B4B /* PreferenceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = C450C8C528C919EC002A2B4B /* PreferenceName.swift */; }; @@ -860,6 +861,7 @@ C44C1990276E44CB0072762D /* ProgressWindow.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = ProgressWindow.storyboard; sourceTree = ""; }; C44CCD3F27AFE2FC00CE40E5 /* AlertableError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertableError.swift; sourceTree = ""; }; C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MainMenu+Async.swift"; sourceTree = ""; }; + C44E985E29B23EBF0059F773 /* UpdateCheckTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateCheckTest.swift; sourceTree = ""; }; C44F868D2835BD8D005C353A /* phpmon-config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "phpmon-config.json"; sourceTree = ""; }; C450C8C528C919EC002A2B4B /* PreferenceName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferenceName.swift; sourceTree = ""; }; C451AFF52969E40F0078E617 /* HelpButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpButton.swift; sourceTree = ""; }; @@ -1480,6 +1482,7 @@ children = ( C471E7BE28F9B90F0021E251 /* StartupTest.swift */, C469E702294CFDF700A82AB2 /* DomainsListTest.swift */, + C44E985E29B23EBF0059F773 /* UpdateCheckTest.swift */, C4181F1028FAF9330042EA28 /* UITestCase.swift */, ); path = ui; @@ -2603,6 +2606,7 @@ C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, C471E82828F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */, C471E81E28F9BB260021E251 /* BetterAlert.swift in Sources */, + C44E985F29B23EBF0059F773 /* UpdateCheckTest.swift in Sources */, C471E7D228F9BA630021E251 /* ActiveFileSystem.swift in Sources */, C471E80028F9BAD10021E251 /* Xdebug.swift in Sources */, C471E7F528F9BAC80021E251 /* PhpEnv.swift in Sources */, diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 9f9fe5d..dd392ba 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -95,7 +95,7 @@ + isEnabled = "YES"> XCPMApplication { - let app = XCPMApplication() - app.withConfiguration(TestableConfigurations.working) - app.launch() - - // Note: If this fails here, make sure the menu bar item can be displayed - // If you use Bartender or something like this, this item may be hidden and tests will fail - app.statusItems.firstMatch.click() - - return app - } - final func test_can_always_open_domains_list() throws { - let app = openMenu() + let app = launch(openMenu: true) app.menuItems["mi_domain_list".localized].click() } final func test_can_filter_domains_list() throws { - let app = openMenu() + let app = launch(openMenu: true) app.menuItems["mi_domain_list".localized].click() @@ -58,7 +46,7 @@ final class DomainsListTest: UITestCase { } final func test_can_tap_add_domain_button() throws { - let app = openMenu() + let app = launch(openMenu: true) app.menuItems["mi_domain_list".localized].click() diff --git a/tests/ui/UITestCase.swift b/tests/ui/UITestCase.swift index e34f9b1..858b824 100644 --- a/tests/ui/UITestCase.swift +++ b/tests/ui/UITestCase.swift @@ -10,9 +10,33 @@ import XCTest class UITestCase: XCTestCase { + /** Launches the app and opens the menu. */ + public func launch( + openMenu: Bool = false, + with configuration: TestableConfiguration? = nil + ) -> XCPMApplication { + let app = XCPMApplication() + let config = configuration ?? TestableConfigurations.working + app.withConfiguration(config) + app.launch() + + // Note: If this fails here, make sure the menu bar item can be displayed + // If you use Bartender or something like this, this item may be hidden and tests will fail + if openMenu { + app.statusItems.firstMatch.click() + } + + return app + } + /** Checks if a single element exists. */ public func assertExists(_ element: XCUIElement, _ timeout: TimeInterval = 0.05) { - XCTAssert(element.waitForExistence(timeout: timeout)) + XCTAssertTrue(element.waitForExistence(timeout: timeout)) + } + + /** Checks if a single element fails to exist. */ + public func assertNotExists(_ element: XCUIElement, _ timeout: TimeInterval = 0.05) { + XCTAssertFalse(element.waitForExistence(timeout: timeout)) } /** Checks if all elements exist. */ diff --git a/tests/ui/UpdateCheckTest.swift b/tests/ui/UpdateCheckTest.swift new file mode 100644 index 0000000..aaa2c56 --- /dev/null +++ b/tests/ui/UpdateCheckTest.swift @@ -0,0 +1,121 @@ +// +// UpdateCheckTest.swift +// UI Tests +// +// Created by Nico Verbruggen on 13/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import XCTest + +final class UpdateCheckTest: UITestCase { + + override func setUpWithError() throws { + continueAfterFailure = false + } + + override func tearDownWithError() throws {} + + final func test_can_check_for_updates_with_no_new_update() throws { + let app = launch(openMenu: true) + app.menuItems["mi_check_for_updates".localized].click() + + assertExists(app.staticTexts["updater.alerts.is_latest_version.title".localized], 1.0) + assertExists(app.buttons["generic.ok".localized]) + } + + final func test_will_prompt_at_launch_new_version_available() throws { + var configuration = TestableConfigurations.working + + // Ensure automatic check is enabled + configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = true + + // Ensure an update is available + configuration.shellOutput[ + "curl -s --max-time 10 '\(Constants.Urls.DevBuildCaskFile.absoluteString)'" + ] = .delayed(0.5, """ + cask 'phpmon-dev' do + depends_on formula: 'gnu-sed' + + version '99.0.0_9999' + sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' + + url 'https://github.com/nicoverbruggen/phpmon/releases/download/v99.0/phpmon-dev.zip' + appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom' + name 'PHP Monitor DEV' + homepage 'https://phpmon.app' + + app 'PHP Monitor DEV.app', target: "PHP Monitor DEV.app" + end + """) + + let app = launch(openMenu: false, with: configuration) + + // Expect to see the content of the appropriate alert box + assertExists(app.staticTexts["updater.alerts.newer_version_available.title".localized("99.0.0 (9999)")], 2) + assertExists(app.buttons["updater.alerts.buttons.install".localized]) + assertExists(app.buttons["updater.alerts.buttons.dismiss".localized]) + } + + final func test_will_require_manual_search_for_update() throws { + var configuration = TestableConfigurations.working + + // Ensure automatic check is disabled + configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false + + // Ensure an update is available + configuration.shellOutput[ + "curl -s --max-time 10 '\(Constants.Urls.DevBuildCaskFile.absoluteString)'" + ] = .delayed(0.5, """ + cask 'phpmon-dev' do + depends_on formula: 'gnu-sed' + + version '99.0.0_9999' + sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' + + url 'https://github.com/nicoverbruggen/phpmon/releases/download/v99.0/phpmon-dev.zip' + appcast 'https://github.com/nicoverbruggen/phpmon/releases.atom' + name 'PHP Monitor DEV' + homepage 'https://phpmon.app' + + app 'PHP Monitor DEV.app', target: "PHP Monitor DEV.app" + end + """) + + // Wait for the menu to open and search for updates + let app = launch(openMenu: false, with: configuration) + + // The check should not happen if the preference is disabled + assertNotExists(app.staticTexts["updater.alerts.newer_version_available.title".localized("99.0.0 (9999)")], 2) + + // Open the menu and check manually + app.statusItems.firstMatch.click() + app.menuItems["mi_check_for_updates".localized].click() + + // Expect to see the content of the appropriate alert box + assertExists(app.staticTexts["updater.alerts.newer_version_available.title".localized("99.0.0 (9999)")], 2) + assertExists(app.buttons["updater.alerts.buttons.install".localized]) + assertExists(app.buttons["updater.alerts.buttons.dismiss".localized]) + } + + final func test_could_not_parse_version() throws { + var configuration = TestableConfigurations.working + + // Ensure automatic check is disabled + configuration.preferenceOverrides[.automaticBackgroundUpdateCheck] = false + + // Ensure an update is available + configuration.shellOutput[ + "curl -s --max-time 10 '\(Constants.Urls.DevBuildCaskFile.absoluteString)'" + ] = .delayed(0.5, "404 PAGE NOT FOUND") + + // Wait for the menu to open and search for updates + let app = launch(openMenu: true, with: configuration) + app.menuItems["mi_check_for_updates".localized].click() + + // Expect to see the content of the appropriate alert box + assertExists(app.staticTexts["updater.alerts.cannot_check_for_update.title".localized], 2) + assertExists(app.buttons["generic.ok".localized]) + assertExists(app.buttons["updater.alerts.buttons.releases_on_github".localized]) + } +} From 127d5f44948d621387278c6425764353151ae4c6 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 3 Mar 2023 23:11:40 +0100 Subject: [PATCH 091/194] =?UTF-8?q?=E2=9C=85=20Improve=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 + phpmon/Common/PHP/PHP Version/PhpHelper.swift | 18 ++-- .../Testables/TestableConfiguration.swift | 84 +++++++++++++++++++ tests/Shared/TestableConfigurations.swift | 39 ++------- tests/ui/MainMenuTest.swift | 50 +++++++++++ tests/ui/StartupTest.swift | 31 +------ tests/ui/UITestCase.swift | 9 +- 7 files changed, 166 insertions(+), 69 deletions(-) create mode 100644 tests/ui/MainMenuTest.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 985dacc..d2060d1 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -587,6 +587,7 @@ C4C8E819276F54D8003AC782 /* App+ConfigWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8E817276F54D8003AC782 /* App+ConfigWatch.swift */; }; C4C8E81B276F54E5003AC782 /* PhpConfigWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8E81A276F54E5003AC782 /* PhpConfigWatcher.swift */; }; C4C8E81C276F54E5003AC782 /* PhpConfigWatcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C8E81A276F54E5003AC782 /* PhpConfigWatcher.swift */; }; + C4CB250529B28BB800CA4492 /* MainMenuTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CB250429B28BB800CA4492 /* MainMenuTest.swift */; }; C4CB6E65292C362C002E9027 /* Homebrew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CB6E64292C362C002E9027 /* Homebrew.swift */; }; C4CB6E66292C362C002E9027 /* Homebrew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CB6E64292C362C002E9027 /* Homebrew.swift */; }; C4CB6E67292C362C002E9027 /* Homebrew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CB6E64292C362C002E9027 /* Homebrew.swift */; }; @@ -915,6 +916,7 @@ C4C8900628F0E3EF00CE5E97 /* ActiveFileSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveFileSystem.swift; sourceTree = ""; }; C4C8E817276F54D8003AC782 /* App+ConfigWatch.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "App+ConfigWatch.swift"; sourceTree = ""; }; C4C8E81A276F54E5003AC782 /* PhpConfigWatcher.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpConfigWatcher.swift; sourceTree = ""; }; + C4CB250429B28BB800CA4492 /* MainMenuTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuTest.swift; sourceTree = ""; }; C4CB6E64292C362C002E9027 /* Homebrew.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Homebrew.swift; sourceTree = ""; }; C4CCBA6B275C567B008C7055 /* PMWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMWindowController.swift; sourceTree = ""; }; C4CDA892288F1A71007CE25F /* Keys.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Keys.swift; sourceTree = ""; }; @@ -1432,6 +1434,7 @@ C469E702294CFDF700A82AB2 /* DomainsListTest.swift */, C44E985E29B23EBF0059F773 /* UpdateCheckTest.swift */, C4181F1028FAF9330042EA28 /* UITestCase.swift */, + C4CB250429B28BB800CA4492 /* MainMenuTest.swift */, ); path = ui; sourceTree = ""; @@ -2455,6 +2458,7 @@ C471E8DC28F9BB8F0021E251 /* ProgressVC.swift in Sources */, C471E8DE28F9BB8F0021E251 /* App+ConfigWatch.swift in Sources */, C471E8DF28F9BB8F0021E251 /* PhpConfigWatcher.swift in Sources */, + C4CB250529B28BB800CA4492 /* MainMenuTest.swift in Sources */, C471E8E028F9BB8F0021E251 /* Preset.swift in Sources */, C471E8E128F9BB8F0021E251 /* PresetHelper.swift in Sources */, C471E8E228F9BB8F0021E251 /* WarningView.swift in Sources */, diff --git a/phpmon/Common/PHP/PHP Version/PhpHelper.swift b/phpmon/Common/PHP/PHP Version/PhpHelper.swift index 75aa912..b248bb1 100644 --- a/phpmon/Common/PHP/PHP Version/PhpHelper.swift +++ b/phpmon/Common/PHP/PHP Version/PhpHelper.swift @@ -28,10 +28,12 @@ class PhpHelper { Task { // Create the appropriate folders and check if the files exist do { if !FileSystem.directoryExists("~/.config/phpmon/bin") { - try FileSystem.createDirectory( - "~/.config/phpmon/bin", - withIntermediateDirectories: true - ) + Task { @MainActor in + try FileSystem.createDirectory( + "~/.config/phpmon/bin", + withIntermediateDirectories: true + ) + } } if FileSystem.fileExists(destination) { @@ -59,10 +61,12 @@ class PhpHelper { export PATH=\(path):$PATH """ - try FileSystem.writeAtomicallyToFile(destination, content: script) + Task { @MainActor in + try FileSystem.writeAtomicallyToFile(destination, content: script) - if !FileSystem.isExecutableFile(destination) { - try FileSystem.makeExecutable(destination) + if !FileSystem.isExecutableFile(destination) { + try FileSystem.makeExecutable(destination) + } } // Create a symlink if the folder is not in the PATH diff --git a/phpmon/Common/Testables/TestableConfiguration.swift b/phpmon/Common/Testables/TestableConfiguration.swift index 2dbb33e..d509619 100644 --- a/phpmon/Common/Testables/TestableConfiguration.swift +++ b/phpmon/Common/Testables/TestableConfiguration.swift @@ -15,6 +15,88 @@ public struct TestableConfiguration: Codable { var commandOutput: [String: String] var preferenceOverrides: [PreferenceName: Bool] + init( + architecture: String, + filesystem: [String: FakeFile], + shellOutput: [String: BatchFakeShellOutput], + commandOutput: [String: String], + preferenceOverrides: [PreferenceName: Bool], + phpVersions: [VersionNumber] + ) { + self.architecture = architecture + self.filesystem = filesystem + self.shellOutput = shellOutput + self.commandOutput = commandOutput + self.preferenceOverrides = preferenceOverrides + + phpVersions.enumerated().forEach { (index, version) in + self.addPhpVersion(version, primary: index == 0) + } + } + + private enum CodingKeys: String, CodingKey { + case architecture, filesystem, shellOutput, commandOutput, preferenceOverrides + } + + // MARK: Add PHP versions + + private var primaryPhpVersion: VersionNumber? + private var secondaryPhpVersions: [VersionNumber] = [] + + mutating func addPhpVersion(_ version: VersionNumber, primary: Bool) { + if primary { + if primaryPhpVersion != nil { + fatalError("You cannot add multiple primary PHP versions to a testable configuration!") + } + primaryPhpVersion = version + } else { + self.secondaryPhpVersions.append(version) + } + + self.filesystem = self.filesystem.merging([ + "/opt/homebrew/opt/php@\(version.short)/bin/php" + : .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php"), + "/opt/homebrew/Cellar/php/\(version.long)/bin/php" + : .fake(.binary), + "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config" + : .fake(.binary), + "/opt/homebrew/etc/php/\(version.short)/php-fpm.d/www.conf" + : .fake(.text), + "/opt/homebrew/etc/php/\(version.short)/php-fpm.d/valet-fpm.conf" + : .fake(.text), + "/opt/homebrew/etc/php/\(version.short)/php.ini" + : .fake(.text), + "/opt/homebrew/etc/php/\(version.short)/conf.d/php-memory-limits.ini" + : .fake(.text) + ]) { (_, new) in new } + + if primary { + self.shellOutput["ls /opt/homebrew/opt | grep php"] + = .instant("php") + self.filesystem["/opt/homebrew/opt/php"] + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)") + self.filesystem["/opt/homebrew/opt/php/bin/php"] + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") + self.filesystem["/opt/homebrew/bin/php"] + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") + self.commandOutput["/opt/homebrew/bin/php-config --version"] + = version.long + self.commandOutput["/opt/homebrew/bin/php -r echo php_ini_scanned_files();"] = + """ + /opt/homebrew/etc/php/\(version.short)/conf.d/php-memory-limits.ini, + """ + } else { + self.shellOutput["ls /opt/homebrew/opt | grep php@"] = + BatchFakeShellOutput.instant( + self.secondaryPhpVersions + .map { "php@\($0.short)" } + .joined(separator: "\n") + ) + } + } + + // MARK: Interactions + func apply() { Log.separator() Log.info("USING TESTABLE CONFIGURATION...") @@ -38,6 +120,8 @@ public struct TestableConfiguration: Codable { } } + // MARK: Persist and load + func toJson(pretty: Bool = false) -> String { let data = try! JSONEncoder().encode(self) diff --git a/tests/Shared/TestableConfigurations.swift b/tests/Shared/TestableConfigurations.swift index e2b8ce0..4c105bb 100644 --- a/tests/Shared/TestableConfigurations.swift +++ b/tests/Shared/TestableConfigurations.swift @@ -24,16 +24,6 @@ class TestableConfigurations { : .fake(.binary), "/opt/homebrew/bin/valet" : .fake(.binary), - "/opt/homebrew/opt/php" - : .fake(.symlink, "/opt/homebrew/Cellar/php/8.2.0"), - "/opt/homebrew/opt/php@8.2/bin/php" - : .fake(.symlink, "/opt/homebrew/Cellar/php/8.2.0/bin/php"), - "/opt/homebrew/Cellar/php/8.2.0/bin/php" - : .fake(.binary), - "/opt/homebrew/Cellar/php/8.2.0/bin/php-config" - : .fake(.binary), - "/opt/homebrew/etc/php/8.2/php-fpm.d/www.conf" - : .fake(.text), "~/.config/valet/config.json" : .fake(.text, """ { @@ -45,12 +35,6 @@ class TestableConfigurations { "loopback": "127.0.0.1" } """), - "/opt/homebrew/etc/php/8.2/php-fpm.d/valet-fpm.conf" - : .fake(.text), - "/opt/homebrew/etc/php/8.2/php.ini" - : .fake(.text), - "/opt/homebrew/etc/php/8.2/conf.d/php-memory-limits.ini" - : .fake(.text) ], shellOutput: [ "sysctl -n sysctl.proc_translated" @@ -59,17 +43,6 @@ class TestableConfigurations { : .instant("user"), "which node" : .instant("/opt/homebrew/bin/node"), - "php -v" - : .instant(""" - PHP 8.2.0 (cli) (built: Dec XX 20XX XX:XX:XX) (NTS) - Copyright (c) The PHP Group - Zend Engine vX.X, Copyright (c) Zend Technologies - with Zend OPcache vX.X, Copyright (c), by Zend Technologies - """), - "ls /opt/homebrew/opt | grep php" - : .instant("php"), - "ls /opt/homebrew/opt | grep php@" - : .instant("php@8.2"), "sudo /opt/homebrew/bin/brew services info dnsmasq --json" : .delayed(0.2, """ [ @@ -176,16 +149,16 @@ class TestableConfigurations { : .instant("OK"), ], commandOutput: [ - "/opt/homebrew/bin/php-config --version": "8.2.0", "/opt/homebrew/bin/php -r echo ini_get('memory_limit');": "512M", "/opt/homebrew/bin/php -r echo ini_get('upload_max_filesize');": "512M", "/opt/homebrew/bin/php -r echo ini_get('post_max_size');": "512M", - "/opt/homebrew/bin/php -r echo php_ini_scanned_files();" - : """ - /opt/homebrew/etc/php/8.2/conf.d/php-memory-limits.ini, - """ ], - preferenceOverrides: [:] + preferenceOverrides: [:], + phpVersions: [ + VersionNumber(major: 8, minor: 2, patch: 0), + VersionNumber(major: 8, minor: 1, patch: 0), + VersionNumber(major: 8, minor: 0, patch: 0) + ] ) } } diff --git a/tests/ui/MainMenuTest.swift b/tests/ui/MainMenuTest.swift new file mode 100644 index 0000000..5c3f2b3 --- /dev/null +++ b/tests/ui/MainMenuTest.swift @@ -0,0 +1,50 @@ +// +// MainMenuTest.swift +// UI Tests +// +// Created by Nico Verbruggen on 03/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import XCTest + +final class MainMenuTest: UITestCase { + + override func setUpWithError() throws { + continueAfterFailure = false + } + + final func test_can_open_status_menu_item() throws { + let app = launch(openMenu: true) + + assertAllExist([ + // "Switch to PHP 8.2 (php)" should be visible since it is aliased to `php` + app.menuItems["\("mi_php_switch".localized) 8.2 (php)"], + // "Switch to PHP 8.1" should be the non-disabled option + app.menuItems["\("mi_php_switch".localized) 8.1 (php@8.1)"], + // "Switch to PHP 8.0" should be the non-disabled option + app.menuItems["\("mi_php_switch".localized) 8.0 (php@8.0)"], + // We should see the about and quit items + app.menuItems["mi_about".localized], + app.menuItems["mi_quit".localized] + ]) + + sleep(2) + } + + final func test_can_open_about() throws { + let app = launch(openMenu: true) + app.mainMenuItem(withText: "mi_about".localized).click() + } + + final func test_can_open_settings() throws { + let app = launch(openMenu: true) + app.mainMenuItem(withText: "mi_preferences".localized).click() + } + + final func test_can_quit_app() throws { + let app = launch(openMenu: true) + app.mainMenuItem(withText: "mi_quit".localized).click() + } + +} diff --git a/tests/ui/StartupTest.swift b/tests/ui/StartupTest.swift index 369cf26..2c00802 100644 --- a/tests/ui/StartupTest.swift +++ b/tests/ui/StartupTest.swift @@ -20,9 +20,7 @@ final class StartupTest: UITestCase { var configuration = TestableConfigurations.working configuration.filesystem["/opt/homebrew/bin/php"] = nil // PHP binary must be missing - let app = XCPMApplication() - app.withConfiguration(configuration) - app.launch() + let app = launch(with: configuration) // Dialog 1: "PHP is not correctly installed" assertAllExist([ @@ -52,9 +50,7 @@ final class StartupTest: UITestCase { var configuration = TestableConfigurations.working configuration.filesystem["/opt/homebrew/etc/php/8.2/php-fpm.d/valet-fpm.conf"] = nil - let app = XCPMApplication() - app.withConfiguration(configuration) - app.launch() + let app = launch(with: configuration) assertExists(app.staticTexts["alert.php_fpm_broken.title".localized], 3.0) click(app.buttons["generic.ok".localized]) @@ -64,30 +60,9 @@ final class StartupTest: UITestCase { var configuration = TestableConfigurations.working configuration.shellOutput["valet --version"] = .instant("Laravel Valet 5.0") - let app = XCPMApplication() - app.withConfiguration(configuration) - app.launch() + let app = launch(with: configuration) assertExists(app.staticTexts["startup.errors.valet_version_not_supported.title".localized], 3.0) click(app.buttons["generic.ok".localized]) } - - final func test_can_open_status_menu_item() throws { - let app = XCPMApplication() - app.withConfiguration(TestableConfigurations.working) - app.launch() - - // Note: If this fails here, make sure the menu bar item can be displayed - // If you use Bartender or something like this, this item may be hidden and tests will fail - app.statusItems.firstMatch.click() - - assertAllExist([ - // "Switch to PHP 8.1 (php)" should be visible since it is aliased to `php` - app.menuItems["\("mi_php_switch".localized) 8.2 (php)"], - // We should see the about and quit items - app.menuItems["mi_about".localized], - app.menuItems["mi_quit".localized] - ]) - sleep(2) - } } diff --git a/tests/ui/UITestCase.swift b/tests/ui/UITestCase.swift index 858b824..4a02651 100644 --- a/tests/ui/UITestCase.swift +++ b/tests/ui/UITestCase.swift @@ -9,7 +9,6 @@ import XCTest class UITestCase: XCTestCase { - /** Launches the app and opens the menu. */ public func launch( openMenu: Bool = false, @@ -50,7 +49,15 @@ class UITestCase: XCTestCase { public func click(_ element: XCUIElement) { element.click() } +} +extension XCPMApplication { + /** + Opens a given menu item found in the menu bar's status item. + */ + public func mainMenuItem(withText text: String) -> XCUIElement { + self.statusItems.firstMatch.menuItems[text].firstMatch + } } extension XCUIElement { From 54630c222bd9a6bf34d5a10f0880fb25f5896976 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 4 Mar 2023 00:37:02 +0100 Subject: [PATCH 092/194] =?UTF-8?q?=E2=9C=85=20Fix=20issue=20with=20php-co?= =?UTF-8?q?nfig=20binary=20being=20missing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Testables/TestableConfiguration.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phpmon/Common/Testables/TestableConfiguration.swift b/phpmon/Common/Testables/TestableConfiguration.swift index 9683968..bdcb206 100644 --- a/phpmon/Common/Testables/TestableConfiguration.swift +++ b/phpmon/Common/Testables/TestableConfiguration.swift @@ -76,9 +76,11 @@ public struct TestableConfiguration: Codable { self.filesystem["/opt/homebrew/opt/php"] = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)") self.filesystem["/opt/homebrew/opt/php/bin/php"] - = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") self.filesystem["/opt/homebrew/bin/php"] = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") + self.filesystem["/opt/homebrew/bin/php-config"] + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config") self.commandOutput["/opt/homebrew/bin/php-config --version"] = version.long self.commandOutput["/opt/homebrew/bin/php -r echo php_ini_scanned_files();"] = From f7c716096c0a7949c267c58bb83d3c4a5818ef41 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 4 Mar 2023 00:37:45 +0100 Subject: [PATCH 093/194] =?UTF-8?q?=E2=9C=85=20Fix=20issue=20with=20php-co?= =?UTF-8?q?nfig=20binary=20being=20missing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Testables/TestableConfiguration.swift | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phpmon/Common/Testables/TestableConfiguration.swift b/phpmon/Common/Testables/TestableConfiguration.swift index d509619..5c53024 100644 --- a/phpmon/Common/Testables/TestableConfiguration.swift +++ b/phpmon/Common/Testables/TestableConfiguration.swift @@ -76,9 +76,11 @@ public struct TestableConfiguration: Codable { self.filesystem["/opt/homebrew/opt/php"] = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)") self.filesystem["/opt/homebrew/opt/php/bin/php"] - = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") self.filesystem["/opt/homebrew/bin/php"] = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php") + self.filesystem["/opt/homebrew/bin/php-config"] + = .fake(.symlink, "/opt/homebrew/Cellar/php/\(version.long)/bin/php-config") self.commandOutput["/opt/homebrew/bin/php-config --version"] = version.long self.commandOutput["/opt/homebrew/bin/php -r echo php_ini_scanned_files();"] = From f3ef1da2bf0b8fe4f2acf7b4983cecea5952591f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 6 Mar 2023 22:01:58 +0100 Subject: [PATCH 094/194] =?UTF-8?q?=E2=9C=85=20Click=20through=20the=20pre?= =?UTF-8?q?ferences=20panes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/ui/MainMenuTest.swift | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/ui/MainMenuTest.swift b/tests/ui/MainMenuTest.swift index 5c3f2b3..dc4ff19 100644 --- a/tests/ui/MainMenuTest.swift +++ b/tests/ui/MainMenuTest.swift @@ -40,6 +40,18 @@ final class MainMenuTest: UITestCase { final func test_can_open_settings() throws { let app = launch(openMenu: true) app.mainMenuItem(withText: "mi_preferences".localized).click() + + assertExists(app.buttons["General"]) + click(app.buttons["General"]) + + assertExists(app.buttons["Appearance"]) + click(app.buttons["Appearance"]) + + assertExists(app.buttons["Visibility"]) + click(app.buttons["Visibility"]) + + assertExists(app.buttons["Notifications"]) + click(app.buttons["Notifications"]) } final func test_can_quit_app() throws { From f414c723e4b839da69fa9275b3e371326a5a7223 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 6 Mar 2023 22:11:44 +0100 Subject: [PATCH 095/194] =?UTF-8?q?=E2=9C=85=20Open=20additional=20windows?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/ui/MainMenuTest.swift | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/ui/MainMenuTest.swift b/tests/ui/MainMenuTest.swift index dc4ff19..7589554 100644 --- a/tests/ui/MainMenuTest.swift +++ b/tests/ui/MainMenuTest.swift @@ -32,6 +32,23 @@ final class MainMenuTest: UITestCase { sleep(2) } + final func test_can_open_domains_list() throws { + let app = launch(openMenu: true) + app.mainMenuItem(withText: "mi_domain_list".localized).click() + } + + final func test_can_open_php_doctor() throws { + let app = launch(openMenu: true) + app.mainMenuItem(withText: "mi_other".localized).click() + app.mainMenuItem(withText: "mi_fa_php_doctor".localized).click() + } + + final func test_can_view_onboarding_flow() throws { + let app = launch(openMenu: true) + app.mainMenuItem(withText: "mi_other".localized).click() + app.mainMenuItem(withText: "mi_view_onboarding".localized).click() + } + final func test_can_open_about() throws { let app = launch(openMenu: true) app.mainMenuItem(withText: "mi_about".localized).click() From e0b574b33d33a5c9c53955b6bab334ba1bb25fb3 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 11 Mar 2023 13:08:48 +0100 Subject: [PATCH 096/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Experiments,=20pr?= =?UTF-8?q?ogress=20view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 68 +++++++++++++------ .../xcschemes/PHP Monitor DEV.xcscheme | 2 +- phpmon/Common/Core/Actions.swift | 32 +++++++++ phpmon/Domain/Menu/MainMenu.swift | 4 ++ phpmon/Domain/Menu/StatusMenu+Items.swift | 1 + phpmon/Domain/Menu/StatusMenu.swift | 6 ++ .../Domain/Progress/ProgressWindow.storyboard | 6 +- .../Progress/ProgressViewSubject.swift | 22 ++++++ .../SwiftUI/Progress/ProgressWindowView.swift | 62 +++++++++++++++++ 9 files changed, 179 insertions(+), 24 deletions(-) create mode 100644 phpmon/Domain/SwiftUI/Progress/ProgressViewSubject.swift create mode 100644 phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8065f45..66b8627 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -532,7 +532,24 @@ C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; C48D6C71279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; C48D6C75279CD3E400F26D7E /* PhpVersionNumberTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C73279CD3E400F26D7E /* PhpVersionNumberTest.swift */; }; - C491997029901AF6001F3A21 /* PHP Monitor Self-Updater.app in Resources */ = {isa = PBXBuildFile; fileRef = C491996F29901AF5001F3A21 /* PHP Monitor Self-Updater.app */; }; + C490E3A729BC940D006D2DE6 /* ProgressWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */; }; + C490E3AA29BC9B3E006D2DE6 /* ProgressViewSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */; }; + C490E3B029BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */; }; + C490E3B129BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */; }; + C490E3B229BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */; }; + C490E3B329BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */; }; + C490E3B429BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */; }; + C490E3B529BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */; }; + C490E3B629BCA367006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C490E3B729BCA367006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C490E3B829BCA367006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C490E3B929BCA368006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C490E3BA29BCA368006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; + C490E3BB29BCA375006D2DE6 /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C490E3BC29BCA375006D2DE6 /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C490E3BD29BCA375006D2DE6 /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C490E3BE29BCA375006D2DE6 /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; + C490E3BF29BCA376006D2DE6 /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; C4927F0B27B2DFC200C55AFD /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4927F0A27B2DFC200C55AFD /* Errors.swift */; }; C4927F0C27B2DFC200C55AFD /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4927F0A27B2DFC200C55AFD /* Errors.swift */; }; C493084A279F331F009C240B /* AddSiteVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4930849279F331F009C240B /* AddSiteVC.swift */; }; @@ -541,14 +558,6 @@ C495F5B028A42E080087F70A /* EnvironmentCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */; }; C4998F0A2617633900B2526E /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; C4998F0B2617633900B2526E /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; - C49EAA5229B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; - C49EAA5329B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; - C49EAA5429B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; - C49EAA5529B12A5A00AB28FC /* Measurements.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5129B12A5A00AB28FC /* Measurements.swift */; }; - C49EAA5729B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; - C49EAA5829B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; - C49EAA5929B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; - C49EAA5A29B1689200AB28FC /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C4A6957728D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C4A81CA428C67101008DD9D1 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; @@ -905,7 +914,8 @@ C48D0C9225CC804200CC7490 /* XibLoadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XibLoadable.swift; sourceTree = ""; }; C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionNumber.swift; sourceTree = ""; }; C48D6C73279CD3E400F26D7E /* PhpVersionNumberTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpVersionNumberTest.swift; sourceTree = ""; }; - C491996F29901AF5001F3A21 /* PHP Monitor Self-Updater.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "PHP Monitor Self-Updater.app"; sourceTree = ""; }; + C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressWindowView.swift; sourceTree = ""; }; + C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressViewSubject.swift; sourceTree = ""; }; C4927F0A27B2DFC200C55AFD /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; C4930849279F331F009C240B /* AddSiteVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddSiteVC.swift; sourceTree = ""; }; C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentCheck.swift; sourceTree = ""; }; @@ -1145,7 +1155,6 @@ C4C75F59298C2D5700DFD82E /* LaunchControl.swift */, C406A5F6298AD2CF00B5B85A /* Assets.xcassets */, C406A5FB298AD2CF00B5B85A /* phpmon-updater.entitlements */, - C491996F29901AF5001F3A21 /* PHP Monitor Self-Updater.app */, ); path = "phpmon-updater"; sourceTree = ""; @@ -1535,6 +1544,15 @@ path = "PHP Version"; sourceTree = ""; }; + C490E3A329BC92E6006D2DE6 /* Progress */ = { + isa = PBXGroup; + children = ( + C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */, + C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */, + ); + path = Progress; + sourceTree = ""; + }; C4AF9F6A275445C900D44ED0 /* Valet */ = { isa = PBXGroup; children = ( @@ -1782,6 +1800,7 @@ C4EE55B027708BB2001DF387 /* SwiftUI */ = { isa = PBXGroup; children = ( + C490E3A329BC92E6006D2DE6 /* Progress */, C4297F7828970D4E004C4630 /* Warning */, C4E9D2BE2878B32D008FFDAD /* Onboarding */, C4B609182853AAA700C95265 /* Domains */, @@ -2025,7 +2044,6 @@ C41C1B3B22B0098000E7CF16 /* Assets.xcassets in Resources */, C41C1B3E22B0098000E7CF16 /* Main.storyboard in Resources */, C405A4D124B9B9140062FAFA /* InternetAccessPolicy.plist in Resources */, - C491997029901AF6001F3A21 /* PHP Monitor Self-Updater.app in Resources */, C44C1991276E44CB0072762D /* ProgressWindow.storyboard in Resources */, C4232EE52612526500158FC6 /* Credits.html in Resources */, 54FCFD26276C883F004CE748 /* SelectPreferenceView.xib in Resources */, @@ -2119,10 +2137,12 @@ buildActionMask = 2147483647; files = ( C4C75F5C298C31C000DFD82E /* Utility.swift in Sources */, + C490E3BC29BCA375006D2DE6 /* Measurements.swift in Sources */, C406A602298AD50D00B5B85A /* Updater.swift in Sources */, C4C75F5A298C2D5700DFD82E /* LaunchControl.swift in Sources */, C41F3D08298AED0D0042ACBF /* System.swift in Sources */, C406A5F3298AD2CE00B5B85A /* main.swift in Sources */, + C490E3B729BCA367006D2DE6 /* App+BrewWatch.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2132,8 +2152,10 @@ files = ( C41ADCE82970CCC700120423 /* FSNotifier.swift in Sources */, C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */, + C490E3BB29BCA375006D2DE6 /* Measurements.swift in Sources */, C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */, C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */, + C490E3AA29BC9B3E006D2DE6 /* ProgressViewSubject.swift in Sources */, C4D3661A291173EA006BD146 /* DictionaryExtension.swift in Sources */, C4C8900728F0E3EF00CE5E97 /* ActiveFileSystem.swift in Sources */, C409349D298EE8E900D25014 /* AppUpdater.swift in Sources */, @@ -2237,18 +2259,17 @@ C42759672627662800093CAE /* NSMenuExtension.swift in Sources */, C422DDAA28A2C49900CEAC97 /* WarningListView.swift in Sources */, C469E6FE294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */, + C490E3B629BCA367006D2DE6 /* App+BrewWatch.swift in Sources */, C464ADAF275A7A69003FCD53 /* DomainListVC.swift in Sources */, C44CCD4927AFF3B700CE40E5 /* MainMenu+Async.swift in Sources */, C4C1019B27C65C6F001FACC2 /* Process.swift in Sources */, C4EC1E73279DFCF40010F296 /* Events.swift in Sources */, C44067FB27E25FD70045BD4E /* DomainListTLSCell.swift in Sources */, C4C8900528F0E3D100CE5E97 /* RealFileSystem.swift in Sources */, - C49EAA5229B12A5A00AB28FC /* Measurements.swift in Sources */, C4A81CA428C67101008DD9D1 /* PMTableView.swift in Sources */, C4927F0B27B2DFC200C55AFD /* Errors.swift in Sources */, C4CE7F9629683B43000102CF /* PhpVersionNumberCollection.swift in Sources */, C4B5853E2770FE3900DA4FBE /* Paths.swift in Sources */, - C49EAA5729B1689200AB28FC /* App+BrewWatch.swift in Sources */, C41C1B4B22B019FF00E7CF16 /* ActivePhpInstallation.swift in Sources */, C4FE011128084FC200D1DE6D /* SelectionVC.swift in Sources */, C4709CA228524B3400088BB8 /* StatsView.swift in Sources */, @@ -2270,6 +2291,7 @@ C4FACE83288F1F9700FC478F /* OnboardingWindowController.swift in Sources */, C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */, C43FDBE929A932B0003D85EC /* PhpConfigChecker.swift in Sources */, + C490E3A729BC940D006D2DE6 /* ProgressWindowView.swift in Sources */, C4BF56AB2949381100379603 /* FakeValetInteractor.swift in Sources */, C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */, C451AFF62969E40F0078E617 /* HelpButton.swift in Sources */, @@ -2311,6 +2333,7 @@ C471E83428F9BB650021E251 /* VersionExtractor.swift in Sources */, C471E83528F9BB650021E251 /* ValetProxy.swift in Sources */, C471E83728F9BB650021E251 /* DomainScanner.swift in Sources */, + C490E3BE29BCA375006D2DE6 /* Measurements.swift in Sources */, C471E83928F9BB650021E251 /* ValetSite.swift in Sources */, C471E83A28F9BB650021E251 /* FakeValetSite.swift in Sources */, C471E83C28F9BB650021E251 /* ValetDomainScanner.swift in Sources */, @@ -2356,11 +2379,10 @@ C471E85E28F9BB650021E251 /* DomainListVC+ContextMenu.swift in Sources */, C4E2E86628FC2F1B003B070C /* XCPMApplication.swift in Sources */, C471E85F28F9BB650021E251 /* DomainListVC+Actions.swift in Sources */, + C490E3B429BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, C471E86028F9BB650021E251 /* SelectionVC.swift in Sources */, - C49EAA5429B12A5A00AB28FC /* Measurements.swift in Sources */, C471E86128F9BB650021E251 /* AddSiteVC.swift in Sources */, C471E86228F9BB650021E251 /* AddProxyVC.swift in Sources */, - C49EAA5929B1689200AB28FC /* App+BrewWatch.swift in Sources */, C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, C471E86428F9BB650021E251 /* Warning.swift in Sources */, C40175BA2903108900763A68 /* ValetInteractor.swift in Sources */, @@ -2383,6 +2405,7 @@ C471E87028F9BB650021E251 /* GlobalKeybindPreference.swift in Sources */, C471E87228F9BB650021E251 /* CheckboxPreferenceView.swift in Sources */, C471E87428F9BB650021E251 /* SelectPreferenceView.swift in Sources */, + C490E3B029BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */, C471E87628F9BB650021E251 /* HotkeyPreferenceView.swift in Sources */, C471E87728F9BB650021E251 /* Keys.swift in Sources */, C471E87828F9BB650021E251 /* TerminalProgressWindowController.swift in Sources */, @@ -2436,6 +2459,7 @@ C471E82728F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */, C471E81C28F9BB250021E251 /* BetterAlert.swift in Sources */, C471E7DB28F9BA8F0021E251 /* RealShell.swift in Sources */, + C490E3B929BCA368006D2DE6 /* App+BrewWatch.swift in Sources */, C471E7FF28F9BAD10021E251 /* Xdebug.swift in Sources */, C409349F298EE8E900D25014 /* AppUpdater.swift in Sources */, C471E7F228F9BAC70021E251 /* PhpEnv.swift in Sources */, @@ -2494,6 +2518,8 @@ C451AFF92969E40F0078E617 /* HelpButton.swift in Sources */, C471E8A328F9BB8F0021E251 /* AppDelegate+MenuOutlets.swift in Sources */, C471E8A428F9BB8F0021E251 /* AppDelegate+Notifications.swift in Sources */, + C490E3B329BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, + C490E3B229BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */, C471E8A528F9BB8F0021E251 /* AppDelegate+InterApp.swift in Sources */, C471E8A628F9BB8F0021E251 /* App.swift in Sources */, C471E8A728F9BB8F0021E251 /* App+ActivationPolicy.swift in Sources */, @@ -2508,7 +2534,6 @@ C471E8B028F9BB8F0021E251 /* ActivePhpInstallation+Checks.swift in Sources */, C471E8B128F9BB8F0021E251 /* MainMenu.swift in Sources */, C471E8B228F9BB8F0021E251 /* MainMenu+Startup.swift in Sources */, - C49EAA5529B12A5A00AB28FC /* Measurements.swift in Sources */, C471E8B328F9BB8F0021E251 /* MainMenu+Async.swift in Sources */, C471E8B428F9BB8F0021E251 /* MainMenu+Switcher.swift in Sources */, C471E8B528F9BB8F0021E251 /* MainMenu+FixMyValet.swift in Sources */, @@ -2554,6 +2579,7 @@ C471E8DA28F9BB8F0021E251 /* Keys.swift in Sources */, C471E8DB28F9BB8F0021E251 /* TerminalProgressWindowController.swift in Sources */, C471E8DC28F9BB8F0021E251 /* ProgressVC.swift in Sources */, + C490E3BF29BCA376006D2DE6 /* Measurements.swift in Sources */, C471E8DE28F9BB8F0021E251 /* App+ConfigWatch.swift in Sources */, C471E8DF28F9BB8F0021E251 /* PhpConfigWatcher.swift in Sources */, C4CB250529B28BB800CA4492 /* MainMenuTest.swift in Sources */, @@ -2588,6 +2614,7 @@ C471E7EE28F9BAC30021E251 /* Constants.swift in Sources */, C40934A0298EE8E900D25014 /* AppUpdater.swift in Sources */, C471E80E28F9BAE80021E251 /* DateExtension.swift in Sources */, + C490E3BA29BCA368006D2DE6 /* App+BrewWatch.swift in Sources */, C471E7D028F9BA630021E251 /* FileSystemProtocol.swift in Sources */, C471E81228F9BAE80021E251 /* TimeIntervalExtension.swift in Sources */, C471E7DF28F9BAAB0021E251 /* RealCommand.swift in Sources */, @@ -2641,7 +2668,6 @@ C471E80F28F9BAE80021E251 /* NSMenuExtension.swift in Sources */, C471E80B28F9BAE80021E251 /* XibLoadable.swift in Sources */, C471E7F428F9BAC80021E251 /* VersionNumber.swift in Sources */, - C49EAA5A29B1689200AB28FC /* App+BrewWatch.swift in Sources */, C471E7CB28F9BA5B0021E251 /* TestableCommand.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2699,12 +2725,12 @@ C4AF9F7B2754499000D44ED0 /* Valet.swift in Sources */, C4C1019C27C65C6F001FACC2 /* Process.swift in Sources */, C451AFF72969E40F0078E617 /* HelpButton.swift in Sources */, + C490E3B129BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */, C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */, C45B914A295607F400F4EC78 /* Service.swift in Sources */, C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */, C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */, - C49EAA5829B1689200AB28FC /* App+BrewWatch.swift in Sources */, C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, C463E381284930EE00422731 /* PresetHelper.swift in Sources */, C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */, @@ -2743,10 +2769,10 @@ C4CE7F9729683B43000102CF /* PhpVersionNumberCollection.swift in Sources */, C4F30B09278E1A0E00755FCE /* CustomPrefs.swift in Sources */, C40FE738282ABA4F00A302C2 /* AppVersion.swift in Sources */, - C49EAA5329B12A5A00AB28FC /* Measurements.swift in Sources */, C415D3E92770F692005EF286 /* AppDelegate+InterApp.swift in Sources */, C4E49DEE28F764A00026AC4E /* TestableCommand.swift in Sources */, C4AF9F78275447F100D44ED0 /* ValetConfigurationTest.swift in Sources */, + C490E3B529BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, C40175B92903108900763A68 /* ValetInteractor.swift in Sources */, C4CE3BBC27B324250086CA49 /* ComposerWindow.swift in Sources */, C40B24F427A310830018C7D2 /* StatusMenu.swift in Sources */, @@ -2793,6 +2819,7 @@ C485707C28BF459500539B36 /* NoWarningsView.swift in Sources */, C4F5FBCD28218CB8001065C5 /* Xdebug.swift in Sources */, C40B24F227A310770018C7D2 /* Events.swift in Sources */, + C490E3B829BCA367006D2DE6 /* App+BrewWatch.swift in Sources */, C44AD3F72912EF7100997FF4 /* RealFileSystemTest.swift in Sources */, C4F30B0A278E1A1A00755FCE /* ComposerJson.swift in Sources */, C4C0E8E027F88AEB002D32A9 /* FakeDomainScanner.swift in Sources */, @@ -2831,6 +2858,7 @@ C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */, C46EBC4B28DB966A007ACC74 /* TestableShell.swift in Sources */, C40FE73B282ABB2E00A302C2 /* AppVersionTest.swift in Sources */, + C490E3BD29BCA375006D2DE6 /* Measurements.swift in Sources */, C4F780C625D80B75000DBC97 /* XibLoadable.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 62c5002..9f9fe5d 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -99,7 +99,7 @@ + isEnabled = "NO"> - + - + @@ -42,7 +42,7 @@ - + diff --git a/phpmon/Domain/SwiftUI/Progress/ProgressViewSubject.swift b/phpmon/Domain/SwiftUI/Progress/ProgressViewSubject.swift new file mode 100644 index 0000000..b739aad --- /dev/null +++ b/phpmon/Domain/SwiftUI/Progress/ProgressViewSubject.swift @@ -0,0 +1,22 @@ +// +// ProgressViewSubject.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 11/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import SwiftUI + +class ProgressViewSubject: ObservableObject { + @Published var title: String + @Published var description: String? + @Published var progress: Double + + init(title: String, description: String) { + self.title = title + self.description = description + self.progress = 0 + } +} diff --git a/phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift b/phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift new file mode 100644 index 0000000..1ddfd81 --- /dev/null +++ b/phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift @@ -0,0 +1,62 @@ +// +// ProgressWindowView.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 11/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import SwiftUI + +struct ProgressWindowView: View { + @ObservedObject var subject: ProgressViewSubject + + var body: some View { + VStack(alignment: .leading) { + VStack(alignment: .leading) { + Text(subject.title) + .font(.system(size: 15)) + .bold() + if subject.description != nil { + Text(subject.description!) + .font(.system(size: 14)) + } + } + .padding(.leading, 20) + .padding(.top, 20) + ProgressView(value: subject.progress).padding() + } + } + + @MainActor static func display(_ subject: ProgressViewSubject) async -> NSWindowController { + let view = ProgressWindowView(subject: subject) + + let window = NSWindow( + contentRect: NSRect(x: 0, y: 0, width: 420, height: 240), + styleMask: [.titled, .closable, .utilityWindow], + backing: .buffered, + defer: false + ) + + window.title = "" + window.titlebarAppearsTransparent = true + window.contentView = NSHostingView(rootView: view) + let controller = NSWindowController(window: window) + controller.showWindow(nil) + controller.positionWindowInTopLeftCorner() + controller.window?.makeKeyAndOrderFront(self) + // NSApp.activate(ignoringOtherApps: true) + return controller + } +} + +struct ProgressWindowView_Previews: PreviewProvider { + static var previews: some View { + ProgressWindowView( + subject: ProgressViewSubject( + title: "Long running task", + description: "Please be patient" + ) + ) + } +} From 81ed154db144586bb81b63f9865242bc3fd45863 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Mar 2023 21:03:13 +0100 Subject: [PATCH 097/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Discern=20install?= =?UTF-8?q?ation=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depending on the installation status, PHP Monitor should be able to find out which versions of PHP can be installed and removed. --- PHP Monitor.xcodeproj/project.pbxproj | 10 ++ phpmon/Common/Core/Actions.swift | 32 ---- phpmon/Common/PHP/PhpVersionInstaller.swift | 165 ++++++++++++++++++++ phpmon/Domain/Menu/MainMenu.swift | 8 +- phpmon/Domain/Menu/StatusMenu+Items.swift | 24 +++ phpmon/Domain/Menu/StatusMenu.swift | 6 - 6 files changed, 205 insertions(+), 40 deletions(-) create mode 100644 phpmon/Common/PHP/PhpVersionInstaller.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 66b8627..48cf32b 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -735,6 +735,10 @@ C4F780CC25D80B75000DBC97 /* ActivePhpInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C1B4A22B019FF00E7CF16 /* ActivePhpInstallation.swift */; }; C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; }; C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C474B00524C0E98C00066A22 /* LocalNotification.swift */; }; + C4F8764E29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; + C4F8764F29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; + C4F8765029BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; + C4F8765129BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; C4F8C0A422D4F12C002EFE61 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */; }; C4FACE80288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; C4FACE81288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; @@ -1005,6 +1009,7 @@ C4F7809B25D80344000DBC97 /* CommandTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandTest.swift; sourceTree = ""; }; C4F780A725D80AE8000DBC97 /* php.ini */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = php.ini; sourceTree = ""; }; C4F780AD25D80B37000DBC97 /* PhpExtensionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpExtensionTest.swift; sourceTree = ""; }; + C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionInstaller.swift; sourceTree = ""; }; C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateExtension.swift; sourceTree = ""; }; C4F8C0A522D4FA41002EFE61 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PreferencesWindowController+Hotkey.swift"; sourceTree = ""; }; @@ -1081,6 +1086,7 @@ 54B20EDF263AA22C00D3250E /* PHP */ = { isa = PBXGroup; children = ( + C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */, C48D6C6E279CD29C00F26D7E /* PHP Version */, C4D9ADC2277610E4007277F4 /* Switcher */, C4F30B01278E169B00755FCE /* Homebrew */, @@ -2180,6 +2186,7 @@ C4205A7E27F4D21800191A39 /* ValetProxy.swift in Sources */, C4C8E818276F54D8003AC782 /* App+ConfigWatch.swift in Sources */, C4E49DE728F764050026AC4E /* ActiveCommand.swift in Sources */, + C4F8764E29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, 54FCFD30276C8DA4004CE748 /* HotkeyPreferenceView.swift in Sources */, C450C8C628C919EC002A2B4B /* PreferenceName.swift in Sources */, C4E4404627C56F4700D225E1 /* ValetSite.swift in Sources */, @@ -2456,6 +2463,7 @@ C471E80828F9BAD40021E251 /* PhpExtension.swift in Sources */, C471E7F928F9BACB0021E251 /* PhpSwitcher.swift in Sources */, C471E82A28F9BB330021E251 /* ValetListable.swift in Sources */, + C4F8765029BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, C471E82728F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */, C471E81C28F9BB250021E251 /* BetterAlert.swift in Sources */, C471E7DB28F9BA8F0021E251 /* RealShell.swift in Sources */, @@ -2642,6 +2650,7 @@ C471E80028F9BAD10021E251 /* Xdebug.swift in Sources */, C471E7F528F9BAC80021E251 /* PhpEnv.swift in Sources */, C471E7ED28F9BAC30021E251 /* Process.swift in Sources */, + C4F8765129BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, C471E81128F9BAE80021E251 /* NSMenuItemExtension.swift in Sources */, C471E7CC28F9BA5B0021E251 /* TestableShell.swift in Sources */, C471E80C28F9BAE80021E251 /* NSWindowExtension.swift in Sources */, @@ -2681,6 +2690,7 @@ C485707128BF452E00539B36 /* WarningManager.swift in Sources */, C41CA5EE2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */, C4FACE81288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */, + C4F8764F29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, C40934A3298EEB2C00D25014 /* CaskFile.swift in Sources */, 54D9E0B727E4F51E003B9AD9 /* HotKey.swift in Sources */, C413E43528DA3EB100AE33C7 /* TestableShellTest.swift in Sources */, diff --git a/phpmon/Common/Core/Actions.swift b/phpmon/Common/Core/Actions.swift index 8f17d70..38d33f3 100644 --- a/phpmon/Common/Core/Actions.swift +++ b/phpmon/Common/Core/Actions.swift @@ -130,36 +130,4 @@ class Actions { await brew("services restart \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) await brew("services restart \(Homebrew.Formulae.nginx)", sudo: Homebrew.Formulae.nginx.elevated) } - - public static func installPhpVersion(version: String) async { - let subject = ProgressViewSubject( - title: "Installing PHP \(version)", - description: "Please wait while Homebrew installs PHP \(version)..." - ) - - let installables = [ - "8.2": "php", - "8.1": "php@8.1", - "8.0": "php@8.0", - "7.4": "shivammathur/php/php@7.4", - "7.3": "shivammathur/php/php@7.3", - "7.2": "shivammathur/php/php@7.2", - "7.1": "shivammathur/php/php@7.1", - "7.0": "shivammathur/php/php@7.0" - ] - - if installables.keys.contains(version) { - let window = await ProgressWindowView.display(subject) - let formula = installables[version]! - if formula.contains("shivammathur") && !HomebrewDiagnostics.installedTaps.contains("shivammathur/php") { - await Shell.quiet("brew tap shivammathur/php") - } - // TODO: Attempt to read the progress of this - // Use the same way the composer progress is read - await brew("install \(formula)", sudo: false) - await PhpEnv.detectPhpVersions() - await MainMenu.shared.refreshActiveInstallation() - await window.close() - } - } } diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift new file mode 100644 index 0000000..341397e --- /dev/null +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -0,0 +1,165 @@ +// +// PhpVersionInstaller.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 13/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +public class PhpVersionInstaller { + public static var installables = [ + "8.2": "php", + "8.1": "php@8.1", + "8.0": "php@8.0", + "7.4": "shivammathur/php/php@7.4", + "7.3": "shivammathur/php/php@7.3", + "7.2": "shivammathur/php/php@7.2", + "7.1": "shivammathur/php/php@7.1", + "7.0": "shivammathur/php/php@7.0" + ] + + public enum PhpInstallAction { + case install + case remove + case purge + } + + // swiftlint:disable cyclomatic_complexity function_body_length + public static func modifyPhpVersion(version: String, action: PhpInstallAction) async { + let title = { + switch action { + case .install: + return "Installing PHP \(version)" + case .remove: + return "Removing PHP \(version)" + case .purge: + return "Purging PHP \(version)" + } + }() + + let description = { + switch action { + case .install: + return "Please wait while Homebrew installs PHP \(version)..." + case .remove: + return "Please wait while Homebrew uninstalls PHP \(version)..." + case .purge: + return "Please wait while Homebrew purges PHP \(version)" + } + }() + + let subject = ProgressViewSubject( + title: title, + description: description + ) + + let installables = Self.installables + + if installables.keys.contains(version) { + let window = await ProgressWindowView.display(subject) + let formula = installables[version]! + + var command = "" + + if action == .install { + if formula.contains("shivammathur") && !HomebrewDiagnostics.installedTaps.contains("shivammathur/php") { + await Shell.quiet("brew tap shivammathur/php") + } + } + + if action == .purge || action == .remove { + command = "brew remove \(formula) --force --ignore-dependencies" + + if action == .purge { + command += " --zap" + } + } + + let (process, _) = try! await Shell.attach( + command, + didReceiveOutput: { text, _ in + if action == .install { + // Check if we can recognize any of the typical progress steps + if let number = Self.reportInstallationProgress(text) { + Task { @MainActor in + subject.progress = number + } + } + } + }, + withTimeout: .minutes(5) + ) + + if process.terminationStatus <= 0 { + Task { @MainActor in + subject.progress = 100 + } + + await PhpEnv.detectPhpVersions() + await MainMenu.shared.refreshActiveInstallation() + Task { @MainActor in + subject.description = "The operation succeeded. This window will close in 5 seconds." + } + await window.close() + } else { + // Do not close the window and notify about failure + Task { @MainActor in + subject.description = "The operation failed." + } + } + } + } + + public static func installPhpVersion(version: String) async { + await self.modifyPhpVersion(version: version, action: .install) + } + + public static func removePhpVersion(version: String) async { + await self.modifyPhpVersion(version: version, action: .remove) + } + + private static func reportInstallationProgress(_ text: String) -> Double? { + if text.contains("Fetching") { + return 10 + } + if text.contains("Downloading") { + return 25 + } + if text.contains("Already downloaded") || text.contains("Downloaded") { + return 50 + } + if text.contains("Installing") { + return 60 + } + if text.contains("Pouring") { + return 80 + } + if text.contains("Summary") { + return 100 + } + return nil + } + + /** + Determine which action will be available in the PHP version manager. + Some versions will be available to be removed, some to be installed. + */ + public static var availableActions: [(version: String, action: PhpInstallAction)] { + var operations: [(version: String, action: PhpInstallAction)] = [] + + let installed = PhpEnv.shared.cachedPhpInstallations.keys + + for installable in installables.keys { + // While technically possible to uninstall the main formula (`php`) + // this should be disabled in the UI... this data should be correct though + operations.append((installable, installed.contains(installable) ? .remove : .install)) + } + + operations.sort { $1.version < $0.version } + + return operations + } + +} diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 623b118..133bf4a 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -202,8 +202,12 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate Task { await AppUpdater().checkForUpdates(userInitiated: true) } } - @objc func installPhp74() { - Task { await Actions.installPhpVersion(version: "7.4") } + @objc func installPhpVersion(sender: PhpMenuItem) { + Task { await PhpVersionInstaller.installPhpVersion(version: sender.version) } + } + + @objc func removePhpVersion(sender: PhpMenuItem) { + Task { await PhpVersionInstaller.removePhpVersion(version: sender.version) } } // MARK: - Menu Delegate diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 48954f9..a3a0a3e 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -91,6 +91,30 @@ extension StatusMenu { addItem(menuItem) } + // TODO: This is a fixed list... + + addItem(NSMenuItem.separator()) + addItem(HeaderView.asMenuItem(text: "Experimental")) + for result in PhpVersionInstaller.availableActions { + let title = result.action == .install + ? "Install PHP \(result.version)..." + : "Remove PHP \(result.version)..." + + var action: Selector? = result.action == .install + ? #selector(MainMenu.installPhpVersion(sender:)) + : #selector(MainMenu.removePhpVersion(sender:)) + + if result.version == PhpEnv.brewPhpAlias { + break + } + + addItem(PhpMenuItem( + title: title, + action: action, + keyEquivalent: "" + )) + } + if !PhpEnv.shared.incompatiblePhpVersions.isEmpty { addItem(NSMenuItem.separator()) addItem(NSMenuItem( diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index aa898b2..88d6623 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -65,12 +65,6 @@ class StatusMenu: NSMenu { addItem(NSMenuItem.separator()) - addItem(withTitle: "EXPERIMENTAL: Install PHP 7.4...", - action: #selector(MainMenu.installPhp74), - keyEquivalent: "") - - addItem(NSMenuItem.separator()) - addCoreMenuItems() } } From a6aecff557e6a38c7cc27ebde01f09843250a308 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Mar 2023 21:04:18 +0100 Subject: [PATCH 098/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Fix=20omission=20?= =?UTF-8?q?of=20`php`=20formula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/StatusMenu+Items.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index a3a0a3e..ebf5005 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -105,7 +105,7 @@ extension StatusMenu { : #selector(MainMenu.removePhpVersion(sender:)) if result.version == PhpEnv.brewPhpAlias { - break + continue } addItem(PhpMenuItem( From 7b7a5e52367e22168e789c3e011f015a9e8a03c6 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Mar 2023 21:08:24 +0100 Subject: [PATCH 099/194] =?UTF-8?q?=F0=9F=91=8C=20Did=20someone=20say=20"o?= =?UTF-8?q?ut=20of=20range"=3F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 16 +++++++++------- phpmon/Domain/Menu/StatusMenu+Items.swift | 9 ++++++--- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 341397e..85f6ba2 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -94,7 +94,7 @@ public class PhpVersionInstaller { if process.terminationStatus <= 0 { Task { @MainActor in - subject.progress = 100 + subject.progress = 1 } await PhpEnv.detectPhpVersions() @@ -109,6 +109,8 @@ public class PhpVersionInstaller { subject.description = "The operation failed." } } + } else { + Log.err("\(version) is not contained within installable list") } } @@ -122,22 +124,22 @@ public class PhpVersionInstaller { private static func reportInstallationProgress(_ text: String) -> Double? { if text.contains("Fetching") { - return 10 + return 0.1 } if text.contains("Downloading") { - return 25 + return 0.25 } if text.contains("Already downloaded") || text.contains("Downloaded") { - return 50 + return 0.50 } if text.contains("Installing") { - return 60 + return 0.60 } if text.contains("Pouring") { - return 80 + return 0.80 } if text.contains("Summary") { - return 100 + return 1 } return nil } diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index ebf5005..90ada4d 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -100,7 +100,7 @@ extension StatusMenu { ? "Install PHP \(result.version)..." : "Remove PHP \(result.version)..." - var action: Selector? = result.action == .install + let action: Selector? = result.action == .install ? #selector(MainMenu.installPhpVersion(sender:)) : #selector(MainMenu.removePhpVersion(sender:)) @@ -108,11 +108,14 @@ extension StatusMenu { continue } - addItem(PhpMenuItem( + let menuItem = PhpMenuItem( title: title, action: action, keyEquivalent: "" - )) + ) + + menuItem.version = result.version + addItem(menuItem) } if !PhpEnv.shared.incompatiblePhpVersions.isEmpty { From 6dabcd7668c205ab99e24b682c62327be0fcad29 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Mar 2023 21:11:56 +0100 Subject: [PATCH 100/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Properly=20instal?= =?UTF-8?q?l=20formula?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 2 ++ 1 file changed, 2 insertions(+) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 85f6ba2..fb701c5 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -67,6 +67,8 @@ public class PhpVersionInstaller { if formula.contains("shivammathur") && !HomebrewDiagnostics.installedTaps.contains("shivammathur/php") { await Shell.quiet("brew tap shivammathur/php") } + + command = "brew install \(formula) --force" } if action == .purge || action == .remove { From 862add85120d87358e3b155994dfd7519db1b8d4 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Mar 2023 21:21:29 +0100 Subject: [PATCH 101/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Ensure=20unsuppor?= =?UTF-8?q?ted=20PHP=20can=20be=20removed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index fb701c5..15e613f 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -154,11 +154,15 @@ public class PhpVersionInstaller { var operations: [(version: String, action: PhpInstallAction)] = [] let installed = PhpEnv.shared.cachedPhpInstallations.keys + let unsupported = PhpEnv.shared.incompatiblePhpVersions for installable in installables.keys { // While technically possible to uninstall the main formula (`php`) // this should be disabled in the UI... this data should be correct though - operations.append((installable, installed.contains(installable) ? .remove : .install)) + let availableOperation: PhpInstallAction = + installed.contains(installable) || unsupported.contains(installable) ? .remove : .install + + operations.append((version: installable, action: availableOperation)) } operations.sort { $1.version < $0.version } From 016f36a8fd7582248a78e369f2db7c16e0a7eef4 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Mar 2023 21:24:36 +0100 Subject: [PATCH 102/194] =?UTF-8?q?=F0=9F=8F=97=20WIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 15e613f..3e5ece4 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -101,6 +101,9 @@ public class PhpVersionInstaller { await PhpEnv.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() + + // TODO: Link the configuration file if it does not exist yet + Task { @MainActor in subject.description = "The operation succeeded. This window will close in 5 seconds." } From 34e9e3f8298514f907498df0f13e4733a5e692a4 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 13 Mar 2023 23:23:22 +0100 Subject: [PATCH 103/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20progress=20vie?= =?UTF-8?q?w?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 17 +++++++++-------- .../SwiftUI/Progress/ProgressWindowView.swift | 11 +++++++---- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 3e5ece4..b6069e7 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -84,9 +84,10 @@ public class PhpVersionInstaller { didReceiveOutput: { text, _ in if action == .install { // Check if we can recognize any of the typical progress steps - if let number = Self.reportInstallationProgress(text) { + if let (number, text) = Self.reportInstallationProgress(text) { Task { @MainActor in subject.progress = number + subject.description = text } } } @@ -127,24 +128,24 @@ public class PhpVersionInstaller { await self.modifyPhpVersion(version: version, action: .remove) } - private static func reportInstallationProgress(_ text: String) -> Double? { + private static func reportInstallationProgress(_ text: String) -> (Double, String)? { if text.contains("Fetching") { - return 0.1 + return (0.1, "Fetching...") } if text.contains("Downloading") { - return 0.25 + return (0.25, "Downloading...") } if text.contains("Already downloaded") || text.contains("Downloaded") { - return 0.50 + return (0.50, "Downloaded!") } if text.contains("Installing") { - return 0.60 + return (0.60, "Installing...") } if text.contains("Pouring") { - return 0.80 + return (0.80, "Pouring... this can take a while!") } if text.contains("Summary") { - return 1 + return (1, "The installation is done!") } return nil } diff --git a/phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift b/phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift index 1ddfd81..d6edc7a 100644 --- a/phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift +++ b/phpmon/Domain/SwiftUI/Progress/ProgressWindowView.swift @@ -15,16 +15,19 @@ struct ProgressWindowView: View { VStack(alignment: .leading) { VStack(alignment: .leading) { Text(subject.title) - .font(.system(size: 15)) + .font(.system(size: 14)) .bold() if subject.description != nil { Text(subject.description!) - .font(.system(size: 14)) + .font(.system(size: 13)) } } .padding(.leading, 20) - .padding(.top, 20) - ProgressView(value: subject.progress).padding() + .padding(.top, 12) + ProgressView(value: subject.progress) + .padding(.top, 0) + .padding(.bottom, 12) + .padding(.horizontal, 20) } } From 2bd5b8f79e544ce79d74955c3ab140303ac1cf11 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 14 Mar 2023 22:10:48 +0100 Subject: [PATCH 104/194] =?UTF-8?q?=E2=9C=A8=20Ensure=20Valet=20configurat?= =?UTF-8?q?ion=20files=20exist?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 ++ .../PHP/Switcher/InternalSwitcher+Valet.swift | 134 ++++++++++++++++++ .../PHP/Switcher/InternalSwitcher.swift | 37 +---- .../Homebrew/HomebrewDiagnostics.swift | 26 ++-- phpmon/Domain/Menu/MainMenu+Startup.swift | 8 +- 5 files changed, 161 insertions(+), 54 deletions(-) create mode 100644 phpmon/Common/PHP/Switcher/InternalSwitcher+Valet.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 48cf32b..2ac6517 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -650,6 +650,10 @@ C4D3661B291173EA006BD146 /* DictionaryExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D36619291173EA006BD146 /* DictionaryExtension.swift */; }; C4D3661C291173EA006BD146 /* DictionaryExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D36619291173EA006BD146 /* DictionaryExtension.swift */; }; C4D3661D291173EA006BD146 /* DictionaryExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D36619291173EA006BD146 /* DictionaryExtension.swift */; }; + C4D4CB3729C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; + C4D4CB3829C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; + C4D4CB3929C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; + C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; C4D5CFCA27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D5CFCB27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; @@ -972,6 +976,7 @@ C4D3660F291140BE006BD146 /* TestableFileSystemTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableFileSystemTest.swift; sourceTree = ""; }; C4D36614291160A1006BD146 /* WIP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WIP.swift; sourceTree = ""; }; C4D36619291173EA006BD146 /* DictionaryExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DictionaryExtension.swift; sourceTree = ""; }; + C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InternalSwitcher+Valet.swift"; sourceTree = ""; }; C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigurationFile.swift; sourceTree = ""; }; C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = ""; }; C4D89BC52783C99400A02B68 /* ComposerJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerJson.swift; sourceTree = ""; }; @@ -1771,6 +1776,7 @@ children = ( C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */, C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */, + C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */, ); path = Switcher; sourceTree = ""; @@ -2256,6 +2262,7 @@ 03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */, C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */, C45E76142854A65300B4FE0C /* ServicesManager.swift in Sources */, + C4D4CB3729C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C46EBC4728DB9644007ACC74 /* RealShell.swift in Sources */, C4068CAA27B0890D00544CD5 /* MenuBarIcons.swift in Sources */, C44264C02850BD2A007400F1 /* VersionPopoverView.swift in Sources */, @@ -2361,6 +2368,7 @@ C471E84828F9BB650021E251 /* EnvironmentCheck.swift in Sources */, C471E84A28F9BB650021E251 /* AppVersion.swift in Sources */, C471E84B28F9BB650021E251 /* ServicesManager.swift in Sources */, + C4D4CB3929C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */, C471E84D28F9BB650021E251 /* ActivePhpInstallation+Checks.swift in Sources */, C471E84E28F9BB650021E251 /* MainMenu.swift in Sources */, @@ -2571,6 +2579,7 @@ C471E8C928F9BB8F0021E251 /* WarningsWindowController.swift in Sources */, C41ADCEB2970CCC700120423 /* FSNotifier.swift in Sources */, C471E8CA28F9BB8F0021E251 /* OnboardingWindowController.swift in Sources */, + C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C471E8CB28F9BB8F0021E251 /* PreferencesWindowController.swift in Sources */, C471E8CC28F9BB8F0021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, C471E8CD28F9BB8F0021E251 /* PrefsVC.swift in Sources */, @@ -2853,6 +2862,7 @@ C41C02AB27E61CB3009F26CB /* FakeValetSite.swift in Sources */, C4F780C925D80B75000DBC97 /* StringExtension.swift in Sources */, C4D9F24C280B69E100DCD39A /* AddProxyVC.swift in Sources */, + C4D4CB3829C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C4B5853F2770FE3900DA4FBE /* Paths.swift in Sources */, C481F79A26164A7C004FBCFF /* Preferences.swift in Sources */, C4A6957728D23EE300A14CF8 /* EnvironmentManager.swift in Sources */, diff --git a/phpmon/Common/PHP/Switcher/InternalSwitcher+Valet.swift b/phpmon/Common/PHP/Switcher/InternalSwitcher+Valet.swift new file mode 100644 index 0000000..83de877 --- /dev/null +++ b/phpmon/Common/PHP/Switcher/InternalSwitcher+Valet.swift @@ -0,0 +1,134 @@ +// +// InternalSwitcher+Valet.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 14/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +extension InternalSwitcher { + + typealias FixApplied = Bool + + public func ensureValetConfigurationIsValidForPhpVersion(_ version: String) async -> FixApplied { + // Early exit if Valet is not installed + if !Valet.installed { + assertionFailure("Cannot ensure that Valet configuration is valid if Valet is not installed.") + return false + } + + let corrections = [ + await self.disableDefaultPhpFpmPool(version), + await self.ensureConfigurationFilesExist(version) + ] + + return corrections.contains(true) + } + + // MARK: - PHP FPM pool + + public func disableDefaultPhpFpmPool(_ version: String) async -> FixApplied { + let pool = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf" + + if FileSystem.fileExists(pool) { + Log.info("A default `www.conf` file was found in the php-fpm.d directory for PHP \(version).") + let existing = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf" + let new = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf.disabled-by-phpmon" + do { + if FileSystem.fileExists(new) { + Log.info("A moved `www.conf.disabled-by-phpmon` file was found for PHP \(version), " + + "cleaning up so the newer `www.conf` can be moved again.") + try FileSystem.remove(new) + } + try FileSystem.move(from: existing, to: new) + Log.info("Success: A default `www.conf` file was disabled for PHP \(version).") + return true + } catch { + Log.err(error) + return false + } + } + + return false + } + + func getExpectedConfigurationFiles(for version: String) -> [ExpectedConfigurationFile] { + return [ + ExpectedConfigurationFile( + destination: "/php-fpm.d/valet-fpm.conf", + source: "/cli/stubs/etc-phpfpm-valet.conf", + replacements: [ + "VALET_USER": Paths.whoami, + "VALET_HOME_PATH": "~/.config/valet".replacingTildeWithHomeDirectory, + "valet.sock": "valet\(version.replacingOccurrences(of: ".", with: "")).sock" + ], + applies: { Valet.shared.version!.major > 2 } + ), + ExpectedConfigurationFile( + destination: "/conf.d/error_log.ini", + source: "/cli/stubs/etc-phpfpm-error_log.ini", + replacements: [ + "VALET_USER": Paths.whoami, + "VALET_HOME_PATH": "~/.config/valet".replacingTildeWithHomeDirectory + ], + applies: { return true } + ), + ExpectedConfigurationFile( + destination: "/conf.d/php-memory-limits.ini", + source: "/cli/stubs/php-memory-limits.ini", + replacements: [:], + applies: { return true } + ) + ] + } + + func ensureConfigurationFilesExist(_ version: String) async -> FixApplied { + let files = self.getExpectedConfigurationFiles(for: version) + + // For each of the files, attempt to fix anything that is wrong + let outcomes = files.map { file in + let configFileExists = FileSystem.fileExists("\(Paths.etcPath)/php/\(version)/" + file.destination) + + if configFileExists { + return false + } + + Log.info("Config file `\(file.destination)` does not exist, will attempt to automatically fix!") + + if !file.applies() { + return false + } + + do { + var contents = try FileSystem.getStringFromFile("~/.composer/vendor/laravel/valet" + file.source) + + for (original, replacement) in file.replacements { + contents = contents.replacingOccurrences(of: original, with: replacement) + } + + try FileSystem.writeAtomicallyToFile( + "\(Paths.etcPath)/php/\(version)" + file.destination, + content: contents + ) + } catch { + Log.err("Automatically fixing \(file.destination) did not work.") + return false + } + + return true + } + + // If any fixes were applied, return true + return outcomes.contains(true) + } + +} + +public struct ExpectedConfigurationFile { + let destination: String + let source: String + let replacements: [String: String] + let applies: () -> Bool +} diff --git a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift index e1cc30f..f09d057 100644 --- a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift +++ b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift @@ -27,7 +27,6 @@ class InternalSwitcher: PhpSwitcher { await withTaskGroup(of: String.self, body: { group in for available in PhpEnv.shared.availablePhpVersions { group.addTask { - await self.disableDefaultPhpFpmPool(available) await self.unlinkAndStopPhpVersion(available) return available } @@ -42,6 +41,11 @@ class InternalSwitcher: PhpSwitcher { Log.info("Linking the new version \(version)!") for formula in versions { + if Valet.installed { + Log.info("Ensuring that the Valet configuration is valid...") + _ = await self.ensureValetConfigurationIsValidForPhpVersion(formula) + } + Log.info("Will start PHP \(version)... (primary: \(version == formula))") await self.linkAndStartPhpVersion(formula, primary: (version == formula)) } @@ -71,37 +75,6 @@ class InternalSwitcher: PhpSwitcher { return versions } - func requiresDisablingOfDefaultPhpFpmPool(_ version: String) -> Bool { - let pool = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf" - return FileSystem.fileExists(pool) - } - - func disableDefaultPhpFpmPool(_ version: String) async { - if Valet.installed { - Log.info("Skipping adjustment of php-fpm.d pools, because Valet is disabled or not installed.") - Log.info("This behaviour may not be desirable with this system configuration.") - return - } - - let pool = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf" - if FileSystem.fileExists(pool) { - Log.info("A default `www.conf` file was found in the php-fpm.d directory for PHP \(version).") - let existing = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf" - let new = "\(Paths.etcPath)/php/\(version)/php-fpm.d/www.conf.disabled-by-phpmon" - do { - if FileSystem.fileExists(new) { - Log.info("A moved `www.conf.disabled-by-phpmon` file was found for PHP \(version), " - + "cleaning up so the newer `www.conf` can be moved again.") - try FileSystem.remove(new) - } - try FileSystem.move(from: existing, to: new) - Log.info("Success: A default `www.conf` file was disabled for PHP \(version).") - } catch { - Log.err(error) - } - } - } - func unlinkAndStopPhpVersion(_ version: String) async { let formula = (version == PhpEnv.brewPhpAlias) ? "php" : "php@\(version)" await brew("unlink \(formula)") diff --git a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift index a7b8554..3a31a1c 100644 --- a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift +++ b/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift @@ -63,11 +63,11 @@ class HomebrewDiagnostics { It is possible to upgrade PHP, but forget running `valet install`. This results in a scenario where a rogue www.conf file exists. */ - public static func checkForPhpFpmPoolConflicts() { - Log.info("Checking for PHP-FPM pool conflicts...") + public static func checkForValetMisconfiguration() async { + Log.info("Checking for PHP-FPM issues with Valet...") guard let install = PhpEnv.phpInstall else { - Log.info("Will skip check for conflicts if no PHP version is linked.") + Log.info("Will skip check for issues if no PHP version is linked.") return } @@ -76,22 +76,12 @@ class HomebrewDiagnostics { // Versions to be handled let switcher = InternalSwitcher() - var versions = switcher.getVersionsToBeHandled(primary) - versions = versions.filter { version in - return switcher.requiresDisablingOfDefaultPhpFpmPool(version) - } - - if versions.isEmpty { - Log.info("No PHP-FPM pools need to be fixed. All OK.") - } - - versions.forEach { version in - Task { // Fix each pool concurrently (but perform the tasks sequentially) - await switcher.disableDefaultPhpFpmPool(version) - await switcher.unlinkAndStopPhpVersion(version) - await switcher.linkAndStartPhpVersion(version, primary: version == primary) - } + for version in switcher.getVersionsToBeHandled(primary) + where await switcher.ensureValetConfigurationIsValidForPhpVersion(version) { + Log.info("One or more fixes were applied for PHP \(version)!") + await switcher.unlinkAndStopPhpVersion(version) + await switcher.linkAndStartPhpVersion(version, primary: version == primary) } } diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index f0d7df5..b82f28b 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -91,11 +91,11 @@ extension MainMenu { // Preload all sites await Valet.shared.startPreloadingSites() - // Check if PHP-FPM is broken - await Valet.shared.notifyAboutBrokenPhpFpm() - // After preloading sites, check for PHP-FPM pool conflicts - HomebrewDiagnostics.checkForPhpFpmPoolConflicts() + await HomebrewDiagnostics.checkForValetMisconfiguration() + + // Check if PHP-FPM is broken (should be fixed automatically if phpmon >= 6.0) + await Valet.shared.notifyAboutBrokenPhpFpm() // A non-default TLD is not officially supported since Valet 3.2.x Valet.notifyAboutUnsupportedTLD() From 22295ed55ac898e6f979a59381658ad37d22098a Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 14 Mar 2023 22:19:25 +0100 Subject: [PATCH 105/194] =?UTF-8?q?=F0=9F=93=9D=20Wrote=20about=20problems?= =?UTF-8?q?=20with=20PHP=20version=20removal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index b6069e7..73682fc 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -79,6 +79,15 @@ public class PhpVersionInstaller { } } + // TODO: If this process fails, ensure that PHP Monitor can remove manually + // + // We can check for something like this: + // + // Error: Could not remove php@7.4 keg! Do so manually: + // sudo rm -rf /opt/homebrew/Cellar/php@7.4/7.4.33_1 + // + // To invoke the manual removal + let (process, _) = try! await Shell.attach( command, didReceiveOutput: { text, _ in @@ -103,8 +112,6 @@ public class PhpVersionInstaller { await PhpEnv.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() - // TODO: Link the configuration file if it does not exist yet - Task { @MainActor in subject.description = "The operation succeeded. This window will close in 5 seconds." } From bd23f6566862126b031d2130b39a8ad4c1fdc251 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 15 Mar 2023 19:16:49 +0100 Subject: [PATCH 106/194] =?UTF-8?q?=F0=9F=91=8C=20Ensure=20removal=20occur?= =?UTF-8?q?s=20after=20permissions=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 47 ++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 73682fc..081ed0b 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -72,22 +72,27 @@ public class PhpVersionInstaller { } if action == .purge || action == .remove { + // Removal always requires permission + do { + try await PhpVersionInstaller.fixPermissions(for: formula) + } catch { + Task { @MainActor in + subject.progress = 1 + subject.title = "Could not take permission of required folder" + subject.description = "Please try again!" + } + return + } + + // Actually do the removal command = "brew remove \(formula) --force --ignore-dependencies" + // Check if the permissions are correct; if not, fix permissions if action == .purge { command += " --zap" } } - // TODO: If this process fails, ensure that PHP Monitor can remove manually - // - // We can check for something like this: - // - // Error: Could not remove php@7.4 keg! Do so manually: - // sudo rm -rf /opt/homebrew/Cellar/php@7.4/7.4.33_1 - // - // To invoke the manual removal - let (process, _) = try! await Shell.attach( command, didReceiveOutput: { text, _ in @@ -119,7 +124,9 @@ public class PhpVersionInstaller { } else { // Do not close the window and notify about failure Task { @MainActor in - subject.description = "The operation failed." + subject.title = "Operation failed." + subject.progress = 1 + subject.description = "Something went wrong." } } } else { @@ -127,6 +134,26 @@ public class PhpVersionInstaller { } } + public static func fixPermissions(for formula: String) async throws { + // Omit the prefix + let path = formula.replacingOccurrences(of: "shivammathur/php/", with: "") + + let script = """ + \(Paths.brew) services stop \(formula) \ + && chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(path) + """ + + let appleScript = NSAppleScript(source: + "do shell script \"\(script)\" with administrator privileges" + ) + + let eventResult: NSAppleEventDescriptor? = appleScript?.executeAndReturnError(nil) + + if eventResult == nil { + throw HomebrewPermissionError(kind: .applescriptNilError) + } + } + public static func installPhpVersion(version: String) async { await self.modifyPhpVersion(version: version, action: .install) } From ebb04001d075d2977fea9789daf81403390038ab Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 15 Mar 2023 19:37:32 +0100 Subject: [PATCH 107/194] =?UTF-8?q?=F0=9F=91=8C=20Check=20if=20ownership?= =?UTF-8?q?=20needs=20to=20be=20taken?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 60 ++++++++++++++++++--- 1 file changed, 53 insertions(+), 7 deletions(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 081ed0b..66114d9 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -10,7 +10,7 @@ import Foundation public class PhpVersionInstaller { public static var installables = [ - "8.2": "php", + // "8.2": "php", "8.1": "php@8.1", "8.0": "php@8.0", "7.4": "shivammathur/php/php@7.4", @@ -26,7 +26,12 @@ public class PhpVersionInstaller { case purge } - // swiftlint:disable cyclomatic_complexity function_body_length + + /** + Performs the desired action on the provided PHP version. + + swiftlint:disable cyclomatic_complexity function_body_length + */ public static func modifyPhpVersion(version: String, action: PhpInstallAction) async { let title = { switch action { @@ -71,6 +76,13 @@ public class PhpVersionInstaller { command = "brew install \(formula) --force" } + // TODO: Ensure that a PHP version can also be updated + /* + if action == .update { + + } + */ + if action == .purge || action == .remove { // Removal always requires permission do { @@ -134,10 +146,36 @@ public class PhpVersionInstaller { } } + /** Installs a given PHP version. Never requires administrative privileges. */ + public static func installPhpVersion(version: String) async { + await self.modifyPhpVersion(version: version, action: .install) + } + + /** Uninstalls a given PHP version. Might require administrative privileges. */ + public static func removePhpVersion(version: String) async { + await self.modifyPhpVersion(version: version, action: .remove) + } + + /** + Takes ownership of the /BREW_PATH/Cellar/php/x.y.z/bin folder (if required). + + This might not be required if the user has only used that version of PHP + with site isolation, so this method checks if it's required first. + */ public static func fixPermissions(for formula: String) async throws { // Omit the prefix let path = formula.replacingOccurrences(of: "shivammathur/php/", with: "") + // Binary path needs to be checked for ownership + let binaryPath = "\(Paths.optPath)/\(path)/bin" + + // Check if it's even necessary to perform the fix + if !isOwnedByRoot(path: binaryPath) { + return + } + + Log.info("The ownership of the folder is currently not correct.") + let script = """ \(Paths.brew) services stop \(formula) \ && chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(path) @@ -154,12 +192,20 @@ public class PhpVersionInstaller { } } - public static func installPhpVersion(version: String) async { - await self.modifyPhpVersion(version: version, action: .install) - } + /** + Checks if a given path is owned by root. If so, ownership might need to be taken. + */ + private static func isOwnedByRoot(path: String) -> Bool { + do { + let attributes = try FileManager.default.attributesOfItem(atPath: path) + if let owner = attributes[.ownerAccountName] as? String { + return owner == "root" + } + } catch { + return true + } - public static func removePhpVersion(version: String) async { - await self.modifyPhpVersion(version: version, action: .remove) + return true } private static func reportInstallationProgress(_ text: String) -> (Double, String)? { From de4cefd1b94e0428abbeededca901f43b2bc6738 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 15 Mar 2023 20:03:36 +0100 Subject: [PATCH 108/194] =?UTF-8?q?=F0=9F=93=9D=20Valet=204=20has=20been?= =?UTF-8?q?=20released?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SECURITY.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 624eb62..80d6603 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -8,8 +8,6 @@ Generally speaking, only the latest version of **PHP Monitor** is supported, exc | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- | 6.0 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | -(*) Preliminary listing. Valet 4 hasn't been released yet and the versions of PHP Valet can work with might still change. - ## Legacy versions These versions of PHP Monitor are no longer supported, but if you’re using an older computer with an older version of Homebrew, Valet or macOS, you might want to use one of these versions. From 8775e70178dc48501ee0012ad41b664321e7dad0 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 15 Mar 2023 20:06:43 +0100 Subject: [PATCH 109/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 +++--------------------- 1 file changed, 3 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 731ed21..9f0053f 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ All stable and supported PHP versions are also supported by PHP Monitor. However > **Note** > If you have versions of PHP installed that can be detected by PHP Monitor but is *not* supported by the currently active version of Valet, you will be alerted by an item in the menu with an exclamation mark emoji. (⚠️) -Backports are available via [this tap](https://github.com/shivammathur/homebrew-php). For more information about those backports, please see the next FAQ entry. +Backports that are installable via PHP Monitor's **PHP Manager** functionality are subject to availability via [this tap](https://github.com/shivammathur/homebrew-php). For maximum compatibility with older PHP versions, you may wish to keep using Valet 2 or 3. For more information, please see [SECURITY.md](./SECURITY.md) to find out which versions of PHP are supported with different versions of Valet. @@ -113,27 +113,9 @@ For maximum compatibility with older PHP versions, you may wish to keep using Va Assuming you have installed the `php` formula, the latest stable version of PHP is installed. At the time of writing, this is PHP 8.2. -You can install other supported versions of PHP out of the box, so `php@8.0` and `php@8.1` at the time of writing. +You can install other supported versions of PHP via PHP Monitor's **PHP Manager**. You can manually install or upgrade PHP versions too, but this is not recommended. -If you wish to install older (officially unsupported) versions of PHP for local use, you can do so by using [Shivam Mathur's tap](https://github.com/shivammathur/homebrew-php): - -```sh -brew tap shivammathur/php -``` - -You may find that this tap is already in use: if you've used Valet before, it automatically uses this tap for legacy versions of PHP. - -```sh -brew install shivammathur/php/php@7.4 -brew install shivammathur/php/php@7.3 -brew install shivammathur/php/php@7.2 -brew install shivammathur/php/php@7.1 -brew install shivammathur/php/php@7.0 -``` - -**Always make sure to restart PHP Monitor after installing or upgrading PHP versions!** - -> *Note*: Using this tap may cause [temporary alias conflicts](https://github.com/nicoverbruggen/phpmon/issues/54#issuecomment-979789724) while the core tap alias and the tap's alias refer to a different version of PHP, but this is generally speaking a minor inconvenience, since this normally only applies when a new PHP version releases. +> *Note*: Using PHP Monitor when managing PHP versions may cause [temporary alias conflicts](https://github.com/nicoverbruggen/phpmon/issues/54#issuecomment-979789724) while the core tap alias and the tap's alias refer to a different version of PHP, but this is generally speaking a minor inconvenience, since this normally only applies when a new PHP version releases.

From bb56e33ee831156169b5fa722bf4a6878cc8e4a0 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 15 Mar 2023 20:09:10 +0100 Subject: [PATCH 110/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20SECURITY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SECURITY.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 80d6603..561b5ab 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,7 +6,7 @@ Generally speaking, only the latest version of **PHP Monitor** is supported, exc | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Recommended Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- -| 6.0 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | +| 6.0 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | ## Legacy versions @@ -14,9 +14,9 @@ These versions of PHP Monitor are no longer supported, but if you’re using an | Version | Apple Silicon | Supported | Supported macOS | Deployment Target | Detected PHP Versions | Minimum Required Valet Version | | ------- | ------------- | ------------------ | ----- | ----- | ----- | ---- -| 5.8 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | -| 5.7 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x*) | 3.0 or higher recommended
2.16.2 minimum | -| 5.6 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0)* | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x) | 3.0 recommended
2.16.2 minimum | +| 5.8 | ✅ Universal binary | ✅ Yes | Monterey (12.4+)
Ventura (13.0+) | macOS 12.4 | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | +| 5.7 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x)
PHP 7.1-PHP 8.2 (w/ Valet 4.x) | 3.0 or higher recommended
2.16.2 minimum | +| 5.6 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0)
Ventura (13.0) | macOS 11+ | PHP 5.6—PHP 8.2 (w/ Valet 2.x)
PHP 7.0—PHP 8.2 (w/ Valet 3.x) | 3.0 recommended
2.16.2 minimum | | 4.1 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0) | macOS 11+ | PHP 5.6—PHP 8.2 | 2.16.2 | | 4.0 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0) | macOS 10.14+ | PHP 5.6—PHP 8.2 | 2.13 | | 3.5 | ✅ Universal binary | ❌ | Big Sur (11.0)
Monterey (12.0) | macOS 10.14+ | PHP 5.6—PHP 8.2 | 2.13 | From 41af058661a6c2a312ef2fd8edfa10f98a23f5bd Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 16 Mar 2023 19:26:24 +0100 Subject: [PATCH 111/194] =?UTF-8?q?=F0=9F=91=8C=20Improved=20logging,=20HO?= =?UTF-8?q?MEBREW=5FNO=5FINSTALL=5FUPGRADE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 66114d9..b949d98 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -26,7 +26,6 @@ public class PhpVersionInstaller { case purge } - /** Performs the desired action on the provided PHP version. @@ -73,7 +72,8 @@ public class PhpVersionInstaller { await Shell.quiet("brew tap shivammathur/php") } - command = "brew install \(formula) --force" + // Set HOMEBREW_NO_INSTALL_UPGRADE when installing or upgrading + command = "export HOMEBREW_NO_INSTALL_UPGRADE=1 && brew install \(formula) --force" } // TODO: Ensure that a PHP version can also be updated @@ -109,6 +109,10 @@ public class PhpVersionInstaller { command, didReceiveOutput: { text, _ in if action == .install { + if !text.isEmpty { + Log.perf(text) + } + // Check if we can recognize any of the typical progress steps if let (number, text) = Self.reportInstallationProgress(text) { Task { @MainActor in @@ -136,9 +140,9 @@ public class PhpVersionInstaller { } else { // Do not close the window and notify about failure Task { @MainActor in - subject.title = "Operation failed." + subject.title = "Operation failed: something went wrong" subject.progress = 1 - subject.description = "Something went wrong." + subject.description = "Oops. You may close this window." } } } else { @@ -174,7 +178,7 @@ public class PhpVersionInstaller { return } - Log.info("The ownership of the folder is currently not correct.") + Log.info("The ownership of the folder at `\(binaryPath)` is currently not correct. Will prompt to take ownership!") let script = """ \(Paths.brew) services stop \(formula) \ @@ -190,6 +194,8 @@ public class PhpVersionInstaller { if eventResult == nil { throw HomebrewPermissionError(kind: .applescriptNilError) } + + Log.info("Ownership was taken of the folder at `\(binaryPath)`.") } /** From 78c24555f7aead86749f51f454dce33d1f469f40 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 16 Mar 2023 21:09:21 +0100 Subject: [PATCH 112/194] =?UTF-8?q?=F0=9F=91=8C=20Bring=20window=20to=20fr?= =?UTF-8?q?ont,=20avoid=20crashing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpVersionInstaller.swift | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index b949d98..e0f39ab 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -7,6 +7,7 @@ // import Foundation +import Cocoa public class PhpVersionInstaller { public static var installables = [ @@ -26,10 +27,9 @@ public class PhpVersionInstaller { case purge } + // swiftlint:disable cyclomatic_complexity function_body_length /** Performs the desired action on the provided PHP version. - - swiftlint:disable cyclomatic_complexity function_body_length */ public static func modifyPhpVersion(version: String, action: PhpInstallAction) async { let title = { @@ -62,18 +62,24 @@ public class PhpVersionInstaller { let installables = Self.installables if installables.keys.contains(version) { - let window = await ProgressWindowView.display(subject) + let windowController = await ProgressWindowView.display(subject) + await NSApp.activate(ignoringOtherApps: true) + await windowController.window?.makeKeyAndOrderFront(nil) + let formula = installables[version]! - var command = "" + var command: String! if action == .install { if formula.contains("shivammathur") && !HomebrewDiagnostics.installedTaps.contains("shivammathur/php") { await Shell.quiet("brew tap shivammathur/php") } - // Set HOMEBREW_NO_INSTALL_UPGRADE when installing or upgrading - command = "export HOMEBREW_NO_INSTALL_UPGRADE=1 && brew install \(formula) --force" + command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=1 \ + && export HOMEBREW_NO_INSTALL_CLEANUP=1 \ + && brew install \(formula) --force + """ } // TODO: Ensure that a PHP version can also be updated @@ -134,9 +140,8 @@ public class PhpVersionInstaller { await MainMenu.shared.refreshActiveInstallation() Task { @MainActor in - subject.description = "The operation succeeded. This window will close in 5 seconds." + windowController.close() } - await window.close() } else { // Do not close the window and notify about failure Task { @MainActor in From 9dae03a04e17014124b0fde9605dfc825497927d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 17 Mar 2023 17:40:30 +0100 Subject: [PATCH 113/194] =?UTF-8?q?=E2=9C=A8=20Homebrew=20version=20valida?= =?UTF-8?q?tion,=20UI=20workshopping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 48 ++++++-- phpmon/Common/Core/Actions.swift | 26 ++--- phpmon/Common/Core/Homebrew.swift | 36 +++--- phpmon/Common/PHP/PhpVersionInstaller.swift | 26 +++-- phpmon/Domain/App/AppDelegate.swift | 7 ++ phpmon/Domain/App/AppUpdater.swift | 2 +- .../Domain/App/Services/ServicesManager.swift | 6 +- phpmon/Domain/App/Startup.swift | 4 +- .../Domain/Integrations/Homebrew/Brew.swift | 31 +++++ ...iagnostics.swift => BrewDiagnostics.swift} | 4 +- phpmon/Domain/Menu/MainMenu+Startup.swift | 11 +- .../SwiftUI/PhpManager/PhpManager.swift | 106 ++++++++++++++++++ 12 files changed, 241 insertions(+), 66 deletions(-) create mode 100644 phpmon/Domain/Integrations/Homebrew/Brew.swift rename phpmon/Domain/Integrations/Homebrew/{HomebrewDiagnostics.swift => BrewDiagnostics.swift} (99%) create mode 100644 phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 2ac6517..b8f1bf5 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -129,6 +129,14 @@ C42F26762805FEE200938AC7 /* nginx-secure-proxy.test in Resources */ = {isa = PBXBuildFile; fileRef = C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */; }; C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; + C43931C529C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; + C43931C629C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; + C43931C729C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; + C43931C829C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; + C43931CA29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; + C43931CB29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; + C43931CC29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; + C43931CD29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; }; C43A8A2025D9D1D700591B77 /* brew-formula.json in Resources */ = {isa = PBXBuildFile; fileRef = C43A8A1F25D9D1D700591B77 /* brew-formula.json */; }; C43A8A2425D9D20D00591B77 /* HomebrewPackageTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */; }; @@ -313,8 +321,8 @@ C471E82428F9BB2E0021E251 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; }; C471E82528F9BB2E0021E251 /* ComposerWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CE3BB927B31F670086CA49 /* ComposerWindow.swift */; }; C471E82628F9BB2E0021E251 /* ComposerJson.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D89BC52783C99400A02B68 /* ComposerJson.swift */; }; - C471E82728F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* HomebrewDiagnostics.swift */; }; - C471E82828F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* HomebrewDiagnostics.swift */; }; + C471E82728F9BB310021E251 /* BrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */; }; + C471E82828F9BB310021E251 /* BrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */; }; C471E82928F9BB330021E251 /* Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F792754499000D44ED0 /* Valet.swift */; }; C471E82A28F9BB330021E251 /* ValetListable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42F26722805B4B400938AC7 /* ValetListable.swift */; }; C471E82B28F9BB340021E251 /* Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F792754499000D44ED0 /* Valet.swift */; }; @@ -709,8 +717,8 @@ C4EE188422D3386B00E126E5 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EE188322D3386B00E126E5 /* Constants.swift */; }; C4EED88927A48778006D7272 /* InterAppHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EED88827A48778006D7272 /* InterAppHandler.swift */; }; C4EED88A27A48778006D7272 /* InterAppHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EED88827A48778006D7272 /* InterAppHandler.swift */; }; - C4F2E4372752F0870020E974 /* HomebrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* HomebrewDiagnostics.swift */; }; - C4F2E4382752F08D0020E974 /* HomebrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* HomebrewDiagnostics.swift */; }; + C4F2E4372752F0870020E974 /* BrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */; }; + C4F2E4382752F08D0020E974 /* BrewDiagnostics.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */; }; C4F2E43A2752F7D00020E974 /* PhpInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4392752F7D00020E974 /* PhpInstallation.swift */; }; C4F2E43B27530F750020E974 /* PhpInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F2E4392752F7D00020E974 /* PhpInstallation.swift */; }; C4F30B03278E16BA00755FCE /* HomebrewService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F30B02278E16BA00755FCE /* HomebrewService.swift */; }; @@ -861,6 +869,8 @@ C42F26722805B4B400938AC7 /* ValetListable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetListable.swift; sourceTree = ""; }; C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-secure-proxy.test"; sourceTree = ""; }; C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = ""; }; + C43931C429C4BD610069165B /* PhpManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpManager.swift; sourceTree = ""; }; + C43931C929C4C03F0069165B /* Brew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Brew.swift; sourceTree = ""; }; C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = ""; }; C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackageTest.swift; sourceTree = ""; }; @@ -1004,7 +1014,7 @@ C4EC1E72279DFCF40010F296 /* Events.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Events.swift; sourceTree = ""; }; C4EE188322D3386B00E126E5 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; C4EED88827A48778006D7272 /* InterAppHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterAppHandler.swift; sourceTree = ""; }; - C4F2E4362752F0870020E974 /* HomebrewDiagnostics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewDiagnostics.swift; sourceTree = ""; }; + C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewDiagnostics.swift; sourceTree = ""; }; C4F2E4392752F7D00020E974 /* PhpInstallation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpInstallation.swift; sourceTree = ""; }; C4F30B02278E16BA00755FCE /* HomebrewService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewService.swift; sourceTree = ""; }; C4F30B06278E195800755FCE /* brew-services.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "brew-services.json"; sourceTree = ""; }; @@ -1326,6 +1336,14 @@ path = Warning; sourceTree = ""; }; + C43931C329C4BD510069165B /* PhpManager */ = { + isa = PBXGroup; + children = ( + C43931C429C4BD610069165B /* PhpManager.swift */, + ); + path = PhpManager; + sourceTree = ""; + }; C43FDBE729A9329A003D85EC /* Services */ = { isa = PBXGroup; children = ( @@ -1591,7 +1609,8 @@ C4AF9F6C275445D900D44ED0 /* Homebrew */ = { isa = PBXGroup; children = ( - C4F2E4362752F0870020E974 /* HomebrewDiagnostics.swift */, + C43931C929C4C03F0069165B /* Brew.swift */, + C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */, C40934A1298EEB2C00D25014 /* CaskFile.swift */, ); path = Homebrew; @@ -1812,6 +1831,7 @@ C4EE55B027708BB2001DF387 /* SwiftUI */ = { isa = PBXGroup; children = ( + C43931C329C4BD510069165B /* PhpManager */, C490E3A329BC92E6006D2DE6 /* Progress */, C4297F7828970D4E004C4630 /* Warning */, C4E9D2BE2878B32D008FFDAD /* Onboarding */, @@ -2172,6 +2192,7 @@ C4C8900728F0E3EF00CE5E97 /* ActiveFileSystem.swift in Sources */, C409349D298EE8E900D25014 /* AppUpdater.swift in Sources */, C4D8016622B1584700C6DA1B /* Startup.swift in Sources */, + C43931CA29C4C03F0069165B /* Brew.swift in Sources */, C42C49DB27C2806F0074ABAC /* MainMenu+FixMyValet.swift in Sources */, C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */, C4998F0A2617633900B2526E /* PreferencesWindowController.swift in Sources */, @@ -2211,7 +2232,7 @@ C4463FCC29804BCB007B93D5 /* RCFile.swift in Sources */, C44264BE2850B86C007400F1 /* SwiftUIHelper.swift in Sources */, C4E9D2C02878B336008FFDAD /* OnboardingView.swift in Sources */, - C4F2E4372752F0870020E974 /* HomebrewDiagnostics.swift in Sources */, + C4F2E4372752F0870020E974 /* BrewDiagnostics.swift in Sources */, C4AD38B228ECD9D300FA8D83 /* TestableFileSystem.swift in Sources */, C4EB53E528551F9B006F9937 /* HeaderView.swift in Sources */, C40FE737282ABA4F00A302C2 /* AppVersion.swift in Sources */, @@ -2229,6 +2250,7 @@ C4C3643928AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */, C4CDA893288F1A71007CE25F /* Keys.swift in Sources */, + C43931C529C4BD610069165B /* PhpManager.swift in Sources */, C40175B82903108900763A68 /* ValetInteractor.swift in Sources */, C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */, C46EBC4A28DB966A007ACC74 /* TestableShell.swift in Sources */, @@ -2401,6 +2423,7 @@ C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, C471E86428F9BB650021E251 /* Warning.swift in Sources */, C40175BA2903108900763A68 /* ValetInteractor.swift in Sources */, + C43931C729C4BD610069165B /* PhpManager.swift in Sources */, C4463FCE29804BCB007B93D5 /* RCFile.swift in Sources */, C45B9150295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C471E86528F9BB650021E251 /* WarningManager.swift in Sources */, @@ -2444,6 +2467,7 @@ C471E88B28F9BB650021E251 /* HotKey.swift in Sources */, C471E88C28F9BB650021E251 /* HotKeysController.swift in Sources */, C41ADCEA2970CCC700120423 /* FSNotifier.swift in Sources */, + C43931CC29C4C03F0069165B /* Brew.swift in Sources */, C471E88D28F9BB650021E251 /* Key.swift in Sources */, C471E88E28F9BB650021E251 /* KeyCombo.swift in Sources */, C471E88F28F9BB650021E251 /* ModifierFlagsExtension.swift in Sources */, @@ -2472,7 +2496,7 @@ C471E7F928F9BACB0021E251 /* PhpSwitcher.swift in Sources */, C471E82A28F9BB330021E251 /* ValetListable.swift in Sources */, C4F8765029BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, - C471E82728F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */, + C471E82728F9BB310021E251 /* BrewDiagnostics.swift in Sources */, C471E81C28F9BB250021E251 /* BetterAlert.swift in Sources */, C471E7DB28F9BA8F0021E251 /* RealShell.swift in Sources */, C490E3B929BCA368006D2DE6 /* App+BrewWatch.swift in Sources */, @@ -2531,6 +2555,7 @@ C471E89F28F9BB8F0021E251 /* ValetDomainScanner.swift in Sources */, C471E8A028F9BB8F0021E251 /* FakeDomainScanner.swift in Sources */, C471E8A228F9BB8F0021E251 /* AppDelegate.swift in Sources */, + C43931CD29C4C03F0069165B /* Brew.swift in Sources */, C451AFF92969E40F0078E617 /* HelpButton.swift in Sources */, C471E8A328F9BB8F0021E251 /* AppDelegate+MenuOutlets.swift in Sources */, C471E8A428F9BB8F0021E251 /* AppDelegate+Notifications.swift in Sources */, @@ -2649,10 +2674,11 @@ C471E82228F9BB2E0021E251 /* ComposerWindow.swift in Sources */, C4D3660E29113F20006BD146 /* System.swift in Sources */, C471E80428F9BAD40021E251 /* PhpExtension.swift in Sources */, + C43931C829C4BD610069165B /* PhpManager.swift in Sources */, C471E7F728F9BACB0021E251 /* PhpSwitcher.swift in Sources */, C4463FCF29804BCB007B93D5 /* RCFile.swift in Sources */, C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, - C471E82828F9BB310021E251 /* HomebrewDiagnostics.swift in Sources */, + C471E82828F9BB310021E251 /* BrewDiagnostics.swift in Sources */, C471E81E28F9BB260021E251 /* BetterAlert.swift in Sources */, C44E985F29B23EBF0059F773 /* UpdateCheckTest.swift in Sources */, C471E7D228F9BA630021E251 /* ActiveFileSystem.swift in Sources */, @@ -2748,6 +2774,7 @@ C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */, C45B914A295607F400F4EC78 /* Service.swift in Sources */, + C43931C629C4BD610069165B /* PhpManager.swift in Sources */, C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */, C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */, C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, @@ -2755,7 +2782,7 @@ C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */, C4BF90C127C57C220054E78C /* MainMenu+FixMyValet.swift in Sources */, C4E49DEB28F7643D0026AC4E /* CommandProtocol.swift in Sources */, - C4F2E4382752F08D0020E974 /* HomebrewDiagnostics.swift in Sources */, + C4F2E4382752F08D0020E974 /* BrewDiagnostics.swift in Sources */, C485707428BF454E00539B36 /* ServicesView.swift in Sources */, C4F780AE25D80B37000DBC97 /* PhpExtensionTest.swift in Sources */, C4C8E819276F54D8003AC782 /* App+ConfigWatch.swift in Sources */, @@ -2859,6 +2886,7 @@ C48D6C71279CD2AC00F26D7E /* VersionNumber.swift in Sources */, C485706F28BF452300539B36 /* WarningsWindowController.swift in Sources */, C46FA9892822EFDC00D78807 /* PhpConfigurationFile.swift in Sources */, + C43931CB29C4C03F0069165B /* Brew.swift in Sources */, C41C02AB27E61CB3009F26CB /* FakeValetSite.swift in Sources */, C4F780C925D80B75000DBC97 /* StringExtension.swift in Sources */, C4D9F24C280B69E100DCD39A /* AddProxyVC.swift in Sources */, diff --git a/phpmon/Common/Core/Actions.swift b/phpmon/Common/Core/Actions.swift index 38d33f3..1579a82 100644 --- a/phpmon/Common/Core/Actions.swift +++ b/phpmon/Common/Core/Actions.swift @@ -19,32 +19,32 @@ class Actions { } public static func restartPhpFpm() async { - await brew("services restart \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) + await brew("services restart \(HomebrewFormulae.php)", sudo: HomebrewFormulae.php.elevated) } public static func restartNginx() async { - await brew("services restart \(Homebrew.Formulae.nginx)", sudo: Homebrew.Formulae.nginx.elevated) + await brew("services restart \(HomebrewFormulae.nginx)", sudo: HomebrewFormulae.nginx.elevated) } public static func restartDnsMasq() async { - await brew("services restart \(Homebrew.Formulae.dnsmasq)", sudo: Homebrew.Formulae.dnsmasq.elevated) + await brew("services restart \(HomebrewFormulae.dnsmasq)", sudo: HomebrewFormulae.dnsmasq.elevated) } public static func stopValetServices() async { - await brew("services stop \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) - await brew("services stop \(Homebrew.Formulae.nginx)", sudo: Homebrew.Formulae.nginx.elevated) - await brew("services stop \(Homebrew.Formulae.dnsmasq)", sudo: Homebrew.Formulae.dnsmasq.elevated) + await brew("services stop \(HomebrewFormulae.php)", sudo: HomebrewFormulae.php.elevated) + await brew("services stop \(HomebrewFormulae.nginx)", sudo: HomebrewFormulae.nginx.elevated) + await brew("services stop \(HomebrewFormulae.dnsmasq)", sudo: HomebrewFormulae.dnsmasq.elevated) } public static func fixHomebrewPermissions() throws { var servicesCommands = [ - "\(Paths.brew) services stop \(Homebrew.Formulae.nginx)", - "\(Paths.brew) services stop \(Homebrew.Formulae.dnsmasq)" + "\(Paths.brew) services stop \(HomebrewFormulae.nginx)", + "\(Paths.brew) services stop \(HomebrewFormulae.dnsmasq)" ] var cellarCommands = [ - "chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(Homebrew.Formulae.nginx)", - "chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(Homebrew.Formulae.dnsmasq)" + "chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(HomebrewFormulae.nginx)", + "chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(HomebrewFormulae.dnsmasq)" ] PhpEnv.shared.availablePhpVersions.forEach { version in @@ -126,8 +126,8 @@ class Actions { */ public static func fixMyValet() async { await InternalSwitcher().performSwitch(to: PhpEnv.brewPhpAlias) - await brew("services restart \(Homebrew.Formulae.dnsmasq)", sudo: Homebrew.Formulae.dnsmasq.elevated) - await brew("services restart \(Homebrew.Formulae.php)", sudo: Homebrew.Formulae.php.elevated) - await brew("services restart \(Homebrew.Formulae.nginx)", sudo: Homebrew.Formulae.nginx.elevated) + await brew("services restart \(HomebrewFormulae.dnsmasq)", sudo: HomebrewFormulae.dnsmasq.elevated) + await brew("services restart \(HomebrewFormulae.php)", sudo: HomebrewFormulae.php.elevated) + await brew("services restart \(HomebrewFormulae.nginx)", sudo: HomebrewFormulae.nginx.elevated) } } diff --git a/phpmon/Common/Core/Homebrew.swift b/phpmon/Common/Core/Homebrew.swift index 19173a4..7f2e35b 100644 --- a/phpmon/Common/Core/Homebrew.swift +++ b/phpmon/Common/Core/Homebrew.swift @@ -8,29 +8,27 @@ import Foundation -class Homebrew { - struct Formulae { - static var php: HomebrewFormula { - if PhpEnv.shared.homebrewPackage == nil { - return HomebrewFormula("php", elevated: true) - } - - guard let install = PhpEnv.phpInstall else { - return HomebrewFormula("php", elevated: true) - } - - return HomebrewFormula(install.formula, elevated: true) +struct HomebrewFormulae { + static var php: HomebrewFormula { + if PhpEnv.shared.homebrewPackage == nil { + return HomebrewFormula("php", elevated: true) } - static var nginx: HomebrewFormula { - return HomebrewDiagnostics.usesNginxFullFormula - ? HomebrewFormula("nginx-full", elevated: true) - : HomebrewFormula("nginx", elevated: true) + guard let install = PhpEnv.phpInstall else { + return HomebrewFormula("php", elevated: true) } - static var dnsmasq: HomebrewFormula { - return HomebrewFormula("dnsmasq", elevated: true) - } + return HomebrewFormula(install.formula, elevated: true) + } + + static var nginx: HomebrewFormula { + return BrewDiagnostics.usesNginxFullFormula + ? HomebrewFormula("nginx-full", elevated: true) + : HomebrewFormula("nginx", elevated: true) + } + + static var dnsmasq: HomebrewFormula { + return HomebrewFormula("dnsmasq", elevated: true) } } diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index e0f39ab..20b7470 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -9,6 +9,13 @@ import Foundation import Cocoa +public enum PhpInstallAction { + case install + case remove + case upgrade + case purge +} + public class PhpVersionInstaller { public static var installables = [ // "8.2": "php", @@ -21,12 +28,6 @@ public class PhpVersionInstaller { "7.0": "shivammathur/php/php@7.0" ] - public enum PhpInstallAction { - case install - case remove - case purge - } - // swiftlint:disable cyclomatic_complexity function_body_length /** Performs the desired action on the provided PHP version. @@ -36,6 +37,8 @@ public class PhpVersionInstaller { switch action { case .install: return "Installing PHP \(version)" + case .upgrade: + return "Upgrading to PHP \(version)" case .remove: return "Removing PHP \(version)" case .purge: @@ -47,6 +50,8 @@ public class PhpVersionInstaller { switch action { case .install: return "Please wait while Homebrew installs PHP \(version)..." + case .upgrade: + return "Please wait while Homebrew upgrades PHP \(version)..." case .remove: return "Please wait while Homebrew uninstalls PHP \(version)..." case .purge: @@ -71,7 +76,7 @@ public class PhpVersionInstaller { var command: String! if action == .install { - if formula.contains("shivammathur") && !HomebrewDiagnostics.installedTaps.contains("shivammathur/php") { + if formula.contains("shivammathur") && !BrewDiagnostics.installedTaps.contains("shivammathur/php") { await Shell.quiet("brew tap shivammathur/php") } @@ -82,12 +87,9 @@ public class PhpVersionInstaller { """ } - // TODO: Ensure that a PHP version can also be updated - /* - if action == .update { - + if action == .upgrade { + fatalError("This is not supported yet.") } - */ if action == .purge || action == .remove { // Removal always requires permission diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index f0cf1d3..5bba9eb 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -37,6 +37,12 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele */ let valet: Valet + /** + The Brew singleton that contains all information about Homebrew + and its configuration on your system. + */ + let brew: Brew + /** The PhpEnv singleton that handles PHP version detection, as well as switching. It is initialized @@ -87,6 +93,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele self.menu = MainMenu.shared self.paths = Paths.shared self.valet = Valet.shared + self.brew = Brew.shared super.init() } diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index 26b9d7c..bbddad0 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -73,7 +73,7 @@ class AppUpdater { .localized(latestVersionOnline.humanReadable), subtitle: "updater.alerts.newer_version_available.subtitle" .localized, - description: HomebrewDiagnostics.customCaskInstalled + description: BrewDiagnostics.customCaskInstalled ? "updater.installation_source.brew".localized(command) : "updater.installation_source.direct".localized ) diff --git a/phpmon/Domain/App/Services/ServicesManager.swift b/phpmon/Domain/App/Services/ServicesManager.swift index d2d51f4..fb8017f 100644 --- a/phpmon/Domain/App/Services/ServicesManager.swift +++ b/phpmon/Domain/App/Services/ServicesManager.swift @@ -107,9 +107,9 @@ class ServicesManager: ObservableObject { var formulae: [HomebrewFormula] { var formulae = [ - Homebrew.Formulae.php, - Homebrew.Formulae.nginx, - Homebrew.Formulae.dnsmasq + HomebrewFormulae.php, + HomebrewFormulae.nginx, + HomebrewFormulae.dnsmasq ] let additionalFormulae = (Preferences.custom.services ?? []).map({ item in diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 47f3bb5..81941da 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -202,8 +202,8 @@ class Startup { // ================================================================================= EnvironmentCheck( command: { - await HomebrewDiagnostics.loadInstalledTaps() - return await HomebrewDiagnostics.cannotLoadService("dnsmasq") + await BrewDiagnostics.loadInstalledTaps() + return await BrewDiagnostics.cannotLoadService("dnsmasq") }, name: "`sudo \(Paths.brew) services info` JSON loaded", titleText: "startup.errors.services_json_error.title".localized, diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift new file mode 100644 index 0000000..0b46c3c --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -0,0 +1,31 @@ +// +// Homebrew.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 17/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class Brew { + static let shared = Brew() + + /// The version of Homebrew that was detected. + var version: VersionNumber? + + public func determineVersion() async { + let output = await Shell.pipe("\(Paths.brew) --version") + self.version = try? VersionNumber.parse(output.out) + + if let version = version { + Log.info("The user has Homebrew \(version.text) installed.") + + if version.major < 4 { + Log.warn("Managing PHP versions is only supported with Homebrew 4 or newer!") + } + } else { + Log.warn("The Homebrew version could not be determined.") + } + } +} diff --git a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift b/phpmon/Domain/Integrations/Homebrew/BrewDiagnostics.swift similarity index 99% rename from phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift rename to phpmon/Domain/Integrations/Homebrew/BrewDiagnostics.swift index 3a31a1c..b842105 100644 --- a/phpmon/Domain/Integrations/Homebrew/HomebrewDiagnostics.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewDiagnostics.swift @@ -1,5 +1,5 @@ // -// AliasConflict.swift +// BrewDiagnostics.swift // PHP Monitor // // Created by Nico Verbruggen on 28/11/2021. @@ -8,7 +8,7 @@ import Foundation -class HomebrewDiagnostics { +class BrewDiagnostics { /** Determines the Homebrew taps the user has installed. */ diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index b82f28b..4bf5b76 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -38,12 +38,12 @@ extension MainMenu { _ = Preferences.shared // Determine install method - Log.info(HomebrewDiagnostics.customCaskInstalled + Log.info(BrewDiagnostics.customCaskInstalled ? "[BREW] The app has been installed via Homebrew Cask." : "[BREW] The app has been installed directly (optimal)." ) - Log.info(HomebrewDiagnostics.usesNginxFullFormula + Log.info(BrewDiagnostics.usesNginxFullFormula ? "[BREW] The app will be using the `nginx-full` formula." : "[BREW] The app will be using the `nginx` formula." ) @@ -56,11 +56,14 @@ extension MainMenu { // Validate the version (this will enforce which versions of PHP are supported) Valet.shared.validateVersion() + // Validate the Homebrew version (determines install/upgrade functionality) + await Brew.shared.determineVersion() + // Actually detect the PHP versions await PhpEnv.detectPhpVersions() // Check for an alias conflict - await HomebrewDiagnostics.checkForCaskConflict() + await BrewDiagnostics.checkForCaskConflict() // Update the icon updatePhpVersionInStatusBar() @@ -92,7 +95,7 @@ extension MainMenu { await Valet.shared.startPreloadingSites() // After preloading sites, check for PHP-FPM pool conflicts - await HomebrewDiagnostics.checkForValetMisconfiguration() + await BrewDiagnostics.checkForValetMisconfiguration() // Check if PHP-FPM is broken (should be fixed automatically if phpmon >= 6.0) await Valet.shared.notifyAboutBrokenPhpFpm() diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift new file mode 100644 index 0000000..e4a3d12 --- /dev/null +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift @@ -0,0 +1,106 @@ +// +// PhpManager.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 17/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import SwiftUI + +struct PhpInstallable { + var name: String + var installed: String? + var latest: String + var actions: [PhpInstallAction] + + var icon: String { + if actions.contains(.upgrade) { + return "arrow.up.square.fill" + } + if actions.contains(.remove) || installed != nil { + return "checkmark.square.fill" + } + return "square.dashed" + } + + var iconColor: Color { + if actions.contains(.upgrade) { + return .blue + } else if actions.contains(.remove) || installed != nil { + return .green + } + return Color.gray.opacity(0.3) + } +} + +struct ContentView: View { + @State var phpVersions: [PhpInstallable] + + var body: some View { + List(phpVersions, id: \.name) { version in + HStack { + Image(systemName: version.icon) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 16, height: 16) + .foregroundColor(version.iconColor) + .padding(.horizontal, 5) + VStack(alignment: .leading) { + Text(version.name).bold() + + if version.actions.contains(.upgrade) { + Text("\(version.installed!) installed, \(version.latest) available.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } else if version.installed != nil { + Text("Latest version is currently installed.").font(.system(size: 11)) + .foregroundColor(.gray) + } + + if version.actions.contains(.install) { + Text("This version can be installed.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + if version.actions.contains(.install) { + Button("Install") { + // handle install action here + } + } + if version.actions.contains(.upgrade) { + Button("Upgrade") { + // handle uninstall action here + } + } + if version.actions.contains(.remove) { + Button("Uninstall") { + // handle uninstall action here + } + } + if version.actions.isEmpty { + Button("Unavailable") { + // handle uninstall action here + }.disabled(true) + } + }.padding(.vertical, 10) + } + .listStyle(.bordered(alternatesRowBackgrounds: true)) + .frame(width: 400, height: 300) + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView(phpVersions: [ + PhpInstallable(name: "PHP 8.2", installed: "8.2.3", latest: "8.2.3", actions: []), + PhpInstallable(name: "PHP 8.1", installed: "8.1.0", latest: "8.1.5", actions: [.upgrade, .remove]), + PhpInstallable(name: "PHP 8.0", installed: "8.0.14", latest: "8.0.14", actions: [.remove]), + PhpInstallable(name: "PHP 7.4", installed: nil, latest: "", actions: [.install]), + PhpInstallable(name: "PHP 7.3", installed: nil, latest: "", actions: [.install]) + ]) + } +} From 7e04f8b881992626ffbf533986b1bc3b5af8edf5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 17 Mar 2023 17:57:31 +0100 Subject: [PATCH 114/194] =?UTF-8?q?=F0=9F=91=8C=20More=20UI=20workshopping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/PhpManager/PhpManager.swift | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift index e4a3d12..8a042fc 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift @@ -39,7 +39,7 @@ struct ContentView: View { @State var phpVersions: [PhpInstallable] var body: some View { - List(phpVersions, id: \.name) { version in + List(Array(phpVersions.enumerated()), id: \.1.name) { (index, version) in HStack { Image(systemName: version.icon) .resizable() @@ -86,10 +86,15 @@ struct ContentView: View { // handle uninstall action here }.disabled(true) } - }.padding(.vertical, 10) + + } + .listRowBackground(index % 2 == 0 + ? Color.gray.opacity(0) + : Color.gray.opacity(0.08) + ) + .padding(.vertical, 10) } - .listStyle(.bordered(alternatesRowBackgrounds: true)) - .frame(width: 400, height: 300) + .frame(width: 500, height: 500) } } @@ -100,7 +105,9 @@ struct ContentView_Previews: PreviewProvider { PhpInstallable(name: "PHP 8.1", installed: "8.1.0", latest: "8.1.5", actions: [.upgrade, .remove]), PhpInstallable(name: "PHP 8.0", installed: "8.0.14", latest: "8.0.14", actions: [.remove]), PhpInstallable(name: "PHP 7.4", installed: nil, latest: "", actions: [.install]), - PhpInstallable(name: "PHP 7.3", installed: nil, latest: "", actions: [.install]) - ]) + PhpInstallable(name: "PHP 7.3", installed: nil, latest: "", actions: [.install]), + PhpInstallable(name: "PHP 7.2", installed: nil, latest: "", actions: [.install]), + PhpInstallable(name: "PHP 7.1", installed: nil, latest: "", actions: [.install]) + ]).frame(width: 600, height: 500) } } From 8f1304308de9bb6d82337db90d76b523aa047203 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 17 Mar 2023 20:38:21 +0100 Subject: [PATCH 115/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Parsing=20version?= =?UTF-8?q?=20updates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 18 ++ .../Domain/Integrations/Homebrew/Brew.swift | 18 ++ .../Integrations/Homebrew/BrewFormula.swift | 23 +++ tests/feature/InternalSwitcherTest.swift | 15 +- tests/unit/Parsers/HomebrewTest.swift | 33 ++++ tests/unit/Test Files/brew/brew-outdated.json | 169 ++++++++++++++++++ 6 files changed, 265 insertions(+), 11 deletions(-) create mode 100644 phpmon/Domain/Integrations/Homebrew/BrewFormula.swift create mode 100644 tests/unit/Parsers/HomebrewTest.swift create mode 100644 tests/unit/Test Files/brew/brew-outdated.json diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index b8f1bf5..802028d 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -579,6 +579,12 @@ C4AF9F7A2754499000D44ED0 /* Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F792754499000D44ED0 /* Valet.swift */; }; C4AF9F7B2754499000D44ED0 /* Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F792754499000D44ED0 /* Valet.swift */; }; C4AF9F7D275454A900D44ED0 /* ValetVersionExtractorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AF9F7C275454A900D44ED0 /* ValetVersionExtractorTest.swift */; }; + C4AFC4AE29C4F32F00BF4E0D /* BrewFormula.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */; }; + C4AFC4AF29C4F32F00BF4E0D /* BrewFormula.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */; }; + C4AFC4B029C4F32F00BF4E0D /* BrewFormula.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */; }; + C4AFC4B129C4F32F00BF4E0D /* BrewFormula.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */; }; + C4AFC4B429C4F43300BF4E0D /* HomebrewTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4B229C4F43300BF4E0D /* HomebrewTest.swift */; }; + C4AFC4B829C4F6DC00BF4E0D /* brew-outdated.json in Resources */ = {isa = PBXBuildFile; fileRef = C4AFC4B729C4F57B00BF4E0D /* brew-outdated.json */; }; C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B5635D276AB09000F12CCB /* VersionExtractor.swift */; }; C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B5635D276AB09000F12CCB /* VersionExtractor.swift */; }; C4B56362276AB0A500F12CCB /* VersionExtractorTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B56360276AB0A500F12CCB /* VersionExtractorTest.swift */; }; @@ -949,6 +955,9 @@ C4AF9F76275447F100D44ED0 /* ValetConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetConfigurationTest.swift; sourceTree = ""; }; C4AF9F792754499000D44ED0 /* Valet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Valet.swift; sourceTree = ""; }; C4AF9F7C275454A900D44ED0 /* ValetVersionExtractorTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetVersionExtractorTest.swift; sourceTree = ""; }; + C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewFormula.swift; sourceTree = ""; }; + C4AFC4B229C4F43300BF4E0D /* HomebrewTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewTest.swift; sourceTree = ""; }; + C4AFC4B729C4F57B00BF4E0D /* brew-outdated.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-outdated.json"; sourceTree = ""; }; C4B5635D276AB09000F12CCB /* VersionExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionExtractor.swift; sourceTree = ""; }; C4B56360276AB0A500F12CCB /* VersionExtractorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionExtractorTest.swift; sourceTree = ""; }; C4B5853B2770FE3900DA4FBE /* Paths.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Paths.swift; sourceTree = ""; }; @@ -1424,6 +1433,7 @@ isa = PBXGroup; children = ( C40934A6298EEB8700D25014 /* phpmon-dev.rb */, + C4AFC4B729C4F57B00BF4E0D /* brew-outdated.json */, C4E2E85228FC256B003B070C /* brew-services-normal.json */, C4E2E85128FC256B003B070C /* brew-services-sudo.json */, C43A8A1F25D9D1D700591B77 /* brew-formula.json */, @@ -1610,6 +1620,7 @@ isa = PBXGroup; children = ( C43931C929C4C03F0069165B /* Brew.swift */, + C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */, C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */, C40934A1298EEB2C00D25014 /* CaskFile.swift */, ); @@ -1721,6 +1732,7 @@ C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */, C4551656297AED18009B8466 /* ValetRcTest.swift */, C40934AA298EEDA900D25014 /* CaskFileParserTest.swift */, + C4AFC4B229C4F43300BF4E0D /* HomebrewTest.swift */, ); path = Parsers; sourceTree = ""; @@ -2129,6 +2141,7 @@ C4E2E85828FC256B003B070C /* brew-services-normal.json in Resources */, C44C1992276E44CB0072762D /* ProgressWindow.storyboard in Resources */, C42F26762805FEE200938AC7 /* nginx-secure-proxy.test in Resources */, + C4AFC4B829C4F6DC00BF4E0D /* brew-outdated.json in Resources */, C4F30B08278E195800755FCE /* brew-services.json in Resources */, C455165B297AEDB5009B8466 /* valetrc.broken in Resources */, 54A18D40282A566E000A0D81 /* nginx-secure-proxy-custom-tld.test in Resources */, @@ -2332,6 +2345,7 @@ C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */, C451AFF62969E40F0078E617 /* HelpButton.swift in Sources */, 54D9E0B627E4F51E003B9AD9 /* HotKey.swift in Sources */, + C4AFC4AE29C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C4D936C927E3EB6100BD69FE /* PhpHelper.swift in Sources */, C47331A2247093B7009A0597 /* StatusMenu.swift in Sources */, C44067F927E2585E0045BD4E /* DomainListTypeCell.swift in Sources */, @@ -2431,6 +2445,7 @@ C471E86728F9BB650021E251 /* OnboardingWindowController.swift in Sources */, C471E86828F9BB650021E251 /* PreferencesWindowController.swift in Sources */, C471E86928F9BB650021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, + C4AFC4B029C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C471E86A28F9BB650021E251 /* PrefsVC.swift in Sources */, C471E86B28F9BB650021E251 /* PreferenceName.swift in Sources */, C471E86C28F9BB650021E251 /* Preferences.swift in Sources */, @@ -2701,6 +2716,7 @@ C471E7EB28F9BAC30021E251 /* Helpers.swift in Sources */, C4CB6E68292C362C002E9027 /* Homebrew.swift in Sources */, C4181F1128FAF9330042EA28 /* UITestCase.swift in Sources */, + C4AFC4B129C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C471E81F28F9BB290021E251 /* NginxConfigurationFile.swift in Sources */, C471E7BF28F9B90F0021E251 /* StartupTest.swift in Sources */, C4D3661D291173EA006BD146 /* DictionaryExtension.swift in Sources */, @@ -2800,9 +2816,11 @@ C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */, C4C3643A28AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C42759682627662800093CAE /* NSMenuExtension.swift in Sources */, + C4AFC4B429C4F43300BF4E0D /* HomebrewTest.swift in Sources */, C4E2E84828FC1D93003B070C /* TestableConfigurationTest.swift in Sources */, C4D936CB27E3EE4A00BD69FE /* DomainListCellProtocol.swift in Sources */, C4B97B76275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */, + C4AFC4AF29C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */, C485706D28BF450900539B36 /* NSMenuItemExtension.swift in Sources */, C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 0b46c3c..889f3c8 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -28,4 +28,22 @@ class Brew { Log.warn("The Homebrew version could not be determined.") } } + + public func getPhpVersions() async -> [BrewFormula] { + let command = """ + \(Paths.brew) update >/dev/null && \ + \(Paths.brew) outdated --json --formulae + """ + + let raw = await Shell.pipe(command).out + print(raw) + + // We can now figure out what updates there are + + // We also know what's installed + let items = PhpEnv.shared.cachedPhpInstallations.keys + print(items) + + return [] + } } diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift new file mode 100644 index 0000000..a92abf7 --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -0,0 +1,23 @@ +// +// BrewFormula.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 17/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +struct BrewFormula { + let name: String + let installedVersion: String? + let upgradeVersion: String? + + var isInstalled: Bool { + return installedVersion != nil + } + + var hasUpgrade: Bool { + return upgradeVersion != nil + } +} diff --git a/tests/feature/InternalSwitcherTest.swift b/tests/feature/InternalSwitcherTest.swift index 9b89eff..ba7fb19 100644 --- a/tests/feature/InternalSwitcherTest.swift +++ b/tests/feature/InternalSwitcherTest.swift @@ -10,21 +10,13 @@ import XCTest final class InternalSwitcherTest: FeatureTestCase { - public func testDefaultPhpFpmPoolRequiresDisabling() async { - ActiveFileSystem.useTestable([ - "/opt/homebrew/etc/php/8.1/php-fpm.d/www.conf": .fake(.text) - ]) - - assertFileSystemHas("/opt/homebrew/etc/php/8.1/php-fpm.d/www.conf") - XCTAssertTrue(InternalSwitcher().requiresDisablingOfDefaultPhpFpmPool("8.1")) - } - public func testDefaultPhpFpmPoolIsMoved() async { ActiveFileSystem.useTestable([ "/opt/homebrew/etc/php/8.1/php-fpm.d/www.conf": .fake(.text) ]) - await InternalSwitcher().disableDefaultPhpFpmPool("8.1") + let outcome = await InternalSwitcher().disableDefaultPhpFpmPool("8.1") + XCTAssertTrue(outcome) assertFileSystemHas("/opt/homebrew/etc/php/8.1/php-fpm.d/www.conf.disabled-by-phpmon") assertFileSystemDoesNotHave("/opt/homebrew/etc/php/8.1/php-fpm.d/www.conf") @@ -41,7 +33,8 @@ final class InternalSwitcherTest: FeatureTestCase { contents: "phpmon generated" ) - await InternalSwitcher().disableDefaultPhpFpmPool("8.1") + let outcome = await InternalSwitcher().disableDefaultPhpFpmPool("8.1") + XCTAssertTrue(outcome) assertFileSystemHas("/opt/homebrew/etc/php/8.1/php-fpm.d/www.conf.disabled-by-phpmon") assertFileSystemDoesNotHave("/opt/homebrew/etc/php/8.1/php-fpm.d/www.conf") diff --git a/tests/unit/Parsers/HomebrewTest.swift b/tests/unit/Parsers/HomebrewTest.swift new file mode 100644 index 0000000..2046f65 --- /dev/null +++ b/tests/unit/Parsers/HomebrewTest.swift @@ -0,0 +1,33 @@ +// +// HomebrewTest.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 17/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import XCTest + +class HomebrewTest: XCTestCase { + static var outdatedFileUrl: URL { + return Bundle(for: Self.self) + .url(forResource: "brew-outdated", withExtension: "json")! + } + + func test_upgradable_php_versions_can_be_parsed() async throws { + ActiveShell.useTestable([ + "/opt/homebrew/bin/brew update >/dev/null && /opt/homebrew/bin/brew outdated --json --formulae": .instant(try! String(contentsOf: Self.outdatedFileUrl)) + ]) + + let env = PhpEnv.shared + env.cachedPhpInstallations = [ + "8.1": PhpInstallation("8.1.3"), + "8.2": PhpInstallation("8.2.4"), + "7.4": PhpInstallation("7.4.11") + ] + + let brew = Brew.shared + let data = await brew.getPhpVersions() + print(data) + } +} diff --git a/tests/unit/Test Files/brew/brew-outdated.json b/tests/unit/Test Files/brew/brew-outdated.json new file mode 100644 index 0000000..79126ca --- /dev/null +++ b/tests/unit/Test Files/brew/brew-outdated.json @@ -0,0 +1,169 @@ +{ + "formulae": [ + { + "name": "cmake", + "installed_versions": [ + "3.25.2" + ], + "current_version": "3.26.0", + "pinned": false, + "pinned_version": null + }, + { + "name": "cmocka", + "installed_versions": [ + "1.1.5" + ], + "current_version": "1.1.7", + "pinned": false, + "pinned_version": null + }, + { + "name": "glib", + "installed_versions": [ + "2.74.6" + ], + "current_version": "2.76.0", + "pinned": false, + "pinned_version": null + }, + { + "name": "harfbuzz", + "installed_versions": [ + "7.0.1" + ], + "current_version": "7.1.0", + "pinned": false, + "pinned_version": null + }, + { + "name": "httpd", + "installed_versions": [ + "2.4.55" + ], + "current_version": "2.4.56", + "pinned": false, + "pinned_version": null + }, + { + "name": "imagemagick", + "installed_versions": [ + "7.1.1-2" + ], + "current_version": "7.1.1-3", + "pinned": false, + "pinned_version": null + }, + { + "name": "libarchive", + "installed_versions": [ + "3.6.2" + ], + "current_version": "3.6.2_1", + "pinned": false, + "pinned_version": null + }, + { + "name": "libsndfile", + "installed_versions": [ + "1.2.0" + ], + "current_version": "1.2.0_1", + "pinned": false, + "pinned_version": null + }, + { + "name": "libvidstab", + "installed_versions": [ + "1.1.0" + ], + "current_version": "1.1.1", + "pinned": false, + "pinned_version": null + }, + { + "name": "libvpx", + "installed_versions": [ + "1.12.0" + ], + "current_version": "1.13.0", + "pinned": false, + "pinned_version": null + }, + { + "name": "node", + "installed_versions": [ + "19.6.0" + ], + "current_version": "19.8.1", + "pinned": false, + "pinned_version": null + }, + { + "name": "pango", + "installed_versions": [ + "1.50.13" + ], + "current_version": "1.50.14", + "pinned": false, + "pinned_version": null + }, + { + "name": "php", + "installed_versions": [ + "8.2.3" + ], + "current_version": "8.2.4", + "pinned": false, + "pinned_version": null + }, + { + "name": "php@8.1", + "installed_versions": [ + "8.1.16" + ], + "current_version": "8.1.17", + "pinned": false, + "pinned_version": null + }, + { + "name": "rclone", + "installed_versions": [ + "1.61.1" + ], + "current_version": "1.62.2", + "pinned": false, + "pinned_version": null + }, + { + "name": "sdl2", + "installed_versions": [ + "2.26.3" + ], + "current_version": "2.26.4", + "pinned": false, + "pinned_version": null + }, + { + "name": "snappy", + "installed_versions": [ + "1.1.9" + ], + "current_version": "1.1.10", + "pinned": false, + "pinned_version": null + }, + { + "name": "tcl-tk", + "installed_versions": [ + "8.6.13" + ], + "current_version": "8.6.13_1", + "pinned": false, + "pinned_version": null + } + ], + "casks": [ + + ] +} From f8b605f7492804ac932c9fc69737c20de72cacd7 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 18 Mar 2023 02:11:57 +0100 Subject: [PATCH 116/194] =?UTF-8?q?=F0=9F=91=8C=20Parse=20upgradable=20ver?= =?UTF-8?q?sions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 28 ++++++++--------- ...wPackage.swift => HomebrewDecodable.swift} | 15 ++++++++-- .../Domain/Integrations/Homebrew/Brew.swift | 30 ++++++++++++++----- .../Integrations/Homebrew/BrewFormula.swift | 10 +++++++ .../SwiftUI/PhpManager/PhpManager.swift | 14 +++++---- ...est.swift => HomebrewUpgradableTest.swift} | 15 +++++++--- 6 files changed, 79 insertions(+), 33 deletions(-) rename phpmon/Common/PHP/Homebrew/{HomebrewPackage.swift => HomebrewDecodable.swift} (66%) rename tests/unit/Parsers/{HomebrewTest.swift => HomebrewUpgradableTest.swift} (64%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 802028d..02dc9f2 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -82,7 +82,7 @@ C40FE737282ABA4F00A302C2 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C40FE738282ABA4F00A302C2 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C40FE73B282ABB2E00A302C2 /* AppVersionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE739282ABB2E00A302C2 /* AppVersionTest.swift */; }; - C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; }; + C412E5FC25700D5300A1FB67 /* HomebrewDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewDecodable.swift */; }; C413E43528DA3EB100AE33C7 /* TestableShellTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C413E43428DA3EB100AE33C7 /* TestableShellTest.swift */; }; C415937F27A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; }; C415938027A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */; }; @@ -278,9 +278,9 @@ C471E7F928F9BACB0021E251 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; }; C471E7FA28F9BACB0021E251 /* InternalSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */; }; C471E7FB28F9BACE0021E251 /* HomebrewService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F30B02278E16BA00755FCE /* HomebrewService.swift */; }; - C471E7FC28F9BACE0021E251 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; }; + C471E7FC28F9BACE0021E251 /* HomebrewDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewDecodable.swift */; }; C471E7FD28F9BACE0021E251 /* HomebrewService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F30B02278E16BA00755FCE /* HomebrewService.swift */; }; - C471E7FE28F9BACE0021E251 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; }; + C471E7FE28F9BACE0021E251 /* HomebrewDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewDecodable.swift */; }; C471E7FF28F9BAD10021E251 /* Xdebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42337A2281F19F000459A48 /* Xdebug.swift */; }; C471E80028F9BAD10021E251 /* Xdebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = C42337A2281F19F000459A48 /* Xdebug.swift */; }; C471E80128F9BAD40021E251 /* ActivePhpInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C1B4A22B019FF00E7CF16 /* ActivePhpInstallation.swift */; }; @@ -583,7 +583,7 @@ C4AFC4AF29C4F32F00BF4E0D /* BrewFormula.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */; }; C4AFC4B029C4F32F00BF4E0D /* BrewFormula.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */; }; C4AFC4B129C4F32F00BF4E0D /* BrewFormula.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */; }; - C4AFC4B429C4F43300BF4E0D /* HomebrewTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4B229C4F43300BF4E0D /* HomebrewTest.swift */; }; + C4AFC4B429C4F43300BF4E0D /* HomebrewUpgradableTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AFC4B229C4F43300BF4E0D /* HomebrewUpgradableTest.swift */; }; C4AFC4B829C4F6DC00BF4E0D /* brew-outdated.json in Resources */ = {isa = PBXBuildFile; fileRef = C4AFC4B729C4F57B00BF4E0D /* brew-outdated.json */; }; C4B5635E276AB09000F12CCB /* VersionExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B5635D276AB09000F12CCB /* VersionExtractor.swift */; }; C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B5635D276AB09000F12CCB /* VersionExtractor.swift */; }; @@ -749,7 +749,7 @@ C4F780C625D80B75000DBC97 /* XibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D0C9225CC804200CC7490 /* XibLoadable.swift */; }; C4F780C825D80B75000DBC97 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */; }; C4F780C925D80B75000DBC97 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C46FA23E246C358E00944F05 /* StringExtension.swift */; }; - C4F780CA25D80B75000DBC97 /* HomebrewPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */; }; + C4F780CA25D80B75000DBC97 /* HomebrewDecodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C412E5FB25700D5300A1FB67 /* HomebrewDecodable.swift */; }; C4F780CC25D80B75000DBC97 /* ActivePhpInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C1B4A22B019FF00E7CF16 /* ActivePhpInstallation.swift */; }; C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; }; C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C474B00524C0E98C00066A22 /* LocalNotification.swift */; }; @@ -838,7 +838,7 @@ C40F505428ECA64E004AD45B /* TestableConfigurations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableConfigurations.swift; sourceTree = ""; }; C40FE736282ABA4F00A302C2 /* AppVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersion.swift; sourceTree = ""; }; C40FE739282ABB2E00A302C2 /* AppVersionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersionTest.swift; sourceTree = ""; }; - C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackage.swift; sourceTree = ""; }; + C412E5FB25700D5300A1FB67 /* HomebrewDecodable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewDecodable.swift; sourceTree = ""; }; C413E43428DA3EB100AE33C7 /* TestableShellTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableShellTest.swift; sourceTree = ""; }; C415937E27A1B54F00D2E1B7 /* PhpFrameworks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFrameworks.swift; sourceTree = ""; }; C4159AF628E4D40400545349 /* RealShellTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RealShellTest.swift; sourceTree = ""; }; @@ -956,7 +956,7 @@ C4AF9F792754499000D44ED0 /* Valet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Valet.swift; sourceTree = ""; }; C4AF9F7C275454A900D44ED0 /* ValetVersionExtractorTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetVersionExtractorTest.swift; sourceTree = ""; }; C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewFormula.swift; sourceTree = ""; }; - C4AFC4B229C4F43300BF4E0D /* HomebrewTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewTest.swift; sourceTree = ""; }; + C4AFC4B229C4F43300BF4E0D /* HomebrewUpgradableTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewUpgradableTest.swift; sourceTree = ""; }; C4AFC4B729C4F57B00BF4E0D /* brew-outdated.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-outdated.json"; sourceTree = ""; }; C4B5635D276AB09000F12CCB /* VersionExtractor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionExtractor.swift; sourceTree = ""; }; C4B56360276AB0A500F12CCB /* VersionExtractorTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VersionExtractorTest.swift; sourceTree = ""; }; @@ -1732,7 +1732,7 @@ C42CFB1927DFE8BD00862737 /* NginxConfigurationTest.swift */, C4551656297AED18009B8466 /* ValetRcTest.swift */, C40934AA298EEDA900D25014 /* CaskFileParserTest.swift */, - C4AFC4B229C4F43300BF4E0D /* HomebrewTest.swift */, + C4AFC4B229C4F43300BF4E0D /* HomebrewUpgradableTest.swift */, ); path = Parsers; sourceTree = ""; @@ -1868,7 +1868,7 @@ C4F30B01278E169B00755FCE /* Homebrew */ = { isa = PBXGroup; children = ( - C412E5FB25700D5300A1FB67 /* HomebrewPackage.swift */, + C412E5FB25700D5300A1FB67 /* HomebrewDecodable.swift */, C4F30B02278E16BA00755FCE /* HomebrewService.swift */, ); path = Homebrew; @@ -2293,7 +2293,7 @@ C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */, C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */, C41CA5ED2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */, - C412E5FC25700D5300A1FB67 /* HomebrewPackage.swift in Sources */, + C412E5FC25700D5300A1FB67 /* HomebrewDecodable.swift in Sources */, 03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */, C4D9ADBF277610E1007277F4 /* PhpSwitcher.swift in Sources */, C45E76142854A65300B4FE0C /* ServicesManager.swift in Sources */, @@ -2488,7 +2488,7 @@ C471E88F28F9BB650021E251 /* ModifierFlagsExtension.swift in Sources */, C471E7E928F9BAC20021E251 /* Paths.swift in Sources */, C45B91552956123A00F4EC78 /* FakeServicesManager.swift in Sources */, - C471E7FE28F9BACE0021E251 /* HomebrewPackage.swift in Sources */, + C471E7FE28F9BACE0021E251 /* HomebrewDecodable.swift in Sources */, C471E7D828F9BA8F0021E251 /* FileSystemProtocol.swift in Sources */, C471E7F328F9BAC70021E251 /* PhpHelper.swift in Sources */, C471E7E728F9BAC20021E251 /* Constants.swift in Sources */, @@ -2664,7 +2664,7 @@ C471E8F228F9BB8F0021E251 /* ModifierFlagsExtension.swift in Sources */, C471E7F028F9BAC30021E251 /* Paths.swift in Sources */, C4CE7F9929683B43000102CF /* PhpVersionNumberCollection.swift in Sources */, - C471E7FC28F9BACE0021E251 /* HomebrewPackage.swift in Sources */, + C471E7FC28F9BACE0021E251 /* HomebrewDecodable.swift in Sources */, C471E7CF28F9BA600021E251 /* ActiveShell.swift in Sources */, C4BB393C2981AFC700F8E797 /* PhpVersionSource.swift in Sources */, C471E7F628F9BAC80021E251 /* PhpHelper.swift in Sources */, @@ -2778,7 +2778,7 @@ C4FBFC532616485F00CDB8E1 /* PhpVersionDetectionTest.swift in Sources */, C43A8A2425D9D20D00591B77 /* HomebrewPackageTest.swift in Sources */, C485707928BF456C00539B36 /* ArrayExtension.swift in Sources */, - C4F780CA25D80B75000DBC97 /* HomebrewPackage.swift in Sources */, + C4F780CA25D80B75000DBC97 /* HomebrewDecodable.swift in Sources */, C4C8E81C276F54E5003AC782 /* PhpConfigWatcher.swift in Sources */, C4F319C927B034A500AFF46F /* Stats.swift in Sources */, C4F30B04278E16BA00755FCE /* HomebrewService.swift in Sources */, @@ -2816,7 +2816,7 @@ C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */, C4C3643A28AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C42759682627662800093CAE /* NSMenuExtension.swift in Sources */, - C4AFC4B429C4F43300BF4E0D /* HomebrewTest.swift in Sources */, + C4AFC4B429C4F43300BF4E0D /* HomebrewUpgradableTest.swift in Sources */, C4E2E84828FC1D93003B070C /* TestableConfigurationTest.swift in Sources */, C4D936CB27E3EE4A00BD69FE /* DomainListCellProtocol.swift in Sources */, C4B97B76275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */, diff --git a/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift b/phpmon/Common/PHP/Homebrew/HomebrewDecodable.swift similarity index 66% rename from phpmon/Common/PHP/Homebrew/HomebrewPackage.swift rename to phpmon/Common/PHP/Homebrew/HomebrewDecodable.swift index b250c80..23ef0bc 100644 --- a/phpmon/Common/PHP/Homebrew/HomebrewPackage.swift +++ b/phpmon/Common/PHP/Homebrew/HomebrewDecodable.swift @@ -1,5 +1,5 @@ // -// HomebrewPackage.swift +// HomebrewDecodable.swift // PHP Monitor // // Copyright © 2023 Nico Verbruggen. All rights reserved. @@ -17,7 +17,6 @@ struct HomebrewPackage: Decodable { return aliases.first! .replacingOccurrences(of: "php@", with: "") } - } struct HomebrewInstalled: Decodable { @@ -26,3 +25,15 @@ struct HomebrewInstalled: Decodable { let installed_as_dependency: Bool let installed_on_request: Bool } + +struct OutdatedFormulae: Decodable { + let formulae: [OutdatedFormula] +} + +struct OutdatedFormula: Decodable { + let name: String + let installed_versions: [String] + let current_version: String + let pinned: Bool + let pinned_version: String? +} diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 889f3c8..565bd86 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -35,15 +35,31 @@ class Brew { \(Paths.brew) outdated --json --formulae """ - let raw = await Shell.pipe(command).out - print(raw) + let rawJsonText = await Shell.pipe(command).out + .data(using: .utf8)! - // We can now figure out what updates there are + let installed = PhpEnv.shared.cachedPhpInstallations.map { key, value in + return (key, value.versionNumber.text) + } - // We also know what's installed - let items = PhpEnv.shared.cachedPhpInstallations.keys - print(items) + let phpAlias = PhpEnv.brewPhpAlias - return [] + let outdated = try? JSONDecoder().decode( + OutdatedFormulae.self, + from: rawJsonText + ).formulae.filter({ formula in + formula.name.starts(with: "php") + }) + + return installed.map { (version, fullVersion) in + return BrewFormula( + name: version != phpAlias ? "php@\(version)" : "php", + displayName: version, + installedVersion: fullVersion, + upgradeVersion: outdated?.first(where: { formula in + return formula.installed_versions.contains(fullVersion) + })?.current_version + ) + } } } diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index a92abf7..6d418ed 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -9,14 +9,24 @@ import Foundation struct BrewFormula { + /// Name of the formula. let name: String + + /// The human readable name for this formula. + let displayName: String + + /// The version of the formula that is currently installed. let installedVersion: String? + + /// The upgrade that is currently available, if it exists. let upgradeVersion: String? + /// Whether the formula is currently installed. var isInstalled: Bool { return installedVersion != nil } + /// Whether the formula can be upgraded. var hasUpgrade: Bool { return upgradeVersion != nil } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift index 8a042fc..f9f28a7 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift @@ -35,7 +35,7 @@ struct PhpInstallable { } } -struct ContentView: View { +struct PhpInstallationList: View { @State var phpVersions: [PhpInstallable] var body: some View { @@ -98,16 +98,18 @@ struct ContentView: View { } } -struct ContentView_Previews: PreviewProvider { +struct PhpInstallationList_Previews: PreviewProvider { static var previews: some View { - ContentView(phpVersions: [ - PhpInstallable(name: "PHP 8.2", installed: "8.2.3", latest: "8.2.3", actions: []), - PhpInstallable(name: "PHP 8.1", installed: "8.1.0", latest: "8.1.5", actions: [.upgrade, .remove]), + PhpInstallationList(phpVersions: [ + PhpInstallable(name: "PHP 8.2", installed: "8.2.3", latest: "8.2.4", actions: [.upgrade]), + PhpInstallable(name: "PHP 8.1", installed: "8.1.15", latest: "8.1.16", actions: [.upgrade, .remove]), PhpInstallable(name: "PHP 8.0", installed: "8.0.14", latest: "8.0.14", actions: [.remove]), PhpInstallable(name: "PHP 7.4", installed: nil, latest: "", actions: [.install]), PhpInstallable(name: "PHP 7.3", installed: nil, latest: "", actions: [.install]), PhpInstallable(name: "PHP 7.2", installed: nil, latest: "", actions: [.install]), - PhpInstallable(name: "PHP 7.1", installed: nil, latest: "", actions: [.install]) + PhpInstallable(name: "PHP 7.1", installed: nil, latest: "", actions: [.install]), + PhpInstallable(name: "PHP 7.0", installed: nil, latest: "", actions: [.install]), + PhpInstallable(name: "PHP 5.6", installed: nil, latest: "", actions: [.install]) ]).frame(width: 600, height: 500) } } diff --git a/tests/unit/Parsers/HomebrewTest.swift b/tests/unit/Parsers/HomebrewUpgradableTest.swift similarity index 64% rename from tests/unit/Parsers/HomebrewTest.swift rename to tests/unit/Parsers/HomebrewUpgradableTest.swift index 2046f65..28f0420 100644 --- a/tests/unit/Parsers/HomebrewTest.swift +++ b/tests/unit/Parsers/HomebrewUpgradableTest.swift @@ -8,7 +8,7 @@ import XCTest -class HomebrewTest: XCTestCase { +class HomebrewUpgradableTest: XCTestCase { static var outdatedFileUrl: URL { return Bundle(for: Self.self) .url(forResource: "brew-outdated", withExtension: "json")! @@ -21,13 +21,20 @@ class HomebrewTest: XCTestCase { let env = PhpEnv.shared env.cachedPhpInstallations = [ - "8.1": PhpInstallation("8.1.3"), - "8.2": PhpInstallation("8.2.4"), + "8.1": PhpInstallation("8.1.16"), + "8.2": PhpInstallation("8.2.3"), "7.4": PhpInstallation("7.4.11") ] let brew = Brew.shared let data = await brew.getPhpVersions() - print(data) + + XCTAssertTrue(data.contains(where: { formula in + formula.installedVersion == "8.1.16" && formula.upgradeVersion == "8.1.17" + })) + + XCTAssertTrue(data.contains(where: { formula in + formula.installedVersion == "8.2.3" && formula.upgradeVersion == "8.2.4" + })) } } From 08dcfb36f4d3accd80b495a8c1889d33acac6742 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 19 Mar 2023 14:00:15 +0100 Subject: [PATCH 117/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Formulae=20manage?= =?UTF-8?q?r=20UI=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 20 +-- .../PhpManager/PhpFormulaeManager.swift | 110 +++++++++++++++++ .../SwiftUI/PhpManager/PhpManager.swift | 115 ------------------ .../unit/Parsers/HomebrewUpgradableTest.swift | 3 +- 4 files changed, 122 insertions(+), 126 deletions(-) create mode 100644 phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift delete mode 100644 phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 02dc9f2..877fb5e 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -129,10 +129,10 @@ C42F26762805FEE200938AC7 /* nginx-secure-proxy.test in Resources */ = {isa = PBXBuildFile; fileRef = C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */; }; C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; - C43931C529C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; - C43931C629C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; - C43931C729C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; - C43931C829C4BD610069165B /* PhpManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpManager.swift */; }; + C43931C529C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; + C43931C629C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; + C43931C729C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; + C43931C829C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; C43931CA29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; C43931CB29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; C43931CC29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; @@ -875,7 +875,7 @@ C42F26722805B4B400938AC7 /* ValetListable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetListable.swift; sourceTree = ""; }; C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-secure-proxy.test"; sourceTree = ""; }; C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = ""; }; - C43931C429C4BD610069165B /* PhpManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpManager.swift; sourceTree = ""; }; + C43931C429C4BD610069165B /* PhpFormulaeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeManager.swift; sourceTree = ""; }; C43931C929C4C03F0069165B /* Brew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Brew.swift; sourceTree = ""; }; C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = ""; }; @@ -1348,7 +1348,7 @@ C43931C329C4BD510069165B /* PhpManager */ = { isa = PBXGroup; children = ( - C43931C429C4BD610069165B /* PhpManager.swift */, + C43931C429C4BD610069165B /* PhpFormulaeManager.swift */, ); path = PhpManager; sourceTree = ""; @@ -2263,7 +2263,7 @@ C4C3643928AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */, C4CDA893288F1A71007CE25F /* Keys.swift in Sources */, - C43931C529C4BD610069165B /* PhpManager.swift in Sources */, + C43931C529C4BD610069165B /* PhpFormulaeManager.swift in Sources */, C40175B82903108900763A68 /* ValetInteractor.swift in Sources */, C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */, C46EBC4A28DB966A007ACC74 /* TestableShell.swift in Sources */, @@ -2437,7 +2437,7 @@ C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, C471E86428F9BB650021E251 /* Warning.swift in Sources */, C40175BA2903108900763A68 /* ValetInteractor.swift in Sources */, - C43931C729C4BD610069165B /* PhpManager.swift in Sources */, + C43931C729C4BD610069165B /* PhpFormulaeManager.swift in Sources */, C4463FCE29804BCB007B93D5 /* RCFile.swift in Sources */, C45B9150295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C471E86528F9BB650021E251 /* WarningManager.swift in Sources */, @@ -2689,7 +2689,7 @@ C471E82228F9BB2E0021E251 /* ComposerWindow.swift in Sources */, C4D3660E29113F20006BD146 /* System.swift in Sources */, C471E80428F9BAD40021E251 /* PhpExtension.swift in Sources */, - C43931C829C4BD610069165B /* PhpManager.swift in Sources */, + C43931C829C4BD610069165B /* PhpFormulaeManager.swift in Sources */, C471E7F728F9BACB0021E251 /* PhpSwitcher.swift in Sources */, C4463FCF29804BCB007B93D5 /* RCFile.swift in Sources */, C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, @@ -2790,7 +2790,7 @@ C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */, C45B914A295607F400F4EC78 /* Service.swift in Sources */, - C43931C629C4BD610069165B /* PhpManager.swift in Sources */, + C43931C629C4BD610069165B /* PhpFormulaeManager.swift in Sources */, C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */, C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */, C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift new file mode 100644 index 0000000..faca9cd --- /dev/null +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift @@ -0,0 +1,110 @@ +// +// PhpFormulaeManager.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 17/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import SwiftUI + +struct PhpFormulaeManager: View { + @State var formulae: [BrewFormula] + @State var busy: Bool = false + + var body: some View { + List(Array(formulae.enumerated()), id: \.1.name) { (index, formula) in + HStack { + Image(systemName: formula.icon) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 16, height: 16) + .foregroundColor(formula.iconColor) + .padding(.horizontal, 5) + VStack(alignment: .leading) { + Text(formula.displayName).bold() + + if formula.isInstalled && formula.hasUpgrade { + Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } else if formula.isInstalled && formula.installedVersion != nil { + Text("Latest version is currently installed.").font(.system(size: 11)) + .foregroundColor(.gray) + } else { + Text("This version can be installed.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + if formula.isInstalled { + Button("Uninstall") { + // handle uninstall action here + } + } else { + Button("Install") { + // handle install action here + } + } + if formula.hasUpgrade { + Button("Update") { + // handle uninstall action here + } + } + } + .listRowBackground(index % 2 == 0 + ? Color.gray.opacity(0) + : Color.gray.opacity(0.08) + ) + .padding(.vertical, 10) + } + .frame(width: 500, height: 500) + } +} + +struct PhpFormulaeManager_Previews: PreviewProvider { + static var previews: some View { + PhpFormulaeManager(formulae: [ + BrewFormula( + name: "php", + displayName: "PHP 8.2", + installedVersion: "8.2.3", + upgradeVersion: "8.2.4" + ), + BrewFormula( + name: "php@8.1", + displayName: "PHP 8.1", + installedVersion: "8.1.17", + upgradeVersion: nil + ), + BrewFormula( + name: "php@8.0", + displayName: "PHP 8.0", + installedVersion: nil, + upgradeVersion: nil + ) + ]).frame(width: 600, height: 500) + } +} + +extension BrewFormula { + var icon: String { + if self.hasUpgrade { + return "arrow.up.square.fill" + } else if self.isInstalled { + return "checkmark.square.fill" + } + return "square.dashed" + } + + var iconColor: Color { + if self.hasUpgrade { + return .blue + } else if self.isInstalled { + return .green + } + return Color.gray.opacity(0.3) + } +} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift deleted file mode 100644 index f9f28a7..0000000 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpManager.swift +++ /dev/null @@ -1,115 +0,0 @@ -// -// PhpManager.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 17/03/2023. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation -import SwiftUI - -struct PhpInstallable { - var name: String - var installed: String? - var latest: String - var actions: [PhpInstallAction] - - var icon: String { - if actions.contains(.upgrade) { - return "arrow.up.square.fill" - } - if actions.contains(.remove) || installed != nil { - return "checkmark.square.fill" - } - return "square.dashed" - } - - var iconColor: Color { - if actions.contains(.upgrade) { - return .blue - } else if actions.contains(.remove) || installed != nil { - return .green - } - return Color.gray.opacity(0.3) - } -} - -struct PhpInstallationList: View { - @State var phpVersions: [PhpInstallable] - - var body: some View { - List(Array(phpVersions.enumerated()), id: \.1.name) { (index, version) in - HStack { - Image(systemName: version.icon) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 16, height: 16) - .foregroundColor(version.iconColor) - .padding(.horizontal, 5) - VStack(alignment: .leading) { - Text(version.name).bold() - - if version.actions.contains(.upgrade) { - Text("\(version.installed!) installed, \(version.latest) available.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } else if version.installed != nil { - Text("Latest version is currently installed.").font(.system(size: 11)) - .foregroundColor(.gray) - } - - if version.actions.contains(.install) { - Text("This version can be installed.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } - } - .frame(maxWidth: .infinity, alignment: .leading) - if version.actions.contains(.install) { - Button("Install") { - // handle install action here - } - } - if version.actions.contains(.upgrade) { - Button("Upgrade") { - // handle uninstall action here - } - } - if version.actions.contains(.remove) { - Button("Uninstall") { - // handle uninstall action here - } - } - if version.actions.isEmpty { - Button("Unavailable") { - // handle uninstall action here - }.disabled(true) - } - - } - .listRowBackground(index % 2 == 0 - ? Color.gray.opacity(0) - : Color.gray.opacity(0.08) - ) - .padding(.vertical, 10) - } - .frame(width: 500, height: 500) - } -} - -struct PhpInstallationList_Previews: PreviewProvider { - static var previews: some View { - PhpInstallationList(phpVersions: [ - PhpInstallable(name: "PHP 8.2", installed: "8.2.3", latest: "8.2.4", actions: [.upgrade]), - PhpInstallable(name: "PHP 8.1", installed: "8.1.15", latest: "8.1.16", actions: [.upgrade, .remove]), - PhpInstallable(name: "PHP 8.0", installed: "8.0.14", latest: "8.0.14", actions: [.remove]), - PhpInstallable(name: "PHP 7.4", installed: nil, latest: "", actions: [.install]), - PhpInstallable(name: "PHP 7.3", installed: nil, latest: "", actions: [.install]), - PhpInstallable(name: "PHP 7.2", installed: nil, latest: "", actions: [.install]), - PhpInstallable(name: "PHP 7.1", installed: nil, latest: "", actions: [.install]), - PhpInstallable(name: "PHP 7.0", installed: nil, latest: "", actions: [.install]), - PhpInstallable(name: "PHP 5.6", installed: nil, latest: "", actions: [.install]) - ]).frame(width: 600, height: 500) - } -} diff --git a/tests/unit/Parsers/HomebrewUpgradableTest.swift b/tests/unit/Parsers/HomebrewUpgradableTest.swift index 28f0420..aa46be0 100644 --- a/tests/unit/Parsers/HomebrewUpgradableTest.swift +++ b/tests/unit/Parsers/HomebrewUpgradableTest.swift @@ -16,7 +16,8 @@ class HomebrewUpgradableTest: XCTestCase { func test_upgradable_php_versions_can_be_parsed() async throws { ActiveShell.useTestable([ - "/opt/homebrew/bin/brew update >/dev/null && /opt/homebrew/bin/brew outdated --json --formulae": .instant(try! String(contentsOf: Self.outdatedFileUrl)) + "/opt/homebrew/bin/brew update >/dev/null && /opt/homebrew/bin/brew outdated --json --formulae" + : .instant(try! String(contentsOf: Self.outdatedFileUrl)) ]) let env = PhpEnv.shared From 2939a2ab28c364973b9314d6e513ecd0b64cbeaf Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 19 Mar 2023 16:51:46 +0100 Subject: [PATCH 118/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Add=20overlay=20U?= =?UTF-8?q?I?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 ++ .../PhpManager/BlockingOverlayView.swift | 62 ++++++++++ .../PhpManager/PhpFormulaeManager.swift | 113 +++++++++++------- 3 files changed, 142 insertions(+), 43 deletions(-) create mode 100644 phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 877fb5e..16dad67 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -540,6 +540,10 @@ C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; C48D6C71279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; C48D6C75279CD3E400F26D7E /* PhpVersionNumberTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C73279CD3E400F26D7E /* PhpVersionNumberTest.swift */; }; + C48DDD0D29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */; }; + C48DDD0E29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */; }; + C48DDD0F29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */; }; + C48DDD1029C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */; }; C490E3A729BC940D006D2DE6 /* ProgressWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */; }; C490E3AA29BC9B3E006D2DE6 /* ProgressViewSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */; }; C490E3B029BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */; }; @@ -938,6 +942,7 @@ C48D0C9225CC804200CC7490 /* XibLoadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XibLoadable.swift; sourceTree = ""; }; C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionNumber.swift; sourceTree = ""; }; C48D6C73279CD3E400F26D7E /* PhpVersionNumberTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpVersionNumberTest.swift; sourceTree = ""; }; + C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlockingOverlayView.swift; sourceTree = ""; }; C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressWindowView.swift; sourceTree = ""; }; C490E3A929BC9B3E006D2DE6 /* ProgressViewSubject.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProgressViewSubject.swift; sourceTree = ""; }; C4927F0A27B2DFC200C55AFD /* Errors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Errors.swift; sourceTree = ""; }; @@ -1349,6 +1354,7 @@ isa = PBXGroup; children = ( C43931C429C4BD610069165B /* PhpFormulaeManager.swift */, + C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, ); path = PhpManager; sourceTree = ""; @@ -2219,6 +2225,7 @@ C45B9149295607F400F4EC78 /* Service.swift in Sources */, 5489625828312FAD004F647A /* CreatedFromFile.swift in Sources */, C4068CA727B07A1300544CD5 /* SelectPreferenceView.swift in Sources */, + C48DDD0D29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C45B91532956123A00F4EC78 /* FakeServicesManager.swift in Sources */, C41C708D28AA7F7900E8D498 /* NoWarningsView.swift in Sources */, C4080FF627BD8C6400BF2C6B /* BetterAlert.swift in Sources */, @@ -2445,6 +2452,7 @@ C471E86728F9BB650021E251 /* OnboardingWindowController.swift in Sources */, C471E86828F9BB650021E251 /* PreferencesWindowController.swift in Sources */, C471E86928F9BB650021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, + C48DDD0F29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C4AFC4B029C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C471E86A28F9BB650021E251 /* PrefsVC.swift in Sources */, C471E86B28F9BB650021E251 /* PreferenceName.swift in Sources */, @@ -2682,6 +2690,7 @@ C471E80128F9BAD40021E251 /* ActivePhpInstallation.swift in Sources */, C471E80228F9BAD40021E251 /* PhpInstallation.swift in Sources */, C471E81028F9BAE80021E251 /* StringExtension.swift in Sources */, + C48DDD1029C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C471E7F828F9BACB0021E251 /* InternalSwitcher.swift in Sources */, C471E82328F9BB2E0021E251 /* ComposerJson.swift in Sources */, C471E82128F9BB2E0021E251 /* PhpFrameworks.swift in Sources */, @@ -2898,6 +2907,7 @@ C4927F0C27B2DFC200C55AFD /* Errors.swift in Sources */, C485707628BF455100539B36 /* SectionHeaderView.swift in Sources */, C46EBC4828DB9644007ACC74 /* RealShell.swift in Sources */, + C48DDD0E29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C4E4404727C56F4700D225E1 /* ValetSite.swift in Sources */, C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */, C449B4F327EE7FC600C47E8A /* DomainListTypeCell.swift in Sources */, diff --git a/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift b/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift new file mode 100644 index 0000000..8128778 --- /dev/null +++ b/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift @@ -0,0 +1,62 @@ +// +// BlockingOverlayView.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 19/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import SwiftUI + +struct BlockingOverlayView: View { + var isBlocking: Bool + var titleText: String + var detailText: String + var content: () -> Content + + init( + busy: Bool, + title: String, + text: String, + @ViewBuilder content: @escaping () -> Content + ) { + self.isBlocking = busy + self.titleText = title + self.detailText = text + self.content = content + } + + var body: some View { + ZStack(alignment: .center) { + content().opacity(isBlocking ? 0.2 : 1) + if isBlocking { + VStack { + ActivityIndicator() + Text(titleText) + .font(.system(size: 14)) + .bold() + .foregroundColor(.primary) + .padding(.top, 8) + Text(detailText) + .font(.system(size: 11)) + .foregroundColor(.primary) + .padding(.top, -4) + } + } + } + .disabled(isBlocking) + } +} + +struct ActivityIndicator: NSViewRepresentable { + func makeNSView(context: Context) -> NSProgressIndicator { + let nsView = NSProgressIndicator() + nsView.style = .spinning + nsView.startAnimation(nil) + return nsView + } + + func updateNSView(_ nsView: NSProgressIndicator, context: Context) { + } +} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift index faca9cd..9f9bf5c 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift @@ -11,56 +11,59 @@ import SwiftUI struct PhpFormulaeManager: View { @State var formulae: [BrewFormula] - @State var busy: Bool = false + @State var busy: Bool = true + @State var title: String = "Doing a thing" + @State var description: String = "Preparing..." var body: some View { - List(Array(formulae.enumerated()), id: \.1.name) { (index, formula) in - HStack { - Image(systemName: formula.icon) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 16, height: 16) - .foregroundColor(formula.iconColor) - .padding(.horizontal, 5) - VStack(alignment: .leading) { - Text(formula.displayName).bold() + BlockingOverlayView(busy: busy, title: title, text: description) { + List(Array(formulae.enumerated()), id: \.1.name) { (index, formula) in + HStack { + Image(systemName: formula.icon) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 16, height: 16) + .foregroundColor(formula.iconColor) + .padding(.horizontal, 5) + VStack(alignment: .leading) { + Text(formula.displayName).bold() - if formula.isInstalled && formula.hasUpgrade { - Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } else if formula.isInstalled && formula.installedVersion != nil { - Text("Latest version is currently installed.").font(.system(size: 11)) - .foregroundColor(.gray) + if formula.isInstalled && formula.hasUpgrade { + Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } else if formula.isInstalled && formula.installedVersion != nil { + Text("Latest version is currently installed.").font(.system(size: 11)) + .foregroundColor(.gray) + } else { + Text("This version can be installed.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + if formula.isInstalled { + Button("Uninstall") { + // handle uninstall action here + } } else { - Text("This version can be installed.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } - } - .frame(maxWidth: .infinity, alignment: .leading) - if formula.isInstalled { - Button("Uninstall") { - // handle uninstall action here - } - } else { - Button("Install") { - // handle install action here - } - } - if formula.hasUpgrade { - Button("Update") { - // handle uninstall action here + Button("Install") { + // handle install action here + } + } + if formula.hasUpgrade { + Button("Update") { + // handle uninstall action here + } } } + .listRowBackground(index % 2 == 0 + ? Color.gray.opacity(0) + : Color.gray.opacity(0.08) + ) + .padding(.vertical, 10) } - .listRowBackground(index % 2 == 0 - ? Color.gray.opacity(0) - : Color.gray.opacity(0.08) - ) - .padding(.vertical, 10) - } - .frame(width: 500, height: 500) + }.frame(width: 500, height: 500) } } @@ -84,6 +87,30 @@ struct PhpFormulaeManager_Previews: PreviewProvider { displayName: "PHP 8.0", installedVersion: nil, upgradeVersion: nil + ), + BrewFormula( + name: "php@7.4", + displayName: "PHP 7.4", + installedVersion: nil, + upgradeVersion: nil + ), + BrewFormula( + name: "php@7.3", + displayName: "PHP 7.3", + installedVersion: nil, + upgradeVersion: nil + ), + BrewFormula( + name: "php@7.2", + displayName: "PHP 7.2", + installedVersion: nil, + upgradeVersion: nil + ), + BrewFormula( + name: "php@7.1", + displayName: "PHP 7.1", + installedVersion: nil, + upgradeVersion: nil ) ]).frame(width: 600, height: 500) } From e1eb61859e8e6a7f25b4c606167b2e4c6ca43818 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 19 Mar 2023 19:02:34 +0100 Subject: [PATCH 119/194] =?UTF-8?q?=E2=9C=A8=20Display=20window,=20load=20?= =?UTF-8?q?info=20for=20all=20PHP=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 ++ phpmon/Common/PHP/PhpVersionInstaller.swift | 1 + phpmon/Domain/App/App.swift | 3 + .../Domain/Integrations/Homebrew/Brew.swift | 41 ++++--- phpmon/Domain/Menu/MainMenu.swift | 4 + phpmon/Domain/Menu/StatusMenu+Items.swift | 30 +----- .../PhpManager/PhpFormulaeManager.swift | 102 ++++++++++-------- .../PhpVersionManagerWindowController.swift | 54 ++++++++++ phpmon/Localizable.strings | 1 + 9 files changed, 162 insertions(+), 84 deletions(-) create mode 100644 phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 16dad67..c09bb12 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -672,6 +672,10 @@ C4D4CB3829C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; C4D4CB3929C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; + C4D5576429C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5576629C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5576729C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; C4D5CFCA27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D5CFCB27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; @@ -1001,6 +1005,7 @@ C4D36614291160A1006BD146 /* WIP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WIP.swift; sourceTree = ""; }; C4D36619291173EA006BD146 /* DictionaryExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DictionaryExtension.swift; sourceTree = ""; }; C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InternalSwitcher+Valet.swift"; sourceTree = ""; }; + C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionManagerWindowController.swift; sourceTree = ""; }; C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigurationFile.swift; sourceTree = ""; }; C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = ""; }; C4D89BC52783C99400A02B68 /* ComposerJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerJson.swift; sourceTree = ""; }; @@ -1355,6 +1360,7 @@ children = ( C43931C429C4BD610069165B /* PhpFormulaeManager.swift */, C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, + C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */, ); path = PhpManager; sourceTree = ""; @@ -2240,6 +2246,7 @@ C4F2E43A2752F7D00020E974 /* PhpInstallation.swift in Sources */, C4D9F24B280B69E100DCD39A /* AddProxyVC.swift in Sources */, C45B914E295608E300F4EC78 /* ValetServicesManager.swift in Sources */, + C4D5576429C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C4E49DED28F764A00026AC4E /* TestableCommand.swift in Sources */, C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */, C41E871A2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */, @@ -2438,6 +2445,7 @@ C4E2E86628FC2F1B003B070C /* XCPMApplication.swift in Sources */, C471E85F28F9BB650021E251 /* DomainListVC+Actions.swift in Sources */, C490E3B429BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, + C4D5576629C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C471E86028F9BB650021E251 /* SelectionVC.swift in Sources */, C471E86128F9BB650021E251 /* AddSiteVC.swift in Sources */, C471E86228F9BB650021E251 /* AddProxyVC.swift in Sources */, @@ -2613,6 +2621,7 @@ C4E2E86A28FC3002003B070C /* Utility.swift in Sources */, C471E8BF28F9BB8F0021E251 /* DomainListWindowController.swift in Sources */, C471E8C028F9BB8F0021E251 /* DomainListVC.swift in Sources */, + C4D5576729C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C471E8C128F9BB8F0021E251 /* DomainListVC+ContextMenu.swift in Sources */, C4BF56AE2949381100379603 /* FakeValetInteractor.swift in Sources */, C471E8C228F9BB8F0021E251 /* DomainListVC+Actions.swift in Sources */, @@ -2805,6 +2814,7 @@ C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, C463E381284930EE00422731 /* PresetHelper.swift in Sources */, C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */, + C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, C4BF90C127C57C220054E78C /* MainMenu+FixMyValet.swift in Sources */, C4E49DEB28F7643D0026AC4E /* CommandProtocol.swift in Sources */, C4F2E4382752F08D0020E974 /* BrewDiagnostics.swift in Sources */, diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift index 20b7470..84973ad 100644 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ b/phpmon/Common/PHP/PhpVersionInstaller.swift @@ -17,6 +17,7 @@ public enum PhpInstallAction { } public class PhpVersionInstaller { + // TODO: Remove public static var installables = [ // "8.2": "php", "8.1": "php@8.1", diff --git a/phpmon/Domain/App/App.swift b/phpmon/Domain/App/App.swift index 8adc4c0..1803555 100644 --- a/phpmon/Domain/App/App.swift +++ b/phpmon/Domain/App/App.swift @@ -80,6 +80,9 @@ class App { /** The window controller of the warnings window. */ var warningsWindowController: WarningsWindowController? + /** The window controller of the warnings window. */ + var versionManagerWindowController: PhpVersionManagerWindowController? + /** List of detected (installed) applications that PHP Monitor can work with. */ var detectedApplications: [Application] = [] diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 565bd86..51d2a68 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -29,6 +29,18 @@ class Brew { } } + public static var phpVersionFormulae = [ + "8.2": "php@8.2", + "8.1": "php@8.1", + "8.0": "php@8.0", + "7.4": "shivammathur/php/php@7.4", + "7.3": "shivammathur/php/php@7.3", + "7.2": "shivammathur/php/php@7.2", + "7.1": "shivammathur/php/php@7.1", + "7.0": "shivammathur/php/php@7.0", + "5.6": "shivammathur/php/php@5.6", + ] + public func getPhpVersions() async -> [BrewFormula] { let command = """ \(Paths.brew) update >/dev/null && \ @@ -38,12 +50,6 @@ class Brew { let rawJsonText = await Shell.pipe(command).out .data(using: .utf8)! - let installed = PhpEnv.shared.cachedPhpInstallations.map { key, value in - return (key, value.versionNumber.text) - } - - let phpAlias = PhpEnv.brewPhpAlias - let outdated = try? JSONDecoder().decode( OutdatedFormulae.self, from: rawJsonText @@ -51,15 +57,24 @@ class Brew { formula.name.starts(with: "php") }) - return installed.map { (version, fullVersion) in - return BrewFormula( - name: version != phpAlias ? "php@\(version)" : "php", - displayName: version, - installedVersion: fullVersion, - upgradeVersion: outdated?.first(where: { formula in - return formula.installed_versions.contains(fullVersion) + return Self.phpVersionFormulae.map { (version, formula) in + let fullVersion = PhpEnv.shared.cachedPhpInstallations[version]?.versionNumber.text + var upgradeVersion: String? = nil + + if let version = fullVersion { + upgradeVersion = outdated?.first(where: { formula in + return formula.installed_versions.contains(version) })?.current_version + } + + return BrewFormula( + name: formula, + displayName: "PHP \(version)", + installedVersion: fullVersion, + upgradeVersion: upgradeVersion ) + }.sorted { a, b in + a.displayName > b.displayName } } } diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 133bf4a..8e2d181 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -190,6 +190,10 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate DomainListVC.show() } + @objc func openPhpVersionManager() { + PhpVersionManagerWindowController.show() + } + @objc func openDonate() { NSWorkspace.shared.open(Constants.Urls.DonationPage) } diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 90ada4d..b8bc49b 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -91,33 +91,6 @@ extension StatusMenu { addItem(menuItem) } - // TODO: This is a fixed list... - - addItem(NSMenuItem.separator()) - addItem(HeaderView.asMenuItem(text: "Experimental")) - for result in PhpVersionInstaller.availableActions { - let title = result.action == .install - ? "Install PHP \(result.version)..." - : "Remove PHP \(result.version)..." - - let action: Selector? = result.action == .install - ? #selector(MainMenu.installPhpVersion(sender:)) - : #selector(MainMenu.removePhpVersion(sender:)) - - if result.version == PhpEnv.brewPhpAlias { - continue - } - - let menuItem = PhpMenuItem( - title: title, - action: action, - keyEquivalent: "" - ) - - menuItem.version = result.version - addItem(menuItem) - } - if !PhpEnv.shared.incompatiblePhpVersions.isEmpty { addItem(NSMenuItem.separator()) addItem(NSMenuItem( @@ -164,6 +137,9 @@ extension StatusMenu { func addConfigurationMenuItems() { addItems([ HeaderView.asMenuItem(text: "mi_configuration".localized), + NSMenuItem(title: "mi_php_version_manager".localized, + action: #selector(MainMenu.openPhpVersionManager), + keyEquivalent: "m"), NSMenuItem(title: "mi_php_config".localized, action: #selector(MainMenu.openActiveConfigFolder), keyEquivalent: "c"), diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift index 9f9bf5c..872f25d 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift @@ -1,5 +1,5 @@ // -// PhpFormulaeManager.swift +// PhpFormulaeView.swift // PHP Monitor // // Created by Nico Verbruggen on 17/03/2023. @@ -9,67 +9,81 @@ import Foundation import SwiftUI -struct PhpFormulaeManager: View { +struct PhpFormulaeView: View { @State var formulae: [BrewFormula] @State var busy: Bool = true @State var title: String = "Doing a thing" @State var description: String = "Preparing..." + init(formulae: [BrewFormula], busy: Bool = true, title: String = "", description: String = "") { + self.formulae = formulae + self.busy = busy + self.title = title + self.description = description + + Task { @MainActor in + let items = await Brew.shared.getPhpVersions() + print(items) + } + } + var body: some View { BlockingOverlayView(busy: busy, title: title, text: description) { - List(Array(formulae.enumerated()), id: \.1.name) { (index, formula) in - HStack { - Image(systemName: formula.icon) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 16, height: 16) - .foregroundColor(formula.iconColor) - .padding(.horizontal, 5) - VStack(alignment: .leading) { - Text(formula.displayName).bold() + VStack { + List(Array(formulae.enumerated()), id: \.1.name) { (index, formula) in + HStack { + Image(systemName: formula.icon) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 16, height: 16) + .foregroundColor(formula.iconColor) + .padding(.horizontal, 5) + VStack(alignment: .leading) { + Text(formula.displayName).bold() - if formula.isInstalled && formula.hasUpgrade { - Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } else if formula.isInstalled && formula.installedVersion != nil { - Text("Latest version is currently installed.").font(.system(size: 11)) - .foregroundColor(.gray) + if formula.isInstalled && formula.hasUpgrade { + Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } else if formula.isInstalled && formula.installedVersion != nil { + Text("Latest version is currently installed.").font(.system(size: 11)) + .foregroundColor(.gray) + } else { + Text("This version can be installed.") + .font(.system(size: 11)) + .foregroundColor(.gray) + } + } + .frame(maxWidth: .infinity, alignment: .leading) + if formula.isInstalled { + Button("Uninstall") { + // handle uninstall action here + } } else { - Text("This version can be installed.") - .font(.system(size: 11)) - .foregroundColor(.gray) - } - } - .frame(maxWidth: .infinity, alignment: .leading) - if formula.isInstalled { - Button("Uninstall") { - // handle uninstall action here - } - } else { - Button("Install") { - // handle install action here - } - } - if formula.hasUpgrade { - Button("Update") { - // handle uninstall action here + Button("Install") { + // handle install action here + } + } + if formula.hasUpgrade { + Button("Update") { + // handle uninstall action here + } } } + .listRowBackground(index % 2 == 0 + ? Color.gray.opacity(0) + : Color.gray.opacity(0.08) + ) + .padding(.vertical, 10) } - .listRowBackground(index % 2 == 0 - ? Color.gray.opacity(0) - : Color.gray.opacity(0.08) - ) - .padding(.vertical, 10) } }.frame(width: 500, height: 500) } } -struct PhpFormulaeManager_Previews: PreviewProvider { +struct PhpFormulaeView_Previews: PreviewProvider { static var previews: some View { - PhpFormulaeManager(formulae: [ + PhpFormulaeView(formulae: [ BrewFormula( name: "php", displayName: "PHP 8.2", diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift new file mode 100644 index 0000000..a53bec3 --- /dev/null +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift @@ -0,0 +1,54 @@ +// +// PhpVersionManagerWindowController.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 19/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import Cocoa +import SwiftUI + +class PhpVersionManagerWindowController: PMWindowController { + + // MARK: - Window Identifier + + var view: PhpFormulaeView! + + override var windowName: String { + return "PhpFormulaeView" + } + + public static func create(delegate: NSWindowDelegate?) { + let windowController = Self() + windowController.window = NSWindow() + windowController.view = PhpFormulaeView( + formulae: [], + busy: true, + title: "Loading PHP versions", + description: "Loading available PHP versions..." + ) + + guard let window = windowController.window else { return } + window.title = "" + window.styleMask = [.titled, .closable, .miniaturizable] + window.titlebarAppearsTransparent = true + window.delegate = delegate ?? windowController + window.contentView = NSHostingView(rootView: windowController.view) + window.setContentSize(NSSize(width: 600, height: 480)) + + App.shared.versionManagerWindowController = windowController + } + + public static func show(delegate: NSWindowDelegate? = nil) { + if App.shared.versionManagerWindowController == nil { + Self.create(delegate: delegate) + } + + App.shared.versionManagerWindowController?.showWindow(self) + App.shared.versionManagerWindowController?.window?.setCenterPosition(offsetY: 70) + + NSApp.activate(ignoringOtherApps: true) + } +} diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 1a64351..d5256fe 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -20,6 +20,7 @@ "mi_no_php_linked" = "No PHP version linked!"; "mi_fix_php_link" = "Fix Automatically..."; "mi_no_php_linked_explain" = "What's This?"; +"mi_php_version_manager" = "Install & Upgrade PHP Versions..."; "mi_diagnostics" = "Diagnostics"; "mi_active_services" = "Active Services"; From 4f11f3d8d319b29a3d844586ac840daa64995428 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 19 Mar 2023 21:54:49 +0100 Subject: [PATCH 120/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Async=20formulae?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Domain/Integrations/Homebrew/Brew.swift | 55 ++++++++++++------- .../PhpManager/PhpFormulaeManager.swift | 14 ++--- .../PhpVersionManagerWindowController.swift | 1 - 3 files changed, 41 insertions(+), 29 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 51d2a68..799d483 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -8,12 +8,25 @@ import Foundation -class Brew { +class Brew: ObservableObject { static let shared = Brew() + init() { + Task { + // Asynchronously load available updates + let items = await loadPhpVersions(loadOutdated: false) + Task { @MainActor in + self.phpVersions = items + } + } + } + + @Published var phpVersions: [BrewFormula] = [] + /// The version of Homebrew that was detected. var version: VersionNumber? + /// Determine which version of Homebrew is installed. public func determineVersion() async { let output = await Shell.pipe("\(Paths.brew) --version") self.version = try? VersionNumber.parse(output.out) @@ -29,6 +42,7 @@ class Brew { } } + /// Each formula for each PHP version that can be installed. public static var phpVersionFormulae = [ "8.2": "php@8.2", "8.1": "php@8.1", @@ -38,28 +52,33 @@ class Brew { "7.2": "shivammathur/php/php@7.2", "7.1": "shivammathur/php/php@7.1", "7.0": "shivammathur/php/php@7.0", - "5.6": "shivammathur/php/php@5.6", + "5.6": "shivammathur/php/php@5.6" ] - public func getPhpVersions() async -> [BrewFormula] { - let command = """ - \(Paths.brew) update >/dev/null && \ - \(Paths.brew) outdated --json --formulae - """ + public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { + var outdated: [OutdatedFormula]? - let rawJsonText = await Shell.pipe(command).out - .data(using: .utf8)! + if loadOutdated { + let command = """ + \(Paths.brew) update >/dev/null && \ + \(Paths.brew) outdated --json --formulae + """ - let outdated = try? JSONDecoder().decode( - OutdatedFormulae.self, - from: rawJsonText - ).formulae.filter({ formula in - formula.name.starts(with: "php") - }) + let rawJsonText = await Shell.pipe(command).out + .data(using: .utf8)! + outdated = try? JSONDecoder().decode( + OutdatedFormulae.self, + from: rawJsonText + ).formulae.filter({ formula in + formula.name.starts(with: "php") + }) + } + + print(PhpEnv.shared.cachedPhpInstallations) return Self.phpVersionFormulae.map { (version, formula) in let fullVersion = PhpEnv.shared.cachedPhpInstallations[version]?.versionNumber.text - var upgradeVersion: String? = nil + var upgradeVersion: String? if let version = fullVersion { upgradeVersion = outdated?.first(where: { formula in @@ -73,8 +92,6 @@ class Brew { installedVersion: fullVersion, upgradeVersion: upgradeVersion ) - }.sorted { a, b in - a.displayName > b.displayName - } + }.sorted { $0.displayName > $1.displayName } } } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift index 872f25d..64cc9a4 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift @@ -10,27 +10,21 @@ import Foundation import SwiftUI struct PhpFormulaeView: View { - @State var formulae: [BrewFormula] + @ObservedObject var brew: Brew = Brew.shared @State var busy: Bool = true @State var title: String = "Doing a thing" @State var description: String = "Preparing..." - init(formulae: [BrewFormula], busy: Bool = true, title: String = "", description: String = "") { - self.formulae = formulae + init(busy: Bool = true, title: String = "", description: String = "") { self.busy = busy self.title = title self.description = description - - Task { @MainActor in - let items = await Brew.shared.getPhpVersions() - print(items) - } } var body: some View { BlockingOverlayView(busy: busy, title: title, text: description) { VStack { - List(Array(formulae.enumerated()), id: \.1.name) { (index, formula) in + List(Array(brew.phpVersions.enumerated()), id: \.1.name) { (index, formula) in HStack { Image(systemName: formula.icon) .resizable() @@ -81,6 +75,7 @@ struct PhpFormulaeView: View { } } +/* struct PhpFormulaeView_Previews: PreviewProvider { static var previews: some View { PhpFormulaeView(formulae: [ @@ -129,6 +124,7 @@ struct PhpFormulaeView_Previews: PreviewProvider { ]).frame(width: 600, height: 500) } } +*/ extension BrewFormula { var icon: String { diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift index a53bec3..f1c78c1 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift @@ -24,7 +24,6 @@ class PhpVersionManagerWindowController: PMWindowController { let windowController = Self() windowController.window = NSWindow() windowController.view = PhpFormulaeView( - formulae: [], busy: true, title: "Loading PHP versions", description: "Loading available PHP versions..." From 0bdbc0a0567d702dc892ae4cd294610628d2411b Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sun, 19 Mar 2023 23:48:12 +0100 Subject: [PATCH 121/194] =?UTF-8?q?=F0=9F=91=8C=20Make=20PHP=20version=20m?= =?UTF-8?q?anager=20previewable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 8 +++ .../Domain/Integrations/Homebrew/Brew.swift | 39 ++++++++----- .../PhpManager/PhpFormulaeManager.swift | 56 +++++++++++++++---- .../PhpVersionManagerWindowController.swift | 5 +- 4 files changed, 78 insertions(+), 30 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index c09bb12..efa525d 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -1472,6 +1472,13 @@ path = php; sourceTree = ""; }; + C45B42C329C7C67400366A14 /* Fake */ = { + isa = PBXGroup; + children = ( + ); + path = Fake; + sourceTree = ""; + }; C45B9147295607E200F4EC78 /* Services */ = { isa = PBXGroup; children = ( @@ -1631,6 +1638,7 @@ C4AF9F6C275445D900D44ED0 /* Homebrew */ = { isa = PBXGroup; children = ( + C45B42C329C7C67400366A14 /* Fake */, C43931C929C4C03F0069165B /* Brew.swift */, C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */, C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */, diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 799d483..0758d2a 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -8,20 +8,15 @@ import Foundation -class Brew: ObservableObject { +class BrewFormulaeObservable: ObservableObject { + @Published var phpVersions: [BrewFormula] = [] +} + +class Brew { static let shared = Brew() - init() { - Task { - // Asynchronously load available updates - let items = await loadPhpVersions(loadOutdated: false) - Task { @MainActor in - self.phpVersions = items - } - } - } - - @Published var phpVersions: [BrewFormula] = [] + /// Formulae that can be observed. + var formulae = BrewFormulaeObservable() /// The version of Homebrew that was detected. var version: VersionNumber? @@ -54,7 +49,23 @@ class Brew: ObservableObject { "7.0": "shivammathur/php/php@7.0", "5.6": "shivammathur/php/php@5.6" ] +} +protocol HandlesBrewFormulae { + func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] + func refreshPhpVersions(loadOutdated: Bool) async +} + +extension HandlesBrewFormulae { + public func refreshPhpVersions(loadOutdated: Bool) async { + let items = await loadPhpVersions(loadOutdated: loadOutdated) + Task { @MainActor in + Brew.shared.formulae.phpVersions = items + } + } +} + +class BrewFormulaeHandler: HandlesBrewFormulae { public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { var outdated: [OutdatedFormula]? @@ -74,9 +85,7 @@ class Brew: ObservableObject { }) } - print(PhpEnv.shared.cachedPhpInstallations) - - return Self.phpVersionFormulae.map { (version, formula) in + return Brew.phpVersionFormulae.map { (version, formula) in let fullVersion = PhpEnv.shared.cachedPhpInstallations[version]?.versionNumber.text var upgradeVersion: String? diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift index 64cc9a4..267c060 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift @@ -9,22 +9,47 @@ import Foundation import SwiftUI -struct PhpFormulaeView: View { - @ObservedObject var brew: Brew = Brew.shared - @State var busy: Bool = true - @State var title: String = "Doing a thing" - @State var description: String = "Preparing..." +class PhpFormulaeStatus: ObservableObject { + @Published var busy: Bool + @Published var title: String + @Published var description: String - init(busy: Bool = true, title: String = "", description: String = "") { + init(busy: Bool, title: String, description: String) { self.busy = busy self.title = title self.description = description } +} + +struct PhpFormulaeView: View { + @ObservedObject var formulae: BrewFormulaeObservable + @ObservedObject var status: PhpFormulaeStatus + var handler: HandlesBrewFormulae + + init( + formulae: BrewFormulaeObservable, + handler: HandlesBrewFormulae + ) { + self.formulae = formulae + self.handler = handler + + self.status = PhpFormulaeStatus( + busy: true, + title: "Checking for updates", + description: "Checking if any PHP version is outdated..." + ) + + Task { [self] in + await self.handler.refreshPhpVersions(loadOutdated: false) + await self.handler.refreshPhpVersions(loadOutdated: true) + self.status.busy = false + } + } var body: some View { - BlockingOverlayView(busy: busy, title: title, text: description) { + BlockingOverlayView(busy: self.status.busy, title: self.status.title, text: self.status.description) { VStack { - List(Array(brew.phpVersions.enumerated()), id: \.1.name) { (index, formula) in + List(Array(formulae.phpVersions.enumerated()), id: \.1.name) { (index, formula) in HStack { Image(systemName: formula.icon) .resizable() @@ -75,10 +100,18 @@ struct PhpFormulaeView: View { } } -/* struct PhpFormulaeView_Previews: PreviewProvider { static var previews: some View { - PhpFormulaeView(formulae: [ + PhpFormulaeView( + formulae: Brew.shared.formulae, + handler: FakeBrewFormulaeHandler() + ).frame(width: 600, height: 500) + } +} + +class FakeBrewFormulaeHandler: HandlesBrewFormulae { + public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { + return [ BrewFormula( name: "php", displayName: "PHP 8.2", @@ -121,10 +154,9 @@ struct PhpFormulaeView_Previews: PreviewProvider { installedVersion: nil, upgradeVersion: nil ) - ]).frame(width: 600, height: 500) + ] } } -*/ extension BrewFormula { var icon: String { diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift index f1c78c1..be8ac72 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift @@ -24,9 +24,8 @@ class PhpVersionManagerWindowController: PMWindowController { let windowController = Self() windowController.window = NSWindow() windowController.view = PhpFormulaeView( - busy: true, - title: "Loading PHP versions", - description: "Loading available PHP versions..." + formulae: Brew.shared.formulae, + handler: BrewFormulaeHandler() ) guard let window = windowController.window else { return } From f3b3dcf449ea3b8b82ff5ca821aa42114dfc828d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 20 Mar 2023 16:37:27 +0100 Subject: [PATCH 122/194] =?UTF-8?q?=F0=9F=91=8C=20Various=20UI=20improveme?= =?UTF-8?q?nts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 2 +- .../Common/Helpers/PMWindowController.swift | 6 +- .../PhpManager/BlockingOverlayView.swift | 2 +- .../PhpManager/PhpFormulaeManager.swift | 55 +++++++++++++++++-- .../PhpVersionManagerWindowController.swift | 4 +- .../SwiftUI/Warning/WarningListView.swift | 6 +- phpmon/Localizable.strings | 10 +++- 7 files changed, 71 insertions(+), 14 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index efa525d..da6888c 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -1358,9 +1358,9 @@ C43931C329C4BD510069165B /* PhpManager */ = { isa = PBXGroup; children = ( + C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */, C43931C429C4BD610069165B /* PhpFormulaeManager.swift */, C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, - C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */, ); path = PhpManager; sourceTree = ""; diff --git a/phpmon/Common/Helpers/PMWindowController.swift b/phpmon/Common/Helpers/PMWindowController.swift index e35ae7e..a8393d7 100644 --- a/phpmon/Common/Helpers/PMWindowController.swift +++ b/phpmon/Common/Helpers/PMWindowController.swift @@ -37,13 +37,13 @@ class PMWindowController: NSWindowController, NSWindowDelegate { extension NSWindowController { - public func positionWindowInTopLeftCorner() { + public func positionWindowInTopLeftCorner(offsetY: CGFloat = 0, offsetX: CGFloat = 0) { guard let frame = NSScreen.main?.frame else { return } guard let window = self.window else { return } window.setFrame(NSRect( - x: frame.size.width - window.frame.size.width - 20, - y: frame.size.height - window.frame.size.height - 40, + x: frame.size.width - window.frame.size.width - 20 + offsetX, + y: frame.size.height - window.frame.size.height - 40 + offsetY, width: window.frame.width, height: window.frame.height ), display: true) diff --git a/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift b/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift index 8128778..a816b28 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift @@ -44,7 +44,7 @@ struct BlockingOverlayView: View { .padding(.top, -4) } } - } + }.background(Color.white) .disabled(isBlocking) } } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift index 267c060..8a50856 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift @@ -35,7 +35,7 @@ struct PhpFormulaeView: View { self.status = PhpFormulaeStatus( busy: true, - title: "Checking for updates", + title: "Checking for updates!", description: "Checking if any PHP version is outdated..." ) @@ -47,8 +47,53 @@ struct PhpFormulaeView: View { } var body: some View { - BlockingOverlayView(busy: self.status.busy, title: self.status.title, text: self.status.description) { - VStack { + VStack { + HStack(alignment: .center, spacing: 15) { + Image(systemName: "arrow.down.to.line.circle.fill") + .resizable() + .frame(width: 40, height: 40) + .foregroundColor(Color.blue) + .padding(12) + VStack(alignment: .leading, spacing: 5) { + Text("phpman.description".localizedForSwiftUI) + .font(.system(size: 12)) + .frame(maxWidth: .infinity, alignment: .leading) + Text("phpman.disclaimer".localizedForSwiftUI) + .font(.system(size: 12)) + .frame(maxWidth: .infinity, alignment: .leading) + } + } + .padding(10) + + Divider() + + HStack(alignment: .center, spacing: 15) { + Button { + Task { // Reload warnings + Task { @MainActor in + self.status.busy = true + self.status.title = "Checking for updates!" + self.status.description = "Checking if any PHP version is outdated..." + } + await self.handler.refreshPhpVersions(loadOutdated: true) + Task { @MainActor in + self.status.busy = false + } + } + } label: { + Image(systemName: "arrow.clockwise") + .buttonStyle(.automatic) + .controlSize(.large) + } + .focusable(false) + + Text("phpman.refresh.button.description".localizedForSwiftUI) + .foregroundColor(.gray) + .font(.system(size: 11)) + } + .padding(10) + + BlockingOverlayView(busy: self.status.busy, title: self.status.title, text: self.status.description) { List(Array(formulae.phpVersions.enumerated()), id: \.1.name) { (index, formula) in HStack { Image(systemName: formula.icon) @@ -96,7 +141,7 @@ struct PhpFormulaeView: View { .padding(.vertical, 10) } } - }.frame(width: 500, height: 500) + }.frame(width: 600, height: 600) } } @@ -105,7 +150,7 @@ struct PhpFormulaeView_Previews: PreviewProvider { PhpFormulaeView( formulae: Brew.shared.formulae, handler: FakeBrewFormulaeHandler() - ).frame(width: 600, height: 500) + ).frame(width: 600, height: 600) } } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift index be8ac72..e786a30 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpVersionManagerWindowController.swift @@ -34,7 +34,7 @@ class PhpVersionManagerWindowController: PMWindowController { window.titlebarAppearsTransparent = true window.delegate = delegate ?? windowController window.contentView = NSHostingView(rootView: windowController.view) - window.setContentSize(NSSize(width: 600, height: 480)) + window.setContentSize(NSSize(width: 600, height: 800)) App.shared.versionManagerWindowController = windowController } @@ -45,7 +45,7 @@ class PhpVersionManagerWindowController: PMWindowController { } App.shared.versionManagerWindowController?.showWindow(self) - App.shared.versionManagerWindowController?.window?.setCenterPosition(offsetY: 70) + App.shared.versionManagerWindowController?.positionWindowInTopLeftCorner() NSApp.activate(ignoringOtherApps: true) } diff --git a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift index 075bb4a..b664d8c 100644 --- a/phpmon/Domain/SwiftUI/Warning/WarningListView.swift +++ b/phpmon/Domain/SwiftUI/Warning/WarningListView.swift @@ -51,10 +51,14 @@ struct WarningListView: View { Divider() HStack(alignment: .center, spacing: 15) { - Button("warnings.refresh.button".localizedForSwiftUI) { + Button { Task { // Reload warnings await self.warningManager.checkEnvironment() } + } label: { + Image(systemName: "arrow.clockwise") + .buttonStyle(.automatic) + .controlSize(.large) } Text("warnings.refresh.button.description".localizedForSwiftUI) .foregroundColor(.gray) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index d5256fe..5d3fdff 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -20,7 +20,7 @@ "mi_no_php_linked" = "No PHP version linked!"; "mi_fix_php_link" = "Fix Automatically..."; "mi_no_php_linked_explain" = "What's This?"; -"mi_php_version_manager" = "Install & Upgrade PHP Versions..."; +"mi_php_version_manager" = "PHP Version Manager..."; "mi_diagnostics" = "Diagnostics"; "mi_active_services" = "Active Services"; @@ -88,6 +88,14 @@ "mi_xdebug_actions" = "Actions"; "mi_xdebug_disable_all" = "Disable All Modes"; +// PHPMAN + +"phpman.title" = "PHP Manager"; +"phpman.description" = "**PHP Manager** lets you install different PHP versions via Homebrew."; +"phpman.disclaimer" = "PHP Manager may ask for administrative privileges to take ownership of certain folders during certain operations. If you prefer it, you can also manually install PHP versions via the terminal."; +"phpman.refresh.button" = "Search for Updates"; +"phpman.refresh.button.description" = "You can press this button to check (again) if any updates are available to installed PHP versions. When you first open this window, PHP Monitor already does this check."; + // GENERIC "generic.ok" = "OK"; From 64b3c4e9bb64e285bbf8d71c0d288e1817c87ea5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 21 Mar 2023 21:09:20 +0100 Subject: [PATCH 123/194] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Refactor=20Brew=20?= =?UTF-8?q?commands?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 48 +++++-- .../Domain/Integrations/Homebrew/Brew.swift | 56 +------- .../Homebrew/BrewFormulaeHandler.swift | 63 +++++++++ .../Homebrew/Commands/BrewCommand.swift | 129 ++++++++++++++++++ ...laeManager.swift => PhpFormulaeView.swift} | 17 +++ 5 files changed, 248 insertions(+), 65 deletions(-) create mode 100644 phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift create mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift rename phpmon/Domain/SwiftUI/PhpManager/{PhpFormulaeManager.swift => PhpFormulaeView.swift} (92%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index da6888c..783b060 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -129,10 +129,10 @@ C42F26762805FEE200938AC7 /* nginx-secure-proxy.test in Resources */ = {isa = PBXBuildFile; fileRef = C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */; }; C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; - C43931C529C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; - C43931C629C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; - C43931C729C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; - C43931C829C4BD610069165B /* PhpFormulaeManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeManager.swift */; }; + C43931C529C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; + C43931C629C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; + C43931C729C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; + C43931C829C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; C43931CA29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; C43931CB29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; C43931CC29C4C03F0069165B /* Brew.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C929C4C03F0069165B /* Brew.swift */; }; @@ -598,6 +598,14 @@ C4B585452770FE3900DA4FBE /* RealCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B5853D2770FE3900DA4FBE /* RealCommand.swift */; }; C4B6091A2853AAD300C95265 /* SectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B609192853AAD300C95265 /* SectionHeaderView.swift */; }; C4B6091D2853AB9700C95265 /* ServicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B6091C2853AB9700C95265 /* ServicesView.swift */; }; + C4B79EB629CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */; }; + C4B79EB729CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */; }; + C4B79EB829CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */; }; + C4B79EB929CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */; }; + C4B79EBC29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; + C4B79EBD29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; + C4B79EBE29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; + C4B79EBF29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; C4B97B75275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */; }; C4B97B76275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */; }; C4B97B78275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B77275CF1B5003F3378 /* App+ActivationPolicy.swift */; }; @@ -883,7 +891,7 @@ C42F26722805B4B400938AC7 /* ValetListable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetListable.swift; sourceTree = ""; }; C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-secure-proxy.test"; sourceTree = ""; }; C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = ""; }; - C43931C429C4BD610069165B /* PhpFormulaeManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeManager.swift; sourceTree = ""; }; + C43931C429C4BD610069165B /* PhpFormulaeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeView.swift; sourceTree = ""; }; C43931C929C4C03F0069165B /* Brew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Brew.swift; sourceTree = ""; }; C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = ""; }; C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = ""; }; @@ -973,6 +981,8 @@ C4B5853D2770FE3900DA4FBE /* RealCommand.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RealCommand.swift; sourceTree = ""; }; C4B609192853AAD300C95265 /* SectionHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionHeaderView.swift; sourceTree = ""; }; C4B6091C2853AB9700C95265 /* ServicesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesView.swift; sourceTree = ""; }; + C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewFormulaeHandler.swift; sourceTree = ""; }; + C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewCommand.swift; sourceTree = ""; }; C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+MenuOutlets.swift"; sourceTree = ""; }; C4B97B77275CF1B5003F3378 /* App+ActivationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+ActivationPolicy.swift"; sourceTree = ""; }; C4B97B7A275CF20A003F3378 /* App+GlobalHotkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+GlobalHotkey.swift"; sourceTree = ""; }; @@ -1359,7 +1369,7 @@ isa = PBXGroup; children = ( C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */, - C43931C429C4BD610069165B /* PhpFormulaeManager.swift */, + C43931C429C4BD610069165B /* PhpFormulaeView.swift */, C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, ); path = PhpManager; @@ -1638,9 +1648,11 @@ C4AF9F6C275445D900D44ED0 /* Homebrew */ = { isa = PBXGroup; children = ( + C4B79EBA29CA38D100A483EE /* Commands */, C45B42C329C7C67400366A14 /* Fake */, C43931C929C4C03F0069165B /* Brew.swift */, C4AFC4AD29C4F32F00BF4E0D /* BrewFormula.swift */, + C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */, C4F2E4362752F0870020E974 /* BrewDiagnostics.swift */, C40934A1298EEB2C00D25014 /* CaskFile.swift */, ); @@ -1715,6 +1727,14 @@ path = Domains; sourceTree = ""; }; + C4B79EBA29CA38D100A483EE /* Commands */ = { + isa = PBXGroup; + children = ( + C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */, + ); + path = Commands; + sourceTree = ""; + }; C4C0E8D827F887A5002D32A9 /* Sites */ = { isa = PBXGroup; children = ( @@ -2276,6 +2296,7 @@ C4B585442770FE3900DA4FBE /* RealCommand.swift in Sources */, C44067F527E2582B0045BD4E /* DomainListNameCell.swift in Sources */, C40C5C9C2846A40600E28255 /* Preset.swift in Sources */, + C4B79EBC29CA38DB00A483EE /* BrewCommand.swift in Sources */, C41CD0292628D8EE0065BBED /* GlobalKeybindPreference.swift in Sources */, C4B6091A2853AAD300C95265 /* SectionHeaderView.swift in Sources */, C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */, @@ -2285,7 +2306,7 @@ C4C3643928AE4FCE00C0770E /* StatusMenu+Items.swift in Sources */, C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */, C4CDA893288F1A71007CE25F /* Keys.swift in Sources */, - C43931C529C4BD610069165B /* PhpFormulaeManager.swift in Sources */, + C43931C529C4BD610069165B /* PhpFormulaeView.swift in Sources */, C40175B82903108900763A68 /* ValetInteractor.swift in Sources */, C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */, C46EBC4A28DB966A007ACC74 /* TestableShell.swift in Sources */, @@ -2352,6 +2373,7 @@ C4D36601291132B7006BD146 /* ValetScanners.swift in Sources */, C4EED88927A48778006D7272 /* InterAppHandler.swift in Sources */, C40C7F1E2772136000DDDCDC /* PhpEnv.swift in Sources */, + C4B79EB629CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C476FF9822B0DD830098105B /* Alert.swift in Sources */, C474B00624C0E98C00066A22 /* LocalNotification.swift in Sources */, C4D5CFCA27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */, @@ -2399,6 +2421,7 @@ C4FD87A929AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, C471E83028F9BB650021E251 /* Application.swift in Sources */, C471E83128F9BB650021E251 /* LocalNotification.swift in Sources */, + C4B79EB829CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C471E83228F9BB650021E251 /* MenuBarImageGenerator.swift in Sources */, C4BB393B2981AFC700F8E797 /* PhpVersionSource.swift in Sources */, C471E83328F9BB650021E251 /* PMWindowController.swift in Sources */, @@ -2442,6 +2465,7 @@ C4D36617291160A1006BD146 /* WIP.swift in Sources */, C471E85728F9BB650021E251 /* DomainListTLSCell.swift in Sources */, C471E85828F9BB650021E251 /* DomainListNameCell.swift in Sources */, + C4B79EBE29CA38DB00A483EE /* BrewCommand.swift in Sources */, C47DF1B1299D5A3B0007055D /* LoginItemManager.swift in Sources */, C471E85928F9BB650021E251 /* DomainListPhpCell.swift in Sources */, C471E85A28F9BB650021E251 /* DomainListTypeCell.swift in Sources */, @@ -2460,7 +2484,7 @@ C471E86328F9BB650021E251 /* PMTableView.swift in Sources */, C471E86428F9BB650021E251 /* Warning.swift in Sources */, C40175BA2903108900763A68 /* ValetInteractor.swift in Sources */, - C43931C729C4BD610069165B /* PhpFormulaeManager.swift in Sources */, + C43931C729C4BD610069165B /* PhpFormulaeView.swift in Sources */, C4463FCE29804BCB007B93D5 /* RCFile.swift in Sources */, C45B9150295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C471E86528F9BB650021E251 /* WarningManager.swift in Sources */, @@ -2597,6 +2621,7 @@ C43931CD29C4C03F0069165B /* Brew.swift in Sources */, C451AFF92969E40F0078E617 /* HelpButton.swift in Sources */, C471E8A328F9BB8F0021E251 /* AppDelegate+MenuOutlets.swift in Sources */, + C4B79EB929CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C471E8A428F9BB8F0021E251 /* AppDelegate+Notifications.swift in Sources */, C490E3B329BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, C490E3B229BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */, @@ -2671,6 +2696,7 @@ C471E8E328F9BB8F0021E251 /* WarningListView.swift in Sources */, C471E8E428F9BB8F0021E251 /* NoWarningsView.swift in Sources */, C471E8E528F9BB8F0021E251 /* OnboardingView.swift in Sources */, + C4B79EBF29CA38DB00A483EE /* BrewCommand.swift in Sources */, C471E8E628F9BB8F0021E251 /* VersionPopoverView.swift in Sources */, C471E8E728F9BB8F0021E251 /* NoDomainResultsView.swift in Sources */, C471E8E828F9BB8F0021E251 /* ServicesView.swift in Sources */, @@ -2715,7 +2741,7 @@ C471E82228F9BB2E0021E251 /* ComposerWindow.swift in Sources */, C4D3660E29113F20006BD146 /* System.swift in Sources */, C471E80428F9BAD40021E251 /* PhpExtension.swift in Sources */, - C43931C829C4BD610069165B /* PhpFormulaeManager.swift in Sources */, + C43931C829C4BD610069165B /* PhpFormulaeView.swift in Sources */, C471E7F728F9BACB0021E251 /* PhpSwitcher.swift in Sources */, C4463FCF29804BCB007B93D5 /* RCFile.swift in Sources */, C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, @@ -2816,7 +2842,7 @@ C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */, C4F780C025D80B6E000DBC97 /* Startup.swift in Sources */, C45B914A295607F400F4EC78 /* Service.swift in Sources */, - C43931C629C4BD610069165B /* PhpFormulaeManager.swift in Sources */, + C43931C629C4BD610069165B /* PhpFormulaeView.swift in Sources */, C4C0E8E327F88B13002D32A9 /* ValetDomainScanner.swift in Sources */, C4CCBA6D275C567B008C7055 /* PMWindowController.swift in Sources */, C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, @@ -2898,6 +2924,7 @@ C4F2E43B27530F750020E974 /* PhpInstallation.swift in Sources */, C4F780BD25D80B65000DBC97 /* Constants.swift in Sources */, C44C198E276E3A1C0072762D /* TerminalProgressWindowController.swift in Sources */, + C4B79EBD29CA38DB00A483EE /* BrewCommand.swift in Sources */, C485707828BF456300539B36 /* Warning.swift in Sources */, C415938027A1B54F00D2E1B7 /* PhpFrameworks.swift in Sources */, C40F505628ECA64E004AD45B /* TestableConfigurations.swift in Sources */, @@ -2937,6 +2964,7 @@ C4F780C925D80B75000DBC97 /* StringExtension.swift in Sources */, C4D9F24C280B69E100DCD39A /* AddProxyVC.swift in Sources */, C4D4CB3829C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, + C4B79EB729CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C4B5853F2770FE3900DA4FBE /* Paths.swift in Sources */, C481F79A26164A7C004FBCFF /* Preferences.swift in Sources */, C4A6957728D23EE300A14CF8 /* EnvironmentManager.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 0758d2a..d8e2883 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -38,7 +38,7 @@ class Brew { } /// Each formula for each PHP version that can be installed. - public static var phpVersionFormulae = [ + public static let phpVersionFormulae = [ "8.2": "php@8.2", "8.1": "php@8.1", "8.0": "php@8.0", @@ -50,57 +50,3 @@ class Brew { "5.6": "shivammathur/php/php@5.6" ] } - -protocol HandlesBrewFormulae { - func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] - func refreshPhpVersions(loadOutdated: Bool) async -} - -extension HandlesBrewFormulae { - public func refreshPhpVersions(loadOutdated: Bool) async { - let items = await loadPhpVersions(loadOutdated: loadOutdated) - Task { @MainActor in - Brew.shared.formulae.phpVersions = items - } - } -} - -class BrewFormulaeHandler: HandlesBrewFormulae { - public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { - var outdated: [OutdatedFormula]? - - if loadOutdated { - let command = """ - \(Paths.brew) update >/dev/null && \ - \(Paths.brew) outdated --json --formulae - """ - - let rawJsonText = await Shell.pipe(command).out - .data(using: .utf8)! - outdated = try? JSONDecoder().decode( - OutdatedFormulae.self, - from: rawJsonText - ).formulae.filter({ formula in - formula.name.starts(with: "php") - }) - } - - return Brew.phpVersionFormulae.map { (version, formula) in - let fullVersion = PhpEnv.shared.cachedPhpInstallations[version]?.versionNumber.text - var upgradeVersion: String? - - if let version = fullVersion { - upgradeVersion = outdated?.first(where: { formula in - return formula.installed_versions.contains(version) - })?.current_version - } - - return BrewFormula( - name: formula, - displayName: "PHP \(version)", - installedVersion: fullVersion, - upgradeVersion: upgradeVersion - ) - }.sorted { $0.displayName > $1.displayName } - } -} diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift new file mode 100644 index 0000000..859bb1b --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift @@ -0,0 +1,63 @@ +// +// BrewFormulaeHandler.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 21/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +protocol HandlesBrewFormulae { + func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] + func refreshPhpVersions(loadOutdated: Bool) async +} + +extension HandlesBrewFormulae { + public func refreshPhpVersions(loadOutdated: Bool) async { + let items = await loadPhpVersions(loadOutdated: loadOutdated) + Task { @MainActor in + Brew.shared.formulae.phpVersions = items + } + } +} + +class BrewFormulaeHandler: HandlesBrewFormulae { + public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { + var outdated: [OutdatedFormula]? + + if loadOutdated { + let command = """ + \(Paths.brew) update >/dev/null && \ + \(Paths.brew) outdated --json --formulae + """ + + let rawJsonText = await Shell.pipe(command).out + .data(using: .utf8)! + outdated = try? JSONDecoder().decode( + OutdatedFormulae.self, + from: rawJsonText + ).formulae.filter({ formula in + formula.name.starts(with: "php") + }) + } + + return Brew.phpVersionFormulae.map { (version, formula) in + let fullVersion = PhpEnv.shared.cachedPhpInstallations[version]?.versionNumber.text + var upgradeVersion: String? + + if let version = fullVersion { + upgradeVersion = outdated?.first(where: { formula in + return formula.installed_versions.contains(version) + })?.current_version + } + + return BrewFormula( + name: formula, + displayName: "PHP \(version)", + installedVersion: fullVersion, + upgradeVersion: upgradeVersion + ) + }.sorted { $0.displayName > $1.displayName } + } +} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift new file mode 100644 index 0000000..fcb548d --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift @@ -0,0 +1,129 @@ +// +// BrewCommand.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 21/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +struct BrewCommandProgress { + let value: Double + let title: String + let description: String + + public static func create(value: Double, title: String, description: String) -> BrewCommandProgress { + return BrewCommandProgress(value: value, title: title, description: description) + } +} + +protocol BrewCommand { + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws +} + +extension BrewCommand { + +} + +struct BrewCommandError: Error { + let error: String +} + +class FakeInstallPhpVersionCommand: BrewCommand { + let version: String + + init(version: String) { + self.version = version + } + + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + onProgress(.create(value: 0.2, title: "Hello", description: "Doing the work")) + await delay(seconds: 2) + onProgress(.create(value: 0.5, title: "Hello", description: "Doing some more work")) + await delay(seconds: 1) + onProgress(.create(value: 1, title: "Hello", description: "Job's done")) + } +} + +class InstallPhpVersionCommand: BrewCommand { + let formula: String + let version: String + + init(formula: String) { + self.version = formula + .replacingOccurrences(of: "php@", with: "") + .replacingOccurrences(of: "shivammathur/php/", with: "") + self.formula = formula + } + + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + let progressTitle = "Installing PHP \(version)..." + + onProgress(.create( + value: 0.2, + title: progressTitle, + description: "Please wait while Homebrew installs PHP \(version)..." + )) + + if formula.contains("shivammathur") && !BrewDiagnostics.installedTaps.contains("shivammathur/php") { + await Shell.quiet("brew tap shivammathur/php") + } + + let command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=true; \ + export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + brew install \(formula) --force + """ + + let (process, _) = try! await Shell.attach( + command, + didReceiveOutput: { text, _ in + if !text.isEmpty { + Log.perf(text) + } + + // Check if we can recognize any of the typical progress steps + if let (number, text) = self.reportInstallationProgress(text) { + onProgress(.create(value: number, title: progressTitle, description: text)) + } + }, + withTimeout: .minutes(5) + ) + + if process.terminationStatus <= 0 { + onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) + await PhpEnv.detectPhpVersions() + await MainMenu.shared.refreshActiveInstallation() + onProgress(.create(value: 1, title: progressTitle, description: "The installation has succeeded.")) + } else { + throw BrewCommandError(error: "The command failed to run correctly.") + } + } + + private func reportInstallationProgress(_ text: String) -> (Double, String)? { + if text.contains("Fetching") { + return (0.1, text) + } + if text.contains("Downloading") { + return (0.25, text) + } + if text.contains("Already downloaded") || text.contains("Downloaded") { + return (0.50, "Downloaded!") + } + if text.contains("Installing") { + return (0.60, "Installing...") + } + if text.contains("Pouring") { + return (0.80, "Pouring...") + } + if text.contains("Summary") { + return (0.90, "The installation is done!") + } + return nil + } +} + +class RemovePhpVersionCommand: Brew { + // TODO +} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift similarity index 92% rename from phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift rename to phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 8a50856..242327b 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeManager.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -40,6 +40,7 @@ struct PhpFormulaeView: View { ) Task { [self] in + await PhpEnv.detectPhpVersions() await self.handler.refreshPhpVersions(loadOutdated: false) await self.handler.refreshPhpVersions(loadOutdated: true) self.status.busy = false @@ -126,6 +127,7 @@ struct PhpFormulaeView: View { } else { Button("Install") { // handle install action here + Task { await self.install(formula) } } } if formula.hasUpgrade { @@ -143,6 +145,21 @@ struct PhpFormulaeView: View { } }.frame(width: 600, height: 600) } + + public func install(_ formula: BrewFormula) async { + let command = InstallPhpVersionCommand(formula: formula.name) + try! await command.execute { progress in + Task { @MainActor in + self.status.title = progress.title + self.status.description = progress.description + self.status.busy = progress.value != 1 + + if progress.value == 1 { + await self.handler.refreshPhpVersions(loadOutdated: false) + } + } + } + } } struct PhpFormulaeView_Previews: PreviewProvider { From 2d8ad9e9bc432c7f7f63aae9cf188dff182a75cb Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 21 Mar 2023 21:13:35 +0100 Subject: [PATCH 124/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Move=20commands?= =?UTF-8?q?=20to=20separate=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 30 ++++++ .../Homebrew/Commands/BrewCommand.swift | 98 ------------------- .../Homebrew/Commands/FakeCommand.swift | 25 +++++ .../Commands/InstallPhpVersionCommand.swift | 87 ++++++++++++++++ .../Commands/RemovePhpVersionCommand.swift | 13 +++ 5 files changed, 155 insertions(+), 98 deletions(-) create mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/FakeCommand.swift create mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift create mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 783b060..3c28048 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -606,6 +606,18 @@ C4B79EBD29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; C4B79EBE29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; C4B79EBF29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; + C4B79EC129CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; + C4B79EC229CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; + C4B79EC329CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; + C4B79EC429CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; + C4B79EC629CA474200A483EE /* FakeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC529CA474200A483EE /* FakeCommand.swift */; }; + C4B79EC729CA474200A483EE /* FakeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC529CA474200A483EE /* FakeCommand.swift */; }; + C4B79EC829CA474200A483EE /* FakeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC529CA474200A483EE /* FakeCommand.swift */; }; + C4B79EC929CA474200A483EE /* FakeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC529CA474200A483EE /* FakeCommand.swift */; }; + C4B79ECB29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */; }; + C4B79ECC29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */; }; + C4B79ECD29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */; }; + C4B79ECE29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */; }; C4B97B75275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */; }; C4B97B76275CF08C003F3378 /* AppDelegate+MenuOutlets.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */; }; C4B97B78275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B97B77275CF1B5003F3378 /* App+ActivationPolicy.swift */; }; @@ -983,6 +995,9 @@ C4B6091C2853AB9700C95265 /* ServicesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesView.swift; sourceTree = ""; }; C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewFormulaeHandler.swift; sourceTree = ""; }; C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewCommand.swift; sourceTree = ""; }; + C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallPhpVersionCommand.swift; sourceTree = ""; }; + C4B79EC529CA474200A483EE /* FakeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeCommand.swift; sourceTree = ""; }; + C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemovePhpVersionCommand.swift; sourceTree = ""; }; C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+MenuOutlets.swift"; sourceTree = ""; }; C4B97B77275CF1B5003F3378 /* App+ActivationPolicy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+ActivationPolicy.swift"; sourceTree = ""; }; C4B97B7A275CF20A003F3378 /* App+GlobalHotkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+GlobalHotkey.swift"; sourceTree = ""; }; @@ -1731,6 +1746,9 @@ isa = PBXGroup; children = ( C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */, + C4B79EC529CA474200A483EE /* FakeCommand.swift */, + C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */, + C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */, ); path = Commands; sourceTree = ""; @@ -2238,6 +2256,7 @@ C41ADCE82970CCC700120423 /* FSNotifier.swift in Sources */, C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */, C490E3BB29BCA375006D2DE6 /* Measurements.swift in Sources */, + C4B79EC629CA474200A483EE /* FakeCommand.swift in Sources */, C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */, C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */, C490E3AA29BC9B3E006D2DE6 /* ProgressViewSubject.swift in Sources */, @@ -2312,6 +2331,7 @@ C46EBC4A28DB966A007ACC74 /* TestableShell.swift in Sources */, C44C198D276E3A1C0072762D /* TerminalProgressWindowController.swift in Sources */, 54D9E0B827E4F51E003B9AD9 /* KeyCombo.swift in Sources */, + C4B79EC129CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C4C0E8E727F88B41002D32A9 /* DomainScanner.swift in Sources */, C4C3ED4327834C5200AB15D8 /* CustomPrefs.swift in Sources */, 54B48B5F275F66AE006D90C5 /* Application.swift in Sources */, @@ -2396,6 +2416,7 @@ 54D9E0BA27E4F51E003B9AD9 /* ModifierFlagsExtension.swift in Sources */, C4C3ED412783497000AB15D8 /* MainMenu+Startup.swift in Sources */, C40508AF28ADA23D008FAC1F /* NoDomainResultsView.swift in Sources */, + C4B79ECB29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */, C4E2E84A28FC1E70003B070C /* DataExtension.swift in Sources */, C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */, @@ -2462,6 +2483,7 @@ C471E85428F9BB650021E251 /* StatusMenu.swift in Sources */, C471E85528F9BB650021E251 /* StatusMenu+Items.swift in Sources */, C471E85628F9BB650021E251 /* DomainListCellProtocol.swift in Sources */, + C4B79EC329CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C4D36617291160A1006BD146 /* WIP.swift in Sources */, C471E85728F9BB650021E251 /* DomainListTLSCell.swift in Sources */, C471E85828F9BB650021E251 /* DomainListNameCell.swift in Sources */, @@ -2572,6 +2594,7 @@ C471E7D928F9BA8F0021E251 /* TestableShell.swift in Sources */, C471E81428F9BAE80021E251 /* NSWindowExtension.swift in Sources */, C471E7D328F9BA8F0021E251 /* ActiveShell.swift in Sources */, + C4B79EC829CA474200A483EE /* FakeCommand.swift in Sources */, C471E7DE28F9BAA30021E251 /* CommandProtocol.swift in Sources */, C471E81B28F9BB250021E251 /* BetterAlertVC.swift in Sources */, C471E82928F9BB330021E251 /* Valet.swift in Sources */, @@ -2591,6 +2614,7 @@ C471E81728F9BAE80021E251 /* NSMenuExtension.swift in Sources */, C471E81328F9BAE80021E251 /* XibLoadable.swift in Sources */, C4D3661C291173EA006BD146 /* DictionaryExtension.swift in Sources */, + C4B79ECD29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C471E7F128F9BAC70021E251 /* VersionNumber.swift in Sources */, C471E7DC28F9BA8F0021E251 /* ShellProtocol.swift in Sources */, ); @@ -2602,6 +2626,7 @@ files = ( C471E89028F9BB8F0021E251 /* AlertableError.swift in Sources */, C471E89128F9BB8F0021E251 /* Errors.swift in Sources */, + C4B79EC929CA474200A483EE /* FakeCommand.swift in Sources */, C471E89228F9BB8F0021E251 /* Alert.swift in Sources */, C471E89328F9BB8F0021E251 /* Application.swift in Sources */, C471E89428F9BB8F0021E251 /* LocalNotification.swift in Sources */, @@ -2690,6 +2715,7 @@ C471E8DE28F9BB8F0021E251 /* App+ConfigWatch.swift in Sources */, C471E8DF28F9BB8F0021E251 /* PhpConfigWatcher.swift in Sources */, C4CB250529B28BB800CA4492 /* MainMenuTest.swift in Sources */, + C4B79ECE29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C471E8E028F9BB8F0021E251 /* Preset.swift in Sources */, C471E8E128F9BB8F0021E251 /* PresetHelper.swift in Sources */, C471E8E228F9BB8F0021E251 /* WarningView.swift in Sources */, @@ -2771,6 +2797,7 @@ C4AFC4B129C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C471E81F28F9BB290021E251 /* NginxConfigurationFile.swift in Sources */, C471E7BF28F9B90F0021E251 /* StartupTest.swift in Sources */, + C4B79EC429CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C4D3661D291173EA006BD146 /* DictionaryExtension.swift in Sources */, C471E80D28F9BAE80021E251 /* ArrayExtension.swift in Sources */, C471E7CD28F9BA600021E251 /* ShellProtocol.swift in Sources */, @@ -2829,6 +2856,7 @@ C449B4F027EE7FB800C47E8A /* DomainListTLSCell.swift in Sources */, C4FBFC532616485F00CDB8E1 /* PhpVersionDetectionTest.swift in Sources */, C43A8A2425D9D20D00591B77 /* HomebrewPackageTest.swift in Sources */, + C4B79EC229CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C485707928BF456C00539B36 /* ArrayExtension.swift in Sources */, C4F780CA25D80B75000DBC97 /* HomebrewDecodable.swift in Sources */, C4C8E81C276F54E5003AC782 /* PhpConfigWatcher.swift in Sources */, @@ -2853,6 +2881,7 @@ C4E49DEB28F7643D0026AC4E /* CommandProtocol.swift in Sources */, C4F2E4382752F08D0020E974 /* BrewDiagnostics.swift in Sources */, C485707428BF454E00539B36 /* ServicesView.swift in Sources */, + C4B79EC729CA474200A483EE /* FakeCommand.swift in Sources */, C4F780AE25D80B37000DBC97 /* PhpExtensionTest.swift in Sources */, C4C8E819276F54D8003AC782 /* App+ConfigWatch.swift in Sources */, C4FC21B128391F8E00D368BB /* MainMenu+Actions.swift in Sources */, @@ -2906,6 +2935,7 @@ C4E2E86528FC2F1B003B070C /* XCPMApplication.swift in Sources */, C4E49DE828F764050026AC4E /* ActiveCommand.swift in Sources */, C4CE3BBB27B324230086CA49 /* MainMenu+Switcher.swift in Sources */, + C4B79ECC29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C4FD87AA29AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, C485707D28BF45A200539B36 /* WarningView.swift in Sources */, C4F7809C25D80344000DBC97 /* CommandTest.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift index fcb548d..cc9fc0e 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift @@ -29,101 +29,3 @@ extension BrewCommand { struct BrewCommandError: Error { let error: String } - -class FakeInstallPhpVersionCommand: BrewCommand { - let version: String - - init(version: String) { - self.version = version - } - - func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { - onProgress(.create(value: 0.2, title: "Hello", description: "Doing the work")) - await delay(seconds: 2) - onProgress(.create(value: 0.5, title: "Hello", description: "Doing some more work")) - await delay(seconds: 1) - onProgress(.create(value: 1, title: "Hello", description: "Job's done")) - } -} - -class InstallPhpVersionCommand: BrewCommand { - let formula: String - let version: String - - init(formula: String) { - self.version = formula - .replacingOccurrences(of: "php@", with: "") - .replacingOccurrences(of: "shivammathur/php/", with: "") - self.formula = formula - } - - func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { - let progressTitle = "Installing PHP \(version)..." - - onProgress(.create( - value: 0.2, - title: progressTitle, - description: "Please wait while Homebrew installs PHP \(version)..." - )) - - if formula.contains("shivammathur") && !BrewDiagnostics.installedTaps.contains("shivammathur/php") { - await Shell.quiet("brew tap shivammathur/php") - } - - let command = """ - export HOMEBREW_NO_INSTALL_UPGRADE=true; \ - export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - brew install \(formula) --force - """ - - let (process, _) = try! await Shell.attach( - command, - didReceiveOutput: { text, _ in - if !text.isEmpty { - Log.perf(text) - } - - // Check if we can recognize any of the typical progress steps - if let (number, text) = self.reportInstallationProgress(text) { - onProgress(.create(value: number, title: progressTitle, description: text)) - } - }, - withTimeout: .minutes(5) - ) - - if process.terminationStatus <= 0 { - onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) - await PhpEnv.detectPhpVersions() - await MainMenu.shared.refreshActiveInstallation() - onProgress(.create(value: 1, title: progressTitle, description: "The installation has succeeded.")) - } else { - throw BrewCommandError(error: "The command failed to run correctly.") - } - } - - private func reportInstallationProgress(_ text: String) -> (Double, String)? { - if text.contains("Fetching") { - return (0.1, text) - } - if text.contains("Downloading") { - return (0.25, text) - } - if text.contains("Already downloaded") || text.contains("Downloaded") { - return (0.50, "Downloaded!") - } - if text.contains("Installing") { - return (0.60, "Installing...") - } - if text.contains("Pouring") { - return (0.80, "Pouring...") - } - if text.contains("Summary") { - return (0.90, "The installation is done!") - } - return nil - } -} - -class RemovePhpVersionCommand: Brew { - // TODO -} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/FakeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/FakeCommand.swift new file mode 100644 index 0000000..ebf704a --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Commands/FakeCommand.swift @@ -0,0 +1,25 @@ +// +// FakeCommand.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 21/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class FakeCommand: BrewCommand { + let version: String + + init(version: String) { + self.version = version + } + + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + onProgress(.create(value: 0.2, title: "Hello", description: "Doing the work")) + await delay(seconds: 2) + onProgress(.create(value: 0.5, title: "Hello", description: "Doing some more work")) + await delay(seconds: 1) + onProgress(.create(value: 1, title: "Hello", description: "Job's done")) + } +} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift new file mode 100644 index 0000000..d25a390 --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift @@ -0,0 +1,87 @@ +// +// InstallPhpVersionCommand.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 21/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class InstallPhpVersionCommand: BrewCommand { + let formula: String + let version: String + + init(formula: String) { + self.version = formula + .replacingOccurrences(of: "php@", with: "") + .replacingOccurrences(of: "shivammathur/php/", with: "") + self.formula = formula + } + + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + let progressTitle = "Installing PHP \(version)..." + + onProgress(.create( + value: 0.2, + title: progressTitle, + description: "Please wait while Homebrew installs PHP \(version)..." + )) + + if formula.contains("shivammathur") && !BrewDiagnostics.installedTaps.contains("shivammathur/php") { + await Shell.quiet("brew tap shivammathur/php") + } + + let command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=true; \ + export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + brew install \(formula) --force + """ + + let (process, _) = try! await Shell.attach( + command, + didReceiveOutput: { text, _ in + if !text.isEmpty { + Log.perf(text) + } + + // Check if we can recognize any of the typical progress steps + if let (number, text) = self.reportInstallationProgress(text) { + onProgress(.create(value: number, title: progressTitle, description: text)) + } + }, + withTimeout: .minutes(5) + ) + + if process.terminationStatus <= 0 { + onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) + await PhpEnv.detectPhpVersions() + await MainMenu.shared.refreshActiveInstallation() + onProgress(.create(value: 1, title: progressTitle, description: "The installation has succeeded.")) + } else { + throw BrewCommandError(error: "The command failed to run correctly.") + } + } + + private func reportInstallationProgress(_ text: String) -> (Double, String)? { + if text.contains("Fetching") { + return (0.1, text) + } + if text.contains("Downloading") { + return (0.25, text) + } + if text.contains("Already downloaded") || text.contains("Downloaded") { + return (0.50, "Downloaded!") + } + if text.contains("Installing") { + return (0.60, "Installing...") + } + if text.contains("Pouring") { + return (0.80, "Pouring...") + } + if text.contains("Summary") { + return (0.90, "The installation is done!") + } + return nil + } +} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift new file mode 100644 index 0000000..e4c2364 --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift @@ -0,0 +1,13 @@ +// +// RemovePhpVersionCommand.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 21/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class RemovePhpVersionCommand: Brew { + // TODO +} From 3a826b7e515a08f1773e2dd6a08f977d75563aa5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 21 Mar 2023 22:15:05 +0100 Subject: [PATCH 125/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Remove=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 - phpmon/Common/PHP/PhpVersionInstaller.swift | 271 ------------------ .../Homebrew/Commands/BrewCommand.swift | 16 +- .../Commands/InstallPhpVersionCommand.swift | 7 +- .../Commands/RemovePhpVersionCommand.swift | 107 ++++++- phpmon/Domain/Menu/MainMenu.swift | 8 - .../SwiftUI/PhpManager/PhpFormulaeView.swift | 21 +- phpmon/Localizable.strings | 2 +- 8 files changed, 135 insertions(+), 307 deletions(-) delete mode 100644 phpmon/Common/PHP/PhpVersionInstaller.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 3c28048..2cc78b1 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -781,10 +781,6 @@ C4F780CC25D80B75000DBC97 /* ActivePhpInstallation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C1B4A22B019FF00E7CF16 /* ActivePhpInstallation.swift */; }; C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; }; C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = C474B00524C0E98C00066A22 /* LocalNotification.swift */; }; - C4F8764E29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; - C4F8764F29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; - C4F8765029BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; - C4F8765129BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */; }; C4F8C0A422D4F12C002EFE61 /* DateExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */; }; C4FACE80288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; C4FACE81288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; @@ -1068,7 +1064,6 @@ C4F7809B25D80344000DBC97 /* CommandTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandTest.swift; sourceTree = ""; }; C4F780A725D80AE8000DBC97 /* php.ini */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = php.ini; sourceTree = ""; }; C4F780AD25D80B37000DBC97 /* PhpExtensionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpExtensionTest.swift; sourceTree = ""; }; - C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionInstaller.swift; sourceTree = ""; }; C4F8C0A322D4F12C002EFE61 /* DateExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateExtension.swift; sourceTree = ""; }; C4F8C0A522D4FA41002EFE61 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "PreferencesWindowController+Hotkey.swift"; sourceTree = ""; }; @@ -1145,7 +1140,6 @@ 54B20EDF263AA22C00D3250E /* PHP */ = { isa = PBXGroup; children = ( - C4F8764D29BFAF00006BBE26 /* PhpVersionInstaller.swift */, C48D6C6E279CD29C00F26D7E /* PHP Version */, C4D9ADC2277610E4007277F4 /* Switcher */, C4F30B01278E169B00755FCE /* Homebrew */, @@ -2286,7 +2280,6 @@ C4205A7E27F4D21800191A39 /* ValetProxy.swift in Sources */, C4C8E818276F54D8003AC782 /* App+ConfigWatch.swift in Sources */, C4E49DE728F764050026AC4E /* ActiveCommand.swift in Sources */, - C4F8764E29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, 54FCFD30276C8DA4004CE748 /* HotkeyPreferenceView.swift in Sources */, C450C8C628C919EC002A2B4B /* PreferenceName.swift in Sources */, C4E4404627C56F4700D225E1 /* ValetSite.swift in Sources */, @@ -2580,7 +2573,6 @@ C471E80828F9BAD40021E251 /* PhpExtension.swift in Sources */, C471E7F928F9BACB0021E251 /* PhpSwitcher.swift in Sources */, C471E82A28F9BB330021E251 /* ValetListable.swift in Sources */, - C4F8765029BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, C471E82728F9BB310021E251 /* BrewDiagnostics.swift in Sources */, C471E81C28F9BB250021E251 /* BetterAlert.swift in Sources */, C471E7DB28F9BA8F0021E251 /* RealShell.swift in Sources */, @@ -2778,7 +2770,6 @@ C471E80028F9BAD10021E251 /* Xdebug.swift in Sources */, C471E7F528F9BAC80021E251 /* PhpEnv.swift in Sources */, C471E7ED28F9BAC30021E251 /* Process.swift in Sources */, - C4F8765129BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, C471E81128F9BAE80021E251 /* NSMenuItemExtension.swift in Sources */, C471E7CC28F9BA5B0021E251 /* TestableShell.swift in Sources */, C471E80C28F9BAE80021E251 /* NSWindowExtension.swift in Sources */, @@ -2820,7 +2811,6 @@ C485707128BF452E00539B36 /* WarningManager.swift in Sources */, C41CA5EE2774F8EE00A2C80E /* DomainListVC+Actions.swift in Sources */, C4FACE81288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */, - C4F8764F29BFAF00006BBE26 /* PhpVersionInstaller.swift in Sources */, C40934A3298EEB2C00D25014 /* CaskFile.swift in Sources */, 54D9E0B727E4F51E003B9AD9 /* HotKey.swift in Sources */, C413E43528DA3EB100AE33C7 /* TestableShellTest.swift in Sources */, diff --git a/phpmon/Common/PHP/PhpVersionInstaller.swift b/phpmon/Common/PHP/PhpVersionInstaller.swift deleted file mode 100644 index 84973ad..0000000 --- a/phpmon/Common/PHP/PhpVersionInstaller.swift +++ /dev/null @@ -1,271 +0,0 @@ -// -// PhpVersionInstaller.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 13/03/2023. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation -import Cocoa - -public enum PhpInstallAction { - case install - case remove - case upgrade - case purge -} - -public class PhpVersionInstaller { - // TODO: Remove - public static var installables = [ - // "8.2": "php", - "8.1": "php@8.1", - "8.0": "php@8.0", - "7.4": "shivammathur/php/php@7.4", - "7.3": "shivammathur/php/php@7.3", - "7.2": "shivammathur/php/php@7.2", - "7.1": "shivammathur/php/php@7.1", - "7.0": "shivammathur/php/php@7.0" - ] - - // swiftlint:disable cyclomatic_complexity function_body_length - /** - Performs the desired action on the provided PHP version. - */ - public static func modifyPhpVersion(version: String, action: PhpInstallAction) async { - let title = { - switch action { - case .install: - return "Installing PHP \(version)" - case .upgrade: - return "Upgrading to PHP \(version)" - case .remove: - return "Removing PHP \(version)" - case .purge: - return "Purging PHP \(version)" - } - }() - - let description = { - switch action { - case .install: - return "Please wait while Homebrew installs PHP \(version)..." - case .upgrade: - return "Please wait while Homebrew upgrades PHP \(version)..." - case .remove: - return "Please wait while Homebrew uninstalls PHP \(version)..." - case .purge: - return "Please wait while Homebrew purges PHP \(version)" - } - }() - - let subject = ProgressViewSubject( - title: title, - description: description - ) - - let installables = Self.installables - - if installables.keys.contains(version) { - let windowController = await ProgressWindowView.display(subject) - await NSApp.activate(ignoringOtherApps: true) - await windowController.window?.makeKeyAndOrderFront(nil) - - let formula = installables[version]! - - var command: String! - - if action == .install { - if formula.contains("shivammathur") && !BrewDiagnostics.installedTaps.contains("shivammathur/php") { - await Shell.quiet("brew tap shivammathur/php") - } - - command = """ - export HOMEBREW_NO_INSTALL_UPGRADE=1 \ - && export HOMEBREW_NO_INSTALL_CLEANUP=1 \ - && brew install \(formula) --force - """ - } - - if action == .upgrade { - fatalError("This is not supported yet.") - } - - if action == .purge || action == .remove { - // Removal always requires permission - do { - try await PhpVersionInstaller.fixPermissions(for: formula) - } catch { - Task { @MainActor in - subject.progress = 1 - subject.title = "Could not take permission of required folder" - subject.description = "Please try again!" - } - return - } - - // Actually do the removal - command = "brew remove \(formula) --force --ignore-dependencies" - - // Check if the permissions are correct; if not, fix permissions - if action == .purge { - command += " --zap" - } - } - - let (process, _) = try! await Shell.attach( - command, - didReceiveOutput: { text, _ in - if action == .install { - if !text.isEmpty { - Log.perf(text) - } - - // Check if we can recognize any of the typical progress steps - if let (number, text) = Self.reportInstallationProgress(text) { - Task { @MainActor in - subject.progress = number - subject.description = text - } - } - } - }, - withTimeout: .minutes(5) - ) - - if process.terminationStatus <= 0 { - Task { @MainActor in - subject.progress = 1 - } - - await PhpEnv.detectPhpVersions() - await MainMenu.shared.refreshActiveInstallation() - - Task { @MainActor in - windowController.close() - } - } else { - // Do not close the window and notify about failure - Task { @MainActor in - subject.title = "Operation failed: something went wrong" - subject.progress = 1 - subject.description = "Oops. You may close this window." - } - } - } else { - Log.err("\(version) is not contained within installable list") - } - } - - /** Installs a given PHP version. Never requires administrative privileges. */ - public static func installPhpVersion(version: String) async { - await self.modifyPhpVersion(version: version, action: .install) - } - - /** Uninstalls a given PHP version. Might require administrative privileges. */ - public static func removePhpVersion(version: String) async { - await self.modifyPhpVersion(version: version, action: .remove) - } - - /** - Takes ownership of the /BREW_PATH/Cellar/php/x.y.z/bin folder (if required). - - This might not be required if the user has only used that version of PHP - with site isolation, so this method checks if it's required first. - */ - public static func fixPermissions(for formula: String) async throws { - // Omit the prefix - let path = formula.replacingOccurrences(of: "shivammathur/php/", with: "") - - // Binary path needs to be checked for ownership - let binaryPath = "\(Paths.optPath)/\(path)/bin" - - // Check if it's even necessary to perform the fix - if !isOwnedByRoot(path: binaryPath) { - return - } - - Log.info("The ownership of the folder at `\(binaryPath)` is currently not correct. Will prompt to take ownership!") - - let script = """ - \(Paths.brew) services stop \(formula) \ - && chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(path) - """ - - let appleScript = NSAppleScript(source: - "do shell script \"\(script)\" with administrator privileges" - ) - - let eventResult: NSAppleEventDescriptor? = appleScript?.executeAndReturnError(nil) - - if eventResult == nil { - throw HomebrewPermissionError(kind: .applescriptNilError) - } - - Log.info("Ownership was taken of the folder at `\(binaryPath)`.") - } - - /** - Checks if a given path is owned by root. If so, ownership might need to be taken. - */ - private static func isOwnedByRoot(path: String) -> Bool { - do { - let attributes = try FileManager.default.attributesOfItem(atPath: path) - if let owner = attributes[.ownerAccountName] as? String { - return owner == "root" - } - } catch { - return true - } - - return true - } - - private static func reportInstallationProgress(_ text: String) -> (Double, String)? { - if text.contains("Fetching") { - return (0.1, "Fetching...") - } - if text.contains("Downloading") { - return (0.25, "Downloading...") - } - if text.contains("Already downloaded") || text.contains("Downloaded") { - return (0.50, "Downloaded!") - } - if text.contains("Installing") { - return (0.60, "Installing...") - } - if text.contains("Pouring") { - return (0.80, "Pouring... this can take a while!") - } - if text.contains("Summary") { - return (1, "The installation is done!") - } - return nil - } - - /** - Determine which action will be available in the PHP version manager. - Some versions will be available to be removed, some to be installed. - */ - public static var availableActions: [(version: String, action: PhpInstallAction)] { - var operations: [(version: String, action: PhpInstallAction)] = [] - - let installed = PhpEnv.shared.cachedPhpInstallations.keys - let unsupported = PhpEnv.shared.incompatiblePhpVersions - - for installable in installables.keys { - // While technically possible to uninstall the main formula (`php`) - // this should be disabled in the UI... this data should be correct though - let availableOperation: PhpInstallAction = - installed.contains(installable) || unsupported.contains(installable) ? .remove : .install - - operations.append((version: installable, action: availableOperation)) - } - - operations.sort { $1.version < $0.version } - - return operations - } - -} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift index cc9fc0e..d4c7e3f 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift @@ -8,6 +8,14 @@ import Foundation +protocol BrewCommand { + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws +} + +extension BrewCommand { + +} + struct BrewCommandProgress { let value: Double let title: String @@ -18,14 +26,6 @@ struct BrewCommandProgress { } } -protocol BrewCommand { - func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws -} - -extension BrewCommand { - -} - struct BrewCommandError: Error { let error: String } diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift index d25a390..a1bfcd0 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift @@ -35,7 +35,7 @@ class InstallPhpVersionCommand: BrewCommand { let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - brew install \(formula) --force + \(Paths.brew) install \(formula) --force """ let (process, _) = try! await Shell.attach( @@ -45,7 +45,6 @@ class InstallPhpVersionCommand: BrewCommand { Log.perf(text) } - // Check if we can recognize any of the typical progress steps if let (number, text) = self.reportInstallationProgress(text) { onProgress(.create(value: number, title: progressTitle, description: text)) } @@ -65,10 +64,10 @@ class InstallPhpVersionCommand: BrewCommand { private func reportInstallationProgress(_ text: String) -> (Double, String)? { if text.contains("Fetching") { - return (0.1, text) + return (0.1, "Fetching...") } if text.contains("Downloading") { - return (0.25, text) + return (0.25, "Downloading package data...") } if text.contains("Already downloaded") || text.contains("Downloaded") { return (0.50, "Downloaded!") diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift index e4c2364..36ab697 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift @@ -8,6 +8,109 @@ import Foundation -class RemovePhpVersionCommand: Brew { - // TODO +class RemovePhpVersionCommand: BrewCommand { + let formula: String + let version: String + + init(formula: String) { + self.version = formula + .replacingOccurrences(of: "php@", with: "") + .replacingOccurrences(of: "shivammathur/php/", with: "") + self.formula = formula + } + + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + let progressTitle = "Removing PHP \(version)..." + + onProgress(.create( + value: 0.2, + title: progressTitle, + description: "Please wait while Homebrew removes PHP \(version)..." + )) + + let command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=true; \ + export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + \(Paths.brew) remove \(formula) --force --ignore-dependencies + """ + + do { + try await self.fixPermissions(for: formula) + } catch { + return + } + + let (process, _) = try! await Shell.attach( + command, + didReceiveOutput: { text, _ in + if !text.isEmpty { + Log.perf(text) + } + }, + withTimeout: .minutes(5) + ) + + if process.terminationStatus <= 0 { + onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) + await PhpEnv.detectPhpVersions() + await MainMenu.shared.refreshActiveInstallation() + onProgress(.create(value: 1, title: progressTitle, description: "The operation has succeeded.")) + } else { + throw BrewCommandError(error: "The command failed to run correctly.") + } + } + + /** + Takes ownership of the /BREW_PATH/Cellar/php/x.y.z/bin folder (if required). + + This might not be required if the user has only used that version of PHP + with site isolation, so this method checks if it's required first. + */ + private func fixPermissions(for formula: String) async throws { + // Omit the prefix + let path = formula.replacingOccurrences(of: "shivammathur/php/", with: "") + + // Binary path needs to be checked for ownership + let binaryPath = "\(Paths.optPath)/\(path)/bin" + + // Check if it's even necessary to perform the fix + if !isOwnedByRoot(path: binaryPath) { + return + } + + Log.info("Need to take ownership of `\(binaryPath)`...") + + let script = """ + \(Paths.brew) services stop \(formula) \ + && chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(path) + """ + + let appleScript = NSAppleScript( + source: "do shell script \"\(script)\" with administrator privileges" + ) + + let eventResult: NSAppleEventDescriptor? = appleScript?.executeAndReturnError(nil) + + if eventResult == nil { + throw HomebrewPermissionError(kind: .applescriptNilError) + } + + Log.info("Ownership was taken of the folder at `\(binaryPath)`.") + } + + /** + Checks if a given path is owned by root. If so, ownership might need to be taken. + */ + private func isOwnedByRoot(path: String) -> Bool { + do { + let attributes = try FileManager.default.attributesOfItem(atPath: path) + if let owner = attributes[.ownerAccountName] as? String { + return owner == "root" + } + } catch { + return true + } + + return true + } } diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 8e2d181..d2c479c 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -206,14 +206,6 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate Task { await AppUpdater().checkForUpdates(userInitiated: true) } } - @objc func installPhpVersion(sender: PhpMenuItem) { - Task { await PhpVersionInstaller.installPhpVersion(version: sender.version) } - } - - @objc func removePhpVersion(sender: PhpMenuItem) { - Task { await PhpVersionInstaller.removePhpVersion(version: sender.version) } - } - // MARK: - Menu Delegate func menuWillOpen(_ menu: NSMenu) { diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 242327b..eb76faa 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -61,6 +61,7 @@ struct PhpFormulaeView: View { .frame(maxWidth: .infinity, alignment: .leading) Text("phpman.disclaimer".localizedForSwiftUI) .font(.system(size: 12)) + .foregroundColor(.gray) .frame(maxWidth: .infinity, alignment: .leading) } } @@ -122,17 +123,16 @@ struct PhpFormulaeView: View { .frame(maxWidth: .infinity, alignment: .leading) if formula.isInstalled { Button("Uninstall") { - // handle uninstall action here + Task { await self.uninstall(formula) } } } else { Button("Install") { - // handle install action here Task { await self.install(formula) } } } if formula.hasUpgrade { Button("Update") { - // handle uninstall action here + Task { await self.install(formula) } } } } @@ -160,6 +160,21 @@ struct PhpFormulaeView: View { } } } + + public func uninstall(_ formula: BrewFormula) async { + let command = RemovePhpVersionCommand(formula: formula.name) + try! await command.execute { progress in + Task { @MainActor in + self.status.title = progress.title + self.status.description = progress.description + self.status.busy = progress.value != 1 + + if progress.value == 1 { + await self.handler.refreshPhpVersions(loadOutdated: false) + } + } + } + } } struct PhpFormulaeView_Previews: PreviewProvider { diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 5d3fdff..df4360c 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -92,7 +92,7 @@ "phpman.title" = "PHP Manager"; "phpman.description" = "**PHP Manager** lets you install different PHP versions via Homebrew."; -"phpman.disclaimer" = "PHP Manager may ask for administrative privileges to take ownership of certain folders during certain operations. If you prefer it, you can also manually install PHP versions via the terminal."; +"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well, but only if Homebrew would otherwise have broken those other packages via a shared dependency. (More in the FAQ!)"; "phpman.refresh.button" = "Search for Updates"; "phpman.refresh.button.description" = "You can press this button to check (again) if any updates are available to installed PHP versions. When you first open this window, PHP Monitor already does this check."; From 29fcc66cbaac4e7fd52e1c082ce668dc3d339cbf Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 22 Mar 2023 21:43:20 +0100 Subject: [PATCH 126/194] =?UTF-8?q?=E2=9C=A8=20Added=20EAP=20target?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 401 +++++++++++++++++- .../xcschemes/PHP Monitor EA.xcscheme | 146 +++++++ .../PHP Monitor Self-Updater.xcscheme | 2 +- phpmon-updater/Updater.swift | 1 + phpmon/Common/Core/Constants.swift | 4 + phpmon/Domain/App/AppUpdater.swift | 10 +- .../Commands/InstallPhpVersionCommand.swift | 1 + .../SwiftUI/PhpManager/PhpFormulaeView.swift | 68 ++- ...roller.swift => PhpVersionManagerWC.swift} | 0 phpmon/Localizable.strings | 6 + 10 files changed, 601 insertions(+), 38 deletions(-) create mode 100644 PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EA.xcscheme rename phpmon/Domain/SwiftUI/PhpManager/{PhpVersionManagerWindowController.swift => PhpVersionManagerWC.swift} (100%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 2cc78b1..760bfa8 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -553,7 +553,6 @@ C490E3B429BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */; }; C490E3B529BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C490E3A629BC940D006D2DE6 /* ProgressWindowView.swift */; }; C490E3B629BCA367006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; - C490E3B729BCA367006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; C490E3B829BCA367006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; C490E3B929BCA368006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; C490E3BA29BCA368006D2DE6 /* App+BrewWatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */; }; @@ -692,10 +691,10 @@ C4D4CB3829C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; C4D4CB3929C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */; }; - C4D5576429C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; - C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; - C4D5576629C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; - C4D5576729C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */; }; + C4D5576429C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; + C4D5576529C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; + C4D5576629C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; + C4D5576729C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */; }; C4D5CFCA27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D5CFCB27E0F9CD00035329 /* NginxConfigurationFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */; }; C4D8016622B1584700C6DA1B /* Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D8016522B1584700C6DA1B /* Startup.swift */; }; @@ -1026,7 +1025,7 @@ C4D36614291160A1006BD146 /* WIP.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WIP.swift; sourceTree = ""; }; C4D36619291173EA006BD146 /* DictionaryExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DictionaryExtension.swift; sourceTree = ""; }; C4D4CB3629C109CF00DB9F93 /* InternalSwitcher+Valet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "InternalSwitcher+Valet.swift"; sourceTree = ""; }; - C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionManagerWindowController.swift; sourceTree = ""; }; + C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpVersionManagerWC.swift; sourceTree = ""; }; C4D5CFC927E0F9CD00035329 /* NginxConfigurationFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NginxConfigurationFile.swift; sourceTree = ""; }; C4D8016522B1584700C6DA1B /* Startup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Startup.swift; sourceTree = ""; }; C4D89BC52783C99400A02B68 /* ComposerJson.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposerJson.swift; sourceTree = ""; }; @@ -1377,7 +1376,7 @@ C43931C329C4BD510069165B /* PhpManager */ = { isa = PBXGroup; children = ( - C4D5576329C77CC5001A44CD /* PhpVersionManagerWindowController.swift */, + C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */, C43931C429C4BD610069165B /* PhpFormulaeView.swift */, C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, ); @@ -2239,7 +2238,6 @@ C4C75F5A298C2D5700DFD82E /* LaunchControl.swift in Sources */, C41F3D08298AED0D0042ACBF /* System.swift in Sources */, C406A5F3298AD2CE00B5B85A /* main.swift in Sources */, - C490E3B729BCA367006D2DE6 /* App+BrewWatch.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2286,7 +2284,7 @@ C4F2E43A2752F7D00020E974 /* PhpInstallation.swift in Sources */, C4D9F24B280B69E100DCD39A /* AddProxyVC.swift in Sources */, C45B914E295608E300F4EC78 /* ValetServicesManager.swift in Sources */, - C4D5576429C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, + C4D5576429C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, C4E49DED28F764A00026AC4E /* TestableCommand.swift in Sources */, C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */, C41E871A2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */, @@ -2492,7 +2490,7 @@ C4E2E86628FC2F1B003B070C /* XCPMApplication.swift in Sources */, C471E85F28F9BB650021E251 /* DomainListVC+Actions.swift in Sources */, C490E3B429BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, - C4D5576629C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, + C4D5576629C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, C471E86028F9BB650021E251 /* SelectionVC.swift in Sources */, C471E86128F9BB650021E251 /* AddSiteVC.swift in Sources */, C471E86228F9BB650021E251 /* AddProxyVC.swift in Sources */, @@ -2671,7 +2669,7 @@ C4E2E86A28FC3002003B070C /* Utility.swift in Sources */, C471E8BF28F9BB8F0021E251 /* DomainListWindowController.swift in Sources */, C471E8C028F9BB8F0021E251 /* DomainListVC.swift in Sources */, - C4D5576729C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, + C4D5576729C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, C471E8C128F9BB8F0021E251 /* DomainListVC+ContextMenu.swift in Sources */, C4BF56AE2949381100379603 /* FakeValetInteractor.swift in Sources */, C471E8C228F9BB8F0021E251 /* DomainListVC+Actions.swift in Sources */, @@ -2866,7 +2864,7 @@ C4B5635F276AB09000F12CCB /* VersionExtractor.swift in Sources */, C463E381284930EE00422731 /* PresetHelper.swift in Sources */, C46FA98C2822F08F00D78807 /* PhpConfigurationTest.swift in Sources */, - C4D5576529C77CC5001A44CD /* PhpVersionManagerWindowController.swift in Sources */, + C4D5576529C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, C4BF90C127C57C220054E78C /* MainMenu+FixMyValet.swift in Sources */, C4E49DEB28F7643D0026AC4E /* CommandProtocol.swift in Sources */, C4F2E4382752F08D0020E974 /* BrewDiagnostics.swift in Sources */, @@ -3049,7 +3047,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 25; + CURRENT_PROJECT_VERSION = 26; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3062,7 +3060,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -3082,7 +3080,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 25; + CURRENT_PROJECT_VERSION = 26; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3095,7 +3093,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -3115,7 +3113,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 25; + CURRENT_PROJECT_VERSION = 26; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3128,7 +3126,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -3148,7 +3146,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 25; + CURRENT_PROJECT_VERSION = 26; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3161,7 +3159,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 12.4; - MARKETING_VERSION = 1.0; + MARKETING_VERSION = 1.1; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; @@ -3702,6 +3700,357 @@ }; name = Debug.Dev; }; + C4E9D8EF29CB9A6400BD28D4 /* Debug.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "Mac Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 12.4; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug.EA; + }; + C4E9D8F029CB9A6400BD28D4 /* Debug.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppColor; + CODE_SIGN_ENTITLEMENTS = phpmon/phpmon.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1200; + DEBUG = YES; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.4; + MARKETING_VERSION = 6.0; + PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Debug.EA; + }; + C4E9D8F129CB9A6400BD28D4 /* Debug.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 26; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Self-Updater"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.4; + MARKETING_VERSION = 1.1; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Debug.EA; + }; + C4E9D8F229CB9A6400BD28D4 /* Debug.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 8M54J5J787; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug.EA; + }; + C4E9D8F329CB9A6400BD28D4 /* Debug.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = ""; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + }; + name = Debug.EA; + }; + C4E9D8F429CB9A6400BD28D4 /* Debug.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = "PHP Monitor"; + }; + name = Debug.EA; + }; + C4E9D8F529CB9A7200BD28D4 /* Release.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_IDENTITY = "Mac Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 12.4; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release.EA; + }; + C4E9D8F629CB9A7200BD28D4 /* Release.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppColor; + CODE_SIGN_ENTITLEMENTS = phpmon/phpmon.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1200; + DEBUG = NO; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.4; + MARKETING_VERSION = 6.0; + PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; + PRODUCT_NAME = "$(TARGET_NAME) DEV"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release.EA; + }; + C4E9D8F729CB9A7200BD28D4 /* Release.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_ENTITLEMENTS = "phpmon-updater/phpmon-updater.entitlements"; + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 26; + DEVELOPMENT_TEAM = 8M54J5J787; + ENABLE_HARDENED_RUNTIME = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor Self-Updater"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2023 Nico Verbruggen. All rights reserved."; + INFOPLIST_KEY_NSPrincipalClass = NSApplication; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 12.4; + MARKETING_VERSION = 1.1; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon-updater"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + }; + name = Release.EA; + }; + C4E9D8F829CB9A7200BD28D4 /* Release.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 8M54J5J787; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = ""; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + "@loader_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 11.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release.EA; + }; + C4E9D8F929CB9A7200BD28D4 /* Release.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = ""; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + }; + name = Release.EA; + }; + C4E9D8FA29CB9A7200BD28D4 /* Release.EA */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 8M54J5J787; + GENERATE_INFOPLIST_FILE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TEST_TARGET_NAME = "PHP Monitor"; + }; + name = Release.EA; + }; C4F7808125D7F84B000DBC97 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -3752,8 +4101,10 @@ buildConfigurations = ( C406A5FD298AD2CF00B5B85A /* Debug */, C406A5FE298AD2CF00B5B85A /* Debug.Dev */, + C4E9D8F129CB9A6400BD28D4 /* Debug.EA */, C406A5FF298AD2CF00B5B85A /* Release */, C406A600298AD2CF00B5B85A /* Release.Dev */, + C4E9D8F729CB9A7200BD28D4 /* Release.EA */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3763,8 +4114,10 @@ buildConfigurations = ( C41C1B4122B0098000E7CF16 /* Debug */, C4975D0A28CD193A00FFB4E8 /* Debug.Dev */, + C4E9D8EF29CB9A6400BD28D4 /* Debug.EA */, C41C1B4222B0098000E7CF16 /* Release */, C4975D0728CD190C00FFB4E8 /* Release.Dev */, + C4E9D8F529CB9A7200BD28D4 /* Release.EA */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3774,8 +4127,10 @@ buildConfigurations = ( C41C1B4422B0098000E7CF16 /* Debug */, C4975D0B28CD193A00FFB4E8 /* Debug.Dev */, + C4E9D8F029CB9A6400BD28D4 /* Debug.EA */, C41C1B4522B0098000E7CF16 /* Release */, C4975D0828CD190C00FFB4E8 /* Release.Dev */, + C4E9D8F629CB9A7200BD28D4 /* Release.EA */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3785,8 +4140,10 @@ buildConfigurations = ( C471E7B428F9B4940021E251 /* Debug */, C471E7B528F9B4940021E251 /* Debug.Dev */, + C4E9D8F329CB9A6400BD28D4 /* Debug.EA */, C471E7B628F9B4940021E251 /* Release */, C471E7B728F9B4940021E251 /* Release.Dev */, + C4E9D8F929CB9A7200BD28D4 /* Release.EA */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3796,8 +4153,10 @@ buildConfigurations = ( C471E7C528F9B90F0021E251 /* Debug */, C471E7C628F9B90F0021E251 /* Debug.Dev */, + C4E9D8F429CB9A6400BD28D4 /* Debug.EA */, C471E7C728F9B90F0021E251 /* Release */, C471E7C828F9B90F0021E251 /* Release.Dev */, + C4E9D8FA29CB9A7200BD28D4 /* Release.EA */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -3807,8 +4166,10 @@ buildConfigurations = ( C4F7808125D7F84B000DBC97 /* Debug */, C4975D0C28CD193A00FFB4E8 /* Debug.Dev */, + C4E9D8F229CB9A6400BD28D4 /* Debug.EA */, C4F7808225D7F84B000DBC97 /* Release */, C4975D0928CD190C00FFB4E8 /* Release.Dev */, + C4E9D8F829CB9A7200BD28D4 /* Release.EA */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EA.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EA.xcscheme new file mode 100644 index 0000000..a2eb38c --- /dev/null +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EA.xcscheme @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme index 67f26b9..4e093b7 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme @@ -31,7 +31,7 @@ Date: Wed, 22 Mar 2023 21:47:55 +0100 Subject: [PATCH 127/194] =?UTF-8?q?=F0=9F=91=8C=20Add=20updater=20for=20Ea?= =?UTF-8?q?rly=20Access=20builds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 ++++ phpmon/Common/Core/Constants.swift | 2 +- .../Homebrew/Commands/InstallPhpVersionCommand.swift | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 760bfa8..1550f92 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -744,6 +744,7 @@ C4E49DED28F764A00026AC4E /* TestableCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E49DEC28F764A00026AC4E /* TestableCommand.swift */; }; C4E49DEE28F764A00026AC4E /* TestableCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E49DEC28F764A00026AC4E /* TestableCommand.swift */; }; C4E9D2C02878B336008FFDAD /* OnboardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4E9D2BF2878B336008FFDAD /* OnboardingView.swift */; }; + C4E9D90129CBA09E00BD28D4 /* PHP Monitor Self-Updater.app in Resources */ = {isa = PBXBuildFile; fileRef = C4E9D90029CBA09E00BD28D4 /* PHP Monitor Self-Updater.app */; }; C4EB53E528551F9B006F9937 /* HeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EB53E428551F9B006F9937 /* HeaderView.swift */; }; C4EB53E728553117006F9937 /* ArrayExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EB53E628553117006F9937 /* ArrayExtension.swift */; }; C4EC1E73279DFCF40010F296 /* Events.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4EC1E72279DFCF40010F296 /* Events.swift */; }; @@ -1048,6 +1049,7 @@ C4E713562570150F00007428 /* SECURITY.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = SECURITY.md; sourceTree = ""; }; C4E713572570151400007428 /* docs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = docs; sourceTree = ""; }; C4E9D2BF2878B336008FFDAD /* OnboardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingView.swift; sourceTree = ""; }; + C4E9D90029CBA09E00BD28D4 /* PHP Monitor Self-Updater.app */ = {isa = PBXFileReference; lastKnownFileType = wrapper.application; path = "PHP Monitor Self-Updater.app"; sourceTree = ""; }; C4EB53E428551F9B006F9937 /* HeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeaderView.swift; sourceTree = ""; }; C4EB53E628553117006F9937 /* ArrayExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArrayExtension.swift; sourceTree = ""; }; C4EC1E72279DFCF40010F296 /* Events.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Events.swift; sourceTree = ""; }; @@ -1207,6 +1209,7 @@ C406A5F1298AD2CE00B5B85A /* phpmon-updater */ = { isa = PBXGroup; children = ( + C4E9D90029CBA09E00BD28D4 /* PHP Monitor Self-Updater.app */, C406A5F2298AD2CE00B5B85A /* main.swift */, C406A601298AD50D00B5B85A /* Updater.swift */, C4C75F5B298C31C000DFD82E /* Utility.swift */, @@ -2136,6 +2139,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + C4E9D90129CBA09E00BD28D4 /* PHP Monitor Self-Updater.app in Resources */, C41C1B3B22B0098000E7CF16 /* Assets.xcassets in Resources */, C41C1B3E22B0098000E7CF16 /* Main.storyboard in Resources */, C405A4D124B9B9140062FAFA /* InternetAccessPolicy.plist in Resources */, diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 10e8e65..644f432 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -83,7 +83,7 @@ struct Constants { )! static let EarlyAccessCaskFile = URL( - string: "https://phpmon.app/releases/early_access_brqkTSfvcJMlB09vRZlXByDJbxpDYXueSmioJ4sbXQ/phpmon-eap.rb" + string: "https://phpmon.app/releases/early-access/sponsors/phpmon-eap.rb" )! } diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift index 08e74a1..a1bfcd0 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift @@ -33,7 +33,6 @@ class InstallPhpVersionCommand: BrewCommand { } let command = """ - sdfdsfsjhfs && export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ \(Paths.brew) install \(formula) --force From 9c8da2aa1c42ba2f5fa38989049b6c99a40e7e7f Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 22 Mar 2023 21:49:55 +0100 Subject: [PATCH 128/194] =?UTF-8?q?=E2=9C=A8=20Mark=20as=20busy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 18b6097..cf2fa61 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -150,6 +150,7 @@ struct PhpFormulaeView: View { let command = InstallPhpVersionCommand(formula: formula.name) do { + PhpEnv.shared.isBusy = true try await command.execute { progress in Task { @MainActor in self.status.title = progress.title @@ -157,11 +158,13 @@ struct PhpFormulaeView: View { self.status.busy = progress.value != 1 if progress.value == 1 { + PhpEnv.shared.isBusy = false await self.handler.refreshPhpVersions(loadOutdated: false) } } } } catch { + PhpEnv.shared.isBusy = false Task { @MainActor in self.status.busy = false } @@ -179,6 +182,7 @@ struct PhpFormulaeView: View { let command = RemovePhpVersionCommand(formula: formula.name) do { + PhpEnv.shared.isBusy = true try await command.execute { progress in Task { @MainActor in self.status.title = progress.title @@ -187,10 +191,12 @@ struct PhpFormulaeView: View { if progress.value == 1 { await self.handler.refreshPhpVersions(loadOutdated: false) + PhpEnv.shared.isBusy = false } } } } catch { + PhpEnv.shared.isBusy = false Task { @MainActor in self.status.busy = false } From 6aff283d08e6a95ebd66a4268b87497e9db1f363 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 22 Mar 2023 21:58:50 +0100 Subject: [PATCH 129/194] =?UTF-8?q?=F0=9F=91=8C=20Sync=20global=20&=20wind?= =?UTF-8?q?ow=20busy=20indicator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PHP Version/PhpEnv.swift | 9 ++++- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 34 ++++++++++++------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnv.swift index d5cb0bb..a884413 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnv.swift @@ -40,7 +40,14 @@ class PhpEnv { static let shared = PhpEnv() /** Whether the switcher is busy performing any actions. */ - var isBusy: Bool = false + var isBusy: Bool = false { + didSet { + Task { @MainActor in + MainMenu.shared.setBusyImage() + MainMenu.shared.rebuild() + } + } + } /** All versions of PHP that are currently supported. */ var availablePhpVersions: [String] = [] diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index cf2fa61..e438c23 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -150,7 +150,7 @@ struct PhpFormulaeView: View { let command = InstallPhpVersionCommand(formula: formula.name) do { - PhpEnv.shared.isBusy = true + self.setBusyStatus(true) try await command.execute { progress in Task { @MainActor in self.status.title = progress.title @@ -158,16 +158,13 @@ struct PhpFormulaeView: View { self.status.busy = progress.value != 1 if progress.value == 1 { - PhpEnv.shared.isBusy = false + self.setBusyStatus(false) await self.handler.refreshPhpVersions(loadOutdated: false) } } } } catch { - PhpEnv.shared.isBusy = false - Task { @MainActor in - self.status.busy = false - } + self.setBusyStatus(false) self.presentErrorAlert( title: "phpman.failures.install.title".localized, description: "phpman.failures.install.desc".localized( @@ -182,7 +179,7 @@ struct PhpFormulaeView: View { let command = RemovePhpVersionCommand(formula: formula.name) do { - PhpEnv.shared.isBusy = true + self.setBusyStatus(true) try await command.execute { progress in Task { @MainActor in self.status.title = progress.title @@ -191,15 +188,12 @@ struct PhpFormulaeView: View { if progress.value == 1 { await self.handler.refreshPhpVersions(loadOutdated: false) - PhpEnv.shared.isBusy = false + self.setBusyStatus(false) } } } } catch { - PhpEnv.shared.isBusy = false - Task { @MainActor in - self.status.busy = false - } + self.setBusyStatus(false) self.presentErrorAlert( title: "phpman.failures.uninstall.title".localized, description: "phpman.failures.uninstall.desc".localized( @@ -210,6 +204,22 @@ struct PhpFormulaeView: View { } } + public func setBusyStatus(_ busy: Bool) { + PhpEnv.shared.isBusy = busy + if busy { + Task { @MainActor in + MainMenu.shared.setBusyImage() + MainMenu.shared.rebuild() + self.status.busy = busy + } + } else { + Task { @MainActor in + MainMenu.shared.updatePhpVersionInStatusBar() + self.status.busy = busy + } + } + } + public func presentErrorAlert(title: String, description: String, button: String) { Alert.confirm( onWindow: App.shared.versionManagerWindowController!.window!, From 4e095a5ae5d578826c91634f47425c52d29ba37c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 23 Mar 2023 15:17:11 +0100 Subject: [PATCH 130/194] =?UTF-8?q?=F0=9F=91=8C=20Fixed=20build=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Constants.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 644f432..99c7a3e 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -83,7 +83,7 @@ struct Constants { )! static let EarlyAccessCaskFile = URL( - string: "https://phpmon.app/releases/early-access/sponsors/phpmon-eap.rb" + string: "https://phpmon.app/builds/early-access/sponsors/phpmon-eap.rb" )! } From ff2c2c9b69312bbf00a9b59999fd5fa14d3e8537 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 23 Mar 2023 18:01:13 +0100 Subject: [PATCH 131/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20unsafe=20usage=20o?= =?UTF-8?q?f=20try=20for=20path=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Valet/Scanners/ValetDomainScanner.swift | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift b/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift index c8dcbf5..b8f55ac 100644 --- a/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift +++ b/phpmon/Domain/Integrations/Valet/Scanners/ValetDomainScanner.swift @@ -14,14 +14,18 @@ class ValetDomainScanner: DomainScanner { func resolveSiteCount(paths: [String]) -> Int { return paths.map { path in + do { + let entries = try FileSystem + .getShallowContentsOfDirectory(path) - let entries = try! FileSystem - .getShallowContentsOfDirectory(path) - - return entries - .map { self.isSite($0, forPath: path) } - .filter { $0 == true} - .count + return entries + .map { self.isSite($0, forPath: path) } + .filter { $0 == true} + .count + } catch { + Log.err("Unexpected error getting contents of \(path): \(error).") + return 0 + } }.reduce(0, +) } @@ -30,13 +34,17 @@ class ValetDomainScanner: DomainScanner { var sites: [ValetSite] = [] paths.forEach { path in - let entries = try! FileSystem - .getShallowContentsOfDirectory(path) + do { + let entries = try FileSystem + .getShallowContentsOfDirectory(path) - return entries.forEach { - if let site = self.resolveSite(path: "\(path)/\($0)") { - sites.append(site) + return entries.forEach { + if let site = self.resolveSite(path: "\(path)/\($0)") { + sites.append(site) + } } + } catch { + Log.err("Unexpected error getting contents of \(path): \(error).") } } From 34e5a9715559a890856bae473612ec62fe23454d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 23 Mar 2023 19:57:24 +0100 Subject: [PATCH 132/194] =?UTF-8?q?=F0=9F=91=8C=20Avoid=20sponsor=20messag?= =?UTF-8?q?es=20on=20EAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Preferences/Stats.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpmon/Domain/Preferences/Stats.swift b/phpmon/Domain/Preferences/Stats.swift index 004c2e2..dd800fb 100644 --- a/phpmon/Domain/Preferences/Stats.swift +++ b/phpmon/Domain/Preferences/Stats.swift @@ -105,7 +105,7 @@ class Stats { return Log.info("A fake shell is in use, skipping sponsor alert.") } - if Bundle.main.bundleIdentifier?.contains("beta") ?? false { + if App.identifier.contains(".dev") || App.identifier.contains(".eap") { return Log.info("Sponsor messages never apply to beta builds.") } From 7cf8d4697f7c34bb27bc33b5e24b6ba33aadf330 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Thu, 23 Mar 2023 20:05:30 +0100 Subject: [PATCH 133/194] =?UTF-8?q?=F0=9F=91=8C=20Add=20icon=20for=20early?= =?UTF-8?q?=20access=20builds?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 4 +- assets/affinity/icon-eap.afdesign | Bin 0 -> 124169 bytes .../AppColorBeta.colorset/Contents.json | 38 ---------- .../AppIconEAP.appiconset/Contents.json | 68 ++++++++++++++++++ .../AppIconEAP.appiconset/icon_128x128.png | Bin 0 -> 9934 bytes .../AppIconEAP.appiconset/icon_128x128@2x.png | Bin 0 -> 23678 bytes .../AppIconEAP.appiconset/icon_16x16.png | Bin 0 -> 644 bytes .../AppIconEAP.appiconset/icon_16x16@2x.png | Bin 0 -> 1551 bytes .../AppIconEAP.appiconset/icon_256x256.png | Bin 0 -> 23678 bytes .../AppIconEAP.appiconset/icon_256x256@2x.png | Bin 0 -> 63830 bytes .../AppIconEAP.appiconset/icon_32x32.png | Bin 0 -> 1551 bytes .../AppIconEAP.appiconset/icon_32x32@2x.png | Bin 0 -> 3958 bytes .../AppIconEAP.appiconset/icon_512x512.png | Bin 0 -> 63830 bytes .../AppIconEAP.appiconset/icon_512x512@2x.png | Bin 0 -> 166398 bytes 14 files changed, 70 insertions(+), 40 deletions(-) create mode 100644 assets/affinity/icon-eap.afdesign delete mode 100644 phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/Contents.json create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_128x128.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_128x128@2x.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_16x16.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_16x16@2x.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_256x256.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_256x256@2x.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_32x32.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_32x32@2x.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_512x512.png create mode 100644 phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_512x512@2x.png diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 1550f92..70d49d6 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3769,7 +3769,7 @@ C4E9D8F029CB9A6400BD28D4 /* Debug.EA */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIconEAP; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppColor; CODE_SIGN_ENTITLEMENTS = phpmon/phpmon.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; @@ -3941,7 +3941,7 @@ C4E9D8F629CB9A7200BD28D4 /* Release.EA */ = { isa = XCBuildConfiguration; buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDev; + ASSETCATALOG_COMPILER_APPICON_NAME = AppIconEAP; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AppColor; CODE_SIGN_ENTITLEMENTS = phpmon/phpmon.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; diff --git a/assets/affinity/icon-eap.afdesign b/assets/affinity/icon-eap.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..08d7dee8226bb3d39c655defb3c95b6f283fecfc GIT binary patch literal 124169 zcmZ^}by!s27d|>e3=Km!4Bg#I3=NV}f`D`if`lMBLw8FE(%m4fG$IH}hoFK;gLKE7 zJAS@5p5GsLKQm|V+2@?uwbr}dwe|)9T8ac95a@-smp+^33rGES^bd6U`tg4`ciaE+ z|L00l%wYeojDh|#qQClH9zK}poK4Nejk{Io9;ETk790=*i8h16ajGC7Bf$$i_acSt z(D=oLiG{x@O_6!#<0GO0X*cR-o3NiiEfr^Z9)y;++EE0|`_6G@^MJIvt<_?YUy5Vr zZ8t9b=Og$GzG8H}6UOxG&zL5xXTc;KxH)(b-1_`?^V_za_Cjgcr#r|d{~%qOc({5Fc;+8_CS+ag4t7M-l zrg>(}22AnRAe6MXLwx#5~-DQaiuf=(Ic7PN*XrK5^+(o8OxYYqAi?O4zV# zQ~8ejhjai#(FlZ#Z++b#jd#{J_=eGEr2o-(yMt^89^qbvXR!1Uq5j^ki24EwdwU1#*|V?Z7PYoixYiilqwd6b)!Hmkd?eWW7lK7 zMO^a<^VH_uCUL^X$rP=bJbQwA#oT*xBt1-j13W+x_1J#DlGQ0958@HSYNt;5U4jjL zm0{C=*_Q!X>_gBwXR|yaFpQW|C3Q;poW$#;lHG^#6hcN}JrEG!<1_w_(JVRM_e(&K zsW2l=!d%*UhiQ3om3NPSP)b;cG)J1&$(7$j4$fLnqNmgrvxf;3Sm?!-3VVI2gs$Lt z(0j}bGJAU7`}~*VO?jPEy^81uw^WNK_*W08=2x6xq(S%c#Xe zVa8+Q=8@EB`%w+@;eeeKIsPn?T6MLyfX0krA(h9EK-1LdHT_}zeoE)RCS>q(DC-sX z(q_aYoGml93sn?4QHM$;DoVyGu@MTmi0Og!(js#9G9u^xM*MH~R zXHLpMx9k{MNv$D9j^M{zpkPwR^irW7H`A+r5W9Lr7$Si|6N$i7kH}doFWpOi&^%wG zK5rLS8b8Nt&Q`NdYQz7M!q2pfc!w_7|5-1d)sqb5MQDq6;>1eV#mbh4YP|TtgjSmTm4c%k7 zRC38~>Oid=*$HYtWMSfV7S$FRzIc2ItMIhi_3L8R!c8D=lo*W?U+`*%eBn*gpiIk;ITqT2$5K@ zA?4AE#F>t0(ev`Bv}CfFWnkOR(1vqTjk?1||;Q=mPF;3PnT}I=+m? z%DSN*EXaYvneP}@40r80Di{C|&KWAC-*WBKM_Y3{w0YGV+x8Lo>6)_*1WvZ(#l}hb zDpu7@6ke3ygg!M}GXb13_V9+Tf!x@VcawgyPZ@tNt>OnKCe)%7D!Lxz0TRu>YX*zJ z(IFs&-H)VSW}ded^6#G;3f*#CzXC+N2RZR0!c{9riF(NCI z_b20Sg5{|rCsug(dLI|JTmm9DpIiS_2MGSX*H?eNr$edbOS zyj^*JHgX@Di?TZX`C>cnzBe)B{o@$mzW0=r9{7-V{)1l*o!G{4<^zsn_!pi>+wWXu z2xnF)C-E~jQw00?yh0r|-aBvZwyr=^tATdX)k&VA&RJkN#@(5s*!}OMDUwN(w&q6X zs%uTJvEpK-vhnYIs19(L=KNP6cye|&gY|y#Eg9>b+BB`C1LP#ex0TgHA>_r zZ4X!}1f)74iJ3=M;XUqYM0CMZ)O%5f*MRkzZu0XAiMRESgA!}Acus9PeVz(a)%xBv z4l{mFN-{esl!z(oZ=#!>l&S(krz8yPVkPLr6KS2H1EmQ$ru(>@LIIGUs%@l$YZ3I@ z+9pXq$arT&o%30$BVgRhl<|r0|0xHopJ2>q4fKY@k8ov^#f zW((Q5U2yq`eSG0r&W{|_(qY(A zo<$frCJ`=v>(RovENZsSD)d+T9W>An1DGrtzd?d2w(&_wDq$E)Jhk=jHJ5h{jPJ-c z)4EOBJC&PX`Pd6nO%S`;cdIRM@3#0vkWCijP(cz#HNbtW&R;T^4YjZZzj}fu}XQnx|Y8DHkJ85gS^hE zA7=rwBgFq~wuM|kBcOu~@w5MGLgvAW#cX4QA~@!ZW{xpDXWprFavwEpAEk{SEUs6c z1ju|-3E3VIRn}&Ce?V>&0UN|u$mK^9N_{ohdo81wr>wf$TiGNGZXKy+EChj`EJH-~ zAf_!sq;MCv(uMMiu-)GT2ILk;VgwJ%SgHGH!j%*%T6r6?im~k9#8PW&YZgEFwwpLY zrs&qMe4v=>5H*5HaCbL0SLpk=I6d&SQ+!xF!P)5}1X%)inkr!qo&l7FN~H3S8&){g zzs8&OA!y>Ltb`FF_^2d;7;aiLCVhDx(EaRQcAXrXTIt7X9RJ=m?)Sxe1}COuT)7}c zGR1r_sp>GAWgWdIV-=KFl6;jj9|mjdXpWqlP~yo>D~+axjXa?JH=rWFyi{wBpa{49 zkRve?HjD6iRZV#WG5dq&ap-MMG(=LS`s1?`GTd4HUr^QImz-6rEX^uVmlHCKNoniB z#Bu!Y+VwbSJdIIG2nsnp7|&kLKFZIIN6x8D!@D>f{b!8pll63Tedb9)H{TN4_`^1?JlSBUE{T zN;owCBi@*=5uZHcgdIKeJbtj+%Oez7nLGP>ZM`tZuO>jrS?r;}NWv@M#az`n%rq z8>!;`$J2xCRdGdYJrkuuh<8CGsT^S%>B%k7=BD?WQ=v{R_)wEVs}va9&puWNWhq|B zH|$=RME@r)wjKDOeIBx+AfEg9I!NA1zN;8FVO}*>m!H}4wbPH}um5%bNX$&_3lS9# z{fXAnKZ)AeViH7%Y(ntGzb7_*dLzJ3lH?tS|5!_f7poHwZ-91)>PcIpXf7uDjTiPe zITcwYU-rtl>4QOp=^6C>QX%C{8akfGq+itR|C5CtO(dEzZ~xZ%6>N45iqia&XuWxD z+GP9b5pi%iMK*U4Ce&nGl$<@{-{dlgZQT7&!BQFUnqm~O`<()g5wlp-%tdHI2i&S> z7s;>;p+~u%SPYtFc>Z9?-#D2SPH-ImP zmWVU&gWqiSc24PQi3LtV|5N96Mw}7SqG%!A8`XytouFYFifqpj9?bxMFvi`-Vk=oi z^rQ=4bAxd)=^vU?h*}T)MlzA1)$rqYN(zBWXy-K+h0*J73XVeHn-Z?DW@rB+*lkpg ze^?yUzHdTFP;Y#^WpzY_?>Fv~T8RwOkzP`e4fYK--mj}1;}g>6rrS|fakP#Yux$4p zzkfV2{EaG-(ChIuS}x_-gSmo0gX|k>5VBU4(u_s00)4+VTKD2h#~nF*Km+)e3iL1g z|E;zr@vd{M22a!AGHz7Vs5GV?aoB4oU)=w6;nn;9x(8CIsX2+_7R66ldHbKp6&D2d z{ZC=9i3a`&$i?Qy|0elv{@2xY3<174TK-N5qBg)OMBtlu$?Vp3MITun$$x2*Ui4%; zr3c3N>jG+2vvXYfr<5FjXs>F!a-*vDfrJq%V7{wU57B`dVb*`!T}IO3rtoqwR6acr zKdIW@DmaME$)RG9iHZIXea?p`dO6Uq#HaCN)u3l1E&=rru>FTZ(d=v@N|BWuYgl)8 zx#%@f(Lg4!$1iB55=d@uS&<2;qScA>JtE>iy+@Cw7sOBcPl@cQT(?=KQXSOL{{7ti zINC^1d6D60boQ@VD_eaH`)56DpQWk%=fO#dT6n7Nos&5{kd+l(tcmvh;uB;lkRH+G z^GuH8c~Fj=K+fWT!1j#F>*^mp@O9*;Ni6M$Wjq7h#W7+ZO#av2x>ziQhHXkexS|UG z{L0cffDnt91lOQ^oL2nj0MS59swOwfdNgxmVX?`^Nk&UfSv6@7sC7s);ih5VG@hWB(2FfQnLG6#^i*Q$Z>KnnRX7}6C9sZt zZWU{OHB2__)%wb!mXW!D@m+qVMi^Hft{4WFtd1^}1!#kY{Rh*eG^FDFLu4%a7+9Lz zv{QrBrJNljt_)2>O8SI&vOWL zW=hGyj)VJX#AQ=o$qR8dD`mWF5Nvp=PMl(*gJkg=@y<|#h?fZE@ z#<}zRZUuiiSd|fP#fI`Y9$9CYBHMdmDtUipldsF+A51g%Jj=BW?|pLh{B^x+xdBf`3O$8Iri8YY zR4q$+>jByh3nSvbH&68W!>$5270uFf_{yxLKqG zm>Of1L;4+|S%3pX*Kfy+MerMhlT-5RiBMj}>$7d)<*Wn`vnU!JO zEKRxjBoo_sdY7kI#>-sFAu6ssEv;@36r~gcdS}0qGA*ug;@;95_*FfTSSuT_Ask5_ zgf{;kr$jBUe;)_lDdm=Zr64&gZrGJzxTy{~@vPcWF4(^cJjQ(NOXAgLmPF(GP$VA9(rY?Jht?() zE9*6EPW!fFb(3k=Z36AP1*Dc$@tmDY(meG!uuX1BMvQ85i#b90fuBmMytb{_1JqvE zeAxJ0*HF_%`r{@p_(z<4Kj5%xVoCN5pzZjLHzdx8p>bKkj*6Tn=0W;})v z&)aQj9*XtXd@%})z3AWo%wG*Q0fFjcQBp-QKqisaDxg*bT;c`&N@cRZX?v5FzL#6=GSzX&oL!ay!Bo|Ek}GStJew|i)zp|W@`Pr(_n;8sr82} zxy68I7Vs)Fs5GS$d82es?TRjjP|G|D1n4W;4l<>5-Cxpe;lH$y`FsW_c))p#JS`v7 zYE)6#N9&`r%pL`bf6)v&)Ivu8oZNlGDE7OKigtnEXvPeJo_czl$hw&4;b>o)GedG= zTLtxO36z224E1;c0)Y5p?tBz8vz1!b+-%#{Xl}laRDGd{LmF@u#vT?TXt05{#pobqL9KNhnuV{)ersnm zUXPg^%*vy{6iUlZQ;95y{h_TnJxBmux0(6J%slT|aHaGMZIpVBQ_21#k~4?edmHe5 zsv^9U5}ZjE!cLafYQTCGxF_H5)VlKcd1L{!gKjLsb%y}<)nQV^0libFSX+=4S=-(Xe;IW@c#)hU7D2t4kMmS*hkLFx_Vo|D~dVjOd${3)P<^wSTLQ zl1I&!Z&zSv{{(+O{-2l9Jz|Eha_<3a_0{w6a`4uv@0_K?EWzTF4js>n)x?i##x*Qe za%aO3#0sb0tISo)3XCzwPfk_ZJb8!RP3uUDAFK{x-R zZO_HOGZn3^BtBQ5q6AhlyVNQ|a(PKE1+F{{H?RReocof^n>ZjDRoXWfng>07Y#7`y zCP~Qq**gf3ss?%;V{QWVvYI{^M*@<|23Nfbwh=*Ey${5WZ2^{WocXY-Y7L3Q=D}!G#{T^sHM*TG^$k$yt@~;huWJtIzL` zgI`XzJi(3w+@0M#{CE8nzR7AHOEbTq1emvGh<@KG5LajoTm!HA^v3RI-JE4CVo!nX z+#W5d*W1uJ@9Nv?r00)wb^)A@`RM#FW##4NoOH|d`OlbIE3W|VT>PwO1ivC|mrLDQ z37ZwEI_S<_XG41{C$fS+6|C-Etn{Mrdg`x$1VyNh!^siAgm68EMcjO^4Pzb{}a0HcnYvD0gLnO| zdN7Grd%75lz-mZySzR^KQC-0pGjXpv!2Q*kp+qbnvKr8_v!bea`PU3R;4yG#x(Rj#X(7NHrva-qc=Q61(L$=i;{90Opz> z>QG*^HpYj|s-gh%!rGERD2|`1tTDliq_IRYx4UuOO^~v2ultwkrAzZC#veSMmjp;IOYmA)8Jn>D^8p5=k$-5v z>dUm}E9<*+^>2Ats#Nhi2JTg-+tK} z=csoxl;|d~7=QJU_J9@zB=ZGgeGY!jejaB3$kMOsKmk9xN3#at2|~>qix(?-O^iD=rbW>Rc^Fv`}4bO82a*7*(Kcd42|Pd(6Fi z@!qK858$EU8n{c2zRjqv+bmbaRsqP>*G}#vq7pjQLOo@k{P}ibbf1iTs7|%@`SZK7 z`Y1`2Z$`{s%C4sby$9oO#6OOaXT7R=__BWQ%XjWQh8MDW#~$Qco`1-WJ;=5k(b*x* z;!tA66*JCa9y;q)=nM5j0BXN`T~>SbXmCJIZL#!OF_JWP3GVhj2)jHq_LaS_+i73~ z3YH*%W%x^g`=I%=ThIzB*Uei}kQ4y8j(oFF0DIcH;P2kAryuVRo4%fkJFLr(E@``Y z&0pBMr?t|`V6wQUb<9vq!Q9t$f4Y=6Rz0LweOy%im?F4X$-T{*B-+9iou;u}Hg~ow zOIo?Vc@Jb6eVQ)qrIb+739M9Gnb&YARelUKebsOp?EES*9m{AqeIMcQ7dNK-Folg$ zZkk(&asW_&>AH{FW-5eN{p&@A`N!_ zzZd|R12RZ1CMF2;6@-!t?^(RtjPBBi*0l%e02vC;NZ93`Jj z-lXDaPZc?@#dj3F#vjsqxyQ#Nf12vIJWo=Y8>4PWzF;#^fz0}nU%|fT#{~TS+*Vx> z1$5Z2%;Euw_)jiE8zw6~9aLfT=4*GoIanFfF+BHCM33pd^2Lo4H+53 z?W=LBM2&({ZoU|)t52)dx51L27^b6O%JQqwB)4RgpP+ghI>Ga{S2n*7WeAQ^0 z1H2J-7#%DaO;jfOVJXHbgo@8)0D!2U4x7QWH3HH+h zJUq>`TtAiYnW@~lxE)m7goZzNG2lZf{Kf7Jq--XVWlw4Q4|SLm~eT_(nRr%<%6 zWnN|gh&;IQsTqq>VlkeG=*X*f;eVha!61KaWvKPN=uLvfKs8`j*neSp57f=!WudIN z*8kB@w6#Nd|)VfvP z00k74^{C5<12>m$x;ylSOcC$_y&*_${93C@NcZe=XcO>*f1GsdV)h&cO4L6T8&BWb zh00sK{nO(b$x~VK-dBX8Och*?B7hr5VW}LGO|N1Q@vMW+@r22WB*5Sos zS()zUeY_ll>zfKk+Io)MEsk_hPPCTF z6RmAa9;O9xtv(4(uu|5qB0Z`&EFAxQu04jn-!N4&5#H1i44G04@^_K=(|D-DyUi~#%5&PjM?fnVrM=XHjGy6VIODz5#(t*L;5TSiX{HdZZs^8DTQ;(2$A35ankHSbkufTPi$Jlk>0&@jj4 zqUvia`ZXN4^2W0Vdl8h&+}K~Pu4c9GzVWVqAC{}(Oct|3m%IPc^wj@*@>50J#CfqorA11?dqahcO z{hQhE{L(rw@!{9vHHWhS6zA1O9bFHU6+m2=8}oG%+3nSHFswZAg?< zP@FeE8R~wl>i8-DDbr7@77HY+;!UYgJmNiZ3FPCHw@^%%nd|y?%@S?EFR%9l zh!!5F;d`#5H|aOcroJ%G{EI6t#4)q9iLSew<*8Wi;pVE5d2@-G(&qdmjuiNfSGQYDonN=NFhjh*&TKeAF+S8drakYWw}QgK&3XtVhIEf zoN|_-C%w63d(KdS`}Um&b#(n)v@pfXolY5T7?JUI<}i2KxzM86%SVo3Z;~6r5)K^{ z_%sTp(rrJ)-@V|CW>bOdx%>`W|1@NvO$T#Bm7XUsil>|Eyi5@pzPv;x3BXBY@48=> z{u<(PaUeDs4Yn+UAezE_I$BCQeLTGmzk2*M!`;G;I@{4@ZD+03-Auf~XfpK}Wn+Fm z1nP8M-C+^4m44N!J+#|4IVGypRQ$fHB%XP$Xqr;(CXAo$%Qz6`l}V6Yc}v)StN5`>m$m4MpTnw^aqo)TlqFtd0p2#KB#I{bLPB>7GTXbOvF2vNJfE zkbU&^D|l_?^m6SC>@Zaje!iO;wv~^2B*ZiG>3M zI7Pje2fsKU!4omd+bsk^7aBOsG~H>s?Tj4-Ja<2qCUYqWTz*E^LVqoYh08w1WlK@c zfFbtRzb&@UX5tvt6)^zb$i%91!bjtn66mP&1D z+g5>g;_Y!F?eG8|*_f>EDsJ9x#QbO0Y!V(w_h-Jr!5Yf#DqS^~Hh@uOzCg|Lz1x}l zLY#g6f%da)qgvgKmOsMvuH8JfJCUH7KsU0lhcStEPESW!m`E#?RNkPhNI8$NT`5Xi z&wMb5Elq;6@u#Glq{i5k_r8B=v-joxP34~Q#`y#B%e`z83zC6L=3o1Y3{8L4F3h*4 z@I-0|cm|l|Rh`dvOA;Ck#8kf%FEQ=BZW5|{2+Zb&^R%_ovAWE zZ%BJ*Zn|%ElSHoBKa#nL%u3s$uz=$I%Q9xl(tTQc2yFv&_kkNHW?!P%S=AHfVu)UO zc3diquh4%gEW;}Dj|6WLmYE`h=fg@;0>l%N>`$J*Sf{w9IG^KKCifd>i)7FgNIx({ zL`InKeK?3?^iBBlQquA4NZEcAd&-K$f|*46NIrsnIdn<&$)7oOr)9Xy_Y7{GsQtGo zb@PdNtr9b{-i44g;`D93?!)yg2dssAf}&SZTNsnsY@|i=%|WAUU)4vntU|tGEJpI# zVywL7suM+Qe+1oR)+kdezn}6h;tUcmGnTb>l{qMp=FDd`tQ&Yg2X7NVymC;!@7!iS zEgogZUlk)!wB&^+LS?t%8}0CB`d4`p!}6?d2dStpyLG18g}Vs^&n8D{Hd+uw9XrLT zc$&{$^PdV#yDD;;PmDO#D?-G6rzd6Da`kr(2PKp8j@^2s^f604j?iwbgaX*%c+H#w< zCVi9YCe-}+V3wxfnD_D7tdY!Wxg+V@r!O&1oE_|i36o6?HE~PlFx=XnIjTRX%_T7x z|7JZ{94E2Hv8ao*0FSlq_DHx9&`Yjf7!*$BH~J z;*4=WaiFqV&GVuhy4mNzTZ9XD-VT*~3wU++M+uwYCc?AERQKvNhcW^#sRQO`?STJ|NTpx_{G^;0sPb6RdrK%k!t|nX9`8+Ad3p zmIz!++bXl^WJrz}V}wkkd*3|_t&DKA^1yU!v;On%QR}KFT zcJpgw{R-NWUy=MUblWKyKgfe))iHjlD}+9{GiK|P2yfSGw~O;R;HY3$E%E%a6q$A! z3|ROL^_L(YE)XrK)Ldm@4pP3Vm75B+xV2aGriq-1&tV~;!nm&#Z{_=8`Q0Rh$h?$; z!A9V$`0_}6;Zbrtkz?fUxlVkV@9g$^T*pwA{Vq)nS%WZ3koX3e+MmMNdfwsgRvF37 z_;-0^0Y^vD*}N3?~L(=5U6cSm7$Ot2FlSu;*zRKgNj-8E`-JY zC0ySgsV%TNNCG4Us%Iiot&3!j<3p$zxK?!;m1VGE>m%3`A?zZLIPfaDu~{)6;joix zJZ9xc31g3=&@_XJq|m7lm&&HF^FY~oNJ};JIaM@kT$g)|4mW@OYH(fj@HnL9q~wXU z5M{sZW{$c?v5W?NJ-R!$ystMPuAYLaYX0p}KaSoeB5+_YQ(4YfX)@)GOJg+Wzlc^& z`g9vy|0%?6B6KFnowVvxysbhh_dRuMZ=H7*i%0$U(B)qQ@q%ChSs96er-g|Pkv=%vvOQiP zXH2n{D9GZ|!W9!(Cil!4Q8o-#&aV#vi(~9|Q5vi|LVm6Atw835NSHt_eLpZGBQR5_ zurM-4?l4Lnchhk`W0o=y5`*HfP4U<@L#H4Y?XmaKL1Ev@Jr*DuOQjnXKgJK;5SlnA z?GlueKG^*5qut{NS7yI?w=RFTS=oM35IyDCg}d$9V+5e0&ov2Q8@?x={Dr!ucc(gx z1RXjKB&%{iU#=%AaIA!+;8^>PGcG^lK2rV*T3?Hzg2FvBYB5CnUy<;DP$W(W{V5ce zWgl|_IQm{p@5B02lA#9h7>zR=&WNdDv4UvE01;>4&!KXl2qp0CvUkeV9nuXJAb#$F z0XC&YNHc2WVZ)glBW}_Mz}sCQ>yn_i0CC?;{V&5A9%~4u94U4#!?9}Kg|A~DziY=Fhh)(0i2Yz4c0U0B1mrf3wX{&ur`s_Y&-Pv~|r*Vi6I z#g-n~=(6^m;KuPDadLGJ>Iy*mv}9I1v-ZTTKNyV~V#(UW@33Qxn6dd$ zhd>n84T$~9xScN&7XD`YGj8Ln*rWm)FoC!!HaGX=%}`u)On=2K4B-qMT!BQnJpzYB z=l`0431h@RDk`@0ugE~N3A6Dlh4pjhyF6&+htA7%>>v8CGY$d%ysLVS4J%x7-4Jp- z5O@C!ZsE3P%EO6Rw7s_Z2B?76fK?)P$bA0J7KHQ99ws2HSc{RG@^b*e?s~)6>MyE% znt1k-FnfvcEaxVAh=7|H2@i(+_7-0^E6SIHcQ+xpUtyf|g5Q~u_nG}ohVW~jASHyI zH=u9$uo3)9;fgHy`b4DSbTl)8k3lda>vyajf5((eDz{|x@5%a#j$B?1;{P7xni21 z7a99COqyA`7fB&~jkiuXLNLPB2THTjNK(>ON`Lfag0mtmjrWU~#v#KFZRsOpkKRFT zpM0_Ls%39LUVZD#LCW&tFLvnW!_TG^_?mBsS$HzEw%@U7vQ%~6#{%g=^FEKhYEVF6HG{X{7n8+`G?MDITykpR>6f5aP8P zS31~)MN}$%(kI1&X`lfe7Y2fHe{R7f1KCK^If*3L{DXK97zDz_gySMWxF8rvvw8+> zA~%W6>AL&j54rm4;tfvFXFdz&CtQfQP;5WS8_KX3@d~Q2fMF;G-Kk;N-&6&}>@Dcs zS6@h&A$}4QCUqN2ygW`=aYs$S0_ecd3~M&qvwZybMj{iP{(S>h>hL$j=E$luepDZ& zoH!^4YnnY9X=!{>2i1KwgM`H<#=(`@a*!2E5}4l=ocbg=5i$4{e?DwuJ)Ho3!~6uL zgW)QQ>8s(>!H7$Rok5bgNhoXFG+JjD7_O4A}~u41CN(Jf^++v&;2#Rj=Z!1ZY;X` z1PZ55;2_AL{bD$blYwM>2n8_mVA|xgo_BLZ;i}Ra+O(!Bj(D;yg!Ze+lR~^A@oSuhdn#O}Pp3b_wlD$<0y6Q;q}dimKG6a5Vy2}IdAuQ` zdydC55=TSjMboJ7X#>4s!+0qx6Gs$71KCgSQ*SD|9Rxk#)|i%HB_!x%#N)hveWXfb zx{e^l!|F~Eqq)+>!8jj-QhcZiBh5e}sibg^VeHc!8X!zIZR=*9m^S>l6BPKXO&>P7 zWG%cgmy9=1X`1#Jhw&WN^JMEP*r>MwCrA#AK`!MEQo)#Jgm$Qlrzn1XgQMa(pvs?N z)-{aJ3e~}*dI#=+IKQ$^rZnZ(KPYSkKVURPkO`j@_8)H|rr8!_z)P(7kHG%Dk&R(z zTqGE-bbYf^yF?7GIPCPM7gR8d)m=zwIdzyLX|_iCrvC$L<^cD{xda@d*6d2m3KESf zx2)Mo)`Sn&$dM#SQ)`?e1DL=Yq?1NrJbU9kh6QK&zAZdRGa83!Tu=n<1D8OcHBr3s zEazR^!TNJZg$8&jD1&l*OG(ZCZ%{F~ioiC!K?^FFy|icz?lx@t-J$!HR1g%5P=p(? zDBx+@`LmozA_|CnAf}lOSOKj1L{}6zG_{X2uUY3LSGoHKU9gBg66#fmxGWK%h=(!! zBeW`$DyWWro?+Jx`_Gp0GW=$HY=eEbD76ee!MUd15JlXEUL4xIh}_tJkKpnl>w8Ob zVmBo9V*Xs3RfQVXhPa6RIRyGT)th9R_$!rq(#BJ2#8IcL&>H%!!(x52lQ|tiBP`%g z7I_W`fl`_>jkqU8E(n=~6N(fKz-KZ?cpfAn9VoT!26?Uwz!{G@*uXOw{q434=KiahoT)aXU{bV9uI>g=jZpb$+IHB|0kw* z3xFBY|CivO^o9K-zGXAR#L4K0vKcJ330Q7)r)$HT%4)Moe@3L`syXx9OKgXlu8nAhxZP&i zzO>HRy*0{xa-L~pu~Fy1S)b%l#0(czVwBBbqmdHFs}CD^H#a|ZK8j}^r#;t>JX6<5XhUrh$(4Yru^J!^YTeL={Wul%MoU;+53562AX+BmoYKtZY`H)&W7;SqY(7 zAPm)YntTu$JXN@mOEEz)0*&_nh&vV>gn<1kfWrD+K-FJ6d2c8kGnRtC-{S%aWYbAv zi@)}J-{cZhFR%BiFEDTDRgBAb5d5TfwF!qeU^GW2tCRm_WvIommWu?odvU*k^EaHu zj^%_gPsH-`EsK8G=YZsc7AxcULF8S%9)D8>R*QJ6W9nwC0QOnl~ikxrq=yQGU0!1R4GOOU? zu<~^->tVT1g%eNo!c}1VgYtbP&_IX>C`UzVfIW??H)k0|33zE~^U zU$q}*UO4E917Rgs)W2Pi79oN{*{4F|1kUYo`7uA@DiJ@jmal_+WL;i~0Zc!LlBEzI zi47||J5e&WsHE5xUVW_FdACEbb3ojmi}+x(fJnh%W5s&+EfuMV;e7Jh>1B_#$Z;bw zpD?Md(~hg0rTgM4+nVhFbWKsbTo>L9e<25*{S1Wb^Ipo@L~ zsdXbf3Xh#Bt%+A~`;5Ro29)KD7e-CSMGjR0;4Df)u+Vs{*Vw0`lOj|t9NVq7lUKsu z2n_4(;nNWdkRNlC!h|uqH7vqhph*x-qijs1aC08dNFC=f$F{Ur3SDLKQqNcGw*%6! zLAUry82x|@7O5%8>TdC_%06V zBKI6#fHquFNUriDY(J&5EXbm_?@t7cGUCTCAJxTH&}&WWHSkL7Y6G-LmCz3If>3`E zia|;ScJ5xpTe>-B@gXk+z6Q`}t&$V%_V@XjPa4BD3I8yLHxUL=WnicneLja4&4?Ql7#hhM;Gg-s;a2@Go$fVp?!t&>PH` z&oOy^jJKVT4w2IdMj^>`CiUa6@T-YV@*%sOTq&EC1jLqmoL6*h&4MW*-hEB&vv@GJ z?&Gj=>horxg-d@xQZa21iRBl@INpJ$afSTEG^;cD1PdWGix(!TZ$PdA0_V_Qc}ppN z4==^z6p_GeN%suffP5S!GFqCoOOe-y3rD_P-97?QWMu*(lQbK(ezbjRg^UL>ch135 z%;d8Bx-s%6rweL9pCyxIW0F~Rw{D%OJPW$Ark zpphFAH7I#Gq5Ml(a>X`e=|?_idjZ!RMVhS^%SL+^XKPBE(vb1B@9Hg{E%)2^)8aBu(mC5nxIPXz*?=_B zt|wTNNf;>v#nkkIDW=#fC{nQZ!XY9B-r;^nfOUb#0uY^IFQ=~Y4YfDx*X2hLW?y-- z|IHZ#+m--^#%6qcQCUnfn2j)u#ET|Om=F^I#YG$uD1j10GM7?7L`kkO-0RUc8%nX_ zbvEMVrgT}-?eKai(iJ6$cSo2nCfJ@pJWoL{;_ty&GUASyom-7x4?XqoP5k_zSTc`O8_ z=mED!QbP*>d~rn0T{_2T{Q~OkEsxrRqfwODPD2?p=_|JziyP&ULJSwW_<|1bDn00v zdF2+>F4^dqjd3fp&gz@s%(I94P8_Zf1Jj_dPnoL|Z{JZWfHqZr9?933@WvQ?TKEZ) zgnYjU=flVXSy~kR<=yNzZ>_en2lH2jb0OTN*&h;*SXR~GKx1~Df_QBDm~SRn!T4gh zN7s~NQmYT9&+fi}jE>1^zhQP`V(`G|J^y$Np#*GfR#yZ&YCS4(t*ue*@@|A!V&GVu z)9~5AzDioC2gW@JYBtsDg5V))sRgz7^`?ZHpiu=8Oh;XLz|?76`E&b8Xb2>P5EQE* z#1Jzqh67)~+a6@Dc?qZB2J!C|c)dCGf_*o#rZ0pblyKPN5nOOTf<{t!D{&?HJXd80 zXpYYh6gCRLd;GA~ZQrg1&K)Z7@Hsy=(UvcJ|pXOhp7d8Fh8icN5c%x!`0K zQ&{vtzio69IOXYetVTR(cYAX>)j)px8^Y}(wD_$4!FAR|fgh?s7gkpG2Y(y~GxnHa zlCzPE(32HBF#v)y*}y(xu|pU}s8aqfuHHNxs_^|EKWBCf#yo^!6}IoF(XU1yu; ze(wAAx}VoU5kI#Pv>9PM>!;4sOR>;=$nNu^u~5P{}`%aTA8_;=7d74QNFXaWy~jIK7u88R;9 z0Ac9N4OP^kE+VrClcQz8w7|g|o63g&w3C$R!NFVCOWxx-gX6`kTjD(0h^KW~#a)OG zg}!!AwRRF%7%$h6HdDpia4b&%Sy<^E`@Rvn_!adf`9rRcP3YJsXkxz-0J`It*Bb*E zR-YrEA8pjp=_L!~y8!+Hc&oi);+(?Y6XJGmP ztB51v*5o-`Unyd&>T_eQn4H7+C%k78n#0 zc*AYWe)8(%)w!^b%RS3IZyGYv(^J#ar&N`yl$5GUOE29~QoVEMPN0ol`ZGH_8`@Ub zoxq)gt8|W+YkrWZwhpG^fbMaQAZgXKf^dDW_5aV+e-8$W@&KO5myqTA&G*WI1u7l!@ zvwirOp|ijGL0UMV7g_ZuqUM0dhJp8DXa8WRxlRWbeBBp7=Xv9G>4Nm!f+D@~YP?Qt zM?`)>GNw7I_0QWGB?#t!N4q)Rhd0#>*&~+HB(}^TNM+7*&104ny0*S59G;z7Gqe@X~ zO(7w&JC~P(Gv718*A}&NTjYy^j&yvD9yq+$?6NVLX z7Ll=zSHcL!*j>=Ex=?sESSXB?TKye)SIb41`dh4c0jhG9ZLsnPked~zxb1?M+eyN{ z>D7#T_uwq$${cW!>A~|%yKp2O@cJQ)SD*uN3#_qHbRhP-@T%`2$g(BehoOP!N7{}~ zMASLfS<3Z76(X(K<-Vu(0JJc}FniscdlAczPm< z$d~6~5mlKvq=NH$h?(cV0O^-hdxkuqk>nMNcCKi|1siH9@WJirhk|(^f7#};H~@&l zTrx#CgT}@9HlI;BKLRBXYiXFG55U}OMZjVP9atP!#Zj$(?eajI6}-6M0?D!h_vF{X zmxl~O#oR1Xr27mVX|?a~fs6`t6yJLb)VPC{W9JKMMnB}sEKL6;@raazz=_GZ-XbWU zqiQqC<$OxN3@n_ZK7!^Hk#kD_I0H^q2rD>w+s+W?Z8x}jshpH44Z9oyFCd`3uF2H7 zTqZzxBW4zjQ|n6;!+*_HJ3y90*rwAZ90}a@;T^)r-{JbG59)9r^9+GW=WY=Yx?-%x z74Db`6Ic=R2(Va**tqcK42J`6JTvJLBdj^PHy_f7m;c-kcdj-a&3CS z_Uq}#geC)^pc4`=jO*R03P0r0A*fN&bSUxOfcd) zx5|sZoP;)f++iRzBn0qBt;{Zen_u9rY~k-s#lO{DbYL5ahHWX_+W7qB6%%%&VKv`R z)Fl@S{og_7g$PhomyXNP0i`7xBA-YYbm;yU@Bjcp&Ito!HY-z6X^EBlF+e(y0<>NU zv1E7qI?5Uk<%P7D#=Wl`rQL~Wb3(t}>K3)J8!1~k2BkQgZ?2c-MVZ(i&>G(naPi=o zqG7I6vKiIOiWX%{`}pG5wP*gFh(sl!1k^7YUXXgYRwJ>c|9z>&#U#@36vNXuqf3ki(v$6| zJlB6y3?2T2H+FE7HDgNdKWRgQB#DM5QFVwx9_MW$WBiP_ht!uo6`ONrflg zdu%8rNBPo;3%Rbe7+0O?qw}0MPcil%89h$6(RF&fL-#8kF^BB*N+RQ{6{Im&x9E?e zq(}d9!NtpnMzRTO*Tgu}T$ECvcNAL6U$qAH8`rC4+gy-M+;G{i4_PLkhKnFN)FCS&yQ&{I*y{Ij??wrcu- z!2z69UM%tq(xIcG%CNW!i3RiIme_F$oNah?%Q3@3z#aeRR;TcsZH||VS5WKhWktO- zseiF$)KA z(67|i@IeG7kKK|nwd6WyS3g+yTUB#B8ix`k9AKPQ@PwkDbvLMkq)0hdmLCrXVi_(n96R0~#>?OQdi1uK!!My0og^`RTJK*?B2wLs-t! zWJ)S3@3496nam5WvNI)axQi;y#Y2*AIw@5!w*t~dwp5l=PS@Z6uMLr71te3=m3%9h zfq!jo2HT&~hU1ssj6A5=mUPqqf7ax<*;zi{S(KvP_&T)@!{%l>d4DQc6VL|qfZm${ zp5t`W@Q8M+Zl?pjo*0pZtV2Xu}^h@tEGht!~FQ`!kV5HGbWALaG5mmgR9Wij-A zrA{C7Yik>Vr zZ|#4NriZWr?z>RE=#TDV4x{>%fhleT6CH`MJ8TrcW&~*!ZVq?k6%juwr*7#oCJsb* zjp^&ccm%X!!dv65=9SNx+r+shydxcFgDS6>Mfo|T*Yg;n#(vd34jZSPjjRmjOdO|I zlO*!;Cul@2iVGXDtn$GGN4&rWed?T$`~*Kgd(+{C6EJzuwAjKCB{9Z{1stJ@xL9U( zM?4CLZeng?)}vw^F-@x2NK4+PwXa?W#*xqHj~yWd-+hMbP_xsc>aVW_zWLV5N^yEg zqG6z11?7y=x_s&oP~t~E5Gs!IJ{%H8MlbVb_?%@qL_vg+A#qM(ks*#HJIHkjg%20( zh`YiI7et3!ceqk7diTtHX|Fk}7-W>iBb_dB!i#3{j2eG+f-v3w{unO@}=OzbW2Vf!kG)?$$RVJ%T+@Xs$N9n>*G zrB#IA=2aLH|HoteMz@f4)t93vmV8yu1uf5>_QN8%7gL6=;9U|OE( z1Q9v;M>GHMevl=2eqE~|4X!Gy6?#I>v$>I^b$OlgeW{+GgGijise5Xe=u@UdnE4Z7 z@ZziyHQ6u`Uo1+&Nhq@#j4nU%2fw3Tibfrc{`bb^V1O$OKw%j`fVTRF4xkiK0R8tU zfD;919eaQ@FF^0!0A#QLy=M*hx_*NHsB4Qy2HfeSffBqB`rh!$ac4jxAavR;53sey z$qay(rv(XpKuQ3#w23fIVzEH0=0LrNnK@!{h72&qQ=g@l&h82 zWVisa>rs>2YZQ(AIZnc?bRA|;>HP@nW%MAU)-75MS1!^5H;=KnpP(TCBTd z%LPJ@69Sx>q>eKK(9((@L3V;AHg#T&F+2gl{Pz)qz%g_5Uk-_cQM(HqL0+aR_w_N! zaskjr`%b3WA;6@8^!)*3Yr|Vu3DA2_sN<93rk}`Xg8H4mf3=P8o=3i)s7gdJ z%KquH3GG7Y%LxGo9mL>w8JVEd7?6GqbnKs_H*6J$JqaD#!$P<}48enT(-cR+i8*xN z_@)7wpqhSV)GAZBnB~k?w8I(0eKt}R9M!88>+_Xf0#0noD&9XMOAk&5_a9V(0^`gx zkfm1be-0!CV5ByE?TAnvHhn30{l)ZN_QsGeeanHA^I2L8h_M6aLlf7!mLopn9|ZNN zfh?=qC?{3IyaKR((0_2hdXGB{#6AMjAe+hXA~paE$x&L`x*&RHG*m{LCnpN-s7Uz$ zp<`A^7cO}h*MnscQU>Xen0p^8RBplD_m}Ga_ZxH}5$V1)QFn=%`h>i95_tG%g~{u5 zNAkxs1l=1d-*N>KNk#fmLzo@|mto~B*aEsO8_BGl#BZC^oOm1N3yv{MX$=yO(WY7I zJcFaX4XY|KW0Rbn-7y)aNaFn&1649B8UTLC`nHhRBxN;g8w}@e*)n(25_UV>`~j^* z2WYnl;d=AIm$B?&x(9@tieEjjWmSiE{5E@QMA}~w0u-UaO4AfttzS5(dCezVdt+*0 z%gg~{0l(Y{`nUmhBrzh$;JqjfewzLDbutW>3-#CwJt#_$2OC_r+p_)G)r#@b`6Tiy?5 z&2hjxt*ebDPX!^jbVMj!RN)-ZcLN?zbe?BZ{^&7+lJj!Kzd>rpQMb=P(-b$^L__?; zze-J5Xkf~<*BG7o41IsD>~>v^dP>tkIP9@>3_xEZDAfyis^5_{Xt43ZRe=04sH3rg zho$NILv1D0w53=Dh;S*%hsqk7OU?~)qu$paUDR+SvETfj`0*yMIh&>G%v}giJs7L~u6t2b+uJeGJgAsuG1A?<;)(?*o^)B#)GU3UrT4j?r z)P3j61$3U}yj;2jClp9$B19MoFc};2Zb1wG0CVo%I!^h~UEQ?D0hypP&pTe+@3(Aw zFUL#bd8h9#KE*AY?mL?fQqP#^c)3a+e&vd5{u8K}F!lHT@;t*wg`51!|2tUN$O6%2 zR$`<_qQHwro&K`|JSNMUJ^F7|T0+hNn#UG7sY-lI@kNr-_2`f3;u-GA zFXbYl|GAk2fM1?^j@2+;u9QuJd4H*Ndq|QSgL*%2CtRt4r=Avl~D9XgB!W*4mlK@NS`Hx@9CpOYFV<;;}P%(|zPc z_s&VB{q++E^mNLh`O%^B&y9oN8K0-zoVT^R#M>^7SvJ*5-h&e}suvXodrPyQ47Qs* zmQC6CqB0v2;WPEY`+0YU;aG-iMpyOEu_8Uc6wmyf;?W`IYRl&lCRfIG2?O%5b7O-k zDX65H!bOv`WQK3m(#E4hW^m8X;mRf6?NKJp1h<@MlMrtV($fmr6ECC%(~mv(&DgfJ z=-D|#N^4EZaD1Gqr&Tz6vErtMdY%pl{D%rc;0S8fp9i7rj$|pElr&oBKibJK5ETvp z$D79tK8fsb#tBM=9iIIAuI9Rd_KmQ77W?RsKf)|K&;k_8!*w=H_vcVYNfy(L-mzlj zS}pA5mF3#e6N{>$xlp4`bEb~T#l4`qAV;U{OE?P$TG9cD6n=0TVO_~HeKm%Y?Ql63 zT9N~OE$sXC^TsL3pq2BImubZ?Uz~8U1eVH>5idbXJRcQ$2En)mi4yF7rZt@$QU2=* zRIywJ^=C1;%a%8^;36m0M1k_>6R?(a;r*{)hFLD~+R?eQEM0XO8%XcP2i3l{OD4vD zelidq+8 zZc9QzQfT{$UDgk4q1e0f<&jKlq{c@q{~WuO^e#O{`X4e5k;w0SNsN*r+z=e+<^fr@ zl#R3-nfU;Bl~+6o_<~v|4+pNr6!L^~6u)pt5iC|zUzmqhcHp9^Fc#%4(%bIvO1}1a z5K++NqL)T>vZS^t78y9vP6m~O+l(j5KT|ND%Gh8?2be3eJC5L>iqr4=4&Glv7n@PP zf!Ol!Q6}Wi1p#cVx`)VZIHSaFfxBz7O53)YMI`KuiIg3Fi8)yp!lq-gmsNR6=#~f` z%(%>UC;Q8Tan+I+CQqH=^*mbV%E;}bPja?`A)g8mzUTWynizbP`FsPBr`w8QQp|ns zI6T8DDu)kyk6@m_+pHv1$RG*0n9~`SN)-BT9dLzJB=MF!uXr9>c;--7B%HGBd>*f)L&c#P$-4f4h2Nk?kxmIw(ztBI6-^dlBUZtO{d zuNj~3rUHc@i(}6@uO~QY!(fNcy-6s%e0lOjvt!OG;%zuac~MdAx6zJ1QA=~O-7%+l z)k%lY12H4`-pssLk^Ms2mw?LX*kn7ipS^PaKBl7UG5Y&x3a3+tB(k9EXEl(;Lq&iz zL!IxlmUwY4Ggf0}P3GbGt0_^(yo*+BU7bqKtoT!s`ae%HU&<44V{hY7EBV-?5;{G* zx9mdr^_Gz{eBPfnja+R@@5&38MXZIcrWYTp0Sp6+b9R?G$^ zze3NZZ1QM5;&|MMT?*`mE=*E=UX4f|3ll1@dnD2=I zl7*%czMdGsRaH*HSvSDNu*N+(C0U%7$Q(v-yqAQ_S#>J~ij6UgP$^sX%ehxeStB{AJ^VmU1OuqxAYE6MR&BUdx~*6kW?~ z+Pz+@cza*D?~-q_5?(}X%5L&`>g`*VUcetsCFxA8((vJkz7unAtZ9m9pCHUm9X0`xZa>qOSyE#Nie2 z<0u1XrF-%?XUg(eEL}ZbAsPcA;Q;^x!yQ5%hy%keNdx(ckdO$%&q>ZBW}VNs(gkidye4@bxkM4 z)+b183JmdQEt+ME^P%!w2`1&sBtynMYc1pNj?tlJtlvLTeG${rIdK6gBBx;{(>F7- zUZY}##XQhGlomYyrDkGAI2lAjz** z0ZSd%d5x$OrdGkLvC|CDntl>Psi5y)>d5B+$AxORk^|%8kupU~Ovs3aqE6(+axs{Lk>2QLue>E3lohJtzq`hMa2hV z*vo%B?*tcb4^tf=sxA?v7k@=C5j@ik{WOI4JZ#v48ut_F_5=KTKm5}I;)n3%H~hXM z!0q#n1@P1-JS1~i;hiBek9HJcW(PKX=Fgi=$cEj^vpP9FTDXyjF^(mH71-gK+l1n? zO)>u%^zXfxE+!xC!0Zf9V0j&PV38$BO*Cgf^zQu^bHqjHNblWKl`DV9_}ffW^-~8G zV7Z0hW~e=@J$>{~?h73A(!;8^XaCo;dm#qcdYu!?DG>!e)!uM5VY3n!GfNY95HaY8 z`>*wgFH+7;2aESXb3p6ZxAS5bE5-;F56w|^A1cQ>QR;9qbClq@-|7|Nb+mPFD=8e6+4Zv)QOuWuHKC`htD@Z@I)?Z?`?6I6WmZL(F0 zN|fck?-uM}znYDHPOe_M9z2<{;xkNrsA#H>+Mo(MyvtghG4KBZCBm=xQJ1B+AfO%8&|!-0RaO zW6Cv;&e_|KJ`Xz^m)eTGPm_F|TK&j}_VyC_dGWE7v)HjI0obCCppA|gZH)^Nhz^ia{d*;MQ#hecDGcdQ#0TmzL zx&JrO7j{q5x>i} zto3zIiq(KAp@%ec>3~l@^eG5(SH0vZodbj*?5-oeeX{zwQg90RBRsr>S18b~r?XWc z-3d~V3t{{*N&kRNY?#&y39wY$V)=SxFxHuJ`_`qDChmf_9y7wOHr%I4M+hu`a37j5 zLTbUbli%?;_DxO0A=`n|%uH%RZE8R&cw`^fewjW*XJsH{?h-yXM$ljVM2eGe55Z6; zG8MEaSP?w|C0xMG4+2#{-``>QG=@nkT?5)9KkW;0y;jaKdUB*bod1^m&X&YI?Z4L; z0KHx=`Qbsr>L4nomszTJVDm&4LzpZCI&;g1)$v$k;fv+&!*&c*yaKO zb(tChS-=<%fr7U|4X}o-V~TtaM$KVR0|~}C_mNoXX%|``8&UaFBS{=u57P}HFr#v? zbF6kbdaTNkF$=765Gr(ei@+k5!_3qQrBopK^au$I!0Zx~%mGII&R&%RT97#1L>Q%1 z*eeV`JA7axp`@O!Q9(lU$n^pe81$x+benV6I+%nf@xJ|dD*J;yxMuxxx6SE@^*2jD z)bTp~UCz%9^*Urd?a>*jHdaP}3qhJWATdDFqSZHnJLJGtlKJi&z2_GGS0S9DFB62L z(%qge!y%?OpdGzN5_|=;oU4~KTGDZW=b2F_SNH~R9(13BUpnhOV-kkcAuUWQ^?LD(5^6zL;+)Sn=HHvIahQ8;?@r|HJhw?ZeIq?l1H}#U+P%u&WoR%AFE*+Wd)kSmhlAcdi#M~}PrZ^`we3ts0rpvyP zHfCD(j>Y-0f3eCiq2#k{|J%ATR{-Dm*aG*&(Om`N(MvWou~Ku^!- zbYbjo&9;(}s7YxcDkex5ddy7RQfy0(z~;pTUN6qO+@%dq9>(9$jf%2=M3gYF1O*vx z^29Ocmy^y%8rYu$fAUz^qnj0QcY7jk_^#f(oYPiACsOh~R&QU%wWZN5ABQ*fI{9%j zO*)YWMSn|ij<-Nc-kEn=iti#Ldvts;Ov&8*tpaW27y?t9f-jrL6V59~k7hV`QPswA z?`{dUORj!wJ02h-SC7Zv6VuZT=-t)_q(I~HleA;xQkeSs zfaJ4;t2u;L_X|^)kHFzo*1D83*76!6;q(Et_^Y-f9}WCAER6Yg1b8g51_cmFN(a#A z_1dI#8rU^1oU?R9a@|Ja?h~mM2hfCf+Bw5Cuyu(QyL|*WZ6jeWL;$~oJaiWVq-B z5F*1#RhE)G<#_G$Lx>%J>`Iu6EO59dk5K6M-O&#izy2uJhzukThljil(r^) z8w`)Kg$VU9uS%Ix6XPPx^I#5b%%rqGPzj4Ad6)?t9+YZN;5E|+%D@{LU0_ZF^1h46;DyX!`aoVr-xPL;4x3rMfq#KW zky$WDi2tn)NW8(tkjd?#cK5K~KJlZl3o-Shp;}r_Mje9A*TucgTY)EY=bv`u3vJmL zl`*=$*3uaAj`2{?`a;^|7d+$cy?)3MdZ8IKQvub0f(K#Ua(ywRD3JV@V(*)|BkkyW zC(=8I@KAZS|6$9C2Ohx#cH{GnJpba#&J)CDWW6r!_|vXBjc$t%{Y#0HqU%^eGzR3AH}~^s(bQ@f3odM zc8dt+3^9wB%An8AD1VWVYQ9D983=`m+k_ftAgOxh7FUik9!8RgB$=_sb<6_Bu9o97 z6@hA43&Oa@;?b-|P4E(@J^}@=z$X6ML(=@6pc~HEzTYA(4fz)L{ZN(VmQLq7J)x*c zL7(?1_or+fLaKqNoCTW)uGS@LBA3BRZ`-jy?gzxFFD5rcepcD1*nGVXytpU{MR{oj709b8`nM0S`F@w zJZz=y#li`BPQ%>(?_PO-eBR?3qf(TeR6j>}vhS5kSJnjFl4Q9<*eSE=xAvna&q>QI|J$rm1c0 zIJPsWo1UoBbFLJA7e~9eSkce0ycjES22Il+N&w~@uZPw7ViH6u#gx;G3;v!^qfZ|)ie4&(2h>F1`(tlK6W(DTKu<@{_0s#yw&Q!fM);wgKn<)JgFJ& z&~uug(a~vkzlVlPdQW3++P@TbW4=vU{Fcp&PD&CiTKe(IiWVZ9xq00+Xk$W|-0AbXV!lKy6b02AMY!z&n<1X|T=@r$Abyjl!{v0)*@pq<~@7;h_?c2zB z`sNkjT1vV1{=uEKZ*y_sBj&}vgzyM`z?XwWDp6r4;qkEJoCcT+8f?KV;V~dAk6EmH zvJA1;=}lQ=ts26o(!aDYi;7iP83ug;jq6q)yy~i2awR~XIpWwlTvRom9xg=Xa|vD1 zlFt(>m&5EDcQ=!6r9$gxg{V>f)c0Q5zI5_^&1NF3C;!^xgtLt8Y-5i(gYTk@%;RPq z$tM?^-t0>n87s$qSGnp|L=-RHmK;vGb;Ix2hxp$&{0wm%gB}wJ%&aIF2pk=5uk6qP zq%ij}=yj~yz4!Y!4JOGAIh_7Q2Y95Q0I)l-0myQJ0DXE2P-X$>O9Ox!BLJ-Q0_qIF z+Sm2&)gBe}zkWPBeQpGYgBX0NQ+^rUb)Dk}*^D|DN{uV_-DY8zbe*3;{AXLZZICCre>? zGXyRVF1c;1z12Yaq17@A$5sB7H_2Aqg~|Rwap|w8=JO6mYHJ?+KK{Wfi#SzV)Ag+F z*{GqW>?Kp_ONtxsDv}$*YZTa4-i$wM(9l2r?8$?`OYGT=FM5AXoyks*4GIcOd;KUq zHYO%!r;(_!Ei!X<>iktPQBh}6=an-`3T$i~N=h$ll(N&};?mRh%Kn|9-694HA zi9Z3B+-{aV-Nn(GlH)bW(Z!`@-Q8uSvF=65Z8M$BHc#yAEYCfP4NR-4;63)K6a%1j-o|3Xq@5Hk<=L)HZL&|!0AAY;<;qKvqVtYFddHai(Z|qv~ zfA;-0)%cap+uPkeyglo;wsb>NY1>ukn)JiU%d)1@fwAfIiHft^L72D6l~NB4>>L&c zl>(0Y)1Tnu{y>kP^r1Dj9?QaKV~zv4NQ`bQ+kfi+ZkqnL7&AmYOa4#k`){3`Ao_p% zDNe_&F@s1!B;_ePevr&A>O#XEv6+-!WGC1+MYk-2;5K zR<*9fSe16Hn}Pl>1-2*YBRGGvfl|wYcZ?^YeM71o(^*BO-e})*?kZ>tE}g5Vim&{T z;;SakZP2@x$XB(MveO$Q&kT4SBVdmh_d-7nFa?aMe8##PoK~(GLkElKM&(rsi82E@QX!20=G#J!|34h2_|2_cNCjzII!5 z<#v0SHkpNnb+|CQ+x~9*F0bBFu6R;3Z*BLSY^_w5bY7mn!l2pM`Kuf@mi_2Q_nW%A zk6JZ9R7$xd#udeOHhZLKTr78T7dxwLZDV7tH^9*1Jvw>O&D{uJ<)l&;zua@t%?0JI zVz^;+UuY1o@xlLh=S00gvWR^|W!@QQp-HEv7Gfth`8&Rf{Bfk*$<6vyv7!>ct*x6( zl}s&Taap&wH80!OI{D*1!7d>sqja*WR7Q_rZCmrjn+0R}%!ZfiJHWQmM^p%vAc<@SDTBNC+8fXl>_zt5>6ek~+aBNwVxT(Ha z42t9YX$7h8NDe}Tu4wFCPwrV9A{-lubv_0N|F3``2@}2x{OF3QSbzM|vt#5uwPL2g z!1f7~<@vS+>pdtt9D)9)(bTHK$b!PO>0UYCra8wNiwY|LR5uo&+9R$x@Qoz2bwZH$ zDOZBZ@R3BfI&8o1Zes2uP-M3BynKfK^^X++K9R{*(cgQEg`$X?76W3_ToX@95*!_u z{yjM|cyW_Kg33%y7O-j%vAG#U+g|y$oe;Z3Na+zad)@I(<4(Ac`RN3&H<3R02mboE z&ty8=V{hD43bh-kRJCy}P9~)ez{dN#-go8JoSSgGg|!G?{Cif7Y$5w+_A4#B<9t*_ zUy1%j#0`qy>4axez-i<?QFh2mu-zt`;%dVYrvAf_B{CIvP z*!G^Zce*vta1f+4>0m5UU-A#=rc&gA$>iy@z6r}SsmBRGgUNGd^;uJCd6h#MqcLBE zAcfbYHpS{cS9m|bZ-2SC=8$|Z>=kL`s(7zJkC(px4TuJP2DMIL-2L^z8p+u?bmk7) zTH;bJTj%pkbC{c(uZ6NqL5b+pwWc3dC2UcvTl4zAzu5G6qLfl7W!246Y2jKeFzhd2 zTNy`!O8vw~-x)L+v>LjMXpKz@HCPzl-ALVg@7KfrEW@30CU#3yss)|v|I3Kc^-)lb z$FnL>*P^f@6rr_OjJTn7WvA(JJ7LicCU-illlMNvVF`?_T#Jcjldt|s^ zX78j73H=fP_8XK#H2Ac75*$$oRkF7*XJ6IdhUX2PGb0A)vs`Z7n(WPVan;act{50z zG^%h`5}Ve+9+22rN5${KDMY)6?|x{1Jj>;WPUYkzgnUHFnKR)`&n<$m0O!A}3^#8- zPK+q1P4;-hHvRRtU3?w4ZbZO?hZk-$tGVcm8iFJ6m};}d;mP?wuOyVEg64Qtm~|5E zuP-Bbwz(pPY^I+YRj&vh3gUl^>GJKT2vX~s22pGZLgyjX!7z7&&528dN5nM6av!7j zw5iGY=M8Ww$-R9^*r}N-6LDtb1EleMoC=?8N4`pTqTQXFf8IDHe5)S{y5|AtIuOoq zd|W?`e-To=9O#-ivE>$9w1&B2)^)Qi)*qYm;L}NDJZ zvm6h?3}-=e-0RM(Q5=pTVW>zMAotqgd?lW-4K&UI#*|$>T<1rTw#-YqSSbgia&n6`wl7iyH_k8*|-2 zE%w#p$0hWsgeKPhTO5TaxPX045u;|3^gD0iuWWbfwW>@wj`n1~v7MxFNw51^fpWKB z7r$Ne^R?MvZL29)0Fr(|-+vwpO#ILv{;Hx4@aR{!=@>VKW*k0Lf~U(en~J#NAZd+r zPm9=~Zv1zL5e(i))lo`xO^2ffzCZe;M~h?)nZf6>&VAQ%K|YTb&SX`X{IH77t)yq8 zm7Uun9{0TmQzSeuysI%NIaZx(uzn}UJenZbN3&F_w%VY>Qv=(zMa%aw3?hX zCf+ajRxFFdcp5Y&fp7JTCFchbsAAJeTX-UW-(BosrgR2o={9^{g|Za+uFUsLaK47G zw>iE_EY=7yoZ(I2n#_VWyGWvJyVVI(UXc9LvdCm-nExKq(1)q)E;S_bXn1{10kR0I z6@n`H^MI{MPM_tBu){Lv;w`vGpeMJBQ1fbk_cp0x&mDvM!S@3DsJR2rr3x?(_h}&F znwHcOf@wKm_jgqERSc&4dyiV9K}6Zo+wj&YUl#lz!})i>cy|dRz|FTG@`HsF#zShS zYG~uVV`d?G51Sr8e7`M6JbNOn*?4o88b09p@ESK%-T!`ggndO+qf6(v-!|%W`g{D zep_;!rpGYHB5C$1sKt^Jm8&TIWPNtaEZ!Yy@&RJGMHYPsP^my#BE$nJBPK+y1(lF} z!MY}->sCPJIC1nkieVv{au@mv5B;Rm!gr^YPmGb&Yz&-@azXo{!+ABvCw>4Eq}5AO zl1iHHdQ`yCWBRWbH&pqKg|m3=VTvl@RxE%FZ@7W+2n`R1bdmArK%afWgv3He6ny+M zn11ij`aQ`oJOE+0+xt|0bxWAKX#h$y#?DGQu({j@v{1vnN2DR}Ymdm~gHAaQ>ajwt zE12oe+D#-hI5N#y+d4dPf;_A$-4GJLhKnrCXAEiMSgJ=(a^?XaBUeG^%MsM|obUv` zw-j&Qs{Q-I!?yw1ZLG$QIlcnGu#7Qpp5tn!J9;lRq%yJWy7G;`%i!|q>(vulj;tVu zcM#+NI;|1@Co6JIb##!WB{KVs4m@*?aY0Ciq^|~$c=PcOF7L7j``$oK+K?7vn2J*Y zK~F1~KhpsU(&_of{ME`_mekFTY#R*nS`PAq(_XCb!FLTfCxQp(%fKFaZ>cvt^}hOb zd-X|!0h>2*K^vrgk{@vK)L5mSuP1YvSn*hzz}KqvD+iAls?B^_S2Axen?3{W#A<lyUj3zQslPt!H>U3+MdaAfoF$^S zPr7AyDU6n4Qm<%3a)Ux5{PIAZQ&E=|vTtesSU>SIJ+qZfRlxrDTI0_;TV{MHwTLQ` zW09n9WmKFnkzHr;DY_?cQ^bGAcD9`L!Hpp&hpD1k*8+XhgmTmo>yIt5X|vc7)uW|7 zQr7Q#D@sEDswkQ<2x>}5hG5O-<}T5++su$4iFeOK?q;b!UC-)wBq#c&)IFIYSik7p ztEg6)^Xt0dq+fSm>@ro_{1GfZ1KKxpvoDD?_N<#S3!}x-b1<>6)kvb>Z{Y_oVH~zl zV@I(V^k#BBrOiD5h6Pu)aL=N!dP>}v`QKoY!{tiG1BDCxZYE+WFyHr(t=kKEC&fdH zp_*=-Le-XSS<&moWryoHRT2%KX{#M!O{c}I`lJ7dET~{ot#OaKy_;>?)+GEjKd&mi z)a)PRYDW(5z`4U242yF<_hR?ldgm#7nbe>yh8bJbt#%IobVBxD&9ZPG@5+TePcIConsvVi-l`T|Gi$oGL=!gTXO0O-^yeto12mT z_vRN|EI0Sy<95`3sw|aIE{2vrRSaF#u5mkMk3HWcwGgdgQ;pv;JkjvOBe7?+*Q9bV;@Yw*CUQ(JRB%~Y3rMp2%>5%S_+6AN=B@93bkrHX7B}7EP z0+p5)1?gs=UEY44>+<{4^9MY0U3+5Zb?!5B-!u2jIcMfIvF(z+Kd$yX5HFU}zjF3~ zGj_T-?7ZwX3a-R|s4;u^;uyu*ccS$gjUvpfggRU(hS0EA6&BA7xQYzCASI+JBW$N# zzx^3tmwG!RbLL~iJ+wg78`8@#n(}&dt*r6Z^tmdp@nrD4wR1##j}h6@4e8BZjs@ z!b_U-ptr`fbszs1qlw|18 z$41nN`VZk5CP)Pmb^a<)g|e6tR0|1x$|@B|Z+!J;v%@se%{yM(UcGu}ig!N-*zOpW%_YzjFHZ^`z*u-zcynuN4?rx51-wlU$y+!yfe2_E5WMwE&r~k&B{s8dN$|zxINPwG(sbr zGlkQFlNicK!D%#}-ephs2F;Y>gudl(ZLz3Hn}Y93Kgscy-GZNKS~^>;J`~~2kMGZ^ zS+7Y;(Z47RhiYXHD8KeYXl8Q~6Im_XXjULuLS}MWm`VqoOJiecuLLp?#BdVg^S(tS z-NpAuXg*cak*?rlj6pD)vJ4S)%7T@hVU)_Neu$j%ebTy* znrm3OO{ueMo*j8rWq$rXv5#4lRJqGZ{z7BA)yG8K4DISU0JF|#qg;jzu=@$ul!N= zP6Xn~kwv1)@afhGcSVO64b8b~@LVU6+E-F1%(f?SnOyR`xsmg@ z5(mJ(jo-gBrBY0RG^8c_1v^?Jk(-VN%_}svJ)?9R`rvk-?26{m%r|eFO%?=UBC1uo zgLZeqXHR{3b3_%~P3a#%r98$eoplrcrBoqp7G6~fGI6IROrfU3wV4q`Io}L*vV70s za-m>@azMjW7lqES45ieWD0~jh3OcoUBc@eG3}?4dh9b>P3h64CVZ|4eH9g4PjT7Gl$copU-}bxTu1sb5Y#`XvR&n1)?Db zuNiNLNwI=QdIEoC1VgbT@2Yb3&qu_a2rc4{)PaBw zX5eZkO7;X#QY)G{H9b&q=hTpnaw%+mUe9RslRb+5CNjqFTMW^YZxQLL{>C&&@m!i9 z5zkdt#S6AxvF$0-03!k>2=dfj69qiwHMDe2QdIi!Yhib-Pk^;zMQ#Ctml6JlwRYmV-GZU^XL!I%$Qlzg zODdyINI%US#!lMkp|qA%UaUfvsBU_s98=+xJ5)|4(&L{PbMLKaY=bF+b$m-L2?6KX z{sLl|BD-e8evCeQJ#VjEF##DsIrj`4HDx#ig5rEM?^WC1IgG99sb3*7Q<5ltx4n^u z3T4uabY?=AGgcHcsBaZ$aO17poxX@Ygp+?!z1JcP%Q_Z$EXYG^U>>C$AM54@ekjHP z!nb6y87g{7j~JrVq^Gq*Cm1Wv6TT_G^#f`}#yQaklO+obfxGX_wb()cRbus2x=h$} zeG)aIH)dw7JS}`>keht=QGq`-4h@^3iqDzn)5zE|$XDha8Q{i*KSpdbSHH1wx&(Y1 zWBiaeuR*{RZ^kMU1s1z^Uc`oULKL6kSAD#aoo!)FPy?|;1~~Y3E4w?HXFfYiKKMMgXBMyB zheO3^E8+3rL*hCUT}g)lO7`~k_^~e4%uxbre$aFr?^n9b)7YVrc*b_fZXO_0?exu< zM7KXyC|?lR(`&+y3J3KuZeBCg-ijHAGidY$$p4z(C@vCEeleshU6deD0}7yh3ckBM zHC<`@qy!8_tRb7YhT)ztuDe%2g!=xrMzF3JXI0AGb8iE~Fzl;|I#n8mC*!$<&+(z) zG`9MWSKJZs!=BzjEZf=Bo@Zv}9^mKg%wK7A;e((@U7#K8!s12*uZ8`H=Q9yCy` zb?p7e+1_bO{Gih0(A&ajcX z)R;$&gv5uf_!RpZr@v}UWAIkJQqPEa7gcDrqsX1&YvQR4#0Ensada5dbP2>JH^zvr z&kvlL|K{9-3V&vrhlrET;gL@Eg?Mq4D%2)XBG~um0llFVG?T77EU!6^*~HB{13*(N zX0UUi`)8$OnwLs5#glq(P&r(fgrKU~Pz)Slo1Lr4eE500&_3*$GX9cQoR3Vb{xf|e z429fk`yjkZGT-DyCE(i9{Gx2nrMQ zC_tcngmF{iFfKMBf+2F+T*`-@h;B7%chOEpg?>rp$dak}RPPFTdKq33cr2@tN-XWT zfU>amh%&UA(o&+r#Fv3%G!S{DBntao2gGOQQpVn`<01S*F)xkS0h+avnixhW-jXAI z5Ec+>T}Y`mh(z^D4>3xceKt@(10AnXB3vkJ^TdYMQXkUg605U6?xtta$+>~ zE}ioYVck^y;w?25c6PJ<$If0FaWFRa*WPV-uu1-Re$kH;)m8Ch(Il!aqGUQipD^WTU)g@vIvUZp2x%}^PujFCLv^KPR%s_SzvJ1@uoV zi=3vuFC^A^HT)X#lP-ex;clZ%I^DdDxW^iIDL7B>3#H1@x6C z(J@G2hWV;Q7j=A5x*n#lhX;LbQ zx@vrUh2}(%^lSJR+fx>(5;i&MQ*P?2>hTq@!AdrI3JQAN-{E$PZ_gDKz0cY(i?4F3 zy1RT{oK#&@Ht@H1-%@)q5%GJ!vNF$m!(Yu58-l{Fv0tmaGi74-%|EfiMJHHX)l}8& z)M~2P<|*5QC!eBgOE+YG`NlB^-xOC>Q8knGWH_1q-pt|YU;2dpTIJ+MRV0RvtmXGl zGpw~ZK{1>a%GLVUo!!&{EFC~L5sokbmYkeMPFZYEU2yw)GCj5!DPw7-Vc5wI*a0W- ziswu6K!nyA6{hcd2KS^0LkjMVkC@6OxUIximx#xC*7pax z_XZ90x$tHRRPwv^6A9}fbu*B0ki{p!{n#t?C2YRDI`{xrqYNr+&N@SrFth4msqwso zo$PMy2iB5vvaA&iua0SH$j?KspCrML?x%Pg>aABoIZ zyA9@w1qi+({4({aQSGZQXbpE6^XmMkP<)-QRp;;L03%@Gy{rk3LjYU}x6Tr`^Q9mH zPvnrGL&ly=Z`9wF1bQOB#5*BAzuoZJiB(3Ms+n9A;LWjMXi#!jP+Y0ws&8TTuc0%> ze>_onKh`u{Uz1c2_*w!7qNst`_Y8KF)p%kq#F#myBBIahwhdL3?4SxRrDu5?&@~=J zU3b9gA_aWF&nH;sLmt>SnH%2>l!+AV0hx2L0__mWlu9T;LK`Cg(+y)?4NlNER=Xk+ zlyoZ+9AqCJ}HbL>sn7 zOx|`RA#cB-bW6wqsL&^phEQ&d$#4jNiuXlP7o&_#<4`u|_EVt8c=%k1H155Cv9KUQ zb3((+03cYsmtHAb#`+uE2_MZVov$|-miD&i_{XO;%KIqxa_9~kWWY79r(|KM=A?spa3sjZEz);3P9cz zO@b`Qpc(NpQv|c=!LQC^%raC#ka|Oq)dfW+Dc*}Gkspw;Ow*M*EoHi1)!{svW!yb4 z>E;$q6pX-J~8cQc;if{}SQrH1Hzr?~(YySsN|dXX@%KpJF(h6S%{-6Yj zfLnN3ACEqwCIVHsePc-hYvDUuAHk+gG1uaO_n*=)3?zJWAd1SY4byPAPVuzn9jFEx z@}Zx~f!6IJ6~Fj~U2VN86TW%Z-`&aZn4Q7#$ zkf7Nzm+(2YHm16FGf13ZB%Fl(!Bgrb2hm!@PUxd1#@a{>**DBwh*!q6x>t%7x-B;A#dg#()>!ee(@TRiqtl5wuj6O!=wR;i zCGE)>?J17E&^%t0i@qn9w>6h{F*nI|)oAndLj3mduasE%PURpWFqNag zLwlwmdHo~QeR=>ewD zaj-bhbD*;PYQj*i=(611@xsK|ZA+VL!YE|nej!a_iF}^F_$@7p;8%G+xy#I$-jUtZ z9R8$rFM{jf8G&&vq#R@0-P7IE*Pf8h^4z8bAth`AxneKpKM539kFAAAtnP4sK1M5n zVcJSsXxU1p^^C(JI?qoOZXt&7eOtX=6*Mf5fgGO4e09#^J9#=NO=p1>_J|!;6D`=w z^~VoY473wfpW?03L=we+4Cq%pqFn*4;@ffH{VIBRJ`aLN$PmO(_jHiH;;>ijN}Hgy z+y6}9W*3{yocUyKT?fSqtprz`-Fh+98hs$sCQBsH~x7eHB|>5CVIc z4%Tfh$nuhuesRzSWN$l8<>sI7l)}?eau`OG0N!i`VwzKUw`hCroFJ_uiqr1Mk8D2o zo-!e4tm1=UFbhm`63Btb4l7W@Gd$>u4FMV`3j%LQ4TGI!szC~Yn`&Nfm5t-t=gJ0r zujRwQNSjk$L#QF16%*+-%3>;65UhuamM6{upREh_9SxP9j<@8r!_3ivm-&V03>3hY z;3dl*%Ob(lS=#7LfaTvBRTB;ny-8)d(qj*FhNL9kBf~{wenf;&P-N8~vNVAvK;589 zy@K{F&Fg3Y4mME_7JE@yD|mPc7opm^(<#QLJ=4qNX8k~KNmKojkY(`Z6g=Ci&%aHJTVzU_8&^#k4GX! zX1e$Wi(~cKR2uJt(QGdVbK0V5*uB{R3h-?UY*T-j4& z)V#({>@1Sy@jaPzRu@!4LKNGE54HO;sXv`(B!27kdM?g6@E{ly6_W6NI9Hojqjv$kFCS@zP|Q8*$&oOEDQ131tEZ}Y925*v6=beyvYF|;rjGoGb@kEsm`kQs&^4C zD`s9EyaT3IaIlJMu#}IZ_SL3*e*$23(3By*X|GC$v@bKC5CGfVFSCcoQ6p6B3^lMT zi`Z!t_2kvuE2Ht%n$>PoAfZTq`tZe7N2y?-D#=89ABBg3QQtTzVZCl_T z1dz$bk$|#HJG~8qesrJGNKJr${T$sAcWH;1pG)ShC08~ zT6w-KPi~ZG{_0Tk`|))UfG8GIKd6-)ETO|vpnVNQpfD*zOQE!WS7 z8LU#9%HK^N&dntCz_UiG(nJR7JYG$m%^6_5tBlhUy;Ze{*~%scjC|qlcs@6CK18T0 zHfTAue6aw+R;3>gZ{C*}%&!zZj1E~{S-B9>r%#%0|IXl{w|&ylK5~}f4+jv?gjCfp z6Q)50n7;O1e64tRVrWYmuLMsMmRp&dojhSdJ)Nx|JMqnUn64n9hF5~KDPI%=l2L>8 z+nejQiBVD98dW9S0NWXj>_ z#Jn3O7eW!5?oG?9bp41pxTq7X-;0k_MO(K8gM`O8#%oRt-Wz5rWuk^+XP9u-+S7e> zXzwNjv%yB_LJv=C>$?z3#YosVF9$_?f)W~zP*MGX!PM~XDkfe>BVf;{(G_5HY|K2J zXx-e_=FFG!_A_-Q7zurnJB&oDX<3qh%~5lub8cFZQkuzeShK@>#rpyS6tEem8k4ZG zZ=KAXV_f<0z_FIYk5%BJ>MQ5x1ifq=VQqKe*y)ohi09=qJfc*)o3QbA-72z5YqIr{N0(i z_bqR)nt@mCZEdHACfYB{r=l_EQJ9ciW8;+H2bgff?>{bPKEdf|r_OC&E?)?m@WSa# zMPP_C6+2CXq^9M$n+*6(Cl`$I&+kpRznjLUnY+4-*2IP^M5E(y4s)KKkPw=f`2L)l zT`f64%qN8{?yHV!mIEv+KOv+=?=V4%h)sp@@HC{uh={)OS82Y3Hk&d`)l)a9r45sZ zoo>1O^@7nc{dz*e_pint63I*@_X0+*my`H?oiKJ6DQ_>Kiyc?eFm)F(+w8JUH5ws= z%aoI3B}8`35st|9s|@fU-%zu`3m&$gc5|@1BvZ5Fm6uXF4xdNE17ZNYH>v2vkdbL# zf6gBZHTR+>X3Sg$v589+8KP5h;$l&F{v{XVh_$Qw(^|oR5K2{DEr}USFRu#Xr@KeZ z^G$y&Ya|;N5gR^R={@5iI6H;kb9=ha#sVfz!ngSPtjz`@u^rRDd*&@E6{Y~lj{m%;8EKQkRAtg-Pk zJLc%f2M&ms8jl~SkL*P?1~JoTGE3?cS)xSxLZ4SUMhj2clZ2)=H7;qxk1coY*o3Jb zOy3ZM0R)p*J%${!wenx3FN@dM=H08+iKswbC9zu0#uuGT`>>og@VYl9gpD?+ZaI^p zT>Flt_J_~I5q&Qe3u__4RS}{;h8<8_9@?lQw|hyZnN-OmR)dDEWKo+OLrQ-TgY z&^rLud8DEa?ld#JgH;`mMPGBSM#@jz`p94xbM%v+Q#7g$F&<7kZaT^--x@~kH`fM${?0Vh3h+SR~wE6WHhM8>SW7Nn3;8GA7 z#LF096K>t!MBz$EMptHI7to7D`u3l-KDv?oyxt+S4J4t=xU!`hJDA!dO+TYm%9!M) z`ld(~*6*Og<;F3}@oe;nPt%A{VW2ylC@X04k8Rx2&3H8z2(osckS#OYRP%N-x$l_u z>+_skdKQj`qHjfx;QK~)HgDMbpzaK_u@rcjJDc;bFHqBFse$i4@wU|F6og2%m1av# zCL6Q=k?OU&@$A(;Tk=nNKg0Dpn#^Trz8^~gAX=;3vLBG?M^Hku&KTXZ0L0L^+pV<< z9+wGbYpBOsHxz*SQu3nYwRGv09tCJpX! zue#+g?EU()5uX3{E7!OwZL(3d$d0N*G;dE8#r=mA$I(pOS$g%=2;#%NHo^QCxlekU z+?2xB9>@hdIYT(diGq^o7`O*mj~XSuhU_fNURSJdnwr*Ib*YX7Yas6QwAOz-2f32l za5I8}LzvoYb16VeJaW%!M-K@qil={y?hS{bG@Hba>Qx|P?73tbC$^I!0X4UiLo0*S zZL%|m*huQuC6RJQNhS|;s;|lY3f(0kCd+>uQ~h|%5Ef%uW9u4$?6eCiZ0l2z>ut1( z2uibm=FV9ri?z4I{wafE-|&&n%S@5${ii&S@$bi+F~IVSyVcl;cHSHC z_DU!D4h=EV?np0ZH`tX^aPbUD5Fe-1*w@P$#WnB2BkUxumR*d19I0|Yxx$h9V$iwU z&+_B(y~=xLxs-~JWM$b~_tVxFx?s$~oJb{iuMlghKxw8JKSj@8IIoKQjZ8=OuT4C> zLrXO724!#c;O2{I$?Gn*fx=m4l@W33bc34c!uh~6!`o3=Fs|z2Ca`VyBj?^L5{6e0 zF|}d=q`}AK+xLLG9b&P<((;}Py{5%!8Tj@v-6C_&>f3DaZDq%|Z21!Dqz)WnSI+Pb zlZs@5`!#yKTqC@rsavUEnlNo*K=`dW$W!kGQ5 zJ`_zPrlV)WVsF98oYK0t+jRyA7|23{bY>gmhJV?+$55!wHbAG|;P>XNgx}~SxNjsx z+%TV$W{c#8JQ%0+2Wgp#3aIa2pk|C{ljw*hy z)i2&h!1nX2E^|LXjW9&(=d0z9XkzBqexh16fUS;NeP2hU1B*Y>tFmM5B*CUp9UGDQsKo?@h2_qs?=YC!u+UEAV)<+jc}bQmaHq2g^6>me9&k|y2b z7=v`(FR`8`U$T>8nwLyu?aPN?ihmTFJ{INfGiPz?xiX88`DQ%>!c=*|QaK<9{Op!w zqB@7U*H;yzKi^mEOdZ*O4lUoP>KuDw)EB5S@qg zYd`8tg#ahjAh;$%?BZT=9DxIiQ9SjAVa+uSc>DTw#3IW;V>#0(RK)6`dpB4~p(v>< zl5H9?fDlzxbBr?i zWltB>B#aVLC}RB_HE;|DLnZ!R+^&!;f1jV;^4VBQL1V7LKWzRDKf0 zm{`sm6n5NoONBmr_Hy@4DV7dyKb$eT{2Da3u#x3Lx;`wv)L>h=MOpgRuzThp08{E! zH&2WVzoQ?fwmdznl3Pqf0@8sso|8w;5uzuym}SC*7RXISq1D{x?M2?BoU5Px7+if2EQEV>JH%q zEBWtPCiUGr-VhWEIP^onex>CHX4W3P8X0*%^Wsz@;{C>Vb_%nH8yl6io122W{$f%g zhl}1Wvu5X;51!)Du5N6K?n+{p@0GZ9lSeLOt#;A3v=}F)h-W_Q8`+UyG-2EOEyJ z8bBNWC((DW9YA2a)FFFfyt23Wck&%w`>A1glBmKJJHSl_i8oX%=WTSA%w&Z@7)kcY zCMouw)|XZL^fa=MSBsu0O^B?+Ey&q=h@ek@MuA`mPWhGrkdoggLLQ#2>qO{$$(utI z$luj##Y0Pc&^o$nVruO5uZ}B6URqyOGo@YixbINkI2x4E3!#9gTdEn|n0QNof@xu& zpR0I?7k}uojdCfEDf*FAXAdb#?L7EVG zh?B%GIyrLCffJdrpx!FzUaC!8{7k&$E;;Dma^oeA^>JLUxOZJ$ZLvp8w70y26aj ztEGCr#TCYsU24iCt;C^ZRyuKT#iroQOj-NVtF;E;dWyXo0pYGsK96R1d;2L?SW&82E5SKx7z>4kK*wqhy;Po2!{|M zoBcMVx_VA7}FO6OsrF>FyU^D;@7a@Mvx`vq=gYjU?w0KB? zn%Otn$ga%;G0I*P1;Pg-oBDtUYmt*zucp;S-5%hr2Za=MkIcMp|Eerv@o-G)UOCd7 zEZt^O3$si>4(XcpV$=G}g&{}x8fwmaKPV6SV9Us$iGT~w)?U5J#ecy;iV{QSzpLh( z!dmNCiPMM{58aWN_+#Ztq4G}f;nPZwjis~6Wde%3^!$XsLbV76Xlx;Ay~W5`@7at8 z5(4}+yU~$0&hbMZ;rUSi`$*ky5lUj3c2eT0v)ArE9e%pOq5DJ_)?vd0|17z0n7t?> zmkkvGqs}To6r$?91D{9i5K547FbIWoac8D1Mj~icm7vsp!Z4@^9E>GfK%%f-2D?`V z5b(RVfwkM9_W~4Rv&7ly+^n07!Qmeo-u{fEXxEI#_nywsu+)0zIQ>Qj@=0-6w(hGCapa04Dgi-{k{jR^wM4fJ(Nb7fJU!? z?Ud#7#~#FNTtgqGJKGr%5jhEh%wIeK?-3crj3ysA6Rh2~Wnhx0KC0gET!Gt~8h$oo z^?QrZ6sVKljyuA8?rjG<@>hvj)gLybS7yGSsVXd660evFih9W}ZCDaN+xWeNLi0|N z;jIf*pyesloaL&y2s<@b9ADkX03@Ea@Y}4I5k;3DiD!g2ZU*`@J#p3Ct?vPpDWyMB zR*zPohg#7wN;N{S?Z||jVlDY;3`dc4SAWfP_8 z(gc&e4Rz;1$&&*Dx*Bo*zXi+IKu3HHbyboR{f&gzp4pe+d&Ow##MHOm=y4d2zli!u zMn@VQFo_AZ0G}za**0?a%aD>v?yCJhvsa3FUf|yK`9t4$%*d-;jSlDE50747wB)r> zeSAEi41E01}FQ zVc^Co7~vfimTB>-mcNnu>&27v{M$WHNR|$qcK`e(J+Kg7<3&?!7uhb$X-~C~1lwG8 zrh1NmMcHbbbvq8`tPeWHOH@yMKP`-7h_6f{s+&5-9CMJc{p@!yyD{+uiK3xwsy?3+ zc8XA*74s0)4yUA~-*3>FstNpV`QfA8e3KYjAH+OF)#ucmAmhjKNfV^hC;QQDS5TH2 zDUI5j93_4zQ(JLYcfon3kR~19apj$i7hfG?4tV%WWkyAKoc>i&F)^u+rVGo7G;X5# zUs!Y}2qbBfZARIXO(R_nh)Yme2t3uF54BkWV+h?V{P6HaJjyl4xndZEApjho0-&@* z(NU@+*+^876r3=X9%1bF0=PJoBo;-dTmf4>B-x(GHEbAoly>)*cQx{N$4#-^CA<1Q zZ z?7U}D>_JsT(V@88AlWhuW080n6L8;)2YnL{J+E3BN3W2MsrnW*OXi;H)PB?YC|tac1{G31hTiO(oD@tC{}If;@Mtcy+Bf=;+J zo35!l)F-}atonJ^`9Z0ZOr+YAnbOjsw_Lq~k+r#YMvA=Hg-u?+wmb0ri~xd*t%Zn` zOh_9_21S9Nk|sfn&)Mlj*feFzKI}$NB;H5}i$f++D~;`{DLHYBa6olR@$VE0mG+1^ z7mqusboR^+UI*P%7@}WhR5HoonJ}%>2T7$Bc>JFQ!J43eDn0;$5)hLR%^U#qqD1&$ z5b$w!2e>8yT%3RVa0W0dVd+9vyUqbhZ3uAQunoWr2>{I4XAA(*C&M;?7ytmBeILEf zh6k*D16_x%wPXKam&Ww}02nCd_pu0o0`mtBoCg(ypolrfN)$x97Y{a^LPh;K1h)jr zEQ(S%Qwl+92_`T_Ni3mu0*DZQIa;u59sLdDPnn!>hwnT7`-7+XZ^Yjn)8D-^9`^14 zfMpW^fHu*;f8zeZh7oKWE=W^JGArZ0fU_i(>OlY}A<@ft&C5stc)IxCfi?esd-W88 zV=y)Ln5w6BnE-I|aTIj24(w3n(oOmfl9Pmcdzi^$u z@PU?7l}q@$c?&R3yuHX39P(cNzj$oTx(p4gHWruo!^4OQ99~j{7#Cr0{9pY4a+~ot zw_y`9-Iw_M`qQVlM|tnG6NzwT|IhZBEYgcgTt&%$kS;XnL` zzslblwT-&OE0rru=NG}Xqbshz9bzExbpB{c+{m1uu8@fpj^TWT#B(n^su%Sxf~|*(ePjV z_TSSkZ^+0c{=P+$CQiIG4K8Lk?q7J%`WmD}3^*r6s->xl zEuFZFv2&+zY1s??e1hE(`f6HWvqsjB`+@HBkzr*c04-G|)6hr1I>V-~-n0-rsjfUH zmFJQ#la;?(Dho-_+PrTZI;g*EE2b_>SMoE zCy6r2yJvGaCd47v^kp9Fe|*fP!Yv=!R~v-++H^yH%c|;N*7i{9*ZKbGS=3yMhj~Da z<=AeQhZ&8XFdYd#c4Y1Uzx)5Fg81Wjt2HoPJmrKBNqldtE$*0DGLsRtxJ57#O%i|i z%{FB>VSEmgB&tYm?a*?p)W94gLPyIY#09;s%tcyXqjol>QhV*z(y7>13Ydy+Gn^Mnk??q;SQJJ+ z-Y{*nP%PD8JW9wXPKRvs~q?M9IFv<7&S^x$Gg+qU`Nse@AU z-l$(EL5Yx&+mRqA$}aHxic0`tBkBPt3VSgj&=Fb9ldJ{2dEIzWO z#a;gF8TX?Ajc4WMT**)K-CCyJq%&RjciNimJdOH28TGrTre*fK;I4~kVa@NTgHw4| zbGv+iPM1k&y-sK4?x;i;6P2Z>r^3HW$ zb+TywsY>i4OcxJPGm^VOJs|(-)2BmSJ-x`)@h2*Wa(m+{b75QIbKw|)mT6Hl{Ee$b zcL-w^ZA|R)x$^<@(7pDdTGs544$Od1l;1nNE7rd2AIo%##AIYne#wm$k=X@G5_t*J z(O%`6`h75iO*!UtD2tnsozuS%(B57vz_5S;U7|N z1+HG4pAvt*+oLNFU0ZCmC$k6JU5MnE?Mpme{kj|5@KoO$DP=u&9TwOXkZBRUIFq^aqnR%EeV0FOSz;C7KS|))l^@~U&>Prg~6rC+` zV~+HE?tEIzR4$(U4(gowoo}CO2e$M6kal*;jva@xKgCe9Du~B!6db%)9&iAfxMOKxj6tfDl9l+J#X80kKqU7bK|m-BDQ~nbThl(NTec zdzQelHSGk}U#tMX9p9u!y04Bt?mms2JH!(2Bn*XZ7ZalK;t5gTG+tcU7pKI$3ficD z5w%|>WYHaUE|i*{-etF$;*Py_K*rm*Z=+|sqcIwSZA;nMsj0rj$PhN)4j~575%|H4 zmT!=p_E`gq;{~DUnT=a5OFd|aPw3G?g3nyN^E>XeGgACMhu2v1EL$~u9xwHgD@L56 zAq2C3UQKp-6Ur3ou@LV|69%&0B;|&A3{h!xZ(e+#!=`4Zee>0Z#$>g{ZWsSM$G-u(d}eL*ZoYg~B5J*wF@rfUHqu7cX|re`K6n7kEVH@^h2?npFG#gw@!qrEDDq zQEbtT4Y1Y4HXd|xy88N2>wLDy!()nvZDXC}UmB4uc_bi70b!3iUeuz>FzJ_fGewZ0 z+K!#!ZSKO*AIy0+!QZ+Wj~PkgbLdM-N`zkRebnhb>!&j4SRCei!9}^PFbhwORm6Tib0hHr*#V#(_-uDz=_`|oDvk9d-QytHW#?mT!D zFnTOiDi2yAmDbM(+y=K>&l(a~qmCpPB|VQIK*_GLHr5*EXZh1DK63_-qfXYNQ^<~| z?qMk-%7Kq-31@d@-QPcuIPQ%lh`!wyPl{nyzrd;RA>B-!eP0oiTL|KK$TpVfa2@wDU#sZCu^Ca--Jzm@oX`*Kw>zZJP@r zrK5lTd`J0^_3t%Mi%%|&krC}7yirFpNa*1TYrXYM!tZ@6L)Lg`_g)qhV75#}f zfUD|7_xV(J=gR(z=yTUyxjE790dZ_+O{E*#;;nxwJZR+0#k#`~+oRW4()VFeA5%~{ zFF!t4i%wg@)aP}2zQtCCb%XS@G6r8o<7km5r`@6A*lz8z9JH8?P>FEPh&K;xq zw_L!3Aw^Gu5F;{#?D9PmOLB#y`7I%<=3h;_=IS`jKSGdU+tF>khmxJY=X+y6tz||t z?wo>pv;@JPq{yZkTi$}1@U2eF+sm32PmXP@!)H3N#1>?qCn0}YAgG)%c)D}}v?q1t z{P5Se-3MQ)Zg#syrMTge_3ib~FI98xu49FhJ+ydSe)TZattFu@{wA#MR=vN~FPH3E zsp3*GBH8TuZRZ0{(^uAoV1=LA=bb13hUa&q$&kT|X;R(_Skh4p_(01RR|`n!v2cG-lftSxhi)@l zN3iVz8^fq_j_0eVY-hC7=TQAQ)f#hpxD|bR``P0IzQ5|`=VS?6%9=CBwp#nrNzcHv zRRpLHYbTh`&lH-xu-V_T9(qlW)7{0(;NRbEPx`qPK8!t!y&^zsh4-*JdOM31IL0~) zE39D5($Ue;@~-t|VIl$2S>#U)us$pF3pStE(}s!1_dXyvn-dsPW+24^m^IMXmyT~d zQgPZ|SQ@~Z>DE!2PsHLE&1inN58)u%9AK^ak3lO&sQYYZ8(Ue=ex6RvlgC0&u_cNQpR_$>D{2Z? zn;1d5B@gh|ni0N6x)6R^(D;~R^mSCk@y;?whWx=-3vX+Kc|hF8R!?qhKFpt*Ffb}%~JrP$u?347`P12#d)zMlwS zEEb~~z~ZP(FY7`1ttq=Dm~#gTY`JSR6Zc>|d5FS#m8p*1w(#Sd?CX z#pVHE)TRNx^rbIdXyk7&7z_rD@$vEJfANc7ya4INfQu4~p<+#+`K?+1Pd)Y2$CfW& ze(i#k(qI@uct5)aj&qA)$T2Kd96EI9lPgxNcq{t%0+6S^eES0p=wzEF>O%^wE#4UAy)_quC2kltG8y z3y?2#0ZtGp_rLz&Pxj7tzH`l0S6%h{&bg6=DW<_Nx9EqI`yu(1b>7dhZXN@jhbH(Y z!Z#scSO|=dk3aqB(W5uqdh4x6%R`IC<*zZ!cUbDhKbrho0P=?)e)#PhHf(tJ{1?$+ zm_5uU$#;v>Yrk7Q-K_o8Z$Dzdgn(hbv2WkL|NHdQPY+)T^z$CBt`8dZlZ-8N;&~CR6 zoORY&7wp-yX9Cg-uxO?MhTQ`Yka`J_`}oH{{wyPZ!--%v9-liAlAo!I{zS;VDNHvp zkV49uXTs023`J4IV|*@z*Xf0PwKu>-fMKqX=lQyifBfS=@Vw_e@88hjlmc~6z))it z1whLBN8(s^-g)Pl``^$Lb3yXQ>$*Qtl0Ol0Z;H>ypL)t+_x=_R_zXu~hNIr$C^8&z z4x{im%THtb(rIkmIE5^e)_&?Y%QATH<1yY2-hhB`-b8?5zEE<=ZII+2z}rJP9Wab{ zPG9c-Wy_Y0Jn_U6Uv0Hon-->+hC#ugF1kw{KVDMr7PcG7r}iIv%;EmWN3h$su-mn8 zzaPQ08-Yg-J!Cilu}U;6>I)#t+F0c$a19RQ`_GufF<=3sXeHd}B~azF&)eHqZ4# z@&^uNxc^`a_hSV2p@sY12nyc<&;lHpGQRVhIc4IM#~qV?Syfm5i{ij_^4*R@xHdnG zZQF_@`KLrdlMn!UKQ?GE%m!|{>82N5bImp1L`ML0dn6F_I}{kkDFC3p`af*Pzh^%4 zna`g0QW@qHM)JK$J{&6wkA3?x>^{=5;P1x>?nevGj{vT8x3j}Ckhc@Nk>I`WY}ZCP zI>2H8zVexN;yUc~EATthD=>D?QT*pq9>-~?wIlI+?~&(utu4beK(FZln+h<@6)w2o zf@cG`6V21kL+SnphED*b=3i=${sC~SSFe87JeSQd3m6uXZzBEKAo*VI`*5t?_IT)_ z9J`N|u6m5%VLyTbBXG#1C697jS>`-^IRJ(4So%tII*&0@V+3~16f5nxydtXj3|*#Q0oX|B=aKU6|s*zT5;``>}){>$Hy zsi~>2*!=%s;&@4ZCZw+S2c6`b_NS*k_U>)rzUe$#^83*O+z7lc-Qi@t*G!SbuoS}R z)4`4J66_w`{V2n5Ix20Blqys7CV0TPHhvb5;OW~t-he#M(Q38gcDHGPPMuxy*I<|} zOixem9T^$<0RU5wuLf>YV@FO4j$R;EIg~fc3e7|A)A^Dm7&V=Oq zIX5xk@xTKu>_+GBevIIIegw{sz-0j7DvO=1@Nz$pX{ee{k$u8?Pl2sDOg{^eFJaLn9rM zFIU$;i4k}|g5ZB={$y)gnCndLWMN0^9Y9JXfRaE+(p7GI4|3t7N+*_w65zD}VcMXw z=w;b>YJq<}96WqkSC7BMdK}nw0IxjjC>X6)OIY{e{Q-QvQ;!E446})szVxNf0A1U&7F^#D|$!UMPXb$E2wV|dfHLr5Vd1oXL1o+btivx|~bJ_Skm-8g9|gupNf z01bU1;@{GxOMhU&N;PCSURS+7K3lH)<0bjy4b#h-*ZWUC>2TkH7VgI=cKgobb4QC7 zfRSkN@*{Hb@wvcNUi=6*d2qAWtajb}UUqzT5-=RlnGTT2i8MT&Yf2}^r_5>|0bhv` z4+rNwI%^cF3j25#@Khphi?3ic&fGPH7jB!V>XCTnpS=LK2+%OsSh{rSvyis>hk7bt zm<2$9xG3AUZ5tUK9X)4(%QR3JB$DrSe6GlykM-Jr?6C~@J)Yx!jN*RZaobO01VCPq z4G@XYxrzieK}M^&W}1fpRroNum|9TB(PK0(&kGlPxi74FPFHya3YA$9Fxs+5Oy8AG zeB}cTCcancPyvc43>>_uw1Wrmw|+gg@7;sVo2Qd60@B|a&_Vz(F<_WojE;_;vuV?& z)`Jf|*hbp*Ka?0Y0iazkH4ngh-t(RCbbBJ%5|^O=ec%$ilIlFSk53gl!dP6<3%22ChW!s z#c`^xQ3ym*?^yWZq%Tu;p^YKqcAh`o z)_D<5j@?J9mGuw!@c3N$W;v)kmCbBrAqS&YPzw=$5CSm?vijLw&Xf9jwBWQOX|s4x z=QAf?wiEM(Tx{pm>b{zg(4wZSOeA?N2JtyPVty{N!VT*KP zI9`&U390M-K_~g9{dU`9@7^4{C#x6X?8gW^M&OIAGw-g66s5}^X|nEQl(xu)`<+iv zJnb#_6h4XsUr)Q1Pq4%rhLmX0(-0K%Bk~6kws^9D@~SNRDi+AX*LJ%ohb~_53Z&c| zu^d&4bfyxjW1V#aofv!kDm?PYL9Aat9q0Yq?Y3A0U|s;jeBrdyPTLOPA5rI>p~bKW z0Nu#C;p4?vv0}wg2!LKhf1)JcZ`giFzSr@&B>AbS@)`MdN%F-A9>ECUT7YvM`e0HG z{6ki@W^-+&hUzh))*gwYuv!QtrN6I8H+jynX$*U622M=oGwb?PKC4Kt)lYD2l$k z00zTsq2!hn@rQk{jt#swU|0k|6KYCqe0+T11VA^k??v>-OY;40cO&ek-;b>W?^Pu#!O+P$)s;JO zL)sxPCj=R{b4-Gd(GvrqjhqJ_#40@g_+wbRwm`exMwVq!0Ce*L7!0!w;uiA&EFj1( zl7CB>~__h{6XIW+$iAd&z=M2 zGwI>k`Di`X-RV`u)5Om&%VBe!xk=>h)1)3nK|&86cW+6+1o9_>ml;y!>$U2v&ZjZ~s2=B|GW+tl@C0~=;MNFXxIH+>PCZb0K^%YrVyc0! z>z^My6+ge~2|@lT5n%KGhPgz^Ej8W&YPZMGV3-7eZs;1`_O`dJ$@Bcw`72T#GjZKF z{WfhMFUcQo*nZvgVf)Y_hu!;I*zHGfzw4~7KkP;T--?UA0o-mVG;luH5K-fm%L=#LKUW8SN@3- z^zp=<$+2GhPdwpp-=pP=a7s&lvgo|+E_8o(V@K{G7IBWOYt7))j7@L4bLtioq!Hql z|AJBNRM;4u$WOloFBY8&5X!B^0!Q$*Iyfpsr%;_Rt|Hcy^&i<1VkJNO0HRP*kvr}0 zsJ>yYpUTN?!D52f2+#|CyjSI=G6<6QK<&D6dlcz&jYfPi=r)~{c`e!esBhxq%kv}fvS?{=(L_+I5&LKbL$~rPZqb2`E@xphm+*bBEY5r40DN+ zV}_pi1BOumG&Q_izI^#<^I4E4*M8XUhj^P@n7xESuVYPlg=72nW!QbVBKbWSfiFhj zvJCQ3F0!V9IG?KrX<>ycG7lsZ_$QK)m+@kh1QCTWULCB6jXp{PWu>z?NFcs@KZpr* zEZ+FcJ5{8j;ZEuu!BJJFviRBB4{yz@Ea=YlV2ivYWwP$mtw1%2N+X;Oc~+i}5V~sn zdfJ+oefVxc;^Nd6DYCd@vRC_Jx zw0cJVK|ccLTJS!DWOo3*TyWQ9r4fm;1ulrcSG#c-YQi88G~YBHt9XtGwQkXB3$$~r zTGd_^Ay~InZay%WR}1ba*J|au7i0x;IfO7pQN8{)#Lddb==gEE@S0plE9W|~$RnVv z?@B*ZR=P%NR1%N&aTsbx?-k*r+GY<(9Q~BQljTcz9n_HNDGUdh#PZq#K)!Em3cxTQ zAdac=PXYrk2!=rbFuL8@ZftC9&ILd}R(~&|Z`uaXxSb;X>FM%CI8&{-=x)Co0sIK! z*Jp@DnGf}&XvzqS79-SP%sdp5SJ}vPe04$)Hicy`Ld|8&1}+~XWgy>%rx(caV{DyV zbba|Tx9~8XtYN4G!1r@y1-lrc_7NOZi|lx@T-f&_A&w_K0YO)Y74<~6p?;dwdOIe<;9sZG?Bk1X+1z`wBKb2=q2DxfIH9uQ3?6gqmtL{X&6wv{3aa;KAJf~SJFKuV8IgD7bAIV$3(_Rxx zr+Ag6FYNYm4!+)oo{omabz%NrrRTy|>_Yxk%LM|h+Mc>9sVPT{7s->`fu6%JSWLx2 zJMk0F>31lw@QPNpOJ5i5A<&8Nb&r~h$`$hGbmMgsWv6^~|8!M(HCRyY!6+{FQ%TWm zUI4>r9CMAyt3d14*njjQdtJRtl4?w@b1gu_pE@#A#DtDwqSS(z2N z$FJ^%aFM)xwa;mwvgWx|VHLfjg>mwkdO$uJ;2^$M7m1PQ`KyXM3M1Z|?@5SJ`Jy-~ zv-ciwSw-}Y>K)pc2{N{`y5{;?gjNu)cHKO#9=>Wfm3AU=PupVMNJBcJyp&%gel}oBXPJ zb;vaYs20AJ;n=d*MJ?m{vSF$mRi%S_JX)^hg1WNdcoAN#XC&&5yvPt9Wpou8yHJL- zdRAw`4m1SJSJW|iu93PNy%zN+%B zwS^<`LiwlqT1`OF_8vdlb?S^g00zTcpw()v*|1?lzHi^YX*xW#LLgh{0-PXX!@uP% zZ&`~uu1_!W4QvX^!8y!(*UAz9RRg?U zbsf@*Vc7IiyG$@VmZvQ7IN$^2YW2$E4D20`g?I?7?t=?my4EY}Ij~FBC@u?OeXN@n zI8hRicw(ztxX`_sp9mK1K=lX3t%((a2YEs0m<}VV>q!hKaNF~vjv;&~V+a#} z3w3=9DnI4Z*w6YnRuio%ZSSR631UNs5#&$TE?kpoj5WIZyDiQ&7-kXKPyEDBtSPsL zmiPmP%>&TX;O@c;FP!!Hf4#y#{PvpX4Dvn}IexVNKHd*PRa$ztQ zZd|qk1$kC!p$bwXus|Gz`t^EXMrDnLd+2^QfIQ_68e&!I6PqqeFYR9qz9I;awh1A zfcO-K)`YHV(ug2FctKxu)kBiASdUPaSC>_HTH!HjYQK;!g^6WKgm-Xw>ZuH?S2w%- z&GI+QHCC)xu~Z#u8ny=>!zus*Lc_c9@$s>_%qaD!UlaLHO-8o_3Zy>%fhwEIKg<%d}h$9tVY=?ic_>~BX-=eQhhV#l1Q0=5{Z@PXp5>?lTtz6w9 z!gUeE2U+$;PY;uQgFuPrR63&11c9I;*9e|OhY&oJR+HyL2q53kK29zIb?UtLz@9^+ zShcG8Q9%7?9|bbZHcGB>NRJFdg<)R<5HT_`GHU`LW&MZkUgSSLJ&pH#dnN90%Tena zi2=ToZaoT+?DRZYyDpO0!cb2}E{cVoX}Rlt(1!gm6jKudBdO z<(Cyp#|!6ld1~7#eMfOs^2vUia`zVnCydxvV>}iUMg3UF%Q;|=8%+{@H<(wzFq@c7 zu32adlK{}exZugr(a~AIDE&O^ugU)dcQ3~QED?iy;{Z>@5eLs0)}inn>%3qKk*Y4z zB{HildX#Q-`3!v+nL9-6D8;&U2iI}!7X^*#;Z$k57DY%WRGQN)NxVEC-hNlP;yY$5 zTfec0Wxcd}z2IjKsqU$9-Zva)ly6_IL=?vl)~f!c^HB`&F{+LhV<}5p$JKNENz-1P zV}Tfi59h_}KDg|n%q$>X)x5k8Bvpr+xImS*Sm@eAjA>7U&gTIy7Xo&|H46eGf5U8J zY-}uWO;fKP8n3{hPXVMFGBupIR;x8W8yPkY7%Ads0Wdv1jsJT0Qrw4fDT1#C&(4@u zK5V8e$4=U0{e}vbge^Zv69#u50}9Ji2#7FFu!%;iwDG|XpRDNw~^VMqf25?)2wnv(5xvVTq6#pr)rcSDIMQd7R5JW)} zMb(~SNC+kE@d?oDK{$MEodNYDkuHlH7Du9yLSgG|!bN4T0E;&dc|BQZ#pZHV8$RI2 z%Jh3%|GnJ)b0rRJs$p>>&+~C4I0*H-A{-xB6*}kwK%?=_nr*jC)2jc}O8<7djlaEn z96S69IY85(?0iN3u{Q)F@X9)i1XWtix@@T8i36xexifDbNV{_BOVinjLAaAAg%Kyh z`|kM*cAY}AK!_rQ26ZNV0d3_%J)OX9#Kln-W~{r4qwA)tUzJNXBMXskcdrm1iE!~4 zk!yGYBL+|z32xPGn5ag##fMs$)D{q;$}@&nm9KdWAkS-$K`ciZMhj9Fdrjqp+GQ~@ zk&XBC%!PBQR|2On8$v*ThPc~#!*HVq*9u9<5eubhb0@B?5vF*tZY( zM}JCP6M_lVH(Gp=2Ur9sk3o}r8*nN;5AlXO4(AcA_4su;M{l?bU!l_`9upH=i#1n2 z)s5WrOdu(Dx2K3bwJ^o5cB2f1{qzF80X_Fq7Uxx5WXfz zAlp`m8((cQQO7c<>!Mx$-dAtx)8ar>q~W-zzYwOXt5aD+{j_(bR$snOeGHeC7#NH9 zVYjKd@Fu`s9)fQBz0ix)n?!+$f#C*mO;29JfQx})5CBbJVc=S=)(Lw6nDF^nuetwU zd2AIt95Q&}daW#%YIF=_%wL@g17aBHL!9_x9H$4W@X;HG^wR!>m~i3ss7?`3$gLv^ zI%RfAf($uCL89s^Ko+k!N0y@?4&e%k=B){VIsI@=xO}ySlGh-#QCw%C z+Q3u2QzIoednZhW!-s)WPD#IuBg?Y5U$uuzl5UFd`xOEDRl~fkkMVKN!-T+aqU0Lx zmP30Xhfx3|8#~YQd7T0Xf1kg56y9~RF2tZ4T<_IuZv*+0B%ln5*aO6%UA@BAMU#)` z>Z?fA;7aa#?`kAe5peZ|xw0r)b5s^AlYzD_6IUjlPhB-4%#g2Yl1?x$i9ooWxlA0d zL6C?;u93s)@tE)hi^{aMXyE-OYgZg1aTM2brrMQ{EAb@SJXO9RxDuiw&aJ5@a|n*j!>e?0XOFIXH^*SGH^SB3u8?xhMkWN&x8XK>Ga4$8|gt0>g<1VAtMf0GbM5x>qOY-=%KLSS)# zjLjMk4I7440Mw9W*$J%y=;i)T4K_F5TWOBYOK<}D1k=btKj+>VJX4>Q^)XBt8kMPq zXqDF%T2)aYV$w0O-E>T)EgOdth8&Egmm(BY5?NiiAX=bN{1EX7*EE$UC1T<$b-8Sc zP#s?eil_4m`Rlk|ht=g!ZIY%AMSQ_x?lNo$K^cB|N2f`@wK7AtWk6Ao_3mXlx*kP& zFubfsl#|*&<{b_sgaFVGCnaJyvhO?zP!vxkML833mStr=u12`s-u0o6F_`2z?OyvK z&0a#lM8M!9&+}PdZ?;evW&uF93|y9Fv+@`qAP0zUQvf%keA!PND=PC)*%OG*yvIC1 z?*5X&YSx;I1Guo*6;VekDv)oCPw#q%9B8R%vL%5!d1&%Wg^h(S%ZMtRa7R-Z#bv^h z6e2_A%fzWaM;i&BqQ`b3al&NDT1&LQDud83x~!p{%5dW2Hx6+zo%X&oO`8b!zL!Du z^%2A#`U@wh7+qNGsd}JVgON%m^r=vm+Ls`8epEhB@kChE#bA>VeZY++r{jVM=){!^ z0#g=uljzsSMAfIEX!tn4M5Z5MnzFz&mIR~ zjCMZo6U{PB@Bk1#HVcGdoIL>yhu|_)Wuer=AjvLTLB666butv6kyQh2?9oJsHOpKH zgH#%V=jnXp1zuTC1lNreCHqnx)k}exB-uL=#TC6TKR%9DRQ2LKg#J)MAjuDOZMfZ; zFhw0$AjO2K{V6#AavVM;JStFap^nuAlIkbAxGa!j`<3VUOM;=^oJmS-$i(aA>xRRA zERubeWyrFuMzDFF$3=miyys59pjFfE#*Afa%=W1#bdJeP9s18RX@`A>TpLbuI8(<30A60QgJ2holye_`QMy_%o} zrmiDI+T%&9zjLlb{((Sy34qi#hpCsdnfRIX1Mzb?dU*%T8!#LouIa`}U3&ZAV3-5| z(1r45V_qg@88j^f{7(6ypJ<8kXjr8f_p3+xQ`qLFv2Eit)~u0>4nv+S0K#^Y5C{ULQ`d_4%^NVd=&{~xXviNJJ^|2( z+42DNBLb$TI#2xr@@n&#+#ySL_m?Zy8>~4I}yg#(*rOzLz#xS@sX9WoqSrd$dA z2%so0mn96^i8AW2TEH+0U0&TrL@@joIYHEHnNpkR_cEl)C$68iaH+6NcC|8cTdVCT zUR3rq7dfg$jUqoq^4dF+B7e~(sLZ$(+hiE0j9soh-ZXN^o6B zm}MF8z>!g$Jw7RuBayDB1%ieB)KeLDKhVPc7{zY1u-mopgdYJgD)JRYF7tI6a8Ib* zL!G}79K$s@j4RGQit+I@`STx(lPt@UPcE?Mfa_)=U@$Nj-sXkEunGWuCphQatbYwK zMgHD<+AS|wEWz~r# zq$RRqqN8J6Y3&+kZ-Vxq#PMH=fu#FAWhLse>NW{G-eDZT1_0{;toOh=2jspZXyTs- z+5jE_@Sp=81n@)wxGa7NAxWO$lrC4SuWl!*cdVMa2I9Iq`KCcW9^13Q7GVL&q+M%k z5=f0?uG&|KDXK@U4V~jxXnGvbdynt<(eik@aNa@8(Q6`;`P2u(u+7At zvdChbh5@Z+0jj}NTj%iN4ZhONOxxmXy&kmzTzDRMn+l~gLfyp;xgER|jviU7tteOU z=vYnb0bJyOi^hNpF9cStnw@SxJ>ABgcLHD82Yea8y}pyDzR1kQns4-5{yaK;r%3>5 z5#TukRD>x=F4ayX^u%>+5;I(AT@ebKx;cgCgu`lUo9ojJ9{9FfhEtxL!b5&39>P*Q z=$Bv`OW?9GN#Y6OE)s3$P_=t3P&n5lFuA{Gz@u1-kGZAzqdO+>-ldOX+qS7l`q~4a z*D0_!fTs-18!&k2!Zky8QHD_f1n})W=ZgS^0KiBhEDb90U|Gt!+xLT`EJWlmvi@lZxm4)|XaJCYiBs)RsRd5kEuBcaST9J&$Hs^4q z2d;R5!?I<0k6Ir;TCE%xUI<(W;LYW+W5?R~@|S_n90I=14WAHxnwX>Yt}K4tuWC~o zS|mWWyPncP6|FPp@9SxX@^P_sKNIJm`h|)sBB_2A)1ZsZUWnBF^Pt~?Pq{5s-wye4 zy+QpetS`~`s4geu^{9z)@ip2*Lzi?xs5*@K@2?7D9LC0!S3^I8+a2J4j!m;L!W-(K6siC|KA#lWo%r|Mhd)f9v;Bxz`qUs&~P!fyd zPF)>#VkLfV_X@lokKjemI2IpG4A#H?4Qm5Jd|Mzmn3!#@Sx77z0We!{XG*OO)*gT{ z6k?DN);ZFHI#606!Q7tfuQf1)_=yd3A92fPcwcfQlc@81i2 zD>PyQ(SwfF+Ag#e6CevREgFg{9YBdEpw?GK+|c$UTxy`OBCwabFbu3~;ZoOCUeyQ**(q?O0G(y}zCbGu*pHK~}m?jE!Wu@IWPA zYwOe_Ua3N<9So5;0@1pSg~Soi9dyN z&&~0XbAiK$+xW|W2L1*Kk>uo~kMWv^L{z7!O%0(+hx-x$Nvz=UywQHuE8ekFc-*Al#Y>|vaB z)>M3)I1oRJ04)UA6A+Hsl)%ElIoHqUfQJH$K>z@Nn~g<)-9!M3gfSF?(6oi>)qp4l zH75rU=j3zRNDW3IvMv)4zYoB9dJ!O$Kb@BFED(XztVu=IwJ8H0IN364Ab!`SeA=}f z-WBwV0Iq!5aFKor%a-MM>nnh_0{Frg+W5d^MHKL;ktAQE+MILBi$ws;*}P2Z4PoOb#Ldla zd_9tCi>Wq%Lk`UK{FSA~Y4|EnwgkP3ALF4uaEWbxEU@WKgPy{4v6#9!RCw?WPbOqd zVG7`_4tVv;vPC(tz4*mBuJ9gz_dg2!x5Rlp1;Rw%2|(66#nEv^KM8>o;t?v1CWQ33 z52QQ_0o?y$`mVWOHck<60h~I|_hZw&q>kxqQay}46Qb-aWWv2i?Ha>|gv+wsjPs9lZ@V%1|!rsfbDvJBc0Z;hl z_=Wqo;LdO5n3|fx)YKHFr>EmzyWJLl`c>qqw;84uEE{GYi)j(yq7eY|smiwcscJ`A z0X%R3wB3cjcz}t6lCsY9*vRkD2gMQPN?24W_o|)-sHGLcI9bNzTr2AJZM3SWm|TQ2 zJ@9wWb@+*w=fVnF>}a)ey!911KJh$<&4GAOCm!imZWf=yb&XCN7t}vpc`#lsO}aka zUurw9PRM*8XqUeboZ7NxBsvazIZ~o0+=qH?M2O=kF1Q^i-9o3y!h#AB?@ba;iCeD9 z+sS<4TKF)w;LpCb9MjX&H4(sKAbj(HKTEDX2c3Lm;Y|e0J{Hp=z(pefZ~}GdWnJoL za<{IOuOMaDYOo|y>jHQHOpzoHG;v=Io>e(y{>fiXv-~a8z8H)ZQUh%2oc2)gF>Nsx z>bSPTet8u5*ei0Ja>~g={2Hg8n&Z!|%<&EYzHBgI&6n`>*CgD6P-Gz~`llj5y+$Q@ z{pnZ`4mHc30{BEcQ31-E(I`G>KL`(@DO4T!-U>v_Qz2S>2VqoO7)cEtMNY_@+ElIZ>oO8WN6ctXb2R^L~l@ zE9EXsZ3iQW2d0!|qT`C=v9J&p56{)}lmZ9WX=~CKi<FvZe)r}1oW8YhSaHfJIsW(+Io<-m>sHl*j=V)|q4FX&4|HDCL;|cP z3W-Sdv`oYXKrEjmIb+RMPEKa;*#=*Z{vbVGwM5&|Is7B||W z7wwa%ieAtQYG;QGAHybmDm*PNBK{$ zAWn{akOQY)K^zAwVV+g{Jh(NvfJ2b5;4VgQAoGmkc;9)qfJ6NaggVd0L6Zi)D3ToT z``aC^dW8{xFZ}40IX<+}p(w(@E(NA`VMkX#6xk`Emh5W@k=i)Dq)4{$2^Um-pyowT zb=3qcibO&{le#$HB$5;1YbcL3tp#9V#bnRzoNO~+y?VLE!&J6!Vl{s1o=w=h*Y^|w z-KGP~8(`=K695XS_i^hr0M0p_fhjVzlH+4?VC%NPNHU~MBv>?Y(Drp}EM>vh7H1`r z*A^cC79n3M1NgVx)}8@R8(hv%o|OPT`8?p9bBz4^#YGq8_?t_e>=S@+yNhe=6IQjl zer)Lrglv48BZ2ao7ph+%L5lRNUHL+s=swhqFcWb(eGVhC*7fyOdxdkli+i01hYg}8 zbzYYh>NeNyF5-;iSD!c&U$|?m>*B!a>FK^iKqo)hI3@xNCIA|c5&}WhOcg=`HB?)Q3lh)HU&IfvKVS*Yggla$gmGn?RNtL*4001BWNklcRJpG_Zl2Il732{+jM{y1f6=B2ryJI0Wbrw7}$!*+5i>?nrL}}1~yj>ynH@2 zaMeh+3o;5EUL{=PVlUmoJod9N;MLJ7^5<32+Op%7<$O$AelG*?8?PA5=lY*|s*Q&p zYUA+X_Cgn>D@I0geC)~`=c99txDQ0DGW;b3nh>0HeG(e30+Ddx)BQCy)zI{8e{BkY zMJIbFLfIPbgLsdHeHJt-KfdPz`PTBHXtn#5%BTfPtc$vFlAa6N5W0rS73u~L+>cZ6 z)4R6d-g~pI-hh-4XnIu8rUVSYB6<_xTtI(>BOC*OGnP!jAK|dl%Fxz0y9>qf@{eDJ zqi@9!HZ0)NUIb2`zjYp6nMCR#y_#E-UA}?HRRIL)J6V=!ErEWOLb}E|{LBK+_dou4 z8{hpdu=4=0(*ZjR;K8WGT8DD_(nLO2*0*q)5+`7 zxZn;lzSHr_f4V=U7KmyA7`8<)pU#J?#QQP1(En8bWHH*bXf=9IRN5?xxSxykxgaUf zy%4<*DNlg%7VsA|V>x2}Bls^zx8kb1_T$?BaJWY7_8MWs@nF!eHrp~;`Inb}t@3XK zz=-#L_lac0H&Rf}tg6F{I;N(kFgZDi$;nCl+J1fyn>C2iy3qua{rpE3X$%V`x<4 zuE(EW;IMh~;EDhM_@&Rb@#Q8`M?!Qe0Vga{vU0oin}`Nc5x#E`#X+J>Y+-YMtc63p zj7gEn0kv}Ig_P1rh}tITdWv#4i2o4JLw&|s_fM7XDt`#?JM#dRFL%iE9IaLhd7j6= zEX(3=_{4Dd?Pk=(>`Vmogmdmp08{1PbotjV|BCX@)89bCrT`M?b_0mda=Phi9*?Y= zl+}~D>Z3Lc4jR(n^gQIkLAH3}zRH)&p$D5zBxSuNEIVP@do|E1aidAWsoys&Ao<^O zPaALey2rPIvH@zhBe$0jJKo`UcFapLPY55pD#!POJUw3aA>nFH)t&l)ZUe94=&2v5 z{t?~fkR%V)^p3;2hCF~I>4rXA6AYBN7S1)O@}%w^9XxSc*ENHxKbM)$$2L>OLrO4+ zHuk_{SdO2)Z!5leXP$h6puI-e&@W5?bV2Ref3=WzS@`z1L5sPm2jYQnBrIFJKH zlAOzvP7N&LG`(OY6*n9g7K;)ZaqxB3z$B6=_n+&5A74PX|2w|xk(G_XWTx9$Y>)`r zF}UJg;Dc9XSf%@q>ToOoV;|8Z3e-Dk0y<8L#2ttA>HaM&VzJqqms^l1>Lkuyl2C6>2ddoM zSNI%UwMde=-l_XT^gFII8gJXG-sOv&G64VL*WxF?wE+hX*lUChGlvO)5~*kX`FQGl zcoZ<8HpZ4wc-3?qOi0M2m$oN7Yu7IP%K7EXa{$w^qHL`O#C=V8sM==dkd1ra|NS|x`%D|3Ece4S4HHXks;G%% zR3FTm`V9Tb1SlTgCpvuaB2WRs^(uVzu7h}8eA*ioJrh*+Ocbgtd*RFY4%>mwp9i*| z0c_t6EMG2%#((;!Hh$%xM^?J%SS;vriSncb15`WH{T16u84e*2hw>aN4#Ezs##`@R ziubSChfSNNq38Pb6V$4c; z2tv@%CPOjyW(bko-1a+ct+KOZxApFMMH+PkpbAH~pK(lW=u$?c{zu9m-jjF^Va= z4qQJ`C)y8fTkthff(ot_P;MOWe(X%V{;`Mg;%6M~DgyF6FVnBaHGXFR6TiJPVDZ5O zKm%C)hW*-80GWgL({NdZ=B(QJxGWfg0M!#h}wy>tEPkoAI>@a=>-ly_6=qy*>^(4 z^+G&tv1(|77bny?VJRz%J#uCFREp@QsKm7H_uBe~1IE3_+1_D$25iqeR{U9KIgF0Z zo)}%bHpgeK_V~!(7x*L-V6rg~g@LQ8*g34kP#|@#6N{=aMZ?4oI~dtkRa1wZ+n zrTEq5596$}rn-6q`h9y~*zV*Z_YK1ZTLh>u(?`d_Spi@x?hl z_ab0xtW0@=>I2=c)Ud*WhdmzQ9M@Z{cTm?xh&olyj#qL7zj0(MKKadMjqeLcy)&TK z_XK1IIc$l{ZuWT)Z93G3&kYZ$Qv#aP(hdGCCbc5ZO)xjCLrBqM|n^+Enkfr-tR z2ZAxq;4YT3WJQ`~0z!LHSiX%K%jFjKNsTxDaE^~X-BrT7={^K10Yk?{81lT;1UN`2 za3ng~IbbS=CH6@9W2?P*sW+4cW zu-a9=aTH*aEN4Go$$kEDEHFBGsQ0OQx6Rdv9y6$OFnd|dZ{7>)%fTcfH`3uNd@xCc!xRAY9 zAJ5=(?9nNF=gW=@iF41*@x_+|7Zz2yYh=v_d7uBNA=r}=?o%<0B*ur@SiuHG{FmcH zehdEOoAw&vlN}}idZ5>OfQ=icO6Ok*FMeu+T|DeNWTU4BWIpm-w5n7(A)A_I=TsOk z|6;^o9VXoVwK9qPJ$~n$1s-|(fTIV&S*QW3iZlT0TJ0S20d2#E94~~ct>X|RlMt@m z2!^?g#j55v7N*(*!7l7n{}u^_FidJ?Ki}V_?(>DQu^hj5ZH{;5hy@gFqS!g!*Fnq# z<3aV!8mXt!b@lsKj2kpggya7UYw^}^)?XvsBm`_qVDZ5OKo_Jwlc}cyS}g~lEiC`k z4cm!R7Y0C`&^;XsgsbQ5lPmtak((-q9;HP-$w*b2A^&rWj^#7x*i=xx0^uml#)2t@ zg|;wf1MhrMXHe#A2%x4g<6J%vnI^tnFZ4Uq$y^{IEL>K_4f%yR@q)vvBv_aUZv|yu z3=r8|eRYl-f525QHS$zHSG8;ClSLuj_bkwLwPG@k!lKiTS|JFrmS|siVA?IkFFtq% zZrx$85k47V0-z7*Cj)9iz)#km(@hPK?7|aspRT%*H3{*6$HcG2M$J6vGCCLKU=gP* zAoFJ{KaLy9YVq)R`_qSm6}OY%sg>BPV>IycxHXyjmh+Hd`SKjk&#D&#dFm&EbeUu{ zU4>gz-PfIA=x!tgM7pJ$p}QMN0VO0wr5Q@3K~lQAyBR=Q7?2d{8oHYSzIlJo^Zfzy z%)RHHz0N*+?Y$OOurhrZ1RtZM82$U{4?SD6>@?*^;XxymzoOwvw3L}Ff8#Z|H?WsBrq~=v&`e(Hbdhhg!n+zSYU1N38iuf2DkybnUzPni**`bST)z zLZS{}oIKKj&a8g>sOtrgr)lcn&%vm3D=1ld&?qFGID-;l+{hC9A}(}oF{7f-x5A=1 zQTpzZSJn?3Fjns|MwNhV=KVD_&yme2zjj4MMMY3Qb>5amiG{cuchTKP9G7T2_YtPp zF%U4*3{mHuFe%4e;JJsA)ANx``Og|*92IDIXK(t??|414hxhrmt&xAOptD}p=}1m~ zA0p%Q`mc3`WnDJYmdvJnXOI7o_yt~NUq(+8C4t1+!!`N>O7A*SY>Imqt^)>$gwUdq za(g*novx+0*%U8L`&GAPW(7&G$5^hceq+aikB?ZGYy$eg^Txm%=+dJn0D<`ifh4O>~ zpXz%zt>m}mJLR}h9zyOOiJ{dV==zLube7n6gL|e>`i&+Nugp*GL&oz1K}dxNWcOkk<_nrMfc9?FE)U{-m0X>1dAO5jsoDq1xpl_K zsySMY@kcoDg@oTbdMgUvp_6ZfJLhBJ{r4E z8PG*f@^hb-Q7$e^XefJJwukK*0S1CebLgSF4LzKoB!_r+2Wv7oH?cYbA`^-Qk($y# z&0JR{0K}Mu?XRNY6`mCvxjcAT;8kv*b1TU^FvY_Iks^_917vNxaYz=h^jnA@IfT{2tce2;wCoKUhEBpBL41;_`v@~!BZcJ{z0<_i zmEbJ#hU^tcz$)#+IKNd|U>YC|m|hHQ{$S%AGP?;WLm?2thC8N$jrC`W+cji6@IbwnQ5^kQHC$tE(KQ{- zV*N>a-rSe`%?x_?uMqoXFJ3B^^BOeAvn2D={7YmQ0{$AHfZvAGp-jA!h5KfnIEelJ zt_K1)@xF-H0=4@1txv5x(G6l#iHkW)1h0xTk_CQMx^N23$R^zVpbDKsS^d3 zzC9K`^hj5m(CqCOZBwlWa>Rt}w;!sjHRb){Xi+)Pjmj%7k=eN892r~0G5;!!Ayd(X zP9rLcp?xH5jwUQGU+?D~D;;PM+oIc#14JDblI@ZlsHqvmU0%ucx(|T6mucU5d zS(jc;2#DeBk*WQs57EHFrA0n+M0Om?JKY}`GO&s-3}J~|iU!r<>pE^%b=q3|yKPVU zPo}(Hf?!72)Vk4pA|3We3_*@rQ2}9JF)tq`OduRm;6N#uB=U?f^AzlYauX{m9+6cl z8J&FKq&M5}qtu8*#ij$frLU*E^<3GWu@fDxpDx(+3u;{iTBL4jWv?>?MF~oE2f&n) zj)-Axzuak+jDPEjbfGhb!kvhJh(fk+<2st(4aFkQde|i!P=^W0IN_53@Y41QASKrI z*jsx$Tql+Gf5pkZq4PJlZVc(t_n%7s@GuG&L2#gN{nAI(;^!qgEszDn(fzjx+n<3} z9jTvz`{YjcQMI|F6_Bu-v}{`L;Jt5AqpOo~G`2Y&ORjQ^ap@1z`G<1Z%?iH0vyZnH zkanqZX>3`LcZvSbaQD0&QTW#FMlzHMY+%y{hrX`eiB~!MqSy%oA z^}+tDp4Jlb>f)s{D%+29sHE`Mp-fw(>Jm!xWs2|Ft6DW}T%WJ#7^7phZ-+mNBH0_v zrV8cMed9TPrth*eN$`B|A9wqn5pKexidbOQJZ6vG5W2*<@{|aZRW_s-S=d0;h24LB zpx1`$Ku6lcM!v?X#ipXXDNlU3#|mbq;8<;JqE5%KuBT!ZU&p2}l#2j9Zn#=5ba$1D z&nHwZD0?V(6m`*Q;xu5TT58rzYFte*8%~Cot@1};^fJkFv+JI-yGWGOmtz?+vF2wi zf;xPbZ9%a{-F!o<694iHjvG$@PiP|<_8H|rkz8-Id5f8m7_lwFDpq3zp0f=~kB>FKOw<;jTKNkbR`88dJ> zXWb3n>_soC)ty*TKb>!LH5X)y*V%rqkG6mQ$Z4#**c;73ft`L!#5!N+cAsE9!VIm3Xe2nO}mKgZhlrgeodUC z;l3zLHaj~XG8g6?G%1h581ZBK&EgEPK=CiQD=2+Y+U6(PkCPaeoqQzTnQ`0%jvn)U z5pTKVHO!+h^Qg)_cCSF{hFK3z?g@i97V(?>(z~_jS3TmL@%Z_73Ngj|7(pT+VM-NW3FW{wO2BoN_2pLjOA(QT`Y+WDFw~kH zNrIs}{<2r&ySfI#jW4vufJs~-ylyO>m;lkz-A?Xk$$hf{nb~8=shj(8LtI}IWBE#@ z{ZZY&Yj-21Qp5!*vutp{TfzRw~H&RoB zmTXOQgK6q597*m#wiMlU-EZGl=HXsGd}9ESHLWN-uiJywerj&N$c>^1iLrXG2~mub zu3N$1T>lk-b|LK-LR_e3aON}CK@K%KLQr8zMgoRPg>$HP zw^edP-7+YZJNV4A1H*-@CF~Y^2(qXT86!067ss$Y_1Y}?x3CQi_o&65lI^gAaPSDV z)bZ4eJ)iXi!FoE8f?r{-GoN5+OD&RqBfk&JF_OUBn!vwGvd`!?X5QHm zQjHm>inYqceW4FdaLu*+)96ixK3Es~&_&P6AZ$sEju@q>i}=`D9MXSNf9(5GE9*lX zRN9K`IAx091ggx~ykTb7HgR_CH(4hf6 z)80k9n#hvw)0=0T<9$(*EpP7M^3}ea{E5v z?dNZbpB$K$uoR%MNDwQV5N`D=mG<`znSb<=v0&R7fpG5k#1~w&LpvcpAQ`JIBG0MHPL97IW zK7iuRzDJ^n}b>GTalrlk3=&BpfC zWWFp?g}mc^o>W8FRVAw47ENp-1sf-)8W(TW2y5N`tQ5|2D{Mn8H4HTUne7*vxu2G! z!1|Cy@+OQ2DJnEwQVfigrNU=>cfxX1EF%7>x`eo5I`aiSb~Du`b`w3DAtis^!P3|- z0$>Y#Oy;TGQVR+$ZjC1ij7*a7bPFs41)__;q?$`T68rVaYoV;!aphLG>zNfhJA!$M z5bWcJ^dePMa!IVEfcPJqv%PYQ0TSPF+;h=q ztR@v13Owg7UDES<)00y2Y$RqGiuIBRapqNc7;z`%4Cu$wvQH`v=};@b*5^Q)H<$eS z?p>DPg*1hyI&c&9unTqYq8ii!Q!^fIWJX1iw4gw=`Zh2=eus?izP}E ze~s;R^3D%GaRS!+u&>$!Kbv;Hv~PIm$$?=|zo$SZHK7(5(4pg6N>6kZrb6bno1MkFr}6!XCdPW5YtIDW)1`-MI?tEppL2SVOhVQ|)6?a6tWn zq;u>{bZF+X^iaGBr!cLHasr*6!ewkTN)4KA(WiEXj&3jayl~aGf1hp65opR|pqWN{*2d zHQfJY>oqkf`;W6O^HG1((byOs&%d-9%5wUqW*~b)QF={#_kH>_ zcQ`d626#5GG}m+qm52%s&vGPT@af_Pi{sw%YUstROZS)+v-w8hsm62o0VN9XRYeIM}N%wmYFKQ<3m&I1;D&-){4j zhnuCkYgD8qnr&2r1bnpP71N5}EAtJ%n2pcQ!-*74?yWNGrF#y;6M2ha|Kzj?9PCf9 z^lRlQV&=N^h8FfuQY(W+7QD~L0W+rvIK1@^I~=bZuW6Q+^Uh_?Z}w?+);6DDulT!V zPR~e9?~Hz66ad*r-||0*^9J_u^x(4MyR2(?yg_M`lmQhU!y^(B`;|Nhstq+{H4_XO zylL$>g$l!J(@>!)Twp){xI~VbsC)*|ZbNWLcsWfuELeTLQx@zf94v??tfh?M`8!Bz`mo~Qk5k>x(`cQ{EPvxB7LZ}h#M$2bmY1Y< zKxf$sZ%{2LFWg2W7}CFMBN!zOge#uHzH%SkIYTs&MI2;%Vj4gM-@ZcnzXk=(oQ*g7 zA5WL0dV~aNNX^X?RB1A=z%h>E4u30nY4yp3)LYq#yQao{!8h;>4!HSLspPO-?l?QSwQoUg85>uGFYY0F9WXe;S;` z{{6Scm+9EXZ9it6mKiWYr)arYB?Spl9MzOVA~K%^)(=E9vu3zmvOmnaa?^gvEQia3 zod?P75G=3cL8Z(7k75pgwh-LZ@n`Bd01UQJWF4Z)!@LB151yqxW5b>uy7KF0z9>G5 zk0l4zA@D^$>H!4JysW=Hdl&UjlgL|IF6W$+>aPTAcKEh4bCPNo|7_pM;=Qplfeiti zsjQBXQuFBcrX+;d1;V*VVJl2o=6E;Cv2n-T!cRW&+ou|FREBXYGm5OgXX1=txk5OZB2)>#?Ve_D|P#;Yu@E#M9i@j;(K(k}57J zSl_7zn6;Bits+#D6(UM^!G%zz*?xSTnGeYtDto>)gVc6=ZpvLgn}2nM5){4d32XBJ z3H4|{;+M9VU$qJQf0|xC&OCXz_6a6ocV0~qckoGsWaifJN+=0`TPR)Tc0@{ z=UR{oSwweqXveXs@zDnX{~ITk+vOT%7xf!#gGZnB6+OV$*~YnRxk&RIx>JG&P0KR{ z@au&do)~N>yM2+C4!%EWsc{tQHTo&;;TNvpM1B~WFm~NQ;-|-scDmXx9EqtxkUlz7 z;|IOC>W;!LQ)yCO5U`643uIX8161|>GQT8v?=aj-4y^zpjFG&d7KzktI#Tu}KL+>& zs7*c2$n7r2bnj%vABxJZ;OI$Oo>`BQz@_1dyik|IZl!A9NymEHpM|Oc>EWtCJ?)l< z-O;^ha_g@XP>qE)$NA?{!b$??;z#oXS+*j+-F%I}btB+3pG!Sf@Z3uW`rp;w^yF5D z`5$mrOfFFWxYVO4n`}g=$#jAI&CC2cguo4LGyty=HD>##+OkR|ba%r)ODxG9B7b$a zLirQiHPEYnGMY71Njlyx!I=*i>fFHrM9Z(8_SlzZRgHM*7QcTLPy@-WcTPxexxdI4 zkHwXyE-O0v$8yV4gXYqjhvbSI8!W02rO(S!@m6LpxJ(DzSX^t&p5-h6iTxauHm_g4 zL@xB3cy=Jwdn9mkNcX-yx0Cul)&mKAZVgEBGk)trPmfoM!X?QmHy4Zp_{di!UKDES zkAE8S^}`l(^6Q_SXMJ-={Cvd36DpMRTcJ+GZsQZ=TQ%+M*8iIIKwA`31(<`suvLN6 zs&hR9CXI)Dq|M(cxU_)#u^K`y^NHPe87#Nw57eDcB+ww}CW*-t+m$78wAoW9De2Yn zQ>V>(24HAB@Ib2o#Vxw=lyz-D4=&8Jz-RT7LfaKjbs;_AT_}b|Hg~7Qy9y~^&QB5{ z=fxfkQS=TZR&>>(7r*uB4x_s_IGWe)advKDfdmM-`2Y&Lwf)e!bm%dUp8$efjze4VmP_UlPRKSApBR8vq^SDf-4W zj51AqpSO$75c4Z;`@Ag2tt}wuk@Ixc(tk;#CC`4on(H>%oFyYFQ7uk_ zk7un1)0WGR@62$O;b-Ms9?D&Q5gPZWH(Gw2{coj(j*Ny!k2JYkgg&vV`NM76$uRf$5+ z2f;$OS$1@o3cfwkj9eKP3f^w&dY$s4K}<(|PiG0ej&YvY(AvIe(qy82y# z>h_SMJHj+pJT8nzhl8(E9Q1a!>LnRRT;vB@6?Kh9_4ikfkCkWFQmtJmepg6%0w@hw zIos<4VuKCq5uylnP8mExkgG3$deEDI(43Jsk`5XFFec#%OfVwEe25~NRWj0774jv}ZrU035Zqz>=vlMHjIErT z!iSnVQeoB8-_{!m8L-yqBaIrw*{at9K#vN9KkNM|K?gkBe_4KepVx|g%F%Wab9hyc zFxxy6ycZdNxv2=T$#)7)<#3R8l2#l8Ifjb3CkOertzht)KC#3i|CNl?R&{klK3%$b9dwVxA>j&VzVz`O z5k7itn^TL-9H|=N9q$T%k(^sOf%|*Y38U#WS+}9-f*l`DPdtCh#2`tg=fTN5$(M>B z59PnXqz+kcqNG5TH?OPk{tNd%45t{{u_*0Ct||VT!89*2J|8cY{m?+2oS=^PH#4Li zeZXX7WBh$KIeT*Q8Q45T8liJJor~UGvEaj{~0M3A6J{`zxA`Lup6?_5J zo%WIH)bJOn&gZ06CKT77@XirZcigHcT)TZ)JL7j9sAp0r27F74uBp2q0#L>wJ(NHF zDRi>V;TFfu-;3k+A?w=T3wJ@4!#}`qvy@soKV@FQ`=)0o706u-!k}7mS9+NHCH}$L zcNw^rn=Ny!Y^U!10o^`=g!a@#rB))c#VV`-vZ(^OD$)UpD4IIRt=+-35@`3hd>-j> z!P8E?=YZSnP7vA}5uj(g*BAYlWa`w*n=vW#SDO)O_glLf%lelx?XJMKt{U^ZmFDzqYB+#h7@>N8nllo3Degr z`9>670ABhV5CCR-{IH(|N|93O~r(!B*FG_BvR{i=-G|EZ09%>v ztNv|hcNpUFN;ge|nNztZ4fxk%JTBqi;G&MAdQB!b^bNREmz7xZDZwTWCVk2}-$@B< zt#}Y)kV-CcXH1&j!2e*YWBYM$PnPLws-81K z&n_fvA2JVFeG7$^h;B}Z!&~q7-6_}fi!xjsf0Z9pofYpj&O*qmnv7C}->vQ3?kq=U zzkR_0Om7*S_Ko^F6tG72YMv!Ky|{O!YuN`;@L1gOKr$&nyFmQncVfeE#qu?T6(dBm zkKNj#LEe2>HvBT^{+u5XzyOv28h+JLS6?}j>m=gMMJ7GE}R{ktvQzy)@hUh3Q{j6uo2DvPpyVyKBjsqI`^ ztL_ksmtF`#6fAF@)5?H)wt7XcGWKVDFf7^d>DoX8V}IYS|4jCZI21a_^QXiW*0C%5 zy2oewQ#YDG$Z+?cOfiicZOVs~LN4D;9cZEgGSFy99SRQdkXbBSx)MKgmULGqh`K44 zGf_?O<1KF%MoNi)Z=575jls#0w;YN!(|%Qa=;{Og>5i+VLVkh}Y1f4fI34$>+6a0L z`;5RddBFY^72T{{ebILIiYGXQj7xms#5X+3QaPMJxb;eX`RSbtypmK>A_&rXZHp>u z^(xe=&|7loz1OEELn}w+#b15i)cp0}3h?^0%=y~cO3b6MH$1ZOSezez|50+9@VnC7 zQ#@HW6|4$HXWI}TY7rRji^YqOyer8$wha9=)cH0Mb`<5d_;o#=Db9tqXe(vuce~x# zUuZ0Hpn=CiOglp*>jmcnI`|}A>G`*{_y`{MeloU`jq~dSj0B~8+xK_&cZh%4QGOd; zKnaWMCBtwOW^1nTWd3$%_$+_uvOa`$(f8*7VQJG|IjlRpsseWNJ z_S?jc5n|SsaK$96-?KMy`5{nfNZ7Bx71ynN(lr23+Y1HET-O+38k&w-q9TZ@4Bu-q z2MusypG+FZc{R5`?&Z9fxYIv|4VQ!#xlEh?xJzKJV#;BrjdwmSzxr)m=}DnBzwzPu zZO|;BfmFoS07Eepn{21<^j$VtcMAjSvu-xi+;4p=g)sar8~h*WQV0It7}et#9J!YA zuW#w3k;#D$u~W8=*Jn~*uFYn@Z&4ZB<)6xb;c#-|^UQ@~4!z1VH+cyX*xK1%1)TD0 zq11?ACAt+Bl$2yUo>DiCNz~UDT={q4o7_yD&p0kU$@yX}Ji<23#wH)?g`~8PVUpvY zID+Q)!gnHkwG{OUu!T=~R`|195WfS|TBq+Z_SYnQ{RMr-vNsGB(W|CHE{KZqSxFX^ z*m-_@$VkPBX8CX!58xL_x3ih5@!sp zS3i^yE-{vsJN{EzIZOD~m=|p*Xg?O zLci_>l}!ZTyQC#~9Nt?{mE!FuYB!xtftvXagvT>YQaDJ9+li^5ahf%<8mbD~HiDSf z3)6mjjV?I`ynA_s<3@VMGaAkH(%93Gs=N-2jp|EmJhI_O4DrpFHgvwrvHx?fgl5I4 zgcFC7EqT|%W7yKEw&5x1CfJ#+t=C1kYyp;tnhxV5?Gqrh7@LTY*mn@w{ zCoXFCcHigM0D&-3GY+klgS9y*R~(eDx%K0+5m_Xu2)f5eq9nEp4dY1EqHIV0jLgHz zo4@lx7ty2~6E%3Nk*}3>OHofBBT!crMu*@3mu=wdp2lgSe*F6*p1FbjC_cFn6Y}7J z=we4rzfpCnPj_W3Ebw|%%n20^^te!u9GBISm|A0@9jzkkvih{FYV$jQf8lILPq;WV zoB7T%Tty-co8)QvCUs~C}!>z>@3^)WYEqjGoFvnYmBDHlTq{V$3TeXX@;Vf|Gh4xE}nA1Wcr_ivju{xC6?{id$g4N$@(*pMC;|*ut$W0PNdMar4{KdKrvp~Tx)$}|n zn+L@U?fg|u@N$hn_@W3KXPhP3gVQkb%BX|2fO+{4IJx%a#&mVPHR?J5@HyvS2TQsY z4IZ!rMZ4}$1~4318r--f7SET9#W_y=6Z+R|y|axMPP^3fyS%eBz|iHmfUGDNCqo|l z$Ejl^F&yOiNHVMO!gE~FdjB))1Ho{V?jXdTcfjV?RbDLXmF3!^wjI})hU}wGZu6nF z!kR6l$6OfaKLGwSMT>^Im;PB*H-&)FRT^I0DK z)Xy%?EIZ0dS`XKPw>%RHR2*4U7ACu3OrePZaWEPSDq+QkN}`1@E+upq>q_j`REw-* z*-`oNUy&0=IDg*6dr%%83(W_jMk>hs@lo@p`ZcPg_%i1}$BxlkK2lF7wz9_f)mA`! zqk(r8anWWpGNGtGcclBGok?{WevLuHgO^-j7&tAE27{-;gyRzU*#S=As92PAj9fg| zO{L=z%(d{P;LP_^65q3_y;_jviJl>s8@6qfUEE9ZL71Rc2kiuw^kX(MI!rvbltbnN zhym~BpX1@my$La*aLvID--jy05}?r^<;-ju$yw-nrB@W4NpezZP%2p}8w~f-P(xRNW-$hci zdE!|S`w;4kHA2GM`^lWkXs#^m8x=;CVU_TXHLV{N&A=dWUzW&Z8s5C|8VRxiW%dnl z;(jGHuSwfG?UrVp{(J;}UKWta(Cs!H`a{6L z&ex=(Q`>k{Hc=T*dZLIP-(v0EhOr@ZV#-|=MoieX#DWsoL3J934ONc)rU^J*ovXrX zb702_9Nsv&7*%+2+w`>J472{SE$AC#vwk=?@0p+kx!AosX3;4E7lzWUWYm2AW-Kd6EPX$ZO8!Yn{No4hmR*P<4)}}$bO|Gr?5^SZd{3vj> zsq49?|2%o$#sl8(bs_g%aiF+a5%(i?o6?0&v7*VHP<-bMM1TDI(eO#=zmTSyQdI)B zXrzobR%OPli(= z99e=!ST8+NARP6(3mac^Ip|09W8r1_;58U_So+Th7xp+%YU%+W)pkr!&hl6g6RhJ< z)LG}_aJnF*dg%)FH1-N#;MK)HHqJ75K{@wD`bhrCABFlpU`4xXp}OBDOHak9>Lt@Q?7px6lmcj8zr50c9%777 z-Wmu$ObRdhXIdb;xG--E%n>PuV~$k!>W)8uovnme5bdIMPuZd%E~GJN1HAN6=0c=S zgV3cPz0f^$4|gNLX+c>J<-b@6u`Wdcjon)A>}okVMYN<M zNd$)JY4%pxXV5}hq9PHPV{$pc1(U}{>*&((#wMd=V<}BH;sf-6=(=M&|4ucjohx(* z{Jr65Q7h96uE;slA&|8+EXwc%4tbEeHI0H%pZt1=PvdAI39_b_CP<0^EhV?wvx6Ju zPAIPPU8jA?lVj3%%*LNHZ}SXh6Y&NHGW;`*9^;}h=xCB5O@%j|CCIY+$XLK|zMfi( zu@gP;_Z*L7u3I5M**c-G_b+KnN9|r@B&Qro8nM!#(R@zmM6vJ!8^h?M5Y4z{R%jXqN?z$?;?gx!qc~$Z?3)=O^TL!@18ophlFKD57}V zsVjf|)tAQP8o~TW1p9zaI~)A?hlWyXfW71_UsX1^wO6H#H3Rc*wg^ z6|o{`t7D3y(S2)Y%~3KAeKY)d5(ocS6mFEj=BLjEmbQ2QVM2(&r86XnxOzzxPo_KW zAE?|wJ?%G(kjzsqtKn{-Y2iRo{rh~ z=Jc|lDup}BdY^6n_&N=DwG)NB;mAs~d#;p-=j+GwE}b6|wT#VR$_le{50gA^>y67wC8U$=wv%%O zCfJA@e_pTlzTYl@D9J?$-BryU!BU<*#RksL&vnjf6C98yOxlY}(ZfiNTXVqGp&ic3 za4c}n<;Ew(BB!`#Us3My;G!bPZx|<@A8R_-jGMzJMYr$9Pi*rWwIb7+{oZf_x+~&Q zbOjBtUOX0y3e7y64(V$E~t}-4%z?@_a(eX^6iGhH}nBG ztV}3*-0@Z3E4D+BIbp--y#4?01^CezH6!>=r$Yg5YS;8>P-RgaoJf|UuzkJ)^!?m$ zmVY%Fzz)^O4wip37|n0yI7%9Bm@eAJ%OEo+oWK>L*scEJfZz81QiiCDA1YBf118SMgT9OzRgucuxp|>(wVTzl#(f`(4*g0q ze7pK=rH^8$_Fp!Wjs!^bxCSxWkeWx@M%xjCu@ph-!!P}i-%bN|(P>au#89xR)V{|= zFIQZL)Yy3`B zt6(0>7EEN8mMy2i*gO?@ZeoMmYU45CUBq#cSmj{6fL)Y?pU z2Ez_cG2wWHbpnGr)wsHyu9aeP=EwP0_EtzIa5&MPuJuFV?ctp7qKpP*&gaYNw!KIG zk!tP?fP)iRU&sOU!3EJ=R8D?Ut3lt3w%a`e5tNpjYU!a2!(6_kt*jscpwwUhVJ}?Lp+#1!6WuDg zGic9g__No>Dq^h>SSlETrYBc|kd+)bu=6mEU+U>h2TS|EqKpL zIIoFIl?rCEdO5WDW`0y>D*)oU4_^%glT~H@D`+mF$@&B&!9>=E}trYp;$TJaPCQZ=%RTt3%afE+nlQ~4i;sj zaTwYfccl*)HnI1IL#$2O)R@ixba|YB^P^>~778hC@TxjT7V_;D*oLK|fC;f&=aSI%`v8iiRAvGPnxXDV4G5ZAH#7iOx<$8((a99(VbTu#k@Ny#xrCkd`B7*bPOl!JdPEgvARE=v&WE)C~#_U_)^KpAfL1FL1(I zlf`=S3pZAj_G(2wzz3JjC`hWY@soLFzfU z%~?Mq3d7VV_h!p)lv5*MhL}l-t`E`uZr!;T4Onjvb*lD$zgv3Y9kS{pd^(Z&<|iXm z$S0EUL#+V^(J8q%)>wCynn)blrMt(uh{ZJ8;q!s{{W0LwJTUbvzsL2I&H~@eV`N7k)nmfzri1@!TEZqc6xFAw=DNoG z6H*nv)szN@^N54oe3tG{&WqhZij{3@(^}kmBFFcUJlJKx1h&_>E6IPrJ)(5zZ$Pdt zYCA#G85@1h$4OC#7w+Rq{>2vPJK}n1Ni2qhGdNIM2w>C}5$jjHf^(Cu*I`1#vm4@d(PWdcues$>jKeZWd}u^b zUU4;$l;aUU34xwB3MgyT@m8Mjpm%UrT7|W5)KrMWL;x{w-ZwV7#J$Bj9e^_Zw4_qAMCG$rkJ4TVr+0(wU$pnR&%|GH<>M!e&Wt;ivB;E@S4T?NV3e(& zV3v29S}FCV=7dEGtK=@nM3!cG=Yujxw@0BUQp$M@Oyy);!^~0w0cU&0t?rj?nu?mD z>NsAi-02(*(P*^d@j`G#6=(>7OMkU_)3ytE7`VvrPd0y9eudn!S?FfpuL4 zuIeFIqYAqDh_NKZ@!#bl!683t1#1$W6LfbevqtCf{7}FDVL!#_AXD%p&o66jxT!X3 z*hKGlDp~_CiM7q%XY+c@Mebu%EV>b>lGG1(=k(2ooQ%^Aik$RF=+h%!z=0g}Bz{si z!nBhCdjt2|QcoF%IY?a@@ollexV8wquS6xyoJyI?reZ0zO~e+AHe(;{@#tBJ>&Qhj zgOsj|-5QF+*JutNZ+rbBeF(YUT1=DeoJ&<6kwCJ|dVH zx_Wy}P0O{R{hTEAJG*B1QyMA)hXC~0c~f`Pia76ob=x2jW6NFh@XsW0`F02!asfE} z8@JQq0>XFACV1k^N7fHCb;lF?KU2~dg>szpUGGeH2)G%+^Ft}x9j8t|eR-Q+RP2#1wOHHV-*T_l2Y!dLbuV}ANSGAQ5v>M0~fBf|JmJP(gH6`fPpz zvZX02=Nz|%=F}&2WqWBK3v}NX&ftx_nh0=Rj15dD2wQWV>uS3- z8Qfn1UITu=Z}6}iTYY+;>08h)Tjcr>Sy*212mb63^i`C# z3`?v`-{V1TbYzGIUKv60Za{%Lq59`XFj*S6>Ok}#`J7B5lQTlJ#KQ<0J|R-lf-NRX z+PI{eF}-*_u48*QgUwk$a`{jGcxG0pmO|qV@Vneb-Fdus^c&vyrp#;Cgr}Yt-{5)M zM-?Q^HG15YvASR9^^13*LwZbaabBDYnM$@Ibd4x6i%xb;1cjMiN`JD6Ma7#B+lF>` z+T?9Z|5UHF8zXOd6;B56AFpYD;$T_}JOsHcP-{Un)c+&PY(d=ZbQ0KUDgT0CBm>OQ z;93RjkfTOT4}$NIDJSyvc*!(z3hwduAMgsLvL1I@Y89A2j>?F1TDcumaN3h#!DH(> z00>?5fITh#3B?ds73f$uVe7T2)xjJ|3E@&;U`WsH3pcrm)@4TO#R`%gbAN_44tl)S zFIHd!>-~TIdPO|iezE;V=+fwlm^^v!$ zdC}ydJZ|+vVWqfLV^W7uKdB+48xC*AIL)oF#wOG<6*WI5@DR<7`+1vfClEQ6Uqkzg zKLOc}663Ht4*AmM@sHHF`Sh9!+XeJC*Ldkgx;A4{rk%^So&*WQ4!Kb67j89ReqRZu zH_4izqWdh4s~HPASj`?=#x{bP-6$EQKuThL1hta`bka^X++uqO4msdE&Bt~o>p@!M3zBv7uoW~0;>1J`?s$I}H?X}d}H zd&fg1Yz1`MoJ>Oi^={n5n_Der5_RSPZXR7gImI)L$spohJlSSa&&-^ zg(%u};~7Ixb?$hd;0WqYC@yAaEc{&EpLh&2?gcm^kgT#uY0ldF|Gp^V-vnYjd(P1vEa1 z73;a)x&Ey$f^-B)Q=1{)(Jv#6xPUaqvQJ0<;*X_rX`~DOE2pOYN7W2c{+#^rXT*R` z?A3Q42Bm6==36eErU{llvATAb7KsQA!U#eS*{CqJA7Yd_ZO`T#`PCng{wTfcsHSq; z32t8_l_>5Kj!*dYiFzsG0_<^Ae}5`JY2sq%;36V)eAK5eaJ6)PP4X+^zBq~NXRV<5 zVh$U?qnF~X;#>CGASEK7ZN69Vh38e%F)TGI69!zQ1Rj=9jRapId7b=>_; zqta?fVx#pu8`WD}TZtDIW_e}W+CGw|tRjRnEnyv2@VnyhMnV6oL{zA-Q3UPv?&~6z zQLo$es@B^LwoCOMU=Ni^=bh`W|MSHi&BbGQLcqnBLZw*F_ZyVp0+iZs0-mIk*~y>F z8$&~<<&26*XoxoYwGP$yfG9!Wa*-JEyVNXFy&70M1*=4aUNYBAx+jc5Tb7O-D<-n= z7$2Z;iiZ+|sT6=-o{B>eU+;z6O`dZwXpuO2k8F=#aiTGC{rl#C`}4H&lbH@kQcp}I zPrQ1<|J9KWR$w&=8@-vL!^%=i>ct#1XAkZUD?w2emtRX=Jm;94f1{_tooAK#VsFgt zM`)M{N6)XshJZ4E*=$zLf$HeMt1U9AP@e1|e1y09KLb+i1Fh8XbJ;z18(Db8wi4Qw zi}sfnI6&42m$KJ;q*P%y|mp6jqZk8+mN7Gqw#nm)hc#y%}3GOZdg1bv_cL*Nb zof#~GyIYXp?k))q!QGt%_W=gD^L}gHway>t)74VDc0C;z?9Y~Vvq*G$#QX6YV`@~z z?**v7o8_2>y!EoR?h7ym9jO(U=93OX^|MMZ1mc}$En{K>NLSSPs~`$^8V zu4&OFN8msg^0Py5M^O?JtMrJ|HI7Sqb5_UypyQ<)>rYq-x2~eeGix6@N?Rdtxk7wj zG)CQl*m%`_uyH`ahB-R%p=ci+64LZkI3=0-9ZjSvA2o%iRc2Tsu(P3fQU}L)2xEOc z4K1XCo2Zam&nRQ5;v7DMu)t&81xuliip68q_TNHu3Ug_h8wC=C^(88#$^qK%A#AH9 zP!6j0hnvkcPI%9PivP})qGv9Fh~ zKTkUM0S;(!?H!Wqv<`+ap0N9Llr{d{=qQ=^B?QO=w64b@Rrl8e1e2O9Kj?K#c)@UY zZCE-xgLg}kUYyxdY3Nm5tZBYU=~pA`4fmWj#%BF(n1phUH$zj#&ZRLBwmcu#txk8< z%wWmPaeDN1&z;Uot0-gn517)mXiwr*t66JY37Qo-?^35wMb6$SZv4qX%)YGtu*JVf zJ{g3?=eaMcz?)4oRXWnhLYd73UEi?#bg@aAmX_uQxwPbayX5wPZf?*){!`uEwVDp6 zc4oxEZ12yQ+!*|yQK{g0ID!&fo;7QqZbhxc4l9G$#QnIl{ zkJFq?-u=traD zIrTv9E2NnNf9zZn{}_R<1UDIB-7^EI6*oBGmX@y6uuVi%an8nXp@tc7Y+{~irt>}U z*NiCocx~eN@B{2;dI}siNWz&2Dc^r$ua2;Yn(opbcT$^;V=ry7MJr^;eXjJ+60T?I68ff_W;z`_yvL5t40>zm{-6B(JO) zWb)l^`c=D&X5Ah7c@1j2>XH z`TZ5177nU@?9DbZbD^*|>33p)lmGeEZzhDa{*16Zj;7fp&01H*z|%kn2Ix)<$L=d`kV&%-_dGbf4|0Qyp&90(3mFd9l_U3 zYdQJsHO&5ff39r)cI>9f3}k9(gi~bG?6<_(a%Tg`q0fB15T9PVD2Mh5!j!sAxyti( zK!ChNuYXXg&{!1)GeS-6&fu?vqqVVbDKz8B!=8Lcg+Aa*gH~-Kx#2eFH#`=&m8!Q- zSH35&s*YDho&1d~(;q`u2&RmLBU(f5`AuGK``dQu2>+897=sz=#2b6>nYSIVWa%D^ zX2yi*km%u_K8N8YFn^#~FVk;F?(nSX?k#^&=*r@R)lJ@Jt1RxEp0DU2x_d;dkt@QhU2=9MJ)kr!;zaqC?V z3A$6|Mv2M!&@1)_j^NG|csTE3!;TJGz(c=6yPaYi{Ia^ZFo%hj|5f{)ARy05XD<#+DaJQ<8a;Y~_tAhg*T+9b~k&F-1};Jo8ZFWRFgrwANZ%u}vNm2{s~~ z1?mKA74f2*0*ySiQNg40BME%l(u(lFZI>Xw5L9dL2B29 z_XwPD-Mm$RX4!6T9+6&mdA>~9DQ*Z$2>-WIM31hRE?cr)er3*G#k_rXSVyRn_nKFL zn`^+Qor&;v+zpMi(D9k~GTrResy8!8|^NpVt5P+0kR(KzEZgVah%nzxsgmXBLr-?@jL^<;{d?&jhki|cGF%ZQ~Zz zdT<&W+`_*g?mG6R*JlG17vWQ6p64s_I=ZUBE5~b!bg12RxubB|8+^Ek3yn|uFCvaJ z;@}U<@#)zob*UQ=Rq4OwG!NiYHros*ce;%y3qOxu(4pm<_yAHkzXPmwTj$YFKVc4_ zPmhRI5fu?0uV=D5{mncaBrxRtkuDF>@f9sSIIJRI;~=MmL`5P!Vb&skub-I2Wu-9s zDkabh$M^7FBK!j3B+#l+^N>MCf0Z9fW_~yyD1{r)L|v~1q+;= zidAQbLqcMm*=3u^n4jNB$v~yp)_#&hD5*(~lZ3;@^Ob}8Fc&d;bo6tu{%UA%R;h>V zMj2WiAjdK9r2mnC;rlObs#bu}HI(Rwf__MK1ODP{9$}Il>(_t%R9+t5OtS%+b2>v+ zNh;|K)WF0lP8l>J`ydoZF}2!4>2IgPz+v;0FZrcCs_Z>v_+t{gf)mI~3-CgsTDD^( z$gy;cC)%qb{g3VLqyXWYad+B5o_AEyd7VMi@q^d8l3Cc25>o^9SOj&h{^!PY#Kh)- z^IS!6)6`R|&96RZy`6vTMpW${eQQ9^fs?tud%A&CeTu{KuskLXmd9|H%!d$Oy3Ev& zvf~0;Q3hyHl8DhVX}Q1Y!g4t4!62&R#UDcD8AvuE$O8gRtFmAsUM1kWlJ{_FQu(=r zJ1FIq*Z=nYahN1=WK35HJxMco-S3BRuuzIf8^->ExP3LeQTaR5+>w0yzcXm@_6{(*XaVX zazbsfJfF!RN9P&lb7%L%PEqSk%6--yF#;PM$Xvn4^&MJt)mcLfVDG~J6zIV7u3VJk zNPgq+#7nouWV8zlkH+n?6oi03i(M?3>`g+>+`|-#^(tMLq@PKGU--BJhm>+I<+-M% z`{kp;#<}dH$0jH7X7bqHFwP74E;|}oY>|Ew{oIx@Tznwa%}&20pWlc=eQFp(^rn1g z4hMfLsZ$F!#eAy|6;)CwfV8(thtb0sYbQ@WZ->RnYvgGVoe~&=KCwt|3@0kVcD#xlZEU06c@H@YYjU&+z_>@=c7+pynXV2 zH3yMuDDR7NwUikOdG^lS47+Ex%lcP@70tAt74>}YDD(@bt;~w-0^cRzX^!o*{OlRO z&AurIX!*--5tP_ip(xod=PZbvZL&XYk3wN-(SgDO@1O*{AD+{*}oKo_1JHg#M z)BvDp?q7JFxJj&!bkv@rzE?~HdH{pIW)yoOMI?LLoSa$dtS}^oks}j1=1ztPIDm)j z%WuuXyKS0x0huaF@mUVsmt)_e!y;&sH&f=h2r zU7HWHrFjGKu>0Z>7Y8;k@2uv`|FmVpR~h9#PWC;TXxXsru!`6)(Vgf6n*n2q8ML
veh=#_%~q@|5Srau;N)-aJ*~5Y%-GBb7?*Bv7`=UZb7%+ z-`RI))Zvrkq*!?9IV*3i{`t3lT#hu$(qSxs4`Rt){UrH-cCu5$rW-LUAEi+o(au-4 zR?Es$)YbRH%U!>`O#P{T12opkr`URLzImFyHW|VqVDI7h_{#?>uwewMhdeWYkHlK2 zT)Q8Aa^7dxt_%LR{KWu{vM^&q*_3a;V*|es9ra1b6Y2^u%O)A)R1R!2mVU!|Rf3@_ z%Ziji3@3#YeCb)k#70kFHDAaUrJTMQJk|G4GBe!0CiU#@pV}b3H_kFWLsInq z__{Gb(eUYR;^TLZxfk!qQckUvzu53^>(o=v`p;?U&tBX4b{n|8D+H5Hr2Z{2C+8p> ziIBZ>*gg>Y-##!~_y7m6-vWX|;F&tUMj%`!>sB?O-2%y_t|Z<0OhUhoPl4Z_sKlZp znklGe>rmF$(OppxH}ntNK0ft_C6Ib9Vxn7XvBwZ#>pXh6o0Mu8XIl_bfBenHrU?94 zo!cHZ$`%o@&Z;7gYnuWkyUn9Mtd%`I*{f1=usV`fz~-(Px#I1i^3Yb``6Y_IUQdB)j=pVU2e)L3oD;2ts(}%iit0UypR{x}b?^`j0GdqBwIBxhYk(EL`(A-+ zXrLP}EP)RLG3h7#HXLveF?>#45lpt;@0l~VV06%S^(z#P7fR6x%~(6(bQKMc33Z}xqo z-7}212gh#*{kcx&>$|SEmp+gL{HZsicn*JBc+Ul!&dulG?fuAD&@BCv`x3vC{L%dd z|Eo=4Y46L2m(n0lUaoCdk(V@cKDH!ES)ywHvF?25 zTvrGuq(XS^Ccz2%F<@Jp3*+cw2yc5;XE;erzmf_ig%EC8Dp(G{POgG(U#3npN$BFL z*Od^8L~4$@%~YcTN#YWEJ<}KQRlDq1f~!TioR-0Sy&wZW{JihW{VeyxMjhJDZ*4em zO@nY|{2a7@{iQdj^N6(EVF~JaKJ`G?3c7!vA2JN;+^Nk}bsw6wgkGw4UO`K-$bFw< zns{K^obVjZ<=R%H!9daS`9>&MZH(2$SO{JDm!$1g1Z*=#%3SHN#gAyiC?stmc$-*bA{`({2i zxrcX6v||!P0imc|t~!*sdky4v8fJ>|8ai{JI8iVxi_0k!$CPp@0Ko+i_0CVnp8?c+l-)j=+ZZ}_k(Y~2?xCk41twHqYG3`~@5+NNY| zM+55q@Z|3JU#JyWk=`#^H`^A-Wf(*7ei*`f7|Eys`tksF-B0z*MM2~eDUk@8qg+Z) zk!ShGiGWCLzK`wOTjaig7>=In@tp~o;D13K>Qt`Mwg(nesCxM<@ zh&f^AH@E=6G{e(?U{&1$E(7JHYM!r56m6*lavyT9_>M^L&F|s`?UL?CwSINk2dE+~72z#KY42YJYECp=FR-RU13n2(}&(=;<(^Dw4n*3Qr`a4(Q^z7XXd%4g;oVr#-8 z&|PbT&jF6fI+UV(6GHz?aCETqq+uHUAfHk1KA2`*lA~cqFxXUn;|8ZwgI>se_uBTV zSD7(IqH@r1%w9gd%M?5eLyO$DzcYAV=S!{l~y1_U9^Q;+@ zJ6&QLEd?o;n7TFp^33%03_WE1OYb8=Ml;v#=-{>M)FbFF_+d}MwTGf~a+vp(2?kc! zMw}if0#D@y5K|Zvv)*=q7?)WE9Ph)*+RAX-oL2%EQ|zQ_u80h=a%#00=0`UwUGzdi z;}8hmZ>cKgu{$Ja^;ry#VcLx^eDH|ENIe@0 zJ^Xb?sDYJAx*Hp+rIbAo3JL3~5@H&;T0b7%)_Ea*ILD{@AWapR z{+6?Oywv_G;@H~^T_c7NHYh5JiqdM)?dF=9H9pX-kou{XOxkmbGducY2y&9Nd z^p=1*M6Ph=fNuw?e}W_6U+-DA&Q(Kz(9XSJ$vM}{?5Xub@rhEKGl{8E#W|ZU_Xi5U zNwJ6Aj<}Nl66DbjC}WrY!aq1!_zcO zfBr~dj5ZX*CvB#-qp5!6k8;Y0iXC@l#<<@X*tovO8e0a1GP>@fo??@t{I} zYf-JC}E2+)3E00rNFCt;$-hW=S2f zA-UtdK|`(2DYX;jYfn>hDkq4P+@*I& z|3-`;i9|NcwlG?vS%C7-@;BN0OwbZhESL6oIHPnPl8+0|ywfiWB&g4dDLGNTr( zGMjLR`KisHr;tKJE!I6qt6#6V6aV*K%K2TC-nH{ir+;CJqk753i5ZAwG_;_CM_ptJmJD=)PWFh~EeW zt-La+`)w#hIqbzPYG>#L64d1&j*M3W5aBFptPNB!<2tW&!5J5ysi2VeYR#!&kWuJzL! zuaBN0{N8CXqjKp3X0Q}{9e`c^IGIi zHEk#e(Q4p-D?dX$%5A+G{Og%7(*NckV%%uNazWNmtuLS4Y5M9ZvX-CtHwff%sF>la z02Myz6**t}2+P@`u|#9@Ux%}=auAT!gGvO_BV%cOTjdXQ4k1I3$S{&msdT4)<0(fUk5MYs>#`a)TT zQN_r72+eY|7^(m0)$SQX>}n&}u$}V-rz16{zv$*D8Wz_7FvBlh?rUv~rAn`6W@g}I zQ>ge|K&3K6V!@EP#$C~i@B%bL0Qy-)Cr5Mv+Gr7KK`-TW%Ds2SOn#JQapk~gpRWBs z(-&l1KVHhPJ;Hx>EtmdXe|`BHG$!Bs=ppnk{b=0p{PpF((-n)D!ce%KkgB{;+ipH@ zpy`;|!k<*5PRMyA>x36;agQ(q9s3OX?wu@}lzTn$Vq%AuObFeN{4l?i;RsUn>vHyP zurK~TFeq}cqTKIMinji1e=3)Secvy=%Yjl)AtQ^n5*jYRl&y_cW8jf!&|R^56B z(V}D_fuYx*pq0qw0Qd7byN*`tngBz{`9M{mcRnJa>4kvgWc=ALxBTBFByVT=4$DKO z`5kEl8($=L(3ekw#*u@Mn|sbWUpl!S4??^OTX5`4E4{Woqu1AOxt0pnV%LkyfbT&Jt(XiLZAI0O z?3Rvv(Bb;aemx=^Ww-2uvPv03p6Um5X6|M8w{~#6PT@}QG*l}mq+CfZvTDQ_Jv|v8 zD>`tn#8=xY@dx7N-Q;Mi$Mir3QPV%%^Gkq5dRel(=ltP?FE4ubmt5|PDBhZWNlg75 z*;sv(=zI|Gx=RyVu2C?NU*-1t7rU;V@g)r|@8#6+ZSsP~f_pl}jVPuAYtr3=nwbrK zH4ph@z@NGrea?eWaHL`1+qR|3klS;!0@^0}!CtW(tWVO^?RB;W`9y6Auo~CC(YuJ; zw2K|@<3LO4L?u9aHtnG&1!pY8!zC_FqsGgyQWn!V3RPGk{wV}k=tuJUIFAP_zx*9=rDm~qFn z{D~`0=Nr-_A@hKFOL#mieTNY}jQnsiz4;BLjIJb7D(^Y#v5t++a#ek?MYN~90?-AB z9@}m6QUCKz8dFZghGAat$A3CE^-6xaa(YaarkIb@1R+gxa4o!#Bj&LMn=j zM!NrwhD_CZo0b?*;P@FN{XyLCnpJ4F;_v*s?ow`8HOvR(V}>d#PgQtndlLgx z?I5QyPxyZz%1}1xd9f|2Yrt6(NMCM>`cc(|$jeMa)KsXfs(IqNTE*HzfH*lK!$d}<}Wu@w|& zD}GV^>Tq%0y7ajE@>k{S)%{cmmigU?6;o*#9mR+LQn8uBBJj*sO_Pb?P2@*6wV*cq zLR@Y;!5zbPv(CV&0uw{Y(!AEOZnAdw6W00SpBc4`=+33Sjtop1e%9Q_t zqsAyTBF;Aby-{vs4V2#VFpR|a$1DXub5oJUl0erU08JosPlv!os`j@+bC+Z7o(;Po zGS9aoJzU8L4=T^+{J={<$Uk0zz39B4C;CN?;-ddJPH;`f%?0O0lBOA`3_v=jQtnV`Gyfy5`_m0osL)iVo+4SBWE#f~u3M}`yf zt{#KyZSUaHHsGGboaZFlwPe}#FdD&4QB)`^hq33tie3J@UG4s@8rVGDmXO**ti*4w zJ@VJR%6@s(xXBU$v`)rF-v@-2|dXK{; zeF*B*;~UnDH#z~Rp7j<{&141;#&zN_iPXQl%8$Peg8+O4-Dp#JcF`uN=Fuvml?n)W zl>Tz;H3;9!*vA{Lrr5-29^}6Ib59$$uO5B~6k9f=a1h;Jr_8JxLVUWp> zmmTq?2QxuyAeFd<3xUVit^T*{W!?0rAFfkTb+kq^ycW=DdkwiCxQ$NJSuyN>J2nj1 zK&}rYICFbZ3N43p0>a6TRC|$+#61jtjYUfNX zD3L;JB_;jQ2iy=ebGTlUmQ>AV+=G5)xco|eGvfBg)Eogh0&G3@6*2<AzA)HYv!=Tu~8LtM*5a63JXN&;hOxVM5MzlAje|X z70zJ!AYDE5E9xkKNzB`h-#FtS5yib_Suh0GwtNbmdNBOj>XQnW3ZE{@`~dqVu)b@| znbB+>Pv_$6qIoJ-#SQ%<4}k^#)iwdnP9z}*XJs){#C}UT0mIXzp76Bs{lo=*zhO%i zBDcX`gY6(TNxe&aY-L5M7b2+wwq!A)pX*9(3mm`dwbAx3wOsmI1B})oc-T^-je-38 zgq97oy$~ocbqmmh2XhE(*Vq*VR+_scTz83VE_HA9zGncZ!DW&5Jmz)#oozgDk|WSL z2mN;x|F5CXnQYo34z)$t!fCIFXca|L8=!ZQ{RNTCobb34B)5!}av>?z7Za)**%emK zmL78abGXo;j@wShB9i)H(QWItommq9u-VE5*A-n#3*21+b7xF8qzDt(d|ktOxoC)& zB%s(UpC>cz){KX8uvR~Y|TBh;W@H-^Bvw1A7?oE^w8d_8yX@oVuZOfqEp z#>#ohiX||lf}cm6Ew;#R*MACqY?ZnR1xgC>`~w3NEK9*i1=Wv7wqNE=XPR6fA!6=6Pcc!$9vu)&b_@+x{j0ZJW>2SgEG?Lco%F|RC=(O4Et{PY8> z;ICnZGCa{bdc_`zJCT@SH>o6E&x#f@IESZ)nJLH_zUO{Cl(-A9TyLeKJD*60dESPw z+)cLp!guKlxZgM7SQ1nRMA|fdCZ0zq*|S!0P(T~yEAb|30e&ce$3O{Jk!w>fkh72HCgF7u&8I< z1qF(Ei3xqY;6r$Wjk75Y#Pa~+J&Ai(tq*RAXkG6>UJ|>9{BOAbi4<|x)P+Z`#LkFa zLKjuwW{+$({={Zvyw$-5mD`Uu2wjp41>4OF@XEy|vJD`6RRM&9vh1H%uTD=a7RME; zSJi5&e;`=&UFVhHBZ*$5=Wl8v&S8$Vz?$wB?6uzB{?0dv?Op^w=@W*&)Afr9d^UE3 zvy&=~O6||7WX-E80XzBCzCVE^(MV^9`Ln|qetJ~ODV-SjNdKZYJre}gHMb4wGu$$N z!*lhPeJVt1Pb~sqHNE_X>cN~z$Pb!V35r(4@pxdFuXQ`e_WdC7d@I-&$m{3}oqB$F zdZ>A0nVxVPO8fLs1TSHo-PCAQ2*EW$99e9qUR>R-GR+cgv_3j#zBJa zwt_#BwPq&8h{zMt6V_yVvNf0vHSK}Vl4n8ZqKN9YNxJOb%B=G|y1H-_yXZpQyk^|y z0GxL<_HzZ1L)QMdR-ODsqXjyZQP!B3ft)AT`UJgVnKQ2G;CCu8A2Z=eg~v@H6YnH& z1;=g*=}GF)>>0hTkRi2dEE+<6V8XmGcf8*mfu@p=Nq9KTx$h^*+%lsCilaUK!gKws z1bR)q8>!d;NUt~T-J7k(&qp8LY@MJ5 zr->+a(1-CMYy$HbIKOaw&;`)C)lzzNQx6cAiQ*9odP&2GGP;XrXa%VomGSpG+4WH}&% z*2R>g&izv;KeiZ9g#^8u>I3m-@2E9AslwSWy_B~7D`&dA&vqSNnfpsiBrh!IAd2J{ z#v+Vnzr@CsvB;@bfFgB7q*ewdN#cyYWYfcywb1HF!cNU>1c|W?vlPfx;K?qS@{eD?*z+BLkJ)gsRL3Ecg<+`GN{=W@#e)DdxjT@fKQf9h% zVU+39z=NnEX<$Dla_%s{!z<~#PkBvP(6yA|B2s*Q{n$ne$UgEjMs4gA3pC z-)d1E@`ZyOlZCR?2-g4d<;mQB-sI~KG+PgOPl2+k*Y_oq=V>;_u?Hmq==S(EtmcdR zyJjznUKp_D_sO--#SW8Aznp#^;Wy$G*D*Ra4$BU(0n2PX=~)TMSS`E%Wiejf>mfZW zUyf_zAY!x3@+ky30v);$?k_81($XTkwY@C);&c>={>wY)WQXF z;CelRWER5mF0d#J7+OvFi}e}EJUM+IPP?VpX88JN03D2UyUxSg#oCtIg>&dv(3Ut$ zqkF-A7UL_79KQ@o~d0aT53;y?>PI)U((L4{A+5w zv5)Z2%ezp@&Y7?LgztJ?{AssUPKHJ4NwMYnQ3-w~Ou=y_v5`rUmaUC9>kj`4a~9^@ zN&&}L7sON%R}(?ME+Wu> zn-?Sb6K<|Kt}K1^uI@l_3|_<7yeq^Qpv10en%>GsG(_Y|AJi_&(xcN1D{4wq+Wmo) zjH`)5$V}Y_5%VE>+hOOv_)TzYYELoMN-j5_t=^UHg^&O|bcr5~+DE)eX)f7idkx{- zscT-y4k{P@H1u@EuL|~}hpVjWR1C(_-OUaWS+FBP4pb!=+ZJPfyWjC0DQXd4quF0a zuJhGOA-AP=_O>vOD-UBML)T-A7!v`s)yz%UCuHX_L)38%mCds_@4ve3oF)};V!Z9c z+375Xf!Kxw)ATZ$7M$%AJ!W`UDssSK3LwgekEPoD|GfYJ=Eo+vWi%YYXx*xwPu@wp zT9Sk3*)isV0y|{A?pEO5nf4>K%O4k?FLzHug{EB#dC}Na?c_W~w4q~;(o-sP-@*o8 z3`GS|Z4k_?X-*EM&-K%ZA5eqLJ+sDm;ZW;@t1KKm8+am;ds`kSU|qp6Don^%PUHh6 zg5Rn$_JSci*!waE@?*dH*2^+gAitTw`rV%oI;wzj+Y+~7`9CH@ssI_t+wu1t2sbP~ zALF;biu;Q6+bh+2k&Vjp*Ce~Q zHs9~kh{EYi1AJGWJ4(bw3m$Bu;Sk!o=PM4>TK~x*cu-NU2$SE1{s+HFCSw=k(1I5K zeHUNKFc+q7kfUXezW)$q#85mTRXyh%GUs7FVFcr^UM83s;BEElETOWe*uJQtTv|3?>NuD-~CH9{=npDfBVAW0)ui_m# zYycDd+t)tO%$Hu8bXfCnyjV+2w%xek(WNDH`N(BZ7kTOR0LiXP38LCf3XrDeDS6r3h9}GyV1lq!2U05$t5-;Oyol-FOaotsrz+diSbX~=g z;X`B1F2hhmo~X#6LB4!d1_`0M6MA;r>~3%lVGZk64u^C`u(=@8aatKS5j ze0gJ{%G+H*&Kru~3S#3lF{1pmlX2Wt3&N^-6flp@P0tIQ@Xv8y@%QV;?t<43K9cA^ z0$phP9S65o(R`(YgGG*({m2Wf718aWUE2c0pxCaB!U#Ed zuz?PPv|D$Kra$+;*>ixj0WK?VBq8^UYgbh(PLqC{?gxf`o7f-sEjn<1XUDCUN<1jOEPM|B9z7|{8+h?}XcN6NE>v;_f_e#B{Tc z2!|8t05dE)@Ppv6c5PR-6886SPiL4nG*YtNyzT=5!Gvgqe!B}tN3}T3Wh(hdoy(`6nAoLm9sa{gpUz$NW z>O{KOt6`a_IJ&?OOn>Au+?C|*G#C1Ee;;z!s$$@vVKI_Q+sOKz?PPu+V!BB~42SW* ztMx@YW5Pu?fF_g#>aWBB-w%VuKL*8diJaiPUY7Szisq_@r8Z!M$ahN0~e7kM+TI*o#3bhV_!wO~WLo&ZI_>mD)iV=nw{i$21|3mtzg+&~ge zkRQtscq^sT9)uX)ld7pWgou!3^t!klM{HdjgqU7np4>~W;5G=fBhsu?y!@ zii)U^Sd5^xJfx|>%`3L5%EyAK&r=Znw6|-5IqdcC6#0IaZI67yM~*%_(Qg|9R%@gp zi|kXW$5oYFLpPvn!nV6D&}BqwyWxNT0Z@H!3`ibDgne9_0VGtpT##AgsM@|dpuQw= z^D}=Dh(^{1*LJiKeJS@Zt4bvUO8Ga0f&E{2JZ9HP3&E4FMKdru`6bu%HWK_}OwS}; zYnP^Ghon2l$Gyf5gFn#5aEXvTX}x6Oqn?*wVwyObmp@c|z_PHO)0i!`0(U7k@*LbBO- z)I`pf&;D6Grd&)1^maf?71G{6cdvoT9;kRh%EX}IW=L3T5Cx;LI@F{aQZhAM^meT# zdd<|Dd)Xj>58DouXn`TGFE-{a5r-GXBEPFkef4Ozfg#PD`6zBUV5}p!fyBN-_D}Eq zBk8?xJ&A1H!%SAS^saEM^Y1~Z5wGR4uFs6yU$7sjO+M3^fyXLJ1^)@{tj!|FHr2CO zqbg=tC1LNa21FHWU=Q4i zx2v-grlKQvdA2M|vxO@wd_oj4wbB-a8mh$YTHo7quij}*6z!$?-wgBpd%MbBW;k_< zq0?3u;CaB)at8WwMQaa%e(+lKB73jZkE7m$1Havii^1FeaHiCF?M#?OK3B=~O-A}p z)f;S~QHX$v_eNq!!E{lSDt8NQ8DVlAEM?%2Y$uCr*o7ILSoLH zsz#%92(0D1;wp7^1~zg@r~x>*`5`#iv;7^3M;=nzl4)xM6xI;+&o5HS-w*|$C7-Ol zLS^C3t|u)I;-S{1WHXk3gguXPR}&-9wR1dlp-gp4YII>fsrL4l4*C6CvoZMV(&0^{ z!wI7KWt{5(gZT^4F=^{+x`kJL*t7Sdr0q;1Xy3ZgV+@9f%b|aITX{YgY%ljbQ(ywMq3-_QSJh2D$18%Y`*k)kqI@-+fS8b!&ahYV#M04J>^jh?ajeq)*B)Z1|B zZgs7zduc}T=-KMfKJE{>L-9)HM(&D#h(tACR#6e%q%v$pzEeYKYbhp_sGV9oJ*E8w zAlaRMiZtWEh)C%D-PL!TMF{Wb%`4J~Q7qr7O zE}cGzVENGQ9Qfd)vC*Bzo!!1Y~LvhnO{Bs+A@iuV(=YnBFvEwfXFB5`&mN z(-}Qq$RrTR?G(Gp42Rvo+j^~*CrYcLOJ}D@rig+zLBxn9>Zu{zv6hGtl zeSyz@7Nt*_X&x>Cjj4)AYP{;FgsfxZ#4XkkcAPr0_$lTl^1bi&q<|Ayhix#c0ZvUk zCFsEYg~KYN3#h$sRPj-T*6Dc#|WfeVK zvFn06;Y$W2%qVr#*S{@`(3o-nP{!@ziO(_<(D%nij+}p$zI^R! zst0p%F&VAB`~gia0>PxbT_cXCa%7{^F7zUuOQ_~Ci*nN2q@P~X4dL|AUY(>t7yv&E z$qgCA2UB!G@~5j4kj(QwSJvH$?OQfhc$XV>#b3|psl4!p=(sotWN7N4@cK1=r}|>% z%r&?a50JnkM0Rs7h$+N7w07RPU;L;9M=cE-E-ru&=@>mz{FePuBv)-Bm(A**ovEN= z1LpJYs0loA*zhEuA?yL}A9ri>Oi{rzGnp*7x9U^<4})1m1_O4jEBrS{WM-dDEC&#g z!x+MD8%GiXYZH^rz-SJ?E)b}N))VNz#z74&!LMBPSpdDgeF@i7B{SL6ojCkpBx(Wx z3XPj^uJE;&aBdr7wI6`A|IJ~tJic>l!gb(Pyb4LOv|idxBDlr?6ARGA0mmf%@v=_< z3`Cdy1&&R6{^s;LKQqNQp`J$58;Ii9$-ke630zS~|8yU(j`vEmvwiXagS!SISG!&a zI13nTL{@Ksu;yF^De=`!oleLNwWGHuR6}Rq+Xn_&QCzt?#qvh*B3zEw67vCmm$vRT zIu`1aR-Q&jXI4A%`W{*+;o-MW4^1WF&Q;%cgWqJ#Yr>lOJ+)A6Cs5jL+|diam@(m0 zJX&0EIOBV8VKREk0-v6>y?H~@$APVD)zy#AZ0KvqozuZpi=hHivJKx}ALO26^9aq> zq|!gI1;UMV*hO@g6uwm5M}i3K1NGL1LX_HkniJ~owZrmXRpspL>X?d1dzpvwAFhcx z!_7vxPNRh%OVbW4`p@iSi}TV0ku*Y{RV+vI!yr1RZ!ZB&7ghDaHMg0ME%8dUEC3Aj z7~2oF;sCGF(L^^ppJu&p5lMnOo63kWXQrPN3Hz;@ET>7)*WwfT!QqT-+^pIg>``%F zsbz6+5+y*wrM&L14BG8mxeIw3_C}d~4;5%{t|b%%tF^sUN+&A1rZjH?UGiWC&m!j# z+($x;)a}@jyd^b~OcvQQ*)V|Vx(jj--3Q>pJ)X?JiQu0DfWWOs1?lIw;Fbd7hLtVF z=U})lB#V_^RLYQyf=&^>ntbnD-p0EdY4Fm?poO}`ySGw!NTJfLE6IEEzntvQ4I{sX zIa=YK^J?eg&7kFb_rSL;WDT3Z@{qYwSXe722)eFG#-`3-BpS_sM36N9giieAM&mG@ z2n3u}%bsQ6$&Aqa3vg>xQd6b+lzpgHL^05Fnh}DsRCI<6T;?&d1a)`{uE8t3BKk(`wZ}4*9 z6xP0g&o?e>6piPg4E{gr>(<&WR&MR9EZW0?7XBl0Xa}t#G z0Xq2H(w$4aI6(f8o#<2%^>6M->ln?|Yr3Dm3y1ToZ0fw1pzQ6x^Ud>wf&D>Ai6MOG-P7MPEEN&Tl zs8ho~{9S7;a)nz?n~aGRqlvD2t~x7wDS<&Y-HpmYWJ9g9c!Y3adiS>Q)&3jt)3@cM zs7S6tHomh5#rymh(MeDWL(?!KWB>P=!(0ZhMwPZ0{92}kzrqyI)Moc-{hdP7%1543>O%1z=&8k7 z39xF}MRdvhMFC_Pa`PMBWk^7 zTKHPA$QP&kI~m>YfRw~Cs*)?ZF~#poK+WlJUCkE9h|Q{X>DI;__tBRpA6sz_iFs`y zOg8DnY)N=>MpOC^#c>EgiJ#9Bch#ujMYU58rGXo+=?{@GjcY^B(Ky+p^@NbL+Wpts zJ_C@fv4fW-+Q4N5zC|n?%9e>&@DcJL&G94!`~?&kCXe6_nV#IBW{DvDGWF#XVjc{5 z{)9|ZxwGMBmLK1u{yFhc7|+v$-+U2#OXw{|51%Rt1S%|vzAkO9I+FRLgF(449-}^# zypL?e<_L1vV3mL}be+R_6|97%PYEdk64p6_f8#)Y>mroGOYZQX3DmtiD>6l2XggDwwGP7(o2< zh9osyT*rUXF3O^z$=r~lT}!1FQ@rAI!mPDXhbLooeR%V?eUDsAmFd99niH3gi#~lC zzkCs%hzB(q8a2WTv!EaWc?@Rx_`kZBWY6$~T97~%vtCJznx2vR&P!%>Hm1Sbx8vU` zz-3@Au0L#?WKTBYH%)0?KdE#A<>+vH)iF9%oCJsAgc^?^Q=Xd9l6ekJ*1M)p8!l8! z9ax&^8;QY{CGlo%#PN79qUjRcah{uGiZPp)E?`Kc16L?;j8uM?WnJC3>T%e*NIk0?i*WO7uNN^lu)Z{3K zo&y;aKz{spOvbr^$OC3^VX#A8fYJvz}SI#S1X|{Ier+WI5uxuXj{5eidsE@5c2LB zd#9!fm6Rv(?tR_c)eo-pCDIBSy_{BB*r5ii6@*dhA-KU@a>$AzI258hCJa=N)t_l5 z5SD=&I$0Fc+u_K(c9WMcpplZ!B)N3Xwf7x<4-QGVdft=XgUwsLr$;)O_CH6K=SBPv z0=q?%82`^P-~wk37^{waD*Kv3+5jckVc76&^qhNfeLgn21PfL{{^RzhPDfhz0TZ&1 zqnu*zh-_QR8-~Fz)GKu{E+Xu6NuQxGz*cS0xu5aHG<2DXU!6m`pQ_7YoRg=P;9*}{ zI(GoL^LNjx07Zq3H6qPb7WuA~>a(3Rwg5@oQmoZ{hSG`n4-_~^v4%(Kn=b@i>Vg|< zu)l%qgaswuWnVu5vq}mZ$zp6)lXZ?@>&qLWSV*zbE94&ILo%;4D@dZ?2eV*Ez-OIvT8qvG2s>9XMciMW(}{{dUAmOmx?v0w^5p1MV=g~t83J~HO@1ed{7 z0e#@C00bcTxn%HR`9nZxDc@MFijZ_{Pxu$jc9SB;KdaUZGD{z$MblE8U%|@U3n2xc zw{VuNxpCPVNH)I6Xr47tSx``tuMA~E=>0&Gk(H}?##h+|Y~ zx|~Qp@0))FIhot@1+So!uK43)gFv;NLS4Gc-x~WNRFo#f5%-tUcTDz zg5*jB>S_B;wt!rxF=pqBf?6w92wRxOT`Dem%sEmIw9XM$CQ}yvjAE`DPwy4)qKASm zwfpi(=mexkB_kV!XGg12+GcL1VYC1+GruiPS}hMU)@!_gr@6 z?qhM>^26e2+GP{8*^&T=E<3==3*2KATSo)v-1M8|>odqBlooFIzc04SQdn;%83F0} zpL>Y{&Aj0dT{WFIMn;0I1td;iFvEvK2S&D)g*Y_MD@RwuYBhk6H0(x{KP1i$*;lNw zx-ab0v9g!aPRpGcB;UXfdMSGXQ~x)<&&H0IYG^$+D5I9Hs0NqX<4A|d*_2=vjJ#7L z=;D*Lm`h@?dR0I)nDqYV2!eq?qS63LL)?dgS zHY~Ca4fCuLHx(3d3xkq5MbJ6xe&N1|1jEn&!3l8|f4(osIy)g5W_p}kK+)!aa?E}I zsvz7U*p1Pos+}{`|=EtPi@8YxQT+&=W&Qzw~lrx#kHef(me_e;yjtxvR z2Y>el9LL>p#x_gg2eNXiOM$!2u_;B5j)UVwiD0;CxFA;$ zwGb~X?sVw->=E$kU-aYC*!ieC5IA=-0{W#u+Xx>YgIhbH_}K^H^HPZy3T%duh@*uK zO@hFJ$4?sv^s2+kz}#mG@Gr1|mFneE-_S7s{E|CheM0K~b&~8-%t)dKbT;K5 ziSbLkG-w7*<#G45Rl6%s(2Cw@Z7bsys{VxlXF^=i_d+!a5UlqbVEwA}T`#@djPXHd zVm(;pYQut$I{9DW&o?0Pu<8z6bS|TG7{)Xl;oXd$4Z^>0P`uG+LACj zBx%C}{qx03`l#gxVN=45RvZ{PuJ=uvU8I3 zE$pkg-*qf*;Jnn;|B!mYugW2kW{dK&c9Q8@{Z)S>bu&R*Olj*IJx?71}Nq~wjY5JA)sNEM1gkxB^Jq<;1?PFDsg)&7uubPpv zDdl~0cY8eB>gSEWFe0UR8VjLD7JTZw&M4t{Q}oO>nVjL@CFvxezt`lryXG^%gzX2~ z@H;371*yPMK1~bn(6I~rU&#_DyG7{uC#N_o>uG4&cBym5J>oiSe~sk#$y#;B+10J| z1Bai_>h~kbB2^?YUh?JGvrm$jtJGyErWVFKZL7ncyp=Y(DH+!A4{|a<@j>Sw#>^M& zs~5Lq>#8=6CxkL;SQefo8;9{sZ%h}zd4SwS6@=N#TSTUQ7LGmZ-Q1s7EX`-KR*;h~R z@F!*Ju$Jfh2d-7 zAV;c0$7H4yWv$F=?da8-D~4Gm!T(yKhvUN-+kQV44gahN;aFWSu0!MCU^+uM5|_=q zCT+F-My0Rr`tATcGm~0?7ir@;eXF~puk*`E!hfB_ODxusQxDH`JL+T2rfynU6n}(8 z7=XMj$X5;(=BPUSL!Rin4sKZ1g%jSA8-XC6@aL}}8Ch3233pvPzrBdAnqS}Km8Erl z6Cg@N16C?EVV3=S?;tq+hV0Vo*m7j+BWg&1d|%GkEYAKBowtd4YqYovAFk@QG#! z`!X8@gnR!8oB$4#)HFL>%p8H=1{@k1!3yi5WZ*yPkS>-SNEd1)F~_N#ymDesNhJnz zMYaXh$v+p5=PYS=LgIfrk>1f!uy1u0ARqj6xLiC6YRCu^N*MOK2z&eJjYHDR(OWSF zPD?>@Rpf}W*!ozazV|hKm-w5`&iS35>(4WVo#jHoc9aQ%xr)=D!S2hb(2dhWN zDZB7`FL4w9lligDom2sHyJLLG^VDXnQv%+@b?|EQe#N)1x;bKJm!z~?0>88%xTUlL z^Za+oI8g0^3hqBXMC*~^2)&4yzmAw3vPWjkZqtLS&|=@QvNV{gAL%NO^&Bazhg8zw zV2`=^L~zv+2d^!i!nSh;DUL~3Sta|*FiOx(U`9pKw&5}HcIWcSU~E3GMBE38Pkd4n zN4^KRgIY`g*-Nyg{0j42sqGN0lm#tun6XpbY<&Lt&XeI-RT|VLBk=RVzN9}AK6h+k zGWEzbd(o3gC*q7_m}p@*BQFA>{9Z3`*tSILuL^377(O2(de=200!t3LqVYqxikV-( z=6EbiPJ59!b~&6kCNLAa72k4m-EB1-Qd3Vt&`#3%)|8&M}2AnFYW zl@2XMx-4C}JQm3EUdR{>bj?Cx78g2^#((pPGO#EX0II_s#amVA|YOH zOu!#JNX}JUwzd#uxAX_oySr3-#r}&w+}qF#+_rtippW5UC5uh0{5`vgz$1ht@biLx z@L*CL5@$m5%~}?^)qM(aueJ9yGl*YC|7IEeIg+JFfSA7LU~H%Z1&Mk<^X0fEhjzZq zLr&VGT{Y&MmYK?Tv|Kg(3S$KNMn;4B_ooi39e<4JPZH-+;vT(mBXa0NUcBAp1U+SI zTOg3C$tbWDN)^S`%A=?Kdv#6rUzS(u7rwxa>#I?T_?v_o7~cEqnA!q!0ZVk^6M9r{ zvSSGNjT*JPi7~lBzPu8Gg%^fuvr`3tq-dZR<#sLf?Z{RWw{BAxH@t{*KK&!RokOVT zv>2V|a_JP!4Af4$RwK3HmDE#>3pWOKb+U2IH-e#8<`mzvKvRmNt(`t5Ifr*QP4dP# z`ZeCpN_~#nJTckW-tNgA>c6?$x(IY<+Wl~CiR8@jfZ{)8WT06(?KVq~b^A#gjLMG9 zTZ7)i+RAoAqbZ10c=>btC)KZe91IE`Xjqmf&YCIiyhrT}i#VoIu@9TG-Z7*)6 zNdm4fyeQZPK>{4mOd*`iX9Q~Mpu0PSrbl&H$SQEE&wDC}Yc@-+LH5lRlAQI|f1l%3y$x~nkpK`c!EchZ{Ml>oC~F5O?z!`nUNlmYKo9fqihJv^^| zVS_8WthhfcZ0h)B2a%A6k(ZR|{^S^x+y>w7(r%1#*j7%@8^{nZ>z^z-JI5f9K=p{bW;s7qrLhDe}q)Bsb@a)Or17f7d`YujzM#1 z7m2;ipLRg$Vs7ed71~rlkkFuiA9;sZg+E3`#3{|rJwD;JFj4btFf6sN!i?DDkC;wA ztux=Hc_wf+MaqfC9Pkx-O<%DJje@7JtXh5ukKrD>8QJEtzNtO$7;eoMCs{~(1i|>b zartTBl0Sj?BBcqwe~ zh14U5B^wrU1h-U){~q%-?__TDO zk&t}))3=QulYyEic=1pQHfiYP&;AYR7{=N)iabPaB0iCxuqz_xwI~r>zl(r4m7^6BwF0BJ%b>#wGtpP3(#~ zvf3LM8}>a`3dPTnwZt7s3clJa%@@Hxh?8VyLN5-VAw^hJ^gdX|%5~lC4^wxVEI)Yh z$Du$@iIpfO@sVM*L}{IM?zC*pT53eRr+-aEL~k&$$Z9==ZB}Rf&L;QHq)+O|b1caU ze|S5Z9nTlab6LYsXUBfmQGQwrc_+3WCo_>lXxxqb!`=O*WBYH8-)XS|&{|f3pFgs* z@{zLHszQGMPg>RX%$>Sx`}#!Rj_tNlpUu|AjP;#%AFKTv-^n{;iS}9Fe-ecCDpb5_ z>7T;OXDSos{i8B7K{Hp0t68Z;O$$r&i;IVm$Y-Q}y}G0%7;?>Yl_4De-i#AMuxO%* zvmX;`==!aOu^ZhV6uL0%i7FaiMYt_X<~`QYPVB0;m)`Ly8M&$^sIpW0Saw%PmYfsd zh809SCa%b|*Vk{w)2_F43xcq0+|4z#lnAq|lTc$lHI4>YDLb6L>Nauxx+obT01}Gi zjy|mgR*)St^iZofM&+HW5Y}JyBBYL!D6}LVa4X?`egY>cj!gHvc=~%YFJ~g%I)iCD zWbXCJhdy)H-sIgBJtbz|-t4~WiT2$2I`L-gNng~)7kz%3-bkRU`!a?d3)XKlL&!9a z@gai?9$u{Ckslix!x#Q-hjiViul@_;1!4S;Cj5H0*0WjqcR9XSOb8Z18^WugMv@2r_tS z%yUaQ&%OC#;?ZFTY6${L#?i;Smc8Y=Ua6Du^}er)_p}ltKc*nby`5O38xmM!8uPRh z?k=;gCjg!(orEkQ!^6W%0Q4oy0{n$w`d9UIA4QprjtI!;5iZLU%VEUZn3B)Gwu(_o zPY5ez7PzoJ$3&GR!1Y-JjC9u}D6u0JDm}u#(p#(L`EZwjs}E9cIn}`{@2_pAe&j*U zn`|*oQ^F31kpbtWF8WlmLgS^c`2YO~otwblE3`nhAY3Hlq)nQgiJ4ikk~JPk6sE?f^=Q8_C9%*s$9oU8o7Le5ZdXhB{4D)1aZ*Q+9FlWFNV8NGk0MNWcy)XyT(3l8A`Q$W~N&ZKL&$L$8 zMdc>$aY>I|!)4`9xt)@}1yGmkbNMK8Dq(H;RWP#xj_P)0HE^P(wos?I$^h~4Ai*#% zGPWK1q0^JqN!cgsCT16P$yGUwm{V3lCKNeE=|%(9GXy8w*sHbDa+Q-qic#|?ihbW( z(ipLGxZJhGUW1YYcNa|jSH$}zZ7PmroEdM)8azA*=J;=jixA15#t`SnoJoc-3XYO* z+g){UB2?}W<0~sGQDQ7`&$t^UISC?HM@L5kOvvNYInbWSXGk0bqjVx)JKN_g2JG*9 zd&KW1sB9GvCUc%#{-CRPR~$1RP+5@&j(^Ws%KCaI~nAV<8 z)~U92aupak496R$^&EX(Odibw=^pm)ws> zSNA8k0M{+8*~gynY4`t#$;%_>cSEqcMNe~S>O8KWW)*HCOClCD$zxu+Z7i10fFe5G zM|5;_s%e|gc&Re01P+#n-kXLTU3Xb9rGAOaD zeA946)xo4~=2@}k@hmO~n@2bO$gyJs{$yDAj0x@oHLfR_v*+I*4vOQVKOR!1oWq_Z z^;=Pl_YL1Ei-h`~-3F(&Kixzf;w;lYY?1)HP~&-LT?)!}pW2k1;T#j#+)UM*K;#;tvphE zOADBAO>M;f+xMAzm~G%B9IXIScOzi5x3SOfFN9E#)-V)Pu$^G3`@6S6GgYJ&z^qz270FgIfa99U zRQ0aS_;$^Z6>FW?n|g+X$w=MOGWYV2_e#T8Bg5c#2h~B$-@$4#UXlL(ifW7NFe}f( zL;@HcjOX#=-xCuP7Y+Zm258HFvEvWYR}8k5DRUc{eiRfdTb-fPtR=_#^`3^N|5^9; z<)N8Sc!i9=fcICdcst)B1%#D{wJ|Op-m4)h79SZ&z9Nnw;|q|2=Tm3TsUIY~Qph-30PpOiRY4eCs;a5{YjVh6Dqt z4VB>c{AMxT_V%gtJ;n6Lvlg-QJ}<}4r#se4hof&jEhGqz>nRxaE;2;+%+gDe5eUQ= z;1wX_P$fWMMd@is06sg7f#9LhUr)hAI#_FK>wWa#pw@w|99azHi#C>mqe(CZB`b5+ z&czyXq|ZkB&;32-26flmnd$np7EVrJJ{AYLXCwG+6r5SE+QM4#(z~xV0*^!LGz}Ce z8!f+>_k$#n>WTnwrT;!Z|2AI2Aiof?7s04=1_o54UrnLmRL!o z;le|E+2cpcgvu(RO&R2FQbPK+A$>mOv7u52LtI&)p=W{Z$S)NP16EC{8HnfXj&^$+ zpIBT1)FCvgY-@hiFq<%Ifm`a$?` zt;y}-l-lPs>Q-`fnD-wF|KTi@?Ylir>gNMUhqp;W`2LLF^DA7}+dgUAsGKFEi`E$JsQNR_to-fw%1T!XI3sLPB(KvJ$kr0xh1$=ffMfuUnPzO5eM1WQ+3i^^N&#{)3*9Izqk;7m!ji zpaIG49~``Y1mo=f4q-}oxzhl+H_`DJ6RytLw|cQV7uw&C>1l8xzFi}NL4;iKMw9{24LF$<&3w>&ceH_{vfO;2NtOT;kd!d9Z zvXyBY$j?7Ja6snIgd^-oR^M3)jbm#q8v&Kfhw=r^mhVLaZsm+tsS+%OnH?THGPGN{)uwz&%%2nGx-aqXx%H`yF z?yaMu;;UL*B5Rj{P|mM{gf*LXsvtcK!`nPzJbHq{Ns?hQRLi04=C2u-kpBn6nTd_t zxxDarI0X!Uw+Os{)_|KA|L3vK#16IX-UBuBTZ3?$&xHk@wd7W)OH*$T8T$9gw1e;q zRf4rF3v2Z)4>qvte0@A6kOX-VA=lO>sH6jHV=bVAeXFk*ZfI!8#eW?CLx>17}k>=38obh&P(uh2B1 z0tyJXaFJ*tzMS53fqdb$b3{+3Oo#xR#nY2T)u!9S1mAwEOYuA#!_ioGx{ULN^bxC% z_Wfvq>BteLh^naH><8%gu1SIvkq2J0M*805{7!nK!pOe#SU$Pq9D{#HH_}MKedL)> zKXTEI!|s<`X-@`YKysLnw~>hL{m=oEXkY(G0UN{cx1DZ_RMNCn?R;6_&Fj~D2=ojc z&@L^!iV}-!mP;NUVD^&sLnVHWzIuNV=dv*{E-5lJ><=90qyYGoVLB;UyPYE9-LIHQ zkMdu$pY243zFgq=E0#66(Ke^uKWvQ2Po6Rgjd&b3ZO$_AJ(Df$U=!-TU5y8F3qdcl zWjEv8r=(Tj#LuzdG_L$(N>+^n2s=AS?;*@e$&LPrnaub4$H3+wclb8}ZOvw(z4@(7 z-#P9D)XR#ZqJWK1iYHmN70=4T!f>vU*AKI=w$~WpS(wZgIXb1+WKdC^Uq;cq z%?hu3m)pzzi`#+xA|UiJ31&AQW_So$#JxW=jAX{{6~ZMQaw+P=QZ;L)Bm8$yZY`VE$=_YlVY%_qmld;D_cxu~e9&wK0q@)Z}wKCvN(Uad^C}DEQvrrGM~}( z9oBp7)bw?Vj#rgzH??M)eTT~&7=urB&C0i_MShJSMaohRFLzRZT z1`3jLZ#u${t8F*o*i3E?GCv$msI}^MDOP{LR-iBBf<=DQ>jb&ybAHV)!%v`>Hqnvr(n6omFg>K=;MNpe4T8+w zD07F&dB~`zcQzPw6lHZby1oVnd?hP12GJ-f_o5P<) z9XvNMNLKW}m*s%~UQD>Xb$9^en++~7J~egaV`HW1%&Pl#-D77E`@KN0v;Z?R_krbR^nIX!R0) z7%#|*BBZ8Y$;I?DwVb7uJqTj`ahsU;>-%@UX(UNp00$o_KL)I8fQ}67`^!g<9*J;Z z!Db_5*xGb~dxqBhDy->a%HlyGb(!C_-%I>UG`hDa9Bjgm^ zTOq?YSZnj;Tip2J8gRFOS0^0|uSt8zS75{KjkboM7eq>!`&7hrwkF_L1Qx4!qaY^f z*}@d|X&SfpKgX7fd-0S%61&?^w|!~sj7Ip{+lr>Yd-QRdl1AA5RyCiWF$xm zIInQ`Ay=xQrrDoA;LS|ET^mrRGf3*p8X*GEFT~8u0EENOKmbiXFZ>8ahUWHhE@c2d zz&)jJWAFGF$+?Fk5G*jTsM0ia*t$0DfB{p(T^)J+2pa7)?Zys{n!t{7;gKK-3Jrbv zpHKgU7$Q@T9z?X>t=;$Wt;+dL{^9vapBb|Amj?B2j+DXb=Ggb}ehEiV8({~&Y4)xR z+%{87-bJ7w8LMcWmFf_ymCBdSI6;2u@BenXa^0&wRHwCDT}u5(wf`x@!*c+xo;gr1 zdsxBgT(XkSk-+%#85`zzEb`+oqSg9+g)mc92ST80ra&fbTZH*~L7} zQz&cvZ#%~*r+Ll9;Kbe^K&Y&LpvHugAjs6WqGYO}*|E_UgrGxqBzKUJGoid_k|%_F%W zzl1*FJNBHq{QiafXf|~xSJ&W~gR2BG#A$M<*9N?gWf=^R5*i787I6!dL>I~MD}{nC z>u9siz5*J!m5{FYp<*ByLu?v^iNz|fM48Q9<$NuN;r4C(AC^1%lNt?VFj%d55h;^T zvb?WTmU4{I(xy*W?Wn*`wbV+L^`5{D`fUK;R~9alZCP0}xoq))s?NLF%?e8Y17Nx# zw(UEyRNN`O<|b01BxA~z!aMfR!DB|M*&&Adp@4|{B3y*b@PVW^9}o6@&QnfNNKRf} zet)eeR`zY{(rpAXJx;JY3k>%Wv#n{38@9t1nhF*(X!>!wvpT}_NVBL5|5o+U#>vtW z{&_E>wLsvo)7}MsEm{S~+R)XkmP{HP5;^NNLbnTtr+&H4()?qymg`u!7Kv~8uqCvx zL$H7%-Kaeb<44z%{RiW;KGP7{GqYtLF0P-RnSV0Dn62|b8n)c!oR*0I z`IE}z7bQj1A&m;xcDZoS+jHvMfK2iG=w7&o#9{SzDH^-{eDO}*#B+hx({Yv`CNw*Z zhN}Z<+ZU=RX$Pzz1P{FKd*SWxm_{0-Q}yAr^-UCFo5XSaA;H6 z%O>{_4lW?+31@g+KIm;7pm|qcMadz{gTBEgO8Gz=!>qPQH3 zg831Lw>>AHnsGaudn>ThsT0xThMJmvxe#;y*(#!GIvaBxPC#uv?elHT6I&7A(c-OC zTa~m^h-8b=(82&o;U+j}OMl*P+PaUoS|Ps3^tZ?l>HlG8f5l_)LX&bHDtqB|E{t1S zTONw$s~k337-!ehYeRsmFffF>t5hH?0Nh;eO-%S5&0iHR95s6MYqIR)s`jr9g1s4% zFNX$6R0Pg(3S4*=RQfI!9PZZ{*80QxzXbme4a4kkO4x7au&5)P;FDx$NxA(#pz;BQ zQ08Qq-Y3+$9n<(=;a`6$X|MO^zm)A}dv{BKQ_6>(YSEUTcVJkyJ%0PejglK-qaYvA zu*>!@i%in7!7$EE{(o=&E&hC~TUJ?lsHpeA-&1|=C@Fz+D=*YOTBYqrN#6wC2{Y(H%FC3AHh%CKQ5Z9;XnpnP@t4hJ`Z zYex()1bn#cedp$z0;j3LxSlP8#JV*uEs~W{E}LnF6=Ak804%Ks*M}H z)~BSXZl?!hscOHQzjd=SqcWGZ1ncU5<*Szcys}a;FPj5lQn0t*dY+My5h<|tQEsA{ zIf!)q3k`%o1PV*DD~MeB{_Wehw$%s%K0h(~>$iUFq~w`twqo~^t!`9-j-ocY%_gCB zN3}W#IsbENafB)F77yB2PE8S7*!s0T#vg%0jjenDZAz zsHnR_rlc&;-edxLa5h4)MXU;Mc_c-lyoW;GbcXdDFSXu7vJdk4!QkC!STh;!x)G+e z_l9CH0F)g}R~?j9SBKg7$7V)Ro|e3>Uvd37By*_p2&0%5lW89Ywm9qH?VRLeIrNr;l2s8YK>r+kPhS4(Eqw1wK);C|#h8hIedUVBeP)E6?Q>NoFxosn!^*2G?RihufzBS4WMLua zFN}=ZQONszC8u&LRvV`8q}A*|%k~gR#R1s67?C}B7)uEimS$yTZA0?Llg3gSG_XLT z?w5ycy+iA2A4@0+h50V%B*{WoPA+a&mzD|7XWgx72!{O+f<_l6W7cs)FwnAxwXB?I zw7BCxqR!;J^=)c;{_8M$bRc{E&qtq!uF{*hX!mp7>fc7o?%A~U?zK;TN?V8+PjMy- z3Cv?kas`KbbW9^UIYNAkDfj&O#OEFK5U~r~3S>_?YU9z_BWzB26sFpsUyKeNe+PVh zW5&X7>2;6TG+Plc7Wr?7D(>nwW}Hu-G#L?VK5$bfk?Mn^$`%`Xu#hqP;!@DTB1l20 zPuD~mI&3J4|4BP?!VdLp!LJ!}!94^I(+I7tUcs$;Nz80lbk*j>g_Q++p5UB^#qb}m z?I^M+bZ&>v*E~M2{ie1GCfrUAQ*m%)B94ym4~fhgx|>UtXqJk=}gDNtfXj(pEENU9i-4`<7|a)b?Xo+{-jdo9|Hpe-NpHNN2GN>H2)!G z2Di5zNaaMA%JQCLjm~+>AmJN*sg#1N?$GQrHXpL^^acM9Aj~g^08PIjWza@!} z_8}F>l~O0TH{5pZvnaG{8Y&GXN8jRM{(YvKsFT*WVVE7rF`-&k)Hq=?(uGv&i}?It zKFL{PeGWf?wbfUeAML^ZPpGoIa{8-=@}1qEqTU0Y}VQb$Ke2jdeH?>hi> zHXCx4O%KC?PcLpi4E@8hG+6+Wk7obd67u$EDSDWr3eNXNYEF(xVswzhrzJBj79e5YZv(L(XsA%&dvB~FPy06``I;|()bWv98`duJe0p6uZQObqCrUxoR z_o$jXu&fqsDep~JV+pr0e*a4+DJ*Wl>Lc@vkNoX{Z$XDgRP{KG#wY3pcgxstW0wGA zl|lyP;oU#UvVhHh%r{$uXVzyAJ2vMxDNo&IuGc^iWhkjOuKbp)Y+py~N=h#FdWk_Z ze;$^fhLfu-bi;!UpqYCxoqZfuJ+t6_yY;CPWH&Bqw$6C=1Tay@X8W*NQBi>{>NbD5 zV?*ykrrygtSaC}$eiyBMsOX3aGAop-Vc4bl6(K~0F3kVcxL_5t=)$`aCI-L5u00z5 zGVL%pOV=2308~L~l}rh9zdNr{sY#N`~Dk! zu8L>WXVN528k?Ft#P&+wTVnPQjgp5c_}|kpGm?X9S93wPZqxD*>vT-61Qzk!;d62w zu{Dg?9@3Os2>MXj<9xZS3VT-W9;H%~z^$siVt!@wUHbSI?(Xi9swN4CG*T1s6H5Qm zIj((Q3;*75y17e0s;+~B|3XXgpiwdPvw}9yn-u`xSo=Tcq};GyKy2zR)*%YbGrd(X z>NM2})8}?)Jx`%XC?Z@AxmlVCfv?3LjY{6$LbxGpB@oC71^|%}Vro6IZj!y-e1A;9 z-2OXo>W^Oq-+Ej{_pec`B|4Yh{ z|E!8eCN}9iZ`ym0v-zKyVH2-Czb3fkh%fR{e9w&eI&v+)H~!gV^JA!RXtSiRO=xtv zC(;@u^<^$b{NXlB_T{IZ!D%QF+Lk0FB;512Uyfhl@}6nN=ik7onZIL&`x9ZlV#dc4 z)*#$eVxkwQY1Y)#e13DhbZ;IQ*y3fbMW&tvQbP9tG0wC?Gl8gi0#^^ZLY^cUhs8h^ z_PifrMRxHTdS^RLqlk(JDa`*cPqfnPhf;)eL)Gkg@lJuaQlB65ldrG3ua*KlcS>j- zt_egpQdG>Wgf6eIk8`DiuA_Z?d@x625r1(hag*u+xf}u@z64aTuvQO9xXJnXiGJ0| zZMpAfO_8FGXNEjZi*i#k8<^o-O*`Xv=<4f`p(kreCTwI z)7&y9`QeJDvesnX1j7Mo`|N8@-QrWcz#kK7?fw|q%S#NcA37*5E)bg|z3`WR4?K*M zCFeIuU{YtjTW=H)6@HuAhrkq*i~P4>U8n~QY}NSrnbL*Z{d~|74=*5 zBov8fQz5TR?PO>O>mTg=i8FxaX?)sQy`yWD|8ZpWO9nnQAo$@5{WiDX`8{IM)-uLK z!^alc?r4jsee0UfQN>Bu&U>`GK>pbr8-N*YtaiK-kt*l1X@9sq40R2((m=uYE687G)5y4()#;n0g&)6|j|Y^Y|?$o8Ywdhs8d$RV}%) z-$1m-N+7-je;)kHn>HL+RS~9|- zFATtbQo%&AMjN&%{C7v01GWY-u7n(ir5-j7Mv|vFj~Pd)4>~87FtEByq?WLGi1nMC#Z7${@b>z>6e}Ghm){Qf4l+TeIQL=t`b>Kf|}Gr&*MA1F>tWgEOeXNB|5_(H}!iC z(a2$hzW#tH{eKxDKOY|w?~*u7*vV zn5nZ~<2u%9do`9lc6m1%F>8eBl|Yp5$x@&29*9#%PmZ%`{;-pvhrzMpm25y> zyEe_XPK0lyI8bc10D2BG}@-%y;6(#-rGYj(R#<;~0- zVlnG;dZUa+cT=M%pi;;$`KZh9<`wLfOi}8U?z-aFw-{AS#}DV~o^f8pn?5Jkv2Eb{ zReG1))Trv5e`)Q(X8 zXMZ}bLP<^zAzN^0MNU`YGw75FrF(NEbq*5J2QphG^{;>4aZN;qw#wQ6Ks=j^XFs2K z$YVrUo!O3al_hzBq5~M_-?h*480gb_ViZl5_sK2{ zo&p1|*CsdTLUmg2Q+HQ~6s$i?>9t*4gC|BE%@vvJETIKwg$OZ6+quYRj=3@q>}0O| zs8u$-c-ZT+JHF$&LQ{;D!BPK?c;ydU?Zo`0hTL*P)+yP7?q&2(;b!43A(==QxAEF{B-O!^<=&CxEiN!6+yI@ zq4oZJwT!j1eVW^Q@vx~Wa)#GJh|r)K;w^M-ps;22-!uQvPJP+UIJ+BtmNGOr*rehy z`U%zju@^zLIm-;Irklfy0U%6}C9`*wjaA2SYo_ZV2vE?84Gj&mZI^f9i9#y-LfASr zPI8sS_ri}NOVch=y=WP)d$pA_A)N7dEroZQEUtf0z&Vu&BV z22jZZSa=t)v60?$)+mLRQ&(3f*3pi>cSMM91_m#H0pSVPaz=b5ZbP!NvX-n+!8@Cj z`D|?N*y^{KzFSH9l66sGH2+t~j0NfT0b;|^nP|;sM_Tfhh%87V^h6l)iy&Fo@C$5$ zl!L}$|Ni9%7!UNXgI_JHIB$x4ZQS__+uMS#wz%EM?9N6Ekg2zr&+?soW>@ogF{HAS zn1#n4jnNeV0O~WAeIH(6u{nfwlEGl~TUIy(7lXSnhW-J3h9^-Usg+}{`9W;~2VjY6 z>aO!fEbs#3TF9teURlHGX_HJgw->bm*&oQH2%XWCNNnU(2z{;E|Y$QEFOHl$Di5 z)p;*29*=a9A1A>7^0?0Q^CHhoqh~e*uhJY&Z9QVg5#0IqUkM@hZK*$O{Dr=B_D8gx z@)y_zl^T!f>w@2j(l;zllFeyO81pB_J^Qwm)Xw7M3XT`KeqxyYKVq~cD`M^+%#9f( zLuSVJQ%t*wg=Jq<6cn*1dV|u>VErs{QtR4MB_`klR5Qu5&fkz zJ!Ci@32d#^uTMT%%umI{<^-c=7Qo?eu=uHW{m$|nV7QQNelJ3@WWg0?W9r<&aKYZ) z-EE@p&XOpk@WF`Ty{jb2h#$f30YPz=z)2CQXZ}aSn}R(yPADBqF{yrLPcATgOx(Qx ze&WgFBWluu<&Wmtva-(I+;Dk!AXr3mvH2bunJY8tOA6jgF*ms~D-xAN6Y{6V7}8^p z{ziVWmQYqz04Cg$wPo&6K_PMZX(WbL0Gh6F_V!VI=XWi|l*NDC^MmXH-fDbeeQ(gQ zug5nr%k9M<5U*O_Zbm&+h0ezkASnFh#rMv&N*Uaywl5R{iMOvK9sRzdQf6!PMEz$X zQ|+I0xpAN-hrSMAZ(d9;4AAM&i;~xZK2&~>V<&u6t4DkFb@!-@~ zB9AF^RPjA*6>6Jwfl;YVosW!HLx`m(9pf6~d6lzO)bF*?)bFBpe9?~Y&y~PB#SW68 z4^pb|aAjgeMa5Fb88mHD#CN=s{cSrsWo_u|8nVEZ**sk364}Em(|w|Oj(v)dC7tDM z#(3JVxz~B`4Gtc0#_}ujuMktS>{j+LD;Kuy*yNbj(oEn9O@w_i|rJqu)5d*V8hxD z;0M8-gkBB9Me|7)cn*K~lgcM;qM0=YK3Ohs|=UgO>*b*D=@n|2PrO84m!6Ur;bzNkD80M`Ur@KDG+354yW4%?TI z^%HBEPPMUcUSZI&mBnL04vzkOL$i^6ctndgHMQN#$z8ynlvNT=NuS;J{cJDcz_>9Z z*7KYhI3INB*!(eU$@xjA{T`<0xL zs;X*_r088<7f~>4;Fj$m9%|@(Sg3V37LFwe3CQ*!cVdJgn`_K? z`SRs5b}K2Hwq0JoHp*TZiA|(M;wnoaIZ=1`rT}%aV31F_9bv8ga1Vn#L2~Xe%8)l2 zD#sSwn@I<2e)Sz~N+8>J4P~>`w05tlv`w#yEK#%Wq4Gkc5l#Cs=K;tXt2G|xg{XR; z)ktO2m21cn{Y0V%oDCq~X?DGeOGo28ZK~ZZ4pTD9^x{AvO8hd4*C4Ff{Ss2GkXRa!mU8cmIR|Fe+9 zAswg0XvN9mpMld45_ot{{`&Rn>)wPf$t^rQ9Mzkljt=RZ?uv6|8o&iwEy$enE7BkL zs#tKoda7St>O&a!@YvSYvpRM6&W)Fx<9K>tXRyW>OUt|4S5a8#M!E*m+$NiwYVLdi z1FcS4>Q;5qjI;sci2k=5&!cqt91FO46k`9K?(m-sBKP$OD%fso77nEI4#*iwt~nBt zD-=wzHW3YPMQ6U8*A^kKH??1X%@->-->fNzEG;C;WHY_2$maa_y~b)hVA%mnMW*U% zY5{Mp<|C!(a0(1!z>O2Nyac(S_RfoW=N*Ay6}<2^vKxUwkZfumk9^wR-j1%(OV_>H zsz@1oxw+S5!`6_3-!y$N69CpCJzK3QTeH6zQn$Ma`T6&!!6Xnv_a#y%;sOE#UkV@K zqe$*}&W}n3j&i%Jc<$p9s z>T$nj&t4FgF^D8DefAQ(XMKLo<@&6c+?JTI@MFe8UfddD8m~H;eBb6`p4d_;(tsfl z&kwXK^RX<9N?2zcg#ciN5?lMNlXIB1|m&nM~2a8)NO-L0y^7<0T| z-|gHdNE=bkU9>dCQ9pg;d4)uh=ex4|7sX=Cnn08)5+;V(D=K^wa4=|xo(R9iqAnGP z06hcqa13Z^OF0T>GYQwX@N1r3=y4tr9x6h?8qBhQ^w7N-4%w4J-c73PNNBW%B|k5(2z*&MT+ z+6l1pT^Zh7;Z`5t$lh5V^1W(0u92QmwBHwnEZT~bOk}}n4qrH$md*xBk8Z?VbZQMt zMlv?z^vdl&KY0eq)sBkBNh=*0O4m(3v1-xgwo&Z(rW%4a2gHwontvq1u&15T+m!N;PSL_6LvzANW>q|ypHYXs+&o6IcY;1fC zDusWWvc41ZR@UpSl3W@z0AXn)E!2ZeK^ooVV50)eWGT(dc_5 z(!m&s;X~}7SCxENm5#limBvfBn0J`9tJAM6I)X!H| z4p-JdQq5Y$?OWy-@Q6`WQRx;w9*J~{Lw=aBo?CF$= zX{81k=C-abiM6npon(?G8yng^zd(eMs$B-ZoR;d7ua^8|u(gJVE+4CtA4fJbOT^13 zVSPVk}P9$v~ZFHQu^C3D>8Ulm;29wgM%%z^N%6-c?J2nYzI z%+1dWKB^x5+uPgw6O4Aw!ksZF)a4m8uTU*b4)xoOhNxnW6Bn85jSrX<0uR%zt?v4^ z-F1#iN>V(L`FQ6PQ<)2)M6H&4)$LI~;i;jic}Y}Mv^)v^aC~x7&C}Df90XO$VaJav z9*4o!bs1b^{QDL?i~?Qpiq)-3EmwN5Hp?xoArHu1$sF4?D-TGTB{XbbpgFMOi}m30 z&eGi6Tq{Tn{#{vF@h-EB`FlCGps+A+--7>oLb6$hS+@*Vo3){An=(FBJc^j2!V!9z zBUFZi#iq=1TAU--z4~B|BUGH%CB&(B(3aBqMy)+HJQQE=HKpK<*k$^0~#ymnyiVUIN zRY4OgB-gXrLQDSn<(_qDJB=j2etXumzK?|Sj-$|^)Df%$Kv3{t!8#Pxqxst%$57XK zAp@ljf*T$L7W+`5>?!4m3hp<0H(64(=Q4oW-UE*mx^c^RfytEE1+H4U+p!ll(YRH^ zkYx$3odz>2tBI<<&ypxkd~q%W_002@Dt72zv-iwhyGeS{!7bh+!!4V}(7NTCE}Td6 zQ1!F?;{JlH$a$WmujgvhcblJu{7U8+{&Y7HxcfnRBToFtWJ{IJIYN3m^+=F8?{_Ns zS^nCn#j1uzWSZ{%bHKzi(kyebrvF&T5_N1mrWh97+KkXBCN(~^$T2^F`ljMgb6Z3Y zG3BDi&z%xHfT6HvX@gtA*a^+WgCBZat!-{e9Nq+DoiYCQU{_j!*2GTn#tMX##*%}c z>R+xh0B+8ESe>~ugkI_dlsV!AQY}K(0*FRq0S;rk!Z@qCoQ2mM-b2*8OH0L%I(ROK z$DK(8F&Rwf$*0b}>edD9N=c#J(2VmUJNV?KjxyQZhOq&&JAmfUkG zO~ByD<7KtOt13t4Hm6TNxa+o})$&H29`a-aYLZP@im9;(R-0FL7E12SSdZ~hRP`Ie z3{^mK=99Sgx2bC*eA}J;tlL!ci^{1xyITDMw?xOp?cmme1{akhgx*Q(Az9S>Vah>@ zI-g5*S=P0cS2&yX#p7A0d(^G@W~7B#kwF{dKwc#7IPm{*XaqsFu1MTBD|2^0T+ZOS LiEjB-$I$-*KXox@ literal 0 HcmV?d00001 diff --git a/phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json b/phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json deleted file mode 100644 index 4fc8e42..0000000 --- a/phpmon/Assets.xcassets/AppColorBeta.colorset/Contents.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "colors" : [ - { - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.988", - "green" : "0.580", - "red" : "0.278" - } - }, - "idiom" : "universal" - }, - { - "appearances" : [ - { - "appearance" : "luminosity", - "value" : "dark" - } - ], - "color" : { - "color-space" : "srgb", - "components" : { - "alpha" : "1.000", - "blue" : "0.988", - "green" : "0.723", - "red" : "0.277" - } - }, - "idiom" : "universal" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/phpmon/Assets.xcassets/AppIconEAP.appiconset/Contents.json b/phpmon/Assets.xcassets/AppIconEAP.appiconset/Contents.json new file mode 100644 index 0000000..64dc11e --- /dev/null +++ b/phpmon/Assets.xcassets/AppIconEAP.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "filename" : "icon_16x16.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "16x16" + }, + { + "filename" : "icon_16x16@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "16x16" + }, + { + "filename" : "icon_32x32.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "32x32" + }, + { + "filename" : "icon_32x32@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "32x32" + }, + { + "filename" : "icon_128x128.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "128x128" + }, + { + "filename" : "icon_128x128@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "128x128" + }, + { + "filename" : "icon_256x256.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "256x256" + }, + { + "filename" : "icon_256x256@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "256x256" + }, + { + "filename" : "icon_512x512.png", + "idiom" : "mac", + "scale" : "1x", + "size" : "512x512" + }, + { + "filename" : "icon_512x512@2x.png", + "idiom" : "mac", + "scale" : "2x", + "size" : "512x512" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_128x128.png b/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..70a117e712521ef4d9abeed079a4ecbae3ab01ab GIT binary patch literal 9934 zcmV;!uFRuv?({S0d7hW*=;+wi)z!7L zr>AF6Z*T9uzP`TwNixQau_FVrAQQ47BeEj%f-1P~>$WdnzNF^o=Z^{@&MKuI7-OCW zLEy3bi^bvudya?-{8{m5&7Xb#oG6#atjigYWe(Yp5m}KL*}(uTzyxgSnf+JA^AnMh zQl9jE|0x5Rp=LSFfDIUd6}trn!$cQ9JUqNrYkiex|0Fs6l)wtiz>eJlgK475fAr|l zav{Wd4l_+oza_8(L$G8gViMRrY+zvEurcN>IsFxZC77};!L2K;FpPijO!DChA^sl7Am>sK0V9OsJ9X-yoRFl)cmI7UeUw{4W#7L{k;n<`*^#UQt?-K%FLnk&Fc(dH zC$L8cwhuT&wX<8Z+3YQfR8HuiTz-3~dw(XA*}^k$CgF!EJVn;N?>87f!|&lZ3mv4> z=`EGBK$zFQGf618;`)-c*49c%l0uLy(qGcz+Y zGliLXm?1C|Ml;GBko@mCinUjxQsN$Pu4}vMua?>B??2G8b&v^cEF>Ws@FD2)!0mEj z+~!2jxDy)&T`24Ips?4A`aU-fPB;qQ{ z8ta;7v8r(v1&uOR(|lUX6rSDg$KZqwA<55+oVF%l7R)5&2GHuvfddE5Ud%|=L!OEz zAP2vN>~y*?N|5)BI?>wiLSeTDukZ5V!L0#YN084a$R}%%2{1!m)kL64Yw5mq&9hi< z5Z|BIAmj4(2)c(Y2ueQw4(fMH$I;#0eYV!0rMmn70sTJxcuFBBA~_oLtB@sv>~J_S zY;j=Eh!f3yE_~JH!7ID`xPMC!*AV1$+hRDWc^YdCkk{xTn~RNMBAG=dP;g6U0Q5^7 zLZKjk-?YpE%!JvbdN=SR(h^CMz7~OP4w>t50&*yzLJs@A@O#{_6Xd~3Cw39!27>(g zeh*&S>BqeU`RdLH&LPMrHqV$to)0j~2v&crSL2~tn^1neg7SS0jzog1*}Xo%Cb3fV^sXd}o21bO?g6Lkk&_;kM)&lBXkHV1JfK|ZT> z3MUZcH3X=@0GXqhWd>L;bHFSeTv1UO$gPj#;f)?RtrG}`!>Xy%Z7>sN!;Dhd0RH&b zzy9@4DUy5VgU^e@shp$R>hz#>z=MzX`|#`z33qG`;qs0M&Lqgk>mhSJ)RbYvKTKtMHjx(#N+Y?u+VN|^!ZFU>!v1+dHqKNgE3;PaxS z*N2NcV!B8cfXvdOSOD}|QR(3tj?J{Xo@NrytO7E?*^LqO^bNxA^Qz@6-3BvZHYqp2 zBab}td-^c1$yP+I?-DK0tGguvKFhGp>#;awO+vs$0W(}}UY$&JWB}6f_0!nWJqWMI z%^5E38bM~lY*J}}ACQ*3{PN3xr$`SOqo1Q98kA7l>qP-WFbB*!^15tH)gqu-0+97u zWl#aDb{4g}hv0VD5Q#*1!L{aAFTU?Pxs1$Am<=;xR;e<;kH7fh3;y#*%ozQ=eY4tK zxTHPC9l9A@<7^JNQ4BDHV=#H7+}b(iGbjPbtAwP1pHp^?f={-Lz&17vzt^o^Y>Fke zsR5ry-KvJ^SiL_QS@f%i%!Ju6qf{DTNnv4O27TDH!F}q!y?wxi)eP}iM{_-kfiMUe zIiwTlJuYgOapPtgw`^5#^Hv#`b;vk{_wMv~RyEDF0)P#m&6H2ds)^%?)-mkd+l9{F zNmO;a@ZoMRp4uYe_RbJ)ZV%(3O+gfQc`$Bquo<{B=d7?Oza=meW|Qg+u%xuKG@Cwb z)=+=c{e01WH}dKgk{-{ua7*osj`|6xiX2q?BGo zWG3b1<+&;E0m{nC^6A4AqXGB_la^j9N17O94fF!(Ig=Lj4odH%fumbAZwz>5w?beT zs2OCI0csM+$&^i6QK8_P<{)}zOY?#ra8-Sf13P{*JFu~iUITIL_ zq!#OsIYK$bzSgC1TAz1BX8>C`4qHfUF~1q42&VVVIYyv!w3$_DE;hmO)l(?iZG*>Q zMJO2HZKPHb{yz-BCld|@F)%uTvl^q+jVtD$1sg9;*KZMg#OFI%;N2btXYwwijzq8N z@rW&E*>IdQfp8@20c&$MDT|a*L4eC;EGy%g@7Jj!A@z9*GU)NgJG~egqmtlP8$|Jv zknRTHloknxVWoO^RZ9ptwTeKaWnPanXu%%dp+H_>T{tV8+e}SZ0^~AU+@eA8g?y9D zwY*#hR}VRfG816e(|0|O40!WK1<&nPaMxyf&r*84eD3iqgEC1=OBGyHAI7EwlaM?P zE(zQqikF0RHUK-?W4GeoP9JsbiUyfy;f5=lV4g*b>Ww1lxMh>V5vUq~VZO3of#~4f z!n3~lC0KVy0kY7oLEG6jWhboh$W(&%W71Q`+ zhXXE~g-fS+Nk~@%&~5c3B)1(eZE+!^S`qH9wVB1yUpFSU2;9_ZQOxQ0?kx%qXKc5} z35WqS&jw}b^dAEI%HD-Pr^_A31!UrX7ZdQZZ^84irWIs@WhL~TTYcysp_1V9Xjd1- zvq8EUfKyq}>%!-|?CPF4U$Cpzj=3&h(k5eChS2z|Pf=@cPNEiH(keq%4rjrD8#_6w z8LmO)x>={CWPsZ?CjXGY6x2+yluW>7fuUz;DxK5HQZ@KWuD z>8e@!uDXDZMu=Q19J&HC4eQ{jTBI6&0 z^!gHlp3n-NmXZEdq~OLz30;F+65LuzV6f?L0R2|5e`Eru*2ZX?qzHG`oWd_?mbtqZ z9*!`umivZ8mevk`@MFfNhep`IsX%lQfXzea)^{ zyu61>LJ>tgiJ=>{oU+6}3l*GD9z$c76_VG*CeSiL`Wryo3R-9@cu7Nu_r4~bwfSC| zYdLSDM2FVNpVh$Nzm47;l3H77LI3=Xj5`GC^?jQavlMNv5_)d}xY2TC-FoYI9LLdl z|NR>VZmxfk39^c3R1*YzZvB4{)87ER6?EIJxV_a+HC=%bw5BYR?)uqX3J!N%*CGFx zy03t44P%A(uaY@VP-q*#1Q7DF*7rhY}v9bV@v_ZGy9#r zMx$D5>anM_UHh)J*Qlx@OLy;c&OZ0fXjsF)HC;2RpE=%RR^i{3$on?331iBhAmjxW zDEO|UvPH$);R?nDbb=XSssa2P3Le|vjuM+4EzQmJS0s3F3xFSxYHg}>Vt#ZTrtDQn zt`WxG7>wAZ8P+FtR-z)cQzu;`ZrW~56cgn6yXEh-oPp_BkgTvi>m-|k5z6RYM6rI4 zK@+(lQ^B+#N&A5s=~IFfFN_aRu|2`T1tUER41NJ{EudLy*XBegSG~FrZGyd;OP-x% zeNwmPDHyqvwNtCDH;4f46JPLxIQ0*r6znfn(Np=HnLq&;i0&5503Svw=!=oyQ1Q?~ z`TGGR-5X;AfKQL}OymmvOyt2S0K=}Jw1S5-s_2+WaIf6;WSQ9agfOe4@ied{N5QT_ z6>$y~rA;bZK}+iaZ-!|lz)1GDr{`-$0M8y%_&54w)U^Xo9T5@iR4_SEhn4|eI&cyd z#xs!zuK@H`Fh1XooA-8LhKFQxhs}EZ=#fskN?-DQLCSE^I z6am~Acoqp++L_3*LP(Maw*Y8VSg$JWc06~uRm_;;O}5chd%5e?G=c*-d=jPB?ldKv z;A5}j_#Fy~^cKGYW(5iZu~jN|6{uL6qT-_n11y4&IzeC<{8vnn)k>v3@sYdX5Bjn$V@mH}erkp2|a9%mT zgHr&8RNe+?tI0UsZ6!D%mp+*HD>6{G?G;RImZ6|BdBv?@%p;I5g1rwYagNX-;ubn-O% zWmGl;_wHlF8p$;f9MJo8ZHVX|2{vMUS1`M5176(MB&}eHSu4oQz*QJ>*a*uck2jEPj?vpx+#A$} z{DPvct)St8+*9qRP+j9x*7~mf;RV1C)GFyJx5SP+cAvo{^OmYxkfc|>Qc!UceKIm# zDjwV~le*nNI7#e3l6xR}TzA+eb07k^&i@ROvWn2?-3s!k1zT$?s$EWGB%~@numAmr z7l7Uh+U<5cvA-P?0@NPKp43e(rU-5qXT7gT<@)(|8f|9*-%J(L_NVbrs4Mdxe z%cGH8Z;bUEy)i~Ge(O1WmEvgyIlrEZap?;xoerc$CL-+V)ynJ(pBWSakd)L8p78kk z(UTarQ~ic)65C7Y^_Xs(#JwcG;7EzuYj04~3hc;L@$dnfDUB#2$@T6fmW229^~Nk;fAQU%G4sZ^0yr=qYC$gEKjR<454{&t9hn}THWwo*JjlWRF$ zZ!?c(3nZIki-K!50Sk_mp{ghw)m4?KmvrxRR3g8$2yr`)BkZ=th?q1FVN>S~76ItH zf-bCysgZ>c)r4g0=4+fkBic=_94FGy?Qpwhd2YB&+DK0Dc56{=HD#L<%wz8e)*p}F zqG1e=UBC?Rz|JPTwbzL!0vqt`&MIsUNk!y}-3YsW0m3KGL&UTNgFpa=UBP$LRATaubC}SF#*0TUqW#SY_Db1Si6(JYK;oQkt-EW&oM6Jb@gmF# z_C`+xlf;pX;7uAvc0;m`k%Z@QCr0|6#fY^nxN=!FuAZ5WIge~Y?BuzK(1;(b0?=E* zR+LxR@zCyeF=DF49@*SgTPN94BwHZ4`$)cKqk^mb6ikuNeP^(On*-!?$n#fhU`i*! zCXkdr!uKqOuW82RORF&Y?@3s3?|Q@u`8w%?UI09$*(I&uYX_Ufw5cYhtB+bJ64%SR zJlc$4lW6V{ZUV3LRq)t81^WwBaP^TVx^R~>zfQ%f{f40T^1rFOD~eGgqyrYYS=G2m`^Equ2=Zw5@~0&W=${&u%Jh zQ1Q?nW`nN8OJ?vrhvDl_L?xOkxrH@zQ*T{kU7>=YjoJ+uU%w}LAoT^P1S?X~G5 ztfy)V>DmIh29nLNQ6u!D(4J33<)}Of+~6-|!dHlQlRr$H{?#k$apC+@-1o*Y9KL=L zVs!F{ngF3vUT!rH=M&Y zYujKA zQ74zjo(U$d7Lu>pph{MOq;?HgtXHKy>%@4!)6%1NiV&1~`7n-?a;hfeqsQMWEZ(zAX@e8vxvH!bFKLq-6GR`BB^jkwZJ)rq!T zk2%SQdimoKVP!%Tqtc9MUpL7DBgyA*?Z(r%b!!VA-&v10cUNQ9Asg0xU5H)bnK%*_ zk2|+C%4a^0V;nUZN*36bsdk$YIUh|;O(?6XK;o`Ygx$UbQ9Ah&;i<1~ zMSGbGfGSY5qjF9TopS6%-oFm=bwfu0`lVvY`IVTsxkJcMd#KCCG<~^D?BOD7?)pTj z%80}@Zqj)qt`fpN4bH>vkYq%}rz1m1F3igz$*3$VLRCd6sw*qttaiXvQ-iv?Iy5vi zkTgaukG$pq!ExodVy$G5^{NohqhOuN=P*(P7E)p)pX(xxjSVQNC`0_lqX@fkA;LY8 zKNo3#*^Z9JR*me=b2u#-p!P%#&Q#V@1O(1h)g$_jWh@heUjVuhqz`DQalq$mm!w(M zK(HA|-bgtX*1^&!sslzcItAWoTE)7f*(lCUM@6{}H8oD1WZra%XWZ}{JAP)CFOtTn z_1p)5kDEo%Hd{IF-QI>v)_}z0$}YHUjf!jJI6qcJWs^$wp?2^_8uiF5EJD=ceF&Q- z1WwjS3=pPM586Q5>dA;MabCMh8L2> zDOEhRiX`g<6NdW+6I~-&`wfH|_{UV@($(@^Nc>uFTrMKGV5Nd_>(Ai{>45&a+l8ln z^DzI_03qJn)$?)04GZD=DqBnW{4C9F$oeoCA>-%Z#F$z11fH^x{mCAd0iyt>&F`E! z?8RFK_~+t#762!dlh)W!54)`lz7Z9;e@6>O`*ye^v=ig}&Pq)_<(00xnybiiYb7AG zOl3Xxq-Z@&GerkS^R6FNjB*Qi_Ar{bYP$_@@2$rLtHAg5#v1wDt2%JW(pLO_t`ooi zEEAtRuoaP$j9a;S7KprI5gOx5NHU`x=T5dE^|fvIdgM&EI20N}Bt5?oVe&pk0n9u1 z@2g+x|DTJOiw~~%zF|b~ya1!ENusW{+KwVgg(1m>2#zU6a8v=licUko@#HR|(4elzqwzLK3&vW3)PgAh?-VLU^c?A3Yn7fvvHQ%9$K#{;HuSMC~2zCPiR5T@(y0eDB zm;uiI`3r;ue1uh4nBUSvA0nEkgEcV_jydo_VMe)fHCm{bw!$UjM*sQe0HT_r{2oZTRDY zX8dkW1*W_cfq1@P&opNFXp>L;cAyUj$zU|qIqmrDP%WcXC*LcI znF%gjsfuA#@#G#Ae?6)lC-_N(uTV8tzD5V#xbDayt9cdd^_gwHYx*}|+_Bk^kP?sM zKARDK-8@8j6UB&UYlqW%Uk^nf-@Dj};-x1Ld+$mTuNyo*mZ(2M^4S>xP*D|}{H-1! zYLdMEq2-QyX54yZe+uCL^35;4_~HvBV)Od=hDYu!(15(cGTgPb4HvEkyq&cNB$`4X z={)kkNwg92JZtl#+ZvFQox{GrFQVVD&QaqMFOZ*u@Yw-cTQ|i+jv>9*9LdzkXKL>d zsGZu*pzEZRhXf=&yq@JlbegE&vzhvk`JSkFs#;TQT-+I{;}U90HysDMc`@u02PXuz1kDGEEgo2 z>i}@c&MYh4|&bu+<&-bdMbwnb~mI%USoW{sg=E{zgkHs%ol{9+!-W7uF-3 ziR|YQd*3QPXAnVCf@i^ptsPUnr1wIK!s8EE8VLG>u&%3zlZE{0^AWpj z9}3HgA;Aca($Z2Na?@}34(8AW5EmEsBKl$I-GQD7=&mbm#W)yOgg*z>V*I)@xM+o> z_T?nn8yBxoFnL`&-VJu(tJoaaiu1Us!!`asBVS(yv^%Siav~PtkF4~N&uEX3`mEP@ z4n7X`UbQ3HC|wZ>Km}9<)%(*>y)Vs8yo#2bN>l|Uq1{%??7-K1{w+%kH<98u9Ycw| z3=JY|W;KrJ=;#+c0_ex_{{=suHEY&nt_AeB2-@A3LD$NJ+r_~rX5?dgcrj)ltib!b zs_|xk6CdoZg3lov0>cZCoR*F9;(SzB*}2Js)*kP`VcqT992H2~8;%m3#k02;jH7dJyCaUI@9urZ;8@56qdCxLh``SNewxde&3!+2RZ zKMOw-ILHM#AvYRF{WsWN{N$%U{plYiO(&rLhHkX@C0TE^tyotLTn;;&_EJ=dAnc_D z(%KcmQBlGbMY?>h@{xE(hV^^!m~sJW7X(6N0Lnv48TJs#9)Xg>hm^(@2 zY{WmZ)~gIKmD9|%6;^9ePZH%=b1aK%0y^p53q%yrLo1MSJO&ljl?F3QF31VFF|>gF zWdsWf3TC07hn@{61b$(ra*BZ-fvKIM;E@wT(z)M2!B{8WeBHmkp&o^{62z|9&-%+c z>`D7v-8)m==vlvSN-jgVye4GKY!odzj?|VR*o4fq40aq8zu`7A96n5qg!9(VTsUA0)fhGz^uXd@6zM@AnH?p z`-}c|C$8C%?D} z9rZ0t{en)MOtJB79}0v($?^~i14{d8q`$dSD+?sPYmYxedi>P~QDiF-@6lj-w-C-f zIUpD0q`w7V*ccN0>h{}jA0ZKwGt|kad8DB%7nhxUG#cR#EEn>9dLrJ?<7d1ZNP^uZ zK;?;@($X!0eS4g{-BWnB4>I2i^kfE4kAKS|B={dkX{C)_huO*{O>Yk8o*WoAfCeTD zc)Y;IjT;}7bkvL?HjJlhmm@JK1mU+Y(R+N$pa}A1`BtR>Is|e&Wpkg@35C0XNO^e+ z$@lK@?^%YV0}-$}>=YtDQ@7-Et~uvkwSVBE-_Q~KLh$>ru&{R}k~)SO`HV8I9TZoT zBF^^+!fsd~(Ws^5?+VuX(v_hg;aup^H+oufs}TR_T5s}MVjf?G)X+GtF!s1%#X06& zbIv*UCeD9AOTn)N=f%gz|81yv%Tz3HUd3foMJcyIYWzkqM`(hMk8g`J7YEE$7%h z*FPTk)NkGu=ps08?b@}EiJQ(I#BClYohPD_1d?Is@%u^yJb@!(#sbee07XV2P;|NZ zc@!ak?b~#}f^)fU-MU9Pw>tR-*FT6vKx1;=j2Sb==jG+Crg8@n`AoA+xBPW&M7**= z@A3N$B;2dVm&YtOEITYe`c7qcQO`N#T)N5s%^)P-P!4{?g$efuzG&vmnfKUiwgCAu zO&G9YzLlFA7B9wYwcg_o2xu(%)2=j{G@K14JwE4(bN0`F{_`Hrp?fYlr#~{J{lO*z z{rUlSd-6MX&ARlRciy=@H8pj0|&;T&)oxyz$2Ea*^p< zX=!Q8D=I1u$QMtPI#(nS;S{o(WHQ<$GR_D(co~|YQ=nLd2u+dqROJ1Y5?iSvi!4g$ zt&0>{XIJD(8b#7^zk%24@p3Kk0UcrYFF%uTFuYB!3~q9{Tu%8sMRF!jBELK5fOEk) z;oP|A=z=b7-j6t!CgcwpA^b15Wx!b>6b4X6Ns24dw8X#|3{Zq&(>6pUcYv4F0|WvI zLH+Jm901|*(8U2mG4@exH)TolD;(=_QY4B0eI`8?0%x~|o- zEb<<<_i`LZ+4sHd-ZR;`-?9sT9!?wnRc-KF*8W#sr!xD$UeetyNs@SX-JNj{XyMbw zq18zTf4m4fM~t;0kaZD%CIZW$Ao$_x;qK7FqK$sy!5=RIJaNcq$Qp>7{B;)CN`V)S zCe8*8G@3B<~w79zytk41lN^uKLiv=hUiv9U~ zfA_O{9&F~?%(c7c?EAdtjBJ9Ih7vXg1qJ{Bz*bRyqXPf{U#dU=8p_L$nOBwF%TYn) zjjUb(@MI|Boq;4f?P8|0}tL-jM9WzcW%i1=-o4!qZqc;K?!)!-u-XADI<&H{aXiaW3@mcUa#3N;+R*|h zyWkL>WyKOw#rob#m=H3G)Vm4Izhy~WCjTzRX)UjJ)1)`yom*jRV%e&vIWvc8966KY zD;=Ru^#;8q7LAtk4gzj&Lizr^4Z(w9;Z+Mxk~Le!dXnWqr5kR8BEe-I$^ABupZ!m0 zFP%JvouVj84XVhU;wZ{KR`y;)R56zz3bheg=kzP`(vRL_e+r5k+=(Nlnz2FUJ1 zHf)$h{FNY~h;HnGKzRLxaW^qxyM)0Q?KA;eJC^49Nzfv7;<|(rDMa_{nlJ3 z9e6bs%O2Rg(dgk+eWU}xh&p2p4yy`n&2&FY)?&bvT zifyL)&Vti*$cBG=bh;D@jecVh>dbKOI)R$|9&HF>JI>I@{1%_y7Fb#oO12pjSJ}mA zg|H0V&lWVPUu2h?0D=EIISVFx>f8)+4wZz^qS0fL1&~?T5t31dBN#TnKbPVW0ATOk z3F4Dy!9hF^vm5?f{U2zW3}ey(a}EL)F`e6`<=Mb)%(y#)s>D;8)@%}DIS0{ef zspgMP$IJX?t8p7yEKmt4k%s5=o%I~UpTz(jWr$BhMi@RXpASBVmHlPF z5}gvEZ>FE(m;krnkFr9|9!a;nCOLC_&2P==TT`W%zs@WNKRr`Bb*|yjHNgJe3uZ~i4=~%Iwq-QuF!fRWQzW7S%ev*);nHd;Ee;(5_=ODvFw^{e9-Ne-> zbr%scxGNyS`6KEoe;SfG^w(kV@n$WUjzRVlXv*-hw3X4Tdp$+2g1;t>!YkVI6}>Q$ zMZLinoocLFGp@JQdLQ03vy92fs>Xz9BB-B796d}5aC4$21t^F9(s08lW87pE`|3s` ze*(%jm0L$U*4%nqKJBxA{3m_$gRRSxGjKP2ePi-(NU{HxGdW78nce?azVcvc!tI8s z##4=BMaY>Zw~88F794t2yIb}#FOBpq3(HHWe=luR_WFJh-XkgPk(|)4Z725vX;>>p zNM^<}WXIDJr@dn$k$pv>C_ojtL_3_$T}K4m&pQ|&$(?)k5VTqMU>r*iJ3lzycIHq5 z#ZdR9BH2dQrIWYF$Eq?uY?U`RdnWX-zCl>V7R)Zk6hPiipwrV=P8AiTt4^SMND#=q zCeqVFojXUjzEcKU;yMI$izmdb+IwDqN)hqDBcU2}$^Yp`Rq3;MS>NS!%_OlV7}air zA00*i+D7|zrplAl0FJkSmJkS;$~G!Fop^~GY1EE3_!2utu5`_hc>)_vgap-VBolKY zlWBrDtD0)h8u>1oJAU&Uo(a*O<;^%eGVAE=f)pwBVMXl5)3+;G~P1U@vbu$B@h*roSxlQ(S>5?&&l&< zR*&oem%>D~96d9Pz>5&ZG(l)Qu}eW;$*iO%OM`*J+dy}&oi5BeA$^{--A!xfp?OTz zpha`9hJ4q|x#qbnkxt9ylPf_grk5Zc6$|_J<8?*oe7pifNTD5rl?4uTQ(I~xekiH7 z7WnF6tGA}+j}`LJXG;F#yC5%+8^*$#D&Fy-_!&u4((sn<8#7^Umu#>a;BwF_2OqBZ|=! zo{rxlXE(|RZC`no%)0saa5eK>?H1|k7PTH`x3QY}c0!kFB6E&M06CBcZ!}&wy5WN7 z578d&%_uy}#C>bP4=0ChLQ_ATwwzA-jjZ8ZE^#*Az0M93L3QlRVUb6c` zuoZsaH(RDXVEBZMxaH+W{_e9TGBIIj8G4P&C-1jzjE#33UenlkKBWUGfXv_q{=^dH zKgPJk%QePjnTR9aqqedB#WJyVoUohFK;&lJN|RH!nygE-rzCtXLrgytc&R#)nGbC@ zDDrqa8>2=`s4DN|C{NMouZVwfkBFvxrg;b^#zW3Z^F3ZHRIytxKute>mV5|%-jLo6 zdSH&0$T!wxBySj}qc6Te<^4?OuA3e%{dxP;*HdCMZ#V_xGReU0s|s6dSXOjj-mxdJ zo3JaN<@l~tx~7e)ej%5-_E&(Z`Vsr#uR7eG0?T6&*#&cNS;`kcHNk5%pQhR+$X2 z#0a?67gLVttjI0xBM(6DE~F5p&)Mf^+92q@%rlhTJVdu%PzGKE#9RW z!;~Qsg~dPm1k^Qq{gEW6Xya0+J+|L|Z>}B$FGoyWvSv;IT-G@)So2qZ_XzwdotD3_ zeM$T$FmQbHO62rC7i1|)am5IwBxLyy8Wl6YZ5&qjG+^TCIh1<|Pu6xOqj2YyvX~4;t z@WoCN_mhJ8Lkdox)KDceJ>oAL#y_Hi54^A2&?-Rq$bn#W2JMgvx^ST-H1E4V>Mqt} zyptV-Y-=ezsStO*VpCaHU;hB%qLpV38tM-uc*0>A9Hb zl2QP}bCYjTlzKK}9nASe7s` zHPvJkZy`GRPGA)t{`~$fAe`_4i?;Rn!4|8K20N#5HJPz*ht_0Lt~2=WvT-w6oO zH$+m@s~zMPm%gNHmsT|B07$LgN?a_WNA&4(pkDstjbx{UNTd!84ZT%ho$W`l3JH0L zmFSmVN*0}w9&eZWm@=N5UAe^VBFUv{m)aj#UhsAzDc79)UG9tMYB=8b8hcs{HM=o8 z^(t;(sS)L(anP2RmkW0-0^(^P{go9JXFrg_Hd+3Xt=L-frQV=pGk3VybQQ-L3M*1V zOqn-r70rc)MA89$%T{kS-SAt)fkicV-cFwNscEYcaE)YoDxB8lF&Dt)YP^sCM&9!A z^`?T~8*XTLZ!@|>u@w)Z${fim`l;^No3iG&6&Y#$^3>rhCxt}-*WvFw>rRk4^h~1M zZF??>sDaYvOKv`7hSmwa3lR{5{a7m$b-0A!6%@kqJ)Opu?Hl;0si&GZ=;yzdk^Ax@ zmjsa#m`WZIC|RTdbE!a{zCrwdtrgE+w^$zqKD$cfzWTvwE8cxTH+i<6GTEyeps z;RL`8;yQITr{g&wLkdB z0BkgAgPEPTnoPWZFn31}T)%zjXVEFbE6z?;0wS@1oQ8kWe9I_;_zq6$bJ z3c3XHkNxlfi4#;S(e!SB#af`hNZIH?`9shM%ZZRUekOT~E(VHK_yX2tGd7Y{-DB&f zG|kv}zh_W5unV#wYp{W`H>TP54J$Y!BB!XYszmqexKn+5mBD!R_3_+7KTdf$Lo(=S z4ysI-rwk{@(oO1!T?rtnHUgi()D)}H0;KY1m$$!tp*u&X!0IOS{N^U7YB!N;iVc0n zM1toP!i!0>7mFkx)?e?&E>LCxXQ_XU)x$ba%t4kenii#Pxz;V9eM`aKHfSy;=XY6! zqp2oRY!~(git(DuIAhX+367|eAevS`M$45C%FtTrSr!W8za{ekp3fDL zpu!%IAb!ggK>*g>5j9g~lt}w~b~Z}i!~SCh@ajXiD&;E&a1jr;fd^In!0m9h zYR*5O5YdKmsdU+L9eJK8F+qcSzJPMe@$&wjARg9~UCLIg$5yeFnCL0dli{R8OtJS< zF-|QeCap;4T<5YIs}>>aLJ3Qz@&O*|AYrcJ5mEI&j^D-f7phkhVzw$T($24+^{yKN zv;T?abh?ZlN>W6IN$;2}_Z3);8hw}p2&A&%SY44jtnG^ls2^gAeQA;TLldj%eY*nlu zm=9+%N)8$Mr@&^yGD2VF6y(!W&}#f)DSp_%Gifq(USqpANQ!PHuL+`UD{QeKs<2;= z6Z4upSb$8)i`>{vUTHF*p4jCP!Oafy77O~5_=woM{IFQg&z-<6wLc>Lc@`hijfc2^ zIWRH6CS)yL9!9EtaCb}P?+DDn+WOs9{hs8p+~Q4Cn8PQgXYPpO9I$QdNme9KL^<&K zYX}x#q<33|R>NsEF)?U^!VT!x3~X$gXqdzjU)s-B<^KD7R_O6Tc=caBd7pIIZoC); z21nTipKtvUsrKV{3IfF=vgzaBBtPru5xfPx_0r+>j()0y@Jyi~lm|TM@SZ|)l{?&9{fDi`BZYaOGUyXC?41u) zi!O;(et&SONp2FDB)pSwreO|ttwv9Q(e#TY2i(_b*7=%_zqc6}PY=rw_1l;{RcfW&X1>F6273&=Ybq}Wv@TPJx|KS`5j2TIJ`o&N-1!%HuYW;) zwmauo-JTi?scF7Pz=qaXW*4rar zcegJn&!fs#rv1=VxcNh$H@a>H8OhIiA0`gGhU2`5m#2@C;W%jO2`=Ft+a`ZjG|BgE zJkyANKCKASA#gU=C4D`x_#Q@1!kcd(v%G3$^|n8v^AjY6Lj}?Ok24v;EnCn zn0~IOGhHX{Ls(Gk4FZGb$%G%K^$I`c9DPG9Aaqb z??vG*med&FHDsczSNY8<{p?d2@iT~lA1!k~Cf{JQH4}FGNBymYoD9Vy_S)ms0ft48 zC$-miiXib*o_0nK_+so@K(%m6-e`};i^ob#BAnQH$`M}o$R{oYKfape z*8y%T3Yl_eXn31W#vy6ofqD6;cjh5B@lQsr5tzc40+wO&J9i^kt&#zrzUMO0mz)Q_ z=jk$sZKJ+p`)OJOK>R+ouR`kI|+Iui&SV!qCL&Xm1>&y1k z88ja73)9f-fnohj`L}E8{VTtA^b^|aVrmJtB)GJ6Y^+QRvG+9e?X8>(WgP3Fh9+EA zRvf8!*Es}W6d8Bqr(pL_;uC%H4M>d}Yx{ea=R2stf%;X}2u|x@BpH$3d4f9=9e}0u z*YprU7<#k!%KibkGu+}`{aZBHzIFua?=j~>NW+Hns$I=z16V>VrGrG~4jJ$K^mY3G z-QdUc=h@kucVuS(yVI53Uu#^tf4|yH5`;B0II2u=R&E9`=K2zX?#xD#2zrUyNScmk z#20ItfI;UKxzS4s43|YCD2cU#RU_TSosPGv$>5Hq&9QS!V;K&Lv5=rxexzgTWDy=f z4Y7!{c$6W^?mDO@*yY~b9!ECZBisM|HOjz}GxVIepXEX;RgMzVE}R^1;`oDAXT;z~ zVJP+9_Lv~b(@3TC%ort9GYDD8@I|i+P=i~8nuTIRy%(EIV7jQ>+k47XnEWan4u@EX z+!wQ;q3j+cNW0o6QUUYPx(-(N!mBm7BeRr*$@AU>VU1Tyul-s(tZV?eG$E$W$On}q zbm$P~+4_>Lh6H>lZct3)S9S?jxWmC=2eQSWonx(^r5OYK2CjZ0EgID}M%JvUl!lA~ z^=0>P!_n2n4}rt=i(c(+mJ2tyUZ!+EGhhBnwPA-p*4K@icK+&!#SZzr0U??=?(szp zIL}b495IWshLOp!5ek0|cow)RT2 z8Ra+n^)){9KX$?fh!HUzNfIQgNSksgPcAyv4rWrHm_hF=&`3MDx?F{?jWUNkgwKz; zLnG;fG;;mBIC~sLMaq+zaVfeyQ3o22J0V+zBrNqzP#o(@rA1=1*z7}8J<8$DRmY7cTGp@Cv@QbGALob9uj#FBfj8s6nr_J5 zD1GwyGID~she*0Qq>NH)ZY3Ur5q!)|&NDqihL~A;x%KS*k{jM z3EQRN8)(h(y`+7+IeSZl$k`|+f z=LsQcUYUV^;Qb;;ICfgm&s_Z*A&)3?k~`LEzxj#j@%Q_)BprOlWMiHnO_;!fy{YxQ zFu^w>uExFm&mM;+)z1{byuo?3j1}O-ANeLt;o=8UXOm4zy6K2pe@+4I8Gj(oU{0f| zhwjuO)tFH1{@-^TKeKbov{`JF3-PZuxM&r#oX5e5wLVS0+zr69mhTp}k%)4Oi133Q z#Kn?0vXDMs0rSMBo(^Nvmp@$JH9t3}zX$7C&yKUu@c@F@J-qlLZ-p#(6Sx~Bd*(y; z#Q9d=vwb=Qty3cf(9cJ`;>l;Nr6hli$Pk6xE@M+L!Yz${c^ z#ic3sqNXk)FyZhMmPFGGIM2ggwqC}+W>__W^iN}CE6Cg1kw^V~zp5tkdLtCD+zHCm ze%L!A=!pJuz21X^pcqRpkUW+szO21DsO|P!>K1O~SPwm@0yZYy!++CHdbR)XS-w7I zV-vhqu8-)RBxqdh@j*gp=g4eJ1$hmhXyo5wvbe4@!{04&98~N+g#6U5{?CsV*brZK zp436#X-~~glrDML2#KNU#JN?e2&Q1z9E-Vb+>pd4~Yj;yAbt}(-hVI`}z0D9m9L;xq; zkQWP7OY1a5z@fgbom%ABP<*6Lti8~7#@F{#9Wla;y=Db-BUkDtxdB_`Mh5$(?>}bq zAJ){l^F@eLWgFo-dl~P@$6*oav2<-zM=z-&#c7Q5=Bv)C;2ZHc={rIyiOB%{#3Csj zPa=K`8}wD(lA`-|S^E5db2kBxi<&nBONf@whSSE@-2Cl~newei;~fU2tOlpF^@0(J zXaVM-Nd)<|R5xRi@prd0nhI~9$K%6;bxIs)C41g7XtBa&Vn&O_?RW{(;7Q6xO*fxV zUZimjo&{8yM}*pF_tkHcbOf#x=qT+sbV%DK+H~E`s4yCNaD1O?&asuXuuYsBYA``M zcj1ATk|0^0;~~6@Wu~iSW?q&tG-JMZRLN+6*`&R-#Oe-TXK30qc&oO<*$y_jy3E#F z?5~Ing$mU#()Kkg4|?SH_}oriU|CGVwtOA{U~t!$G7m+&RdB! zTPy$mh_p5egkL4p@*a737es}uQIrF#pmU^iKmMXk(!Pk}=a}ugrWS4|{lw3SLf3po zG9E7-7>z79e5yuy3#4`FivM<@t)|)72F`2wXAOAC1v^29heHN1W*o~M6)p-G#nGqr z)F!?@sn5k$nTM|3Iqm?w0R6?8U}PbKp193=viA~!GO!!-y2-Jux-PkrG!gPs#A0@)O@PGwdd&$2PwVlob(tCw{_x(+T(Gh#Y-by@xN>K_z?!wSy<^J z11-%3i1OLb%BuZA2}eW+2L~mjAjvu?;HX~4ZMaH;H|3`b5{$ybx1F^1%pIH3sE5gO zu#tiH+s*o?h{J^xp;)kq#h3w|Kc+<&N-{TaoRFYYJ7McaIpm@WdW8)#<&f;}2L{l+ z)(+!Hd}9mx?ehuQd9nVbk6rlh78HOEkm)~yWee||k|5obYjMWd(R$B>`_RyPvLxdh zNNq5;PPUJeymCp1@zh>NhnBZHSErzvUzidm@-wc(_bpJ$+fRIr zlxoeGTDIst{X)@@t+vm2#S|k`Q_1%lF92U}2hAkExj2AxW_2%Dy_4*9lU`J9UV4h+ zintFf9K`91QP3RDWB$!4KmjTCdmCUb?2eRV2-#-r;AOnQdi!wFHEO>KE~+E7;<6<8 zC%)(YU1p#;l70XrdF)h);oH8LF9#L=bbwDyYt0Nv{qD^CLY|vm&^%dwJgoZPu^N)k z^65R`K}g5zmKjubuVljCp;r zu^@*36ES~1G>xWjs&(CWg7~ON(WJF_g<{v5>UQ^C?t@vTj5SG@2Hh=N&{ib{KZ*=s z$qlKMG~x+4;Q&41nJgV)Q8_xEhSn#}(d0ZRqs=0`H>M%u4{X<=|FUt+hNdE6FlGSb zAxH@DV}DWL|1mbvy|X}GyWNc8$PEX=12>8qGPk|ma7tAs+4F(lodAQfh1aABhpF{J zmf~y|&GMl0y#ubRP-|tYkn{!{V&cANpg?`U;YC+17lar>99>$M*hO7qk5>k zJ)uPYH02%_)8;bM?uwTVtjMxFiC~SdG{9{++bk%6*+bVEeMykG8_6urD7>1;{{bZ%>=aX7$YM*(~V@=0Js*z?2j2#N(hy|xn2Aj;deB&(2wM*_p>N_ z(+DS|>P&)ZJT~KU7DEr-8h{2t9)kjm+ChYKXi~p?$Q52@5@=nuFE*j(8%0kbrGKgx8MFT|G3#^xYPV-$Ri+b3V5(#_W-&ehds`Ux~y|={HPBmK{b~0k+HhtJIiYi*K3f`-PWY6 z*BV@n98l~s5AYIRJ$e(o@f)a%9L(q!?N*jk4-NQr-5{fXtOMr{vclk%lA<94T<4TO zz54|$9XvCFepUS~4)d!Vg4gJ2(ZeGYBfbPf(V|iI6NOD}y3Y7eZ!L_&jpH`FU&j7E z$h|#IY&`mAVWe@v<9Pnf>{{GDSI?E1yY>azZ!9e>tpF|0k$UXuy`afn`vAHq;aN$n z!KU;ZmvZQy*v4wm65uJwB$9Sny~xzTr0WdF<91WR7Pq^2(=2L*#_Nk$l6@kQ8aH}$ zs(SYd@x<+)*6HUQZKNUlqco#esWy`1NJv&o7%ozo0HJ0Pz?1qQfBw#=H?n&5=% zl%*SCKorg(ZK&sW;}}WdS^61^4GIU+64Q~X+Q)E1wvv`J%TA@8G^G#9YAL@Dk(^MY zO-5$oBdX_OtvcN9cnAAze3AOiFR-{p>uwcvXD^ zY)8uO6}M?ku70Z*W4?dH99C(evqbDV zadaL0nx?idvNS?=^qqFqIl7i3fSOF9u`w|;nIMK zI2x8rg8@wKRU)@=v63vZPnTp`^PhBGH=#WyNxXHoi!AMU8&0LkeW+e#Lmv{^6$XM z^Vdk%PWrlnS4K{0{-XX`;M~i4Qj70*NQ3695ubHO9oR&X(NZgNkRbJo%T`v}SIzt* zF1{T|_ksumE)X2JwiDPL!MJDlePXv8^LS1A zdQO|?4TK1tS}3i?+rDM)If{%Ujc4;y-h}kKr^Zl%EipE@OB57`rc$2^9ux*M+Nc~C z-lzC0fiqgiYP(fCa=Oua+;qIz3uQRT3SvTh2lQ<#L`b@hkWq_7O(4*8npr*U-Uqr- zBvsf|=$2UL=H^0Svvfh4g))blx25I3z~QZt(mVhh(+F09B8@U0+aoR0!{5YxJ#jtC zgFyuW40UXLbW=pMI&%qMzF48?zh=1E^HZel9N2N;lhtNrJ%Zl)II3`sQ)9Cxf(%@BnpF*uz>&%zEZa(6R^+pNU z=K;#iX|Y=vfQmZk?kGlIxJCINaPGNru}TWlP{rXZOgDj}cQ?B}H$u4nGr2?R5t8bF zy}x|s)W12nw9sYwP#PJeWU}TX11uRnpHL{1=WKs6!#G?v^HCN}T?=1{7M#%-BLNNK z^dzcLrYelg8>dh=?H$~Z60e6H+msEi2|z}n2O3^x}znxCq+ci|J0Oth@&MEyrc`2cSH**Y+o0JX$r zt))0?OY+c=z#TtoJ<9R|`-k^XV7eDaQzHo?>H*MQ@R2*3!60#NUn#-GJUzgR@bP!E zl$+D5;QZ;GGTFneI9&|PZ+lr)b#9O)0XPvt5y7Y_xt^!*q0R``WQh&^Med_270tY9 zny5eW)mj{TkQjidgI<1+Lv)yFSx#6Dz`w?d9FUlB2WgB*JhUPC6A-&61kjV}sGmJm0uAJS!4Mm)c8853snahBkAP5V)$9P5vR?$kN z#e;k7c4NcU2xpkIhP}tdO`gSjVe}Ty&$f{K$U^i`iHv;c@9*>s8J{CpNls)jJcQsb zh{yVLA4IFuw(6i9j62T81=#bYNM@b8_hL<#-gR&=CUy-2uu}(ZY0;sQ%uedH7cM)* zia{5l47woslqcCOzDrX! zWSs|L8#&0fzTHAYJJn9rUZSst-=jSgQNkz?R#Te@b-x^Z)*vwvl7@a zMFDz#FT!L23H9L;`$8pu?k+SEY#EFGpWb{qUXrsJ(!K4GFNXNi>i7WBUc4n;Xt$?d zX$pZ2_YZocIwBa=qA>_5$YSoT@9q(N@<;`uw!-8*tK|C)T8fFWX~8vemc9LRsA4Qg z1C|p~?-7jtumXNcb`q(yhzylOcPal-YICWL^%z2Jw;_luuCDj59zX}PDSbb7hp;hc zT(@5L>fX%n*R%KUN536Uf$KuN?R_vjGInAMB0q(Z#Qef~f>M$9CT96D;aQ#WBKNn+ z{6smzLTpexsC&F$8p+c}9?wc@N|R3O%CMiK|IKrD@4@&nHJ7Y?`~_q~239u*I?C2D zr`bxz#)n(^o%#X0jZMrt3c{r_^S5?2ClN=_oJEyzMWVy(i@&ePvjt%Tzibweyyc|FVGR=lac%?#{OB z0qkd@h>&D^@b#!LkFwE0cCo>n0_dkO=%4~pUDPX|310AQV<1%Oo>sFQ{b3URDI zqOU_9uuk~>SBX2E4cq!?74;1Qd*pP4JFkn=YQ_11f>;xA35cx%pfzE8sw0Bv&}jB zNq0N=X)5T@5|72wStbsP?sN$Fq>xk1@oVS+y5Ho zy~a2poV21WO#AVT8Si$N>$M~eR0AjNh5xVWWv)|d4!tgZ^@%Cd$HW#CPAdc*4EL^8 z*^50;oz{JI;e72p|JIMf4&&x#LZ#${G)vngCf6J@js583mmy84d(8Yimc1WR#2`v4 zYmRlkR$`ZS;8B(j)z8i~p8X-0lbz1HIsn}&Mu`8MV3&NNOcQI&n87bX2e?8<=g(~4 zjC(KD4^m#rra|)z8J`{p%@`OyE@hioIl#qEUP9Jh5Sn3ubienuDTSLp`^o$BvOiYn z;CeJn(s5_|C2RrgO)Rv7b=_$8fYbA!UC<{_O?z+cvYg|{kEc7^6}2Z~>qIA5zB8!; zccV8t@Us>JpJ|6!hD>O&fjVpuZLN#IM^iHC`6&?0AZ45s=&yDFN5r54*a2i)cy%Tb zzbW5tW3Xf~YfRs5{Tps*$!CG82nQ_|*7)2fSd^hwXNU(M&#W$odjrlZ4v0pH5Ob3X zS;|?#qKeDxiA*wIqg|(u1lo(BmdIHa+B7d>efJ*u z$Cf!3>jY{LsBmm0J^!OmdB&KE0Nv}|r#rqPGrC=LzD>cmi=T8)q^_Tj?(JL4!crs6 z^hhdY?SH5bpIzdUpXndFJ7|5~|Fb;Q_(U!1C=0ie6w~NKSsTR|O<|Q=+M7qrxT9X| zP+~TRO&DDW6%zwSO(OQcFfNBQ0Yc^Lm0?C5%<#lHK>1BQF4iQ%u{=2?5JR;AsLl!b zce|vjHxJmeL@_AThW~crlyQ(|*r)@HPwYIT>t0?>j(teuY=3{7>d5ExXLN*nvgJuK zY&aY#GPq{eQw_N%jq6R$XWbWCg@wR(T>h~%1{ecnvWNqKaT*8Kh`&susM$v$UPJxI zJv+Y#eECv0xyp|cBOMxtCo#g-WgvR|rN!FnhbV;^?RTY>0AYGI02ca0mmVWY*uUC7 zbzlA5o@&su3Y$!&v}VawS}=TMetSaO;sS08q%$zEI$JT55bD*aM;bk-=ZUzvu74Sg zuWr>Flvo)VJ({0RZN{?oifB*zTKY7JmqRwIzfp8{Mkym$Xs9I(udU= zBO~q`nXT^Km=z^=#(w~{10JHjTFpb|mVddw79w!fvHbgO9>)b45XKIlM%MS(W2pe9 zEh*6y7eqcMAoG1kKCzt1V()VQNCS3gBA>jb!e7a6jvhpY;uM4ONslysO%rBpl*?Rp zI57VyAUdh}D_ZZC$7fKm;|0tu-di+C-QS;>nI5MmOdGivGqBw(jxiVJzQI3IvX(z5 zI(3#3r_~sLS^|k6G{}OBZ{MvI5;iw$)=*$g$-i*-NjE~ep%0u-tG2u{&9fun<@+s6 z8hA4-h}Nr-&3;6xx6Oy!J*kGD`cXP)f|`aLeSie(ha)s}o2^fvmZ10tr{d)fzp`Zz znzw=5$lLjuT50)+9|nhNn^_%0Ox19Y5^hO^mO_$<*b$uKIy^f$R=rs6P;Dq-w_M|uNbk&dwKGc zFa@kVSG`}q58Hez-rIpD&R!{mjIW}D3dhZumK14iEYAjwnGCI#=+dAY3xL2^5h2PN zk~C(%ZsPpx3$WrN13~*4b=T-{}m7wr-Ews4%b*> zux^e+ra*%r6-E{fTi*3e(CNU|`fq_kEjjeG$I#~-l~12D^ZFMX@3-7e1Xi@o-DRDf z*-s8g+KfMK^9T?9{0VR_M-N{R5y!I&b{|T#Xv0621XY>bX zq!HfDP>+5cCt*Tig&Y#{R1-R@J_q~NYT;*%-FlY1bonu>F)05UXo$xH=%cgf4n{IdHZ#%XQ?|MOZ z{f2ivM~<)MRD*-X3pAJu{4f`3{C3W~1ZM@u-+p09ALoBd5KwB+eIQUw@t{Yv-myjt zA35+VsR$8Hm5`!sR|&bb!Ii|E%vpkc=){D`rR(l8lM)~i#5YvE4}l2*KSu%D@*tU# z8%|$kSB8T3*7t?*(CCOT zB6>F!%e6;$JS8dqOw4ZZrzFgeGH0Ms^4Kb;wp3M zwnNJkVGmM9t1eZAgV+m=;rJDvP|d4CyS_u*US6Ny7=ltmu4WGSuVZ0P`#52mUeGNj z$TxT5uQFEl0?Cao=fs`>g~&WF>Z{#9HtHKe3LwjkOu)~$@I@S0VSZQ8bbwgO(?8uw zZkYG64dOS6^kwb3QSfZ4BopQz3R7!*I{y`u?l0{qd#7O0hp<7g=xv)}RKaT2fIv`C zP{1R368)@0hIWq@nu%vxffVolCz=0lX3q{EZz zKe(qKLTIbrs;Wb@nn&;A5fq%4)!!WPdoTL-=zQkCT22fKqNFhP$xL`Dw1)L!<}G z87M|8KB1j)Ff?T<-x+;l(}$<}VnkLZA0ocIi&rRjxDA^9xel7YHDun%&XI%P7p-Zg z&lfB?_|YpTgCE$Yp)TirzdC0&517wk(|T0qD=q*I+HXI2G7{{px5Fw~3{hvBOVQiiEk^4AsZt0m zX{7s3VLlm=kKlA@cPs!YvJ)LpjXQ#G@%zx%_v@?!?#{&m_Z;yoL{Rce{jUyOjLUdS znbmP%XXLsbniVTN1-q~beOeQ)yEgug7gQwkq819>$O4lPxpYDopOMdSi}b874oPlk z6Aeaaj7nk|<`|((nslOH+i z;L4C$3e`)HOW#Ia>)rNValFyJ(%mIY2TKfzlBerparS7tAN(Z8w2op;6jvn#^UF%o zA2Gtez*_?uM{>Ju0gV>RX}_|9kCNV&USeZvz#$)(OCLZcj97 zVPqH&v&2@>Vl+3qMzyrXYhI~IZ*wtho`Q#+gcX0BtCYGGrcJqbekJ}KOe8c%S|k#x zm;r`Qnp2|%75u$(yt$&lPY2s2(iMjg7fp>RAz6fk-#e;tM}Rw}W?BC%sZeBnpx-0L zrE^!2_9C@-^W$NDBB(>&=lB{Oz6LLyN$WTsh?S%Ic)2)egWleaF~z1GJI5`v@we2A z1iktj5~<1XL+`)-uA>u~YsyRV0JQ|b%~VnEp}{MNxg#B5L(E+eee@MQLei~Hie$J_ zsBlDna_qBl4Ubqub_P{9;3v{#L(5JI-IDTU%R=^|03iev5>^TDb(E8SUlD5Y;}#Ti z{|fDXjU3JZK!0Pw4zk3Ax8b)5yh6^+cZeHvsz7`BUk|iF ze3J|3HI1D~Q_ZAtnumA6L|3-~P460s#c@BuQ&Q+ZL|#~#8p}cW`+Wf!{LoNhfo!D+ zi-uyM%tn>Wpv-TmPhmZZ0?&b=Xv)>6^CCXzpAMnP>Jk*Ab9T}+^<9Y^A7rX=j=p3i zL!=u6(7F|d>rL0=){#lmuXa>yB?(9VZUyq39@Zn~;+C|JEpxu~30%~dVR*oY-#-%3 zGCZUJb7}I^c6Xi&>#w3BlynqpzK@X7e)vJJO_qB}2OvS0t^TgxLhWt-!cbWCd@mF>-nrUE-6W@}` z?0IIR~ zNWi}PM%R5@J4;A#x6yZJv&jlo(7@r1Y$4mVwS9Ln$CXtDM?d>L~?h+_G$GG`! z=%A8#*t`>>Z($QfRB&D&pPCNG~- za9Zwv-ta4A2Z?s(-hNzt)?myJ7QA7`4~R|*?2I3wBSxp5qgY@*N> zS!~8RD#*AcpghEI)7x(|+RjMF)gAWmdTXFHB2ox(!)`?k`n%CmzU5r%FdgG~2$o=B zXmDuZu?lZjO%Z)&QGd1vPMItGk4XRnFB_&$QurP}wXZyPc+nK)=*W~Y3gTa*Xnd9a ziuG`cSl}vsuPW=oOzaCtrT91W9)oJ5%dNb`K$hfcll9>HIV+{2em$k^V9uwHXS2D0 z62En2Vf96~^k@~(Tsp2giLg}XHkKWi3SBJ=ecKbA7skC3v^d=0&A(orU0h(_$&zcp z$#I<4-LJB}V}yc7!xME(Rrn!+)1|Z9;*f-N`2)u@auzzY82T*~hf8SZupt9Lf{tmW z;aNcl-AXHZ7)%6Zg#d)jcB>K~gqj~BI07<0L%%7@r2}hH9mr7sUjUdJXXKiK_^kILnF|R1Ga}f>G@lA1gq85`Yn~jLcv5 z_u%S@^N6mjL(@mfnXji=o^rzuS`kd=oj&Fnp9GX)`u*blle0QV0F|?T`y#PJ3=vD2 zN&x>#5q|dXA;%OE0YzP=DoH_3Mj11Z6>E`zPoxfekyS=3Aho*n>{12yiO;OIC>R(- z%A@l<@YN~>Gm2+t8Ixgv_IRBIKV0X- zf9H4Om2*1rs^1Fm|I&t!e`Y(58fe!|jUO&K4gj)Q2P^p)w4-m%$URN_l(aN0h}t(T zM6WHX?+y%&tN?8N)N&HdqzGWcLqGYw#7`y?z+b5ez~k}!6jL-*u7NHojF+qKibt@y zHYNa-PzBeF3xP`je`Je-gI=)x_k<&U7MNeBVD<_H(~Ah^B%+fxliL4nD=)%gu^|xf zGrplU|C0v*r;r3>On|)x9CjO8>P^_Z>oC48fc(&J>+toD8gJLl+&nAx6fW!;{L^L~ zia0*k9O8O?R{oJJ3@_N>_cpwz7=59WWER~u16Lxa(D=TRNi_sn^UzOzsv&^C%2)!h zTCLy4O*+&QQcgzMIw~CS;nSNgU}h;&0l&&jCm~P!9)A8W9vrj{9++$W~Y$mBT+nAfWANvOL%pc^%B5+ffHb#zxsC-;h4cV z0ku2bi-A)YfP{XbP_HA#RfE?QcW8KR0aicsqi^3T1n_S)H8r0GfSZ^E^qY*tBRJ3; z!he?!35|~Awdxa;v~m^Ow4xD!6QmNr*`u#fT9uQM->i!wg@$|Ubvj zLUR-3$>IcD5X2&%p-X+^_5wI#@(K$hwUvNewOIGLWvKXd!KaCxOeTQ86Y?)Y{(bZ2 z&F@qcC6Oss04Jl=Mjc^4p55Ec9CZ@kJ7sfS174li<#U5V(|`8TejKg0!{>3+_t$Fw z^hf_wYwDugx{E6o*-Nn5(u$)y58&uWi@2Kan$vgAA8*yy(mMV-L7V97$El<3uzzPG zBl!gSxB)#9jQdwR=u(W+JOuE)u%G8)82qNMEk{dTQ=*`B(L0G9Vu)DEBm($z4FUW| zet!OA;)Y+w%{%mZ$&Ey(*-pyi#V0pjU~b(Q*i+Z!`ck6*npS9C+*v$~Wd~XE?9ihPF^5Djra3I0(^h3JqFL5-8ALL zjT4X{*glLTL(r?ggKffT0Wjb=(MBWuoi#sR3$xkG4n~*f&Yk-hv7;e?KhG2b_)8&w zE99SryzJAT{`CFgW}m{8kJNh%u!1fg3!}y6#hX|3sYxI?$R`1IEx>c-qmIy>m|3LY znVn&F=#{2Fvl%2Yt@fwfRNz-zTReB0%YoW;`%(SYg{YqVCL1*8*|y7g5szAfE5nd2 zz`|wKV8akoBf2Y*U*#xuAia;>Pg0xc~{pd&U zCw7P-Vu_f_SOU23zWeSJS}1^_f?OLU)QC(Y4xYP&?j06bzOV`ew@f2a2=o(s97tRpfcM$G#!`&4M`{ad7wrJ8 z9-rS&g~Rz4BxW+50RBeEKaKu~X@cn+03cJW0JSS1CuuC?$I%uao?L!K1nrO_z;ys` zREp)JJZ7#R$XcS{m)oOo+S&2PL%*LBh?a|<=|5EjV7y&-ex=lkNzM9H*Y`JntOCQA zHA{7e2646PEW#zn&=))bK-Tn6)bn2fcLX|H=L7o(njW7IS!GC9!TME$_5ZYPo-RP$ zioLM8+Zg!d9OHds;Z_4NL+lVk#8Rdbz(0=qF)tHZX#)Uc5DDlkUg<dvCn*PSyb$i&Z+hRt|Z#D>x zn0%8>n%Z@5U7S)>ohCYic^4hAKLz;UNRve#R>SnOYNQD zPC#{UE2LFmEceg2#yb|HVas7S+MP^$%H`U;P9%a2#0;@R3}qq#$Z9~I{J&FtKHofK zz(~?)gp+oJ1i}HdwYl)4${yquC+HFw*XCMq)0Ec$JZBuC)_-*&@N~sRY(Ci7~eWM~!?>6EN?ArcND=yhTJF+bk4{4%C50cI9qe9c~> z2Ds|jfMgc|uU-P&TRey#Z;7L^$pWw20e>JsElRVW6G#vIQ>Oj3B&u!K?eeyx$yAT( zFHX>|n?W|N%l~QRNOKM(Fx=OVw(oB?+;5*Ix$W!gpbU;(%6nOWon}0(3by&Ser+9C z&Wjbe(E`BpHle`EhvxBVWd&Oi313)H| zfVSHZHE<{tM9Akti@6Pj`$Kr|stdTgcnH%9foY?bLG~!9bEFXHs^|P0-^ce8^jU=p zUR&OW9}10MRqcR_t-ak&rph>ZNI$Z7ZXxMfH)$dB4 z<7cpsCUvC3q`ylKfD7iZ(T1Ch%CmEijvJ5wQ+ECr4$wl--Q0tIJ}n5ouRneUB!rIj zP5i$+$BDtuZo|J=k5-Er9%gD{F~|j4>P!s>F+!{mGf9eoGAIM_IULwm=fZPUQG8AMO!^kS#z>Qh2pSW{B7CSTc-< zOZ)N873V?FuQ}vKLo@g6vw-{c5%@G287ZdbAOVqxIDrT>8StBW@av~h8RfROx1oOZ zK2*PH0jiUf_EMv=&wkf7v;N+DNN|}i>+vN3jSv8<_Qpo~dEI*Z^{n$4>&NeQql(4l9`L=!kc4&S+~iIz$B?aiYW1% z0|1#y0u*((A$1=CGWs7o3xz^pBaWb#fjT={&35dsbz<$|b`&27;Kl7BJXbj)g?s&2 ze#nFE$DF8bw8Cx`fOlHqb+^Ii_53e;X93(+l7!*oTMky3lVfIPW@ct)X1)vAVP zb5qXo*U_gsO@ZTw=guCvOhq)X6LI|H(&*@)iFkAOyvjBx3->a-(n_OZe28FMt_%n32E8o^5;zM(Z9cQ z=XP1v$!kxJPjn$KzAWK1Uwt#*PZ{{*^!0mNd3UNJJ)D&F?*$q(313ZKX${iRwBY(f z_1m@JKe@iDw!N10!BFdQbpq#dM7=jI*H4t7L;T$M|8EzL|6Lg>XXaX>9-O$0Wt-sl zMQUIJjDQs|BL%>8bpW<9Q0M;r`w!5@i)&Zu?gS(nkePPV5%5CuWdj0UZ9t4e01!9@ z5hdmF=Uo22EbGL9$dXRk+sBI!@G&0i)lX%?FD}Q=&qKajSfn}r-_8OQ4Nlh;erdA0 zw(q3BYwxxP%6a*4`U1+jO+I;_7>E3q6CJoGb0gnmypBIsf-@dWBofD2IdJ?R9-+1^ z-9){kF>@JwzcpY4tk_CG;sDaQ5ZH;U4P&e_PXM9;(-8nr(H<1tK|m}!^Kl9Qge%*4 z&E5JKim`GVry^^-Y~Z&#j-TJRaQxLeeaX+sQ_&wxq0-;rO75~B&SAdZFS0?UUjK35 zs4WI4sT2H{NI;$1RIP3tJI5lA22%o}hQcpRL9v(rug}RqGj9Le3Y?LzUEe5 zdFci8k}IYN`0g|x(GEsmrHwytOSX!9d3=K_xdAmC|J`dhgnsjJ^?QbGWCO2&5}+gW zscQlIYF~3I^*fHTgfk%}$A8Zv54eB+zrLoR8QY)(-2rcbpB3b+BCqy1exdmsz|Xk@ zHo%BO{-3sWfG(XockZVRzDNb&2pCLIBoZT)3%KoT0p5P;Qv`f>nva)`aJLegZ`D>6 z`NSwd(QtKM1GbnAJm)UObpYpb_o%FQWYi7dQ! z@B0NkbKH0N`#AoeO;-i^1#tYl_><#;;}b{rvZLE?lOb;Oqo&G*tVu{xVk;!QOb&n51)nUsxKKc?>Wi z_y8*s{-g|IumMIS{7)wl5ZAc?LYuDK>gwu&Dm-c9#OfK5_C|Sk zX#kX|SjG|nk<=VN;r-qbn*n&7-ut^a2cKiOt>wO}bRB_6!e6`-s&Jq=8=y|DudItA zNHgwSx=Qrm^!nrAaCF%dR%*vr$MGki`4XSX%F2O)3oHD8T2LH-%?9+)9`DuK^Bq&+ zY0by3^jjRi9_1}9Rw9=ko|A$P{|@Ou$+u?`LBwq-rmJwhX3yR0NuD{Wo7?X zX>&sG*Kz!s=G(4|U4^>n75(K5W0W`f3t(xpJ-Mzjv6`<2+2!gZh<(Hp-K+)t8wa7{ zqps;eAo6=046l6NC&w`eq(^yAsDjT;WE|Lyo#!9b8-e{lfuqJZuz zR;>7r_YJw9@T7EoaQw}3Y1&~3=gJO??lX#Z*AMAe{Zsx1AS(TA@3~N7 zt?<%+el~j-j)8OqN8>il2gm=t$tpiP&*u1vjG8LGau3@F1My#fE+?2#0R7HA_3fi` zs3poi;b~Q)yo9?IaQw?QtB4`j-JBO-v(OWP4ypY6M|Gdv07NLylpvvfeJ#Zt=Kfu@ z`T;*Vf7Y*Os=~rT;rL~gH!0CoY#!SO17IPjufOd8BnmJYfnHiR{PntWdPs#Q<&}QG zU*D>(GC2NO>r~|3$;)*&k{N*er%gBR1|Bx@Ms>=tS$7LEs(bUKzoi)V;J&{5#%_hJ z0NieJ-T$1gipxqEY7&lLXg+6--#*wnHjnL_m4A8tZ3hs#XM ziaCDa_(iKfd#okb-Ex;#oqQjzKW?MY@#Uq=`$OkJ>-iLY=>OmGuT{=+-Ha{AMl55D zna@BtemV(-|#wf@_m z`v*7*kby$$Jt0)NywbK`?}h6VE_22rxFxr zn~zl^xPJHyi#%{3ZZzKqv|RThE!Vxh(x&+u-QZ&%Y#STL)+O|p!e7u|e>)10?!bp+ zdyrQR?eorezVns3>YS&-lfqHn8pJDA^v9-Lcj~VQbR1h$6qg<}(gL*n;QMhLZlk=P z8m)5IL~BQR_tw#T4`RO}P9zW8_Q2oW*!uI3)%C{>@(~AMqyiQz@P#jY;SKsVs#M`= zS&o07C)XXxQPHnW5RSi9T^fZD0zJK@CcYD(Ft}|u%Q|2Z+`zAY-hBOYSNr9u_s~E1tiVIiA(j*9_x88H{nfe(8x{teQ?8p) z-l?mpehbH+7MG5{f-g)~w@zP#9Zu5ESuw}r=8yRtl!Ku<+=lXscSI9z$}CND6jiRj!j~l z-m5>rv)RsZ!hVOmKXd|87!-D(hnG)1N8jf!U%vc@I%KO>;Yn2NtC!Sh!OpU0Q+{`bHC&9PYQFZ$IhX8A}+ z^BHp8^VVxEyJ14}1^db<@89O3Stz5t!to2u=L~*qNk0zV=&-Xm?%g2oy_m!PHcTUz|*qO?Oq^Xzd)}y==S85eo zMtOq|erP^)08uF}t}GL|?nZO`*bKIV4Pi^zlxJJdH^TiMo(;D5Z1RyXEeu zdZ8CzMqk4b;Gv(}v17+q4;eD#i+Oo@gLF8&P8+~}?e%Y};E(d6SC4MJDc2q7D{|fJ zCn)tsd2xh7^AYmL13fl@ZD1qV%Fv-hzkuy{pnskLd~B?TXLB9RS3eB-o7V~WqXDT6 z_#HuSsS%jYK;IV(7%<@VfBMs(KDBV+!k_8fFhl2si*>GCs0(KMb?$sd1L~?al6&dq z2rzCO068v&uFCQXmH+oeD))66D)$ZgzA-b{_w^Yn?_=Xs$%>fTeZV)y%e|++->Vwr zXZWtQQz+!S#|E$kYy#WBMl8@vj^Eo4e986wuYU7_Ka2*r&#)YUL!4Ejml zCJupXIEa__>C@-`GIw-zw9m@Q^6lv8h+4D=z&#mgFbKqP_=$!U_E5b*+71E;7{N$v zAY6A&skN2-g&=`|AW`lu_Pf2qVE6$1zVqGx?i5AgHcjLAeIJbD7*5j^&-0w%bj1e?-xn$M(M$$)M6y;{{io5 zQ=8SG;ub5peaZRptoVruaeXAJ%44Nem}OZ2d?}?HMUi8gnzp8~X>FQ+*tZMahJhdm z!(nD-=H&gKuYteSXv-YiTj>*4xI5#!lOh4%>Ta+r3kiLnoodP#pWw?~|KGm)el4&? zP&uocG8jJo(vaboMo^G4sPRzKW~jZh0qs6Mn=<@4i?GD%Yz!ZcY>Y6J zIrf=tSAyPR2kH{|GP^?PU-;SwC-{CUkTS?fA>^eLN>U6}P!LZg(L~E=ySvabnjqW+ zocT)7OA_|H1U{poN6*E@Q8;n_+ALM z6hvBN6teEFWfamP1rzqj2Hr~n2@6RVXbB7PkB8m=yeM3dJ+ueM0ssI20E7Ikr?H~~ p00000000000000000000_zQ(}%AuMO<7of@002ovPDHLkV1f>T3wZzl literal 0 HcmV?d00001 diff --git a/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_16x16.png b/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..21adfd283157f0b580e39e6edf7deaf5b27ef225 GIT binary patch literal 644 zcmV-~0( zT`9(S5WLJ~2r6f|kVw(rfnd3xhJ9fw;wsc816)~I*>^1ljCtSZ)hgUDCxS~!6oLla zNTx6-z(_}eD@hEcBCtC|hik3|5KU}jKsJ0|pC1be&t~spG%r6o*0?>J(-;Q~dL!;r@J|;>Y_8L#!!6olsCF%l+vt#c%fre!NX^Edh9xMzMZF5Zrs7;hg{8+QEQq zo37&TyDF?R0N+AjmbD1K9050DWbE~pk$Ax!MK}EsIr}#E^)hQebKloI2|QM4FDjP z8xgbq8H%s@A?t)IO74cEy0F6cHe%jyGmV*%V4T8`j)9RZ>E7OOE7KQwoT^f(WA;BJTtyoxr;qqd6G`9a+hqp^4cY9 eWk71EntK71?m|^Y+F(rp0000z>R*q0nPm z>vk>Re}tYzyRDg&x!>=%%|GV<3|mvQ7Y@vGgWw1)j3ePIe zO>4%2I$rA;kqW14URCY8%$p5G??%ifaXqkz23q_1H9N_@OYzQjTox6VD zq8nraH^bZt@YB;4(~0}*Gq6_nWFMCh669J?1JE_D`JO|OUSqPaKS($dy|)0>7lJH5 zW|1YrzjP|#6T|O{;pR3AIch8gKWwpBUTd-JZx$UlG;{bk0xxwd9;#C8=?j3ik`K@} z92C(QnRON$WddP~I4lig0Ue)+woRnwp0LQMu}G~}9Q{xeiow5wFyMiPVaq{#X4_9c` z*M{)=X8`aTNdy@88mz60in${Fh>|W8$1dym*tMSRyj0AWiRq(NpD@)nJgj)6BEiJ{ zW0g^^cmhNuMEBmt#RG)GVV*u2Cbd$>J4>sSvlOwsV%1yi}0!%#Y#Dr zZ^ns=5CiF*+dJuh>|xm_z#n5>g=7grxntj{bsTOqyu-5`}XTulXn!G zTXg*Fr$g|wCdK_?w&IY%4{8GZw$aP>)+tt$8?38=Xd;9AL_eo~RKkt2P6oFeqbqag z!U62hBne!dp5fW!L9)t2+_zV8cu+HkJ#Nic_n34JjS~$8Ar=N5p{&oxm)?e_PAF>M zYNzdytz12D29N6lCL9Ct2{bMepnzM@M8gIjUGtDp5@GF8I6DEo*CD$C9xpZU`h$1; z-bdNt^zieaIB-5$%%zv=XY*+=(st04xwT;408>*_zu~{2s5|fDfnt-d zyaittE-8-CG~fYkaXSpd;QZEFdUA{CTECmn=oCKp2qQ9uvzse8`+PO-2G{fR1{fL| zT6x#MfjY*(sF&SmZc^Mn&Bd{spiFLuZ`w=u?<@IedkbS_9k{YzW3u`E_~?6|IY7@J zDhc@fTpk};Id6dc{QNIS7yZl&E6zLN85^hL7bTp2sF0EU?-9IoopZmIFt44WYeO-8 z1$D$slTb9$|GIdjEQG$kzBQ(421pV&E{t&I>0;U*{VUGQ9kgX^<63nO)6O9}zhBJ2 z?iK(nW%+IGlw{D^*|{zl47!z4EQHCf%k-?@OIOAl^yIurx6P~~dY^ck{%1-Ut?$Rw z7QvaI+ty6E7o?}Bf3dZ-HE(cmFn@S>c-xgLS9Xq!j1~w79zytk41lN^uKLiv=hUiv9U~ zfA_O{9&F~?%(c7c?EAdtjBJ9Ih7vXg1qJ{Bz*bRyqXPf{U#dU=8p_L$nOBwF%TYn) zjjUb(@MI|Boq;4f?P8|0}tL-jM9WzcW%i1=-o4!qZqc;K?!)!-u-XADI<&H{aXiaW3@mcUa#3N;+R*|h zyWkL>WyKOw#rob#m=H3G)Vm4Izhy~WCjTzRX)UjJ)1)`yom*jRV%e&vIWvc8966KY zD;=Ru^#;8q7LAtk4gzj&Lizr^4Z(w9;Z+Mxk~Le!dXnWqr5kR8BEe-I$^ABupZ!m0 zFP%JvouVj84XVhU;wZ{KR`y;)R56zz3bheg=kzP`(vRL_e+r5k+=(Nlnz2FUJ1 zHf)$h{FNY~h;HnGKzRLxaW^qxyM)0Q?KA;eJC^49Nzfv7;<|(rDMa_{nlJ3 z9e6bs%O2Rg(dgk+eWU}xh&p2p4yy`n&2&FY)?&bvT zifyL)&Vti*$cBG=bh;D@jecVh>dbKOI)R$|9&HF>JI>I@{1%_y7Fb#oO12pjSJ}mA zg|H0V&lWVPUu2h?0D=EIISVFx>f8)+4wZz^qS0fL1&~?T5t31dBN#TnKbPVW0ATOk z3F4Dy!9hF^vm5?f{U2zW3}ey(a}EL)F`e6`<=Mb)%(y#)s>D;8)@%}DIS0{ef zspgMP$IJX?t8p7yEKmt4k%s5=o%I~UpTz(jWr$BhMi@RXpASBVmHlPF z5}gvEZ>FE(m;krnkFr9|9!a;nCOLC_&2P==TT`W%zs@WNKRr`Bb*|yjHNgJe3uZ~i4=~%Iwq-QuF!fRWQzW7S%ev*);nHd;Ee;(5_=ODvFw^{e9-Ne-> zbr%scxGNyS`6KEoe;SfG^w(kV@n$WUjzRVlXv*-hw3X4Tdp$+2g1;t>!YkVI6}>Q$ zMZLinoocLFGp@JQdLQ03vy92fs>Xz9BB-B796d}5aC4$21t^F9(s08lW87pE`|3s` ze*(%jm0L$U*4%nqKJBxA{3m_$gRRSxGjKP2ePi-(NU{HxGdW78nce?azVcvc!tI8s z##4=BMaY>Zw~88F794t2yIb}#FOBpq3(HHWe=luR_WFJh-XkgPk(|)4Z725vX;>>p zNM^<}WXIDJr@dn$k$pv>C_ojtL_3_$T}K4m&pQ|&$(?)k5VTqMU>r*iJ3lzycIHq5 z#ZdR9BH2dQrIWYF$Eq?uY?U`RdnWX-zCl>V7R)Zk6hPiipwrV=P8AiTt4^SMND#=q zCeqVFojXUjzEcKU;yMI$izmdb+IwDqN)hqDBcU2}$^Yp`Rq3;MS>NS!%_OlV7}air zA00*i+D7|zrplAl0FJkSmJkS;$~G!Fop^~GY1EE3_!2utu5`_hc>)_vgap-VBolKY zlWBrDtD0)h8u>1oJAU&Uo(a*O<;^%eGVAE=f)pwBVMXl5)3+;G~P1U@vbu$B@h*roSxlQ(S>5?&&l&< zR*&oem%>D~96d9Pz>5&ZG(l)Qu}eW;$*iO%OM`*J+dy}&oi5BeA$^{--A!xfp?OTz zpha`9hJ4q|x#qbnkxt9ylPf_grk5Zc6$|_J<8?*oe7pifNTD5rl?4uTQ(I~xekiH7 z7WnF6tGA}+j}`LJXG;F#yC5%+8^*$#D&Fy-_!&u4((sn<8#7^Umu#>a;BwF_2OqBZ|=! zo{rxlXE(|RZC`no%)0saa5eK>?H1|k7PTH`x3QY}c0!kFB6E&M06CBcZ!}&wy5WN7 z578d&%_uy}#C>bP4=0ChLQ_ATwwzA-jjZ8ZE^#*Az0M93L3QlRVUb6c` zuoZsaH(RDXVEBZMxaH+W{_e9TGBIIj8G4P&C-1jzjE#33UenlkKBWUGfXv_q{=^dH zKgPJk%QePjnTR9aqqedB#WJyVoUohFK;&lJN|RH!nygE-rzCtXLrgytc&R#)nGbC@ zDDrqa8>2=`s4DN|C{NMouZVwfkBFvxrg;b^#zW3Z^F3ZHRIytxKute>mV5|%-jLo6 zdSH&0$T!wxBySj}qc6Te<^4?OuA3e%{dxP;*HdCMZ#V_xGReU0s|s6dSXOjj-mxdJ zo3JaN<@l~tx~7e)ej%5-_E&(Z`Vsr#uR7eG0?T6&*#&cNS;`kcHNk5%pQhR+$X2 z#0a?67gLVttjI0xBM(6DE~F5p&)Mf^+92q@%rlhTJVdu%PzGKE#9RW z!;~Qsg~dPm1k^Qq{gEW6Xya0+J+|L|Z>}B$FGoyWvSv;IT-G@)So2qZ_XzwdotD3_ zeM$T$FmQbHO62rC7i1|)am5IwBxLyy8Wl6YZ5&qjG+^TCIh1<|Pu6xOqj2YyvX~4;t z@WoCN_mhJ8Lkdox)KDceJ>oAL#y_Hi54^A2&?-Rq$bn#W2JMgvx^ST-H1E4V>Mqt} zyptV-Y-=ezsStO*VpCaHU;hB%qLpV38tM-uc*0>A9Hb zl2QP}bCYjTlzKK}9nASe7s` zHPvJkZy`GRPGA)t{`~$fAe`_4i?;Rn!4|8K20N#5HJPz*ht_0Lt~2=WvT-w6oO zH$+m@s~zMPm%gNHmsT|B07$LgN?a_WNA&4(pkDstjbx{UNTd!84ZT%ho$W`l3JH0L zmFSmVN*0}w9&eZWm@=N5UAe^VBFUv{m)aj#UhsAzDc79)UG9tMYB=8b8hcs{HM=o8 z^(t;(sS)L(anP2RmkW0-0^(^P{go9JXFrg_Hd+3Xt=L-frQV=pGk3VybQQ-L3M*1V zOqn-r70rc)MA89$%T{kS-SAt)fkicV-cFwNscEYcaE)YoDxB8lF&Dt)YP^sCM&9!A z^`?T~8*XTLZ!@|>u@w)Z${fim`l;^No3iG&6&Y#$^3>rhCxt}-*WvFw>rRk4^h~1M zZF??>sDaYvOKv`7hSmwa3lR{5{a7m$b-0A!6%@kqJ)Opu?Hl;0si&GZ=;yzdk^Ax@ zmjsa#m`WZIC|RTdbE!a{zCrwdtrgE+w^$zqKD$cfzWTvwE8cxTH+i<6GTEyeps z;RL`8;yQITr{g&wLkdB z0BkgAgPEPTnoPWZFn31}T)%zjXVEFbE6z?;0wS@1oQ8kWe9I_;_zq6$bJ z3c3XHkNxlfi4#;S(e!SB#af`hNZIH?`9shM%ZZRUekOT~E(VHK_yX2tGd7Y{-DB&f zG|kv}zh_W5unV#wYp{W`H>TP54J$Y!BB!XYszmqexKn+5mBD!R_3_+7KTdf$Lo(=S z4ysI-rwk{@(oO1!T?rtnHUgi()D)}H0;KY1m$$!tp*u&X!0IOS{N^U7YB!N;iVc0n zM1toP!i!0>7mFkx)?e?&E>LCxXQ_XU)x$ba%t4kenii#Pxz;V9eM`aKHfSy;=XY6! zqp2oRY!~(git(DuIAhX+367|eAevS`M$45C%FtTrSr!W8za{ekp3fDL zpu!%IAb!ggK>*g>5j9g~lt}w~b~Z}i!~SCh@ajXiD&;E&a1jr;fd^In!0m9h zYR*5O5YdKmsdU+L9eJK8F+qcSzJPMe@$&wjARg9~UCLIg$5yeFnCL0dli{R8OtJS< zF-|QeCap;4T<5YIs}>>aLJ3Qz@&O*|AYrcJ5mEI&j^D-f7phkhVzw$T($24+^{yKN zv;T?abh?ZlN>W6IN$;2}_Z3);8hw}p2&A&%SY44jtnG^ls2^gAeQA;TLldj%eY*nlu zm=9+%N)8$Mr@&^yGD2VF6y(!W&}#f)DSp_%Gifq(USqpANQ!PHuL+`UD{QeKs<2;= z6Z4upSb$8)i`>{vUTHF*p4jCP!Oafy77O~5_=woM{IFQg&z-<6wLc>Lc@`hijfc2^ zIWRH6CS)yL9!9EtaCb}P?+DDn+WOs9{hs8p+~Q4Cn8PQgXYPpO9I$QdNme9KL^<&K zYX}x#q<33|R>NsEF)?U^!VT!x3~X$gXqdzjU)s-B<^KD7R_O6Tc=caBd7pIIZoC); z21nTipKtvUsrKV{3IfF=vgzaBBtPru5xfPx_0r+>j()0y@Jyi~lm|TM@SZ|)l{?&9{fDi`BZYaOGUyXC?41u) zi!O;(et&SONp2FDB)pSwreO|ttwv9Q(e#TY2i(_b*7=%_zqc6}PY=rw_1l;{RcfW&X1>F6273&=Ybq}Wv@TPJx|KS`5j2TIJ`o&N-1!%HuYW;) zwmauo-JTi?scF7Pz=qaXW*4rar zcegJn&!fs#rv1=VxcNh$H@a>H8OhIiA0`gGhU2`5m#2@C;W%jO2`=Ft+a`ZjG|BgE zJkyANKCKASA#gU=C4D`x_#Q@1!kcd(v%G3$^|n8v^AjY6Lj}?Ok24v;EnCn zn0~IOGhHX{Ls(Gk4FZGb$%G%K^$I`c9DPG9Aaqb z??vG*med&FHDsczSNY8<{p?d2@iT~lA1!k~Cf{JQH4}FGNBymYoD9Vy_S)ms0ft48 zC$-miiXib*o_0nK_+so@K(%m6-e`};i^ob#BAnQH$`M}o$R{oYKfape z*8y%T3Yl_eXn31W#vy6ofqD6;cjh5B@lQsr5tzc40+wO&J9i^kt&#zrzUMO0mz)Q_ z=jk$sZKJ+p`)OJOK>R+ouR`kI|+Iui&SV!qCL&Xm1>&y1k z88ja73)9f-fnohj`L}E8{VTtA^b^|aVrmJtB)GJ6Y^+QRvG+9e?X8>(WgP3Fh9+EA zRvf8!*Es}W6d8Bqr(pL_;uC%H4M>d}Yx{ea=R2stf%;X}2u|x@BpH$3d4f9=9e}0u z*YprU7<#k!%KibkGu+}`{aZBHzIFua?=j~>NW+Hns$I=z16V>VrGrG~4jJ$K^mY3G z-QdUc=h@kucVuS(yVI53Uu#^tf4|yH5`;B0II2u=R&E9`=K2zX?#xD#2zrUyNScmk z#20ItfI;UKxzS4s43|YCD2cU#RU_TSosPGv$>5Hq&9QS!V;K&Lv5=rxexzgTWDy=f z4Y7!{c$6W^?mDO@*yY~b9!ECZBisM|HOjz}GxVIepXEX;RgMzVE}R^1;`oDAXT;z~ zVJP+9_Lv~b(@3TC%ort9GYDD8@I|i+P=i~8nuTIRy%(EIV7jQ>+k47XnEWan4u@EX z+!wQ;q3j+cNW0o6QUUYPx(-(N!mBm7BeRr*$@AU>VU1Tyul-s(tZV?eG$E$W$On}q zbm$P~+4_>Lh6H>lZct3)S9S?jxWmC=2eQSWonx(^r5OYK2CjZ0EgID}M%JvUl!lA~ z^=0>P!_n2n4}rt=i(c(+mJ2tyUZ!+EGhhBnwPA-p*4K@icK+&!#SZzr0U??=?(szp zIL}b495IWshLOp!5ek0|cow)RT2 z8Ra+n^)){9KX$?fh!HUzNfIQgNSksgPcAyv4rWrHm_hF=&`3MDx?F{?jWUNkgwKz; zLnG;fG;;mBIC~sLMaq+zaVfeyQ3o22J0V+zBrNqzP#o(@rA1=1*z7}8J<8$DRmY7cTGp@Cv@QbGALob9uj#FBfj8s6nr_J5 zD1GwyGID~she*0Qq>NH)ZY3Ur5q!)|&NDqihL~A;x%KS*k{jM z3EQRN8)(h(y`+7+IeSZl$k`|+f z=LsQcUYUV^;Qb;;ICfgm&s_Z*A&)3?k~`LEzxj#j@%Q_)BprOlWMiHnO_;!fy{YxQ zFu^w>uExFm&mM;+)z1{byuo?3j1}O-ANeLt;o=8UXOm4zy6K2pe@+4I8Gj(oU{0f| zhwjuO)tFH1{@-^TKeKbov{`JF3-PZuxM&r#oX5e5wLVS0+zr69mhTp}k%)4Oi133Q z#Kn?0vXDMs0rSMBo(^Nvmp@$JH9t3}zX$7C&yKUu@c@F@J-qlLZ-p#(6Sx~Bd*(y; z#Q9d=vwb=Qty3cf(9cJ`;>l;Nr6hli$Pk6xE@M+L!Yz${c^ z#ic3sqNXk)FyZhMmPFGGIM2ggwqC}+W>__W^iN}CE6Cg1kw^V~zp5tkdLtCD+zHCm ze%L!A=!pJuz21X^pcqRpkUW+szO21DsO|P!>K1O~SPwm@0yZYy!++CHdbR)XS-w7I zV-vhqu8-)RBxqdh@j*gp=g4eJ1$hmhXyo5wvbe4@!{04&98~N+g#6U5{?CsV*brZK zp436#X-~~glrDML2#KNU#JN?e2&Q1z9E-Vb+>pd4~Yj;yAbt}(-hVI`}z0D9m9L;xq; zkQWP7OY1a5z@fgbom%ABP<*6Lti8~7#@F{#9Wla;y=Db-BUkDtxdB_`Mh5$(?>}bq zAJ){l^F@eLWgFo-dl~P@$6*oav2<-zM=z-&#c7Q5=Bv)C;2ZHc={rIyiOB%{#3Csj zPa=K`8}wD(lA`-|S^E5db2kBxi<&nBONf@whSSE@-2Cl~newei;~fU2tOlpF^@0(J zXaVM-Nd)<|R5xRi@prd0nhI~9$K%6;bxIs)C41g7XtBa&Vn&O_?RW{(;7Q6xO*fxV zUZimjo&{8yM}*pF_tkHcbOf#x=qT+sbV%DK+H~E`s4yCNaD1O?&asuXuuYsBYA``M zcj1ATk|0^0;~~6@Wu~iSW?q&tG-JMZRLN+6*`&R-#Oe-TXK30qc&oO<*$y_jy3E#F z?5~Ing$mU#()Kkg4|?SH_}oriU|CGVwtOA{U~t!$G7m+&RdB! zTPy$mh_p5egkL4p@*a737es}uQIrF#pmU^iKmMXk(!Pk}=a}ugrWS4|{lw3SLf3po zG9E7-7>z79e5yuy3#4`FivM<@t)|)72F`2wXAOAC1v^29heHN1W*o~M6)p-G#nGqr z)F!?@sn5k$nTM|3Iqm?w0R6?8U}PbKp193=viA~!GO!!-y2-Jux-PkrG!gPs#A0@)O@PGwdd&$2PwVlob(tCw{_x(+T(Gh#Y-by@xN>K_z?!wSy<^J z11-%3i1OLb%BuZA2}eW+2L~mjAjvu?;HX~4ZMaH;H|3`b5{$ybx1F^1%pIH3sE5gO zu#tiH+s*o?h{J^xp;)kq#h3w|Kc+<&N-{TaoRFYYJ7McaIpm@WdW8)#<&f;}2L{l+ z)(+!Hd}9mx?ehuQd9nVbk6rlh78HOEkm)~yWee||k|5obYjMWd(R$B>`_RyPvLxdh zNNq5;PPUJeymCp1@zh>NhnBZHSErzvUzidm@-wc(_bpJ$+fRIr zlxoeGTDIst{X)@@t+vm2#S|k`Q_1%lF92U}2hAkExj2AxW_2%Dy_4*9lU`J9UV4h+ zintFf9K`91QP3RDWB$!4KmjTCdmCUb?2eRV2-#-r;AOnQdi!wFHEO>KE~+E7;<6<8 zC%)(YU1p#;l70XrdF)h);oH8LF9#L=bbwDyYt0Nv{qD^CLY|vm&^%dwJgoZPu^N)k z^65R`K}g5zmKjubuVljCp;r zu^@*36ES~1G>xWjs&(CWg7~ON(WJF_g<{v5>UQ^C?t@vTj5SG@2Hh=N&{ib{KZ*=s z$qlKMG~x+4;Q&41nJgV)Q8_xEhSn#}(d0ZRqs=0`H>M%u4{X<=|FUt+hNdE6FlGSb zAxH@DV}DWL|1mbvy|X}GyWNc8$PEX=12>8qGPk|ma7tAs+4F(lodAQfh1aABhpF{J zmf~y|&GMl0y#ubRP-|tYkn{!{V&cANpg?`U;YC+17lar>99>$M*hO7qk5>k zJ)uPYH02%_)8;bM?uwTVtjMxFiC~SdG{9{++bk%6*+bVEeMykG8_6urD7>1;{{bZ%>=aX7$YM*(~V@=0Js*z?2j2#N(hy|xn2Aj;deB&(2wM*_p>N_ z(+DS|>P&)ZJT~KU7DEr-8h{2t9)kjm+ChYKXi~p?$Q52@5@=nuFE*j(8%0kbrGKgx8MFT|G3#^xYPV-$Ri+b3V5(#_W-&ehds`Ux~y|={HPBmK{b~0k+HhtJIiYi*K3f`-PWY6 z*BV@n98l~s5AYIRJ$e(o@f)a%9L(q!?N*jk4-NQr-5{fXtOMr{vclk%lA<94T<4TO zz54|$9XvCFepUS~4)d!Vg4gJ2(ZeGYBfbPf(V|iI6NOD}y3Y7eZ!L_&jpH`FU&j7E z$h|#IY&`mAVWe@v<9Pnf>{{GDSI?E1yY>azZ!9e>tpF|0k$UXuy`afn`vAHq;aN$n z!KU;ZmvZQy*v4wm65uJwB$9Sny~xzTr0WdF<91WR7Pq^2(=2L*#_Nk$l6@kQ8aH}$ zs(SYd@x<+)*6HUQZKNUlqco#esWy`1NJv&o7%ozo0HJ0Pz?1qQfBw#=H?n&5=% zl%*SCKorg(ZK&sW;}}WdS^61^4GIU+64Q~X+Q)E1wvv`J%TA@8G^G#9YAL@Dk(^MY zO-5$oBdX_OtvcN9cnAAze3AOiFR-{p>uwcvXD^ zY)8uO6}M?ku70Z*W4?dH99C(evqbDV zadaL0nx?idvNS?=^qqFqIl7i3fSOF9u`w|;nIMK zI2x8rg8@wKRU)@=v63vZPnTp`^PhBGH=#WyNxXHoi!AMU8&0LkeW+e#Lmv{^6$XM z^Vdk%PWrlnS4K{0{-XX`;M~i4Qj70*NQ3695ubHO9oR&X(NZgNkRbJo%T`v}SIzt* zF1{T|_ksumE)X2JwiDPL!MJDlePXv8^LS1A zdQO|?4TK1tS}3i?+rDM)If{%Ujc4;y-h}kKr^Zl%EipE@OB57`rc$2^9ux*M+Nc~C z-lzC0fiqgiYP(fCa=Oua+;qIz3uQRT3SvTh2lQ<#L`b@hkWq_7O(4*8npr*U-Uqr- zBvsf|=$2UL=H^0Svvfh4g))blx25I3z~QZt(mVhh(+F09B8@U0+aoR0!{5YxJ#jtC zgFyuW40UXLbW=pMI&%qMzF48?zh=1E^HZel9N2N;lhtNrJ%Zl)II3`sQ)9Cxf(%@BnpF*uz>&%zEZa(6R^+pNU z=K;#iX|Y=vfQmZk?kGlIxJCINaPGNru}TWlP{rXZOgDj}cQ?B}H$u4nGr2?R5t8bF zy}x|s)W12nw9sYwP#PJeWU}TX11uRnpHL{1=WKs6!#G?v^HCN}T?=1{7M#%-BLNNK z^dzcLrYelg8>dh=?H$~Z60e6H+msEi2|z}n2O3^x}znxCq+ci|J0Oth@&MEyrc`2cSH**Y+o0JX$r zt))0?OY+c=z#TtoJ<9R|`-k^XV7eDaQzHo?>H*MQ@R2*3!60#NUn#-GJUzgR@bP!E zl$+D5;QZ;GGTFneI9&|PZ+lr)b#9O)0XPvt5y7Y_xt^!*q0R``WQh&^Med_270tY9 zny5eW)mj{TkQjidgI<1+Lv)yFSx#6Dz`w?d9FUlB2WgB*JhUPC6A-&61kjV}sGmJm0uAJS!4Mm)c8853snahBkAP5V)$9P5vR?$kN z#e;k7c4NcU2xpkIhP}tdO`gSjVe}Ty&$f{K$U^i`iHv;c@9*>s8J{CpNls)jJcQsb zh{yVLA4IFuw(6i9j62T81=#bYNM@b8_hL<#-gR&=CUy-2uu}(ZY0;sQ%uedH7cM)* zia{5l47woslqcCOzDrX! zWSs|L8#&0fzTHAYJJn9rUZSst-=jSgQNkz?R#Te@b-x^Z)*vwvl7@a zMFDz#FT!L23H9L;`$8pu?k+SEY#EFGpWb{qUXrsJ(!K4GFNXNi>i7WBUc4n;Xt$?d zX$pZ2_YZocIwBa=qA>_5$YSoT@9q(N@<;`uw!-8*tK|C)T8fFWX~8vemc9LRsA4Qg z1C|p~?-7jtumXNcb`q(yhzylOcPal-YICWL^%z2Jw;_luuCDj59zX}PDSbb7hp;hc zT(@5L>fX%n*R%KUN536Uf$KuN?R_vjGInAMB0q(Z#Qef~f>M$9CT96D;aQ#WBKNn+ z{6smzLTpexsC&F$8p+c}9?wc@N|R3O%CMiK|IKrD@4@&nHJ7Y?`~_q~239u*I?C2D zr`bxz#)n(^o%#X0jZMrt3c{r_^S5?2ClN=_oJEyzMWVy(i@&ePvjt%Tzibweyyc|FVGR=lac%?#{OB z0qkd@h>&D^@b#!LkFwE0cCo>n0_dkO=%4~pUDPX|310AQV<1%Oo>sFQ{b3URDI zqOU_9uuk~>SBX2E4cq!?74;1Qd*pP4JFkn=YQ_11f>;xA35cx%pfzE8sw0Bv&}jB zNq0N=X)5T@5|72wStbsP?sN$Fq>xk1@oVS+y5Ho zy~a2poV21WO#AVT8Si$N>$M~eR0AjNh5xVWWv)|d4!tgZ^@%Cd$HW#CPAdc*4EL^8 z*^50;oz{JI;e72p|JIMf4&&x#LZ#${G)vngCf6J@js583mmy84d(8Yimc1WR#2`v4 zYmRlkR$`ZS;8B(j)z8i~p8X-0lbz1HIsn}&Mu`8MV3&NNOcQI&n87bX2e?8<=g(~4 zjC(KD4^m#rra|)z8J`{p%@`OyE@hioIl#qEUP9Jh5Sn3ubienuDTSLp`^o$BvOiYn z;CeJn(s5_|C2RrgO)Rv7b=_$8fYbA!UC<{_O?z+cvYg|{kEc7^6}2Z~>qIA5zB8!; zccV8t@Us>JpJ|6!hD>O&fjVpuZLN#IM^iHC`6&?0AZ45s=&yDFN5r54*a2i)cy%Tb zzbW5tW3Xf~YfRs5{Tps*$!CG82nQ_|*7)2fSd^hwXNU(M&#W$odjrlZ4v0pH5Ob3X zS;|?#qKeDxiA*wIqg|(u1lo(BmdIHa+B7d>efJ*u z$Cf!3>jY{LsBmm0J^!OmdB&KE0Nv}|r#rqPGrC=LzD>cmi=T8)q^_Tj?(JL4!crs6 z^hhdY?SH5bpIzdUpXndFJ7|5~|Fb;Q_(U!1C=0ie6w~NKSsTR|O<|Q=+M7qrxT9X| zP+~TRO&DDW6%zwSO(OQcFfNBQ0Yc^Lm0?C5%<#lHK>1BQF4iQ%u{=2?5JR;AsLl!b zce|vjHxJmeL@_AThW~crlyQ(|*r)@HPwYIT>t0?>j(teuY=3{7>d5ExXLN*nvgJuK zY&aY#GPq{eQw_N%jq6R$XWbWCg@wR(T>h~%1{ecnvWNqKaT*8Kh`&susM$v$UPJxI zJv+Y#eECv0xyp|cBOMxtCo#g-WgvR|rN!FnhbV;^?RTY>0AYGI02ca0mmVWY*uUC7 zbzlA5o@&su3Y$!&v}VawS}=TMetSaO;sS08q%$zEI$JT55bD*aM;bk-=ZUzvu74Sg zuWr>Flvo)VJ({0RZN{?oifB*zTKY7JmqRwIzfp8{Mkym$Xs9I(udU= zBO~q`nXT^Km=z^=#(w~{10JHjTFpb|mVddw79w!fvHbgO9>)b45XKIlM%MS(W2pe9 zEh*6y7eqcMAoG1kKCzt1V()VQNCS3gBA>jb!e7a6jvhpY;uM4ONslysO%rBpl*?Rp zI57VyAUdh}D_ZZC$7fKm;|0tu-di+C-QS;>nI5MmOdGivGqBw(jxiVJzQI3IvX(z5 zI(3#3r_~sLS^|k6G{}OBZ{MvI5;iw$)=*$g$-i*-NjE~ep%0u-tG2u{&9fun<@+s6 z8hA4-h}Nr-&3;6xx6Oy!J*kGD`cXP)f|`aLeSie(ha)s}o2^fvmZ10tr{d)fzp`Zz znzw=5$lLjuT50)+9|nhNn^_%0Ox19Y5^hO^mO_$<*b$uKIy^f$R=rs6P;Dq-w_M|uNbk&dwKGc zFa@kVSG`}q58Hez-rIpD&R!{mjIW}D3dhZumK14iEYAjwnGCI#=+dAY3xL2^5h2PN zk~C(%ZsPpx3$WrN13~*4b=T-{}m7wr-Ews4%b*> zux^e+ra*%r6-E{fTi*3e(CNU|`fq_kEjjeG$I#~-l~12D^ZFMX@3-7e1Xi@o-DRDf z*-s8g+KfMK^9T?9{0VR_M-N{R5y!I&b{|T#Xv0621XY>bX zq!HfDP>+5cCt*Tig&Y#{R1-R@J_q~NYT;*%-FlY1bonu>F)05UXo$xH=%cgf4n{IdHZ#%XQ?|MOZ z{f2ivM~<)MRD*-X3pAJu{4f`3{C3W~1ZM@u-+p09ALoBd5KwB+eIQUw@t{Yv-myjt zA35+VsR$8Hm5`!sR|&bb!Ii|E%vpkc=){D`rR(l8lM)~i#5YvE4}l2*KSu%D@*tU# z8%|$kSB8T3*7t?*(CCOT zB6>F!%e6;$JS8dqOw4ZZrzFgeGH0Ms^4Kb;wp3M zwnNJkVGmM9t1eZAgV+m=;rJDvP|d4CyS_u*US6Ny7=ltmu4WGSuVZ0P`#52mUeGNj z$TxT5uQFEl0?Cao=fs`>g~&WF>Z{#9HtHKe3LwjkOu)~$@I@S0VSZQ8bbwgO(?8uw zZkYG64dOS6^kwb3QSfZ4BopQz3R7!*I{y`u?l0{qd#7O0hp<7g=xv)}RKaT2fIv`C zP{1R368)@0hIWq@nu%vxffVolCz=0lX3q{EZz zKe(qKLTIbrs;Wb@nn&;A5fq%4)!!WPdoTL-=zQkCT22fKqNFhP$xL`Dw1)L!<}G z87M|8KB1j)Ff?T<-x+;l(}$<}VnkLZA0ocIi&rRjxDA^9xel7YHDun%&XI%P7p-Zg z&lfB?_|YpTgCE$Yp)TirzdC0&517wk(|T0qD=q*I+HXI2G7{{px5Fw~3{hvBOVQiiEk^4AsZt0m zX{7s3VLlm=kKlA@cPs!YvJ)LpjXQ#G@%zx%_v@?!?#{&m_Z;yoL{Rce{jUyOjLUdS znbmP%XXLsbniVTN1-q~beOeQ)yEgug7gQwkq819>$O4lPxpYDopOMdSi}b874oPlk z6Aeaaj7nk|<`|((nslOH+i z;L4C$3e`)HOW#Ia>)rNValFyJ(%mIY2TKfzlBerparS7tAN(Z8w2op;6jvn#^UF%o zA2Gtez*_?uM{>Ju0gV>RX}_|9kCNV&USeZvz#$)(OCLZcj97 zVPqH&v&2@>Vl+3qMzyrXYhI~IZ*wtho`Q#+gcX0BtCYGGrcJqbekJ}KOe8c%S|k#x zm;r`Qnp2|%75u$(yt$&lPY2s2(iMjg7fp>RAz6fk-#e;tM}Rw}W?BC%sZeBnpx-0L zrE^!2_9C@-^W$NDBB(>&=lB{Oz6LLyN$WTsh?S%Ic)2)egWleaF~z1GJI5`v@we2A z1iktj5~<1XL+`)-uA>u~YsyRV0JQ|b%~VnEp}{MNxg#B5L(E+eee@MQLei~Hie$J_ zsBlDna_qBl4Ubqub_P{9;3v{#L(5JI-IDTU%R=^|03iev5>^TDb(E8SUlD5Y;}#Ti z{|fDXjU3JZK!0Pw4zk3Ax8b)5yh6^+cZeHvsz7`BUk|iF ze3J|3HI1D~Q_ZAtnumA6L|3-~P460s#c@BuQ&Q+ZL|#~#8p}cW`+Wf!{LoNhfo!D+ zi-uyM%tn>Wpv-TmPhmZZ0?&b=Xv)>6^CCXzpAMnP>Jk*Ab9T}+^<9Y^A7rX=j=p3i zL!=u6(7F|d>rL0=){#lmuXa>yB?(9VZUyq39@Zn~;+C|JEpxu~30%~dVR*oY-#-%3 zGCZUJb7}I^c6Xi&>#w3BlynqpzK@X7e)vJJO_qB}2OvS0t^TgxLhWt-!cbWCd@mF>-nrUE-6W@}` z?0IIR~ zNWi}PM%R5@J4;A#x6yZJv&jlo(7@r1Y$4mVwS9Ln$CXtDM?d>L~?h+_G$GG`! z=%A8#*t`>>Z($QfRB&D&pPCNG~- za9Zwv-ta4A2Z?s(-hNzt)?myJ7QA7`4~R|*?2I3wBSxp5qgY@*N> zS!~8RD#*AcpghEI)7x(|+RjMF)gAWmdTXFHB2ox(!)`?k`n%CmzU5r%FdgG~2$o=B zXmDuZu?lZjO%Z)&QGd1vPMItGk4XRnFB_&$QurP}wXZyPc+nK)=*W~Y3gTa*Xnd9a ziuG`cSl}vsuPW=oOzaCtrT91W9)oJ5%dNb`K$hfcll9>HIV+{2em$k^V9uwHXS2D0 z62En2Vf96~^k@~(Tsp2giLg}XHkKWi3SBJ=ecKbA7skC3v^d=0&A(orU0h(_$&zcp z$#I<4-LJB}V}yc7!xME(Rrn!+)1|Z9;*f-N`2)u@auzzY82T*~hf8SZupt9Lf{tmW z;aNcl-AXHZ7)%6Zg#d)jcB>K~gqj~BI07<0L%%7@r2}hH9mr7sUjUdJXXKiK_^kILnF|R1Ga}f>G@lA1gq85`Yn~jLcv5 z_u%S@^N6mjL(@mfnXji=o^rzuS`kd=oj&Fnp9GX)`u*blle0QV0F|?T`y#PJ3=vD2 zN&x>#5q|dXA;%OE0YzP=DoH_3Mj11Z6>E`zPoxfekyS=3Aho*n>{12yiO;OIC>R(- z%A@l<@YN~>Gm2+t8Ixgv_IRBIKV0X- zf9H4Om2*1rs^1Fm|I&t!e`Y(58fe!|jUO&K4gj)Q2P^p)w4-m%$URN_l(aN0h}t(T zM6WHX?+y%&tN?8N)N&HdqzGWcLqGYw#7`y?z+b5ez~k}!6jL-*u7NHojF+qKibt@y zHYNa-PzBeF3xP`je`Je-gI=)x_k<&U7MNeBVD<_H(~Ah^B%+fxliL4nD=)%gu^|xf zGrplU|C0v*r;r3>On|)x9CjO8>P^_Z>oC48fc(&J>+toD8gJLl+&nAx6fW!;{L^L~ zia0*k9O8O?R{oJJ3@_N>_cpwz7=59WWER~u16Lxa(D=TRNi_sn^UzOzsv&^C%2)!h zTCLy4O*+&QQcgzMIw~CS;nSNgU}h;&0l&&jCm~P!9)A8W9vrj{9++$W~Y$mBT+nAfWANvOL%pc^%B5+ffHb#zxsC-;h4cV z0ku2bi-A)YfP{XbP_HA#RfE?QcW8KR0aicsqi^3T1n_S)H8r0GfSZ^E^qY*tBRJ3; z!he?!35|~Awdxa;v~m^Ow4xD!6QmNr*`u#fT9uQM->i!wg@$|Ubvj zLUR-3$>IcD5X2&%p-X+^_5wI#@(K$hwUvNewOIGLWvKXd!KaCxOeTQ86Y?)Y{(bZ2 z&F@qcC6Oss04Jl=Mjc^4p55Ec9CZ@kJ7sfS174li<#U5V(|`8TejKg0!{>3+_t$Fw z^hf_wYwDugx{E6o*-Nn5(u$)y58&uWi@2Kan$vgAA8*yy(mMV-L7V97$El<3uzzPG zBl!gSxB)#9jQdwR=u(W+JOuE)u%G8)82qNMEk{dTQ=*`B(L0G9Vu)DEBm($z4FUW| zet!OA;)Y+w%{%mZ$&Ey(*-pyi#V0pjU~b(Q*i+Z!`ck6*npS9C+*v$~Wd~XE?9ihPF^5Djra3I0(^h3JqFL5-8ALL zjT4X{*glLTL(r?ggKffT0Wjb=(MBWuoi#sR3$xkG4n~*f&Yk-hv7;e?KhG2b_)8&w zE99SryzJAT{`CFgW}m{8kJNh%u!1fg3!}y6#hX|3sYxI?$R`1IEx>c-qmIy>m|3LY znVn&F=#{2Fvl%2Yt@fwfRNz-zTReB0%YoW;`%(SYg{YqVCL1*8*|y7g5szAfE5nd2 zz`|wKV8akoBf2Y*U*#xuAia;>Pg0xc~{pd&U zCw7P-Vu_f_SOU23zWeSJS}1^_f?OLU)QC(Y4xYP&?j06bzOV`ew@f2a2=o(s97tRpfcM$G#!`&4M`{ad7wrJ8 z9-rS&g~Rz4BxW+50RBeEKaKu~X@cn+03cJW0JSS1CuuC?$I%uao?L!K1nrO_z;ys` zREp)JJZ7#R$XcS{m)oOo+S&2PL%*LBh?a|<=|5EjV7y&-ex=lkNzM9H*Y`JntOCQA zHA{7e2646PEW#zn&=))bK-Tn6)bn2fcLX|H=L7o(njW7IS!GC9!TME$_5ZYPo-RP$ zioLM8+Zg!d9OHds;Z_4NL+lVk#8Rdbz(0=qF)tHZX#)Uc5DDlkUg<dvCn*PSyb$i&Z+hRt|Z#D>x zn0%8>n%Z@5U7S)>ohCYic^4hAKLz;UNRve#R>SnOYNQD zPC#{UE2LFmEceg2#yb|HVas7S+MP^$%H`U;P9%a2#0;@R3}qq#$Z9~I{J&FtKHofK zz(~?)gp+oJ1i}HdwYl)4${yquC+HFw*XCMq)0Ec$JZBuC)_-*&@N~sRY(Ci7~eWM~!?>6EN?ArcND=yhTJF+bk4{4%C50cI9qe9c~> z2Ds|jfMgc|uU-P&TRey#Z;7L^$pWw20e>JsElRVW6G#vIQ>Oj3B&u!K?eeyx$yAT( zFHX>|n?W|N%l~QRNOKM(Fx=OVw(oB?+;5*Ix$W!gpbU;(%6nOWon}0(3by&Ser+9C z&Wjbe(E`BpHle`EhvxBVWd&Oi313)H| zfVSHZHE<{tM9Akti@6Pj`$Kr|stdTgcnH%9foY?bLG~!9bEFXHs^|P0-^ce8^jU=p zUR&OW9}10MRqcR_t-ak&rph>ZNI$Z7ZXxMfH)$dB4 z<7cpsCUvC3q`ylKfD7iZ(T1Ch%CmEijvJ5wQ+ECr4$wl--Q0tIJ}n5ouRneUB!rIj zP5i$+$BDtuZo|J=k5-Er9%gD{F~|j4>P!s>F+!{mGf9eoGAIM_IULwm=fZPUQG8AMO!^kS#z>Qh2pSW{B7CSTc-< zOZ)N873V?FuQ}vKLo@g6vw-{c5%@G287ZdbAOVqxIDrT>8StBW@av~h8RfROx1oOZ zK2*PH0jiUf_EMv=&wkf7v;N+DNN|}i>+vN3jSv8<_Qpo~dEI*Z^{n$4>&NeQql(4l9`L=!kc4&S+~iIz$B?aiYW1% z0|1#y0u*((A$1=CGWs7o3xz^pBaWb#fjT={&35dsbz<$|b`&27;Kl7BJXbj)g?s&2 ze#nFE$DF8bw8Cx`fOlHqb+^Ii_53e;X93(+l7!*oTMky3lVfIPW@ct)X1)vAVP zb5qXo*U_gsO@ZTw=guCvOhq)X6LI|H(&*@)iFkAOyvjBx3->a-(n_OZe28FMt_%n32E8o^5;zM(Z9cQ z=XP1v$!kxJPjn$KzAWK1Uwt#*PZ{{*^!0mNd3UNJJ)D&F?*$q(313ZKX${iRwBY(f z_1m@JKe@iDw!N10!BFdQbpq#dM7=jI*H4t7L;T$M|8EzL|6Lg>XXaX>9-O$0Wt-sl zMQUIJjDQs|BL%>8bpW<9Q0M;r`w!5@i)&Zu?gS(nkePPV5%5CuWdj0UZ9t4e01!9@ z5hdmF=Uo22EbGL9$dXRk+sBI!@G&0i)lX%?FD}Q=&qKajSfn}r-_8OQ4Nlh;erdA0 zw(q3BYwxxP%6a*4`U1+jO+I;_7>E3q6CJoGb0gnmypBIsf-@dWBofD2IdJ?R9-+1^ z-9){kF>@JwzcpY4tk_CG;sDaQ5ZH;U4P&e_PXM9;(-8nr(H<1tK|m}!^Kl9Qge%*4 z&E5JKim`GVry^^-Y~Z&#j-TJRaQxLeeaX+sQ_&wxq0-;rO75~B&SAdZFS0?UUjK35 zs4WI4sT2H{NI;$1RIP3tJI5lA22%o}hQcpRL9v(rug}RqGj9Le3Y?LzUEe5 zdFci8k}IYN`0g|x(GEsmrHwytOSX!9d3=K_xdAmC|J`dhgnsjJ^?QbGWCO2&5}+gW zscQlIYF~3I^*fHTgfk%}$A8Zv54eB+zrLoR8QY)(-2rcbpB3b+BCqy1exdmsz|Xk@ zHo%BO{-3sWfG(XockZVRzDNb&2pCLIBoZT)3%KoT0p5P;Qv`f>nva)`aJLegZ`D>6 z`NSwd(QtKM1GbnAJm)UObpYpb_o%FQWYi7dQ! z@B0NkbKH0N`#AoeO;-i^1#tYl_><#;;}b{rvZLE?lOb;Oqo&G*tVu{xVk;!QOb&n51)nUsxKKc?>Wi z_y8*s{-g|IumMIS{7)wl5ZAc?LYuDK>gwu&Dm-c9#OfK5_C|Sk zX#kX|SjG|nk<=VN;r-qbn*n&7-ut^a2cKiOt>wO}bRB_6!e6`-s&Jq=8=y|DudItA zNHgwSx=Qrm^!nrAaCF%dR%*vr$MGki`4XSX%F2O)3oHD8T2LH-%?9+)9`DuK^Bq&+ zY0by3^jjRi9_1}9Rw9=ko|A$P{|@Ou$+u?`LBwq-rmJwhX3yR0NuD{Wo7?X zX>&sG*Kz!s=G(4|U4^>n75(K5W0W`f3t(xpJ-Mzjv6`<2+2!gZh<(Hp-K+)t8wa7{ zqps;eAo6=046l6NC&w`eq(^yAsDjT;WE|Lyo#!9b8-e{lfuqJZuz zR;>7r_YJw9@T7EoaQw}3Y1&~3=gJO??lX#Z*AMAe{Zsx1AS(TA@3~N7 zt?<%+el~j-j)8OqN8>il2gm=t$tpiP&*u1vjG8LGau3@F1My#fE+?2#0R7HA_3fi` zs3poi;b~Q)yo9?IaQw?QtB4`j-JBO-v(OWP4ypY6M|Gdv07NLylpvvfeJ#Zt=Kfu@ z`T;*Vf7Y*Os=~rT;rL~gH!0CoY#!SO17IPjufOd8BnmJYfnHiR{PntWdPs#Q<&}QG zU*D>(GC2NO>r~|3$;)*&k{N*er%gBR1|Bx@Ms>=tS$7LEs(bUKzoi)V;J&{5#%_hJ z0NieJ-T$1gipxqEY7&lLXg+6--#*wnHjnL_m4A8tZ3hs#XM ziaCDa_(iKfd#okb-Ex;#oqQjzKW?MY@#Uq=`$OkJ>-iLY=>OmGuT{=+-Ha{AMl55D zna@BtemV(-|#wf@_m z`v*7*kby$$Jt0)NywbK`?}h6VE_22rxFxr zn~zl^xPJHyi#%{3ZZzKqv|RThE!Vxh(x&+u-QZ&%Y#STL)+O|p!e7u|e>)10?!bp+ zdyrQR?eorezVns3>YS&-lfqHn8pJDA^v9-Lcj~VQbR1h$6qg<}(gL*n;QMhLZlk=P z8m)5IL~BQR_tw#T4`RO}P9zW8_Q2oW*!uI3)%C{>@(~AMqyiQz@P#jY;SKsVs#M`= zS&o07C)XXxQPHnW5RSi9T^fZD0zJK@CcYD(Ft}|u%Q|2Z+`zAY-hBOYSNr9u_s~E1tiVIiA(j*9_x88H{nfe(8x{teQ?8p) z-l?mpehbH+7MG5{f-g)~w@zP#9Zu5ESuw}r=8yRtl!Ku<+=lXscSI9z$}CND6jiRj!j~l z-m5>rv)RsZ!hVOmKXd|87!-D(hnG)1N8jf!U%vc@I%KO>;Yn2NtC!Sh!OpU0Q+{`bHC&9PYQFZ$IhX8A}+ z^BHp8^VVxEyJ14}1^db<@89O3Stz5t!to2u=L~*qNk0zV=&-Xm?%g2oy_m!PHcTUz|*qO?Oq^Xzd)}y==S85eo zMtOq|erP^)08uF}t}GL|?nZO`*bKIV4Pi^zlxJJdH^TiMo(;D5Z1RyXEeu zdZ8CzMqk4b;Gv(}v17+q4;eD#i+Oo@gLF8&P8+~}?e%Y};E(d6SC4MJDc2q7D{|fJ zCn)tsd2xh7^AYmL13fl@ZD1qV%Fv-hzkuy{pnskLd~B?TXLB9RS3eB-o7V~WqXDT6 z_#HuSsS%jYK;IV(7%<@VfBMs(KDBV+!k_8fFhl2si*>GCs0(KMb?$sd1L~?al6&dq z2rzCO068v&uFCQXmH+oeD))66D)$ZgzA-b{_w^Yn?_=Xs$%>fTeZV)y%e|++->Vwr zXZWtQQz+!S#|E$kYy#WBMl8@vj^Eo4e986wuYU7_Ka2*r&#)YUL!4Ejml zCJupXIEa__>C@-`GIw-zw9m@Q^6lv8h+4D=z&#mgFbKqP_=$!U_E5b*+71E;7{N$v zAY6A&skN2-g&=`|AW`lu_Pf2qVE6$1zVqGx?i5AgHcjLAeIJbD7*5j^&-0w%bj1e?-xn$M(M$$)M6y;{{io5 zQ=8SG;ub5peaZRptoVruaeXAJ%44Nem}OZ2d?}?HMUi8gnzp8~X>FQ+*tZMahJhdm z!(nD-=H&gKuYteSXv-YiTj>*4xI5#!lOh4%>Ta+r3kiLnoodP#pWw?~|KGm)el4&? zP&uocG8jJo(vaboMo^G4sPRzKW~jZh0qs6Mn=<@4i?GD%Yz!ZcY>Y6J zIrf=tSAyPR2kH{|GP^?PU-;SwC-{CUkTS?fA>^eLN>U6}P!LZg(L~E=ySvabnjqW+ zocT)7OA_|H1U{poN6*E@Q8;n_+ALM z6hvBN6teEFWfamP1rzqj2Hr~n2@6RVXbB7PkB8m=yeM3dJ+ueM0ssI20E7Ikr?H~~ p00000000000000000000_zQ(}%AuMO<7of@002ovPDHLkV1f>T3wZzl literal 0 HcmV?d00001 diff --git a/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_256x256@2x.png b/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_256x256@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7028370d522db2826324565a5b2ec7d19d6dc500 GIT binary patch literal 63830 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 literal 0 HcmV?d00001 diff --git a/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_32x32.png b/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..dbaa386bf50c99dc42c7e769cdf51e59288e0165 GIT binary patch literal 1551 zcmV+q2JrcbP)z>R*q0nPm z>vk>Re}tYzyRDg&x!>=%%|GV<3|mvQ7Y@vGgWw1)j3ePIe zO>4%2I$rA;kqW14URCY8%$p5G??%ifaXqkz23q_1H9N_@OYzQjTox6VD zq8nraH^bZt@YB;4(~0}*Gq6_nWFMCh669J?1JE_D`JO|OUSqPaKS($dy|)0>7lJH5 zW|1YrzjP|#6T|O{;pR3AIch8gKWwpBUTd-JZx$UlG;{bk0xxwd9;#C8=?j3ik`K@} z92C(QnRON$WddP~I4lig0Ue)+woRnwp0LQMu}G~}9Q{xeiow5wFyMiPVaq{#X4_9c` z*M{)=X8`aTNdy@88mz60in${Fh>|W8$1dym*tMSRyj0AWiRq(NpD@)nJgj)6BEiJ{ zW0g^^cmhNuMEBmt#RG)GVV*u2Cbd$>J4>sSvlOwsV%1yi}0!%#Y#Dr zZ^ns=5CiF*+dJuh>|xm_z#n5>g=7grxntj{bsTOqyu-5`}XTulXn!G zTXg*Fr$g|wCdK_?w&IY%4{8GZw$aP>)+tt$8?38=Xd;9AL_eo~RKkt2P6oFeqbqag z!U62hBne!dp5fW!L9)t2+_zV8cu+HkJ#Nic_n34JjS~$8Ar=N5p{&oxm)?e_PAF>M zYNzdytz12D29N6lCL9Ct2{bMepnzM@M8gIjUGtDp5@GF8I6DEo*CD$C9xpZU`h$1; z-bdNt^zieaIB-5$%%zv=XY*+=(st04xwT;408>*_zu~{2s5|fDfnt-d zyaittE-8-CG~fYkaXSpd;QZEFdUA{CTECmn=oCKp2qQ9uvzse8`+PO-2G{fR1{fL| zT6x#MfjY*(sF&SmZc^Mn&Bd{spiFLuZ`w=u?<@IedkbS_9k{YzW3u`E_~?6|IY7@J zDhc@fTpk};Id6dc{QNIS7yZl&E6zLN85^hL7bTp2sF0EU?-9IoopZmIFt44WYeO-8 z1$D$slTb9$|GIdjEQG$kzBQ(421pV&E{t&I>0;U*{VUGQ9kgX^<63nO)6O9}zhBJ2 z?iK(nW%+IGlw{D^*|{zl47!z4EQHCf%k-?@OIOAl^yIurx6P~~dY^ck{%1-Ut?$Rw z7QvaI+ty6E7o?}Bf3dZ-HE(cmFn@S>c-xgLS9Xq!j12?P-rsoO(@7u`!Dzc4HPpL=AOq0yxcSykHU&3{GilCk|24CI$>) zF(AYy5UY`p#V!f7jdmG&(U|d=fN!R zefNI%`+mPO{2myHff$H^7>I%BTQoH_{jJGl8rId-HO+3f&*AkAm&-MuSkO^Kk;B(Yx~8V)uS6n}B&8~f(oA^q{}kfcM6<|6WbqcCV(|_;U}DqsUd{9L~zG#y2cP&S4?n-roMY5EkFOP&zw1=iL|i)YR0! z@%en$@eK`;yWr4g0SpGiyZu-o{*eIL%S=6l8<2fKnCFb(&{zJ0xU^)3kE9!t+kq~- z9c?Bns#`56ZZPBMH4C;~v?8{`hTJ+c99?!X%@M8;90ZqMvyY99eU$5K8+r`6o21tb zpUVL|Nw#)carLGJh4p3}zG}gi3M>An)Q-i44*Ywr3$JE*FeB58X&FAelp$g2X$jL# z`>^@E2@bmz;aYJ72f?M+0+f`LjA0VKz=FzZCA}nRv)R$oVMP^5=IhN!zG6XaxfQ=V zW5*(r{E5zme1!KK#%G&D3U_M0CK1~X=7dho-bDh5_k zkeEUeADoeq*`%P!4%oba*$vcK6eQIucr#bR#1j%;O4A7Qsv%XwRANS|2eZ?ih)(rl z(g`14JTBq&(=Mb|b->eQRcBFeLU8G|0F8}}@81%jwY?KR$)W?&Wk1>ADozy@rzq(+ zlz^q&=|e!+Dagi4GG3$zQ%{D*Jl^Bjh$*+-fIXheHVaX zwV1I;XQ!>@0K00?sus=HO53`b%L?#^G8wbk2G`8Nw%uAKWBf5X=0qSSAJ;I2csWg? z@Vqxg8GnSL@bhDi$ap8C3m59!A-f%-CHh|gkHd!F6LEF~3c3f#k=Mz{>NX z3GO2C;mHy=M>1~M6f_cdhLxmVNu#|FllT!<-j7IrXU~_2ma11+eF;&A_&o{{aY)AN zCmr~r)(FYtWJ~mi0J0DH)$Od1FTkz>qnUit_0Za%YEUrha|$J@OJYAtmjZ^ONcNo^ zt&$TC`$1BXB)9zRmrwdy&Xk|!&|QfvK(hEeTQkLtGQCmkAp1c8MMh<#5!2as69et4 z5AUA zc2L3ZbtbV)_J;rpS_~a{?WB{_SPru5*2|%j^+>>ZgQ8Z<MfDcytG!wQ_^GJCvML0pA`Wkm|!&X5t!fVfs8deU! z0K!@y=2%#9Il!*BP~P5q34ULqU^uHcIw=sN5-9|)@8u|XizHt@O3@FIBtJWJzl`Vh zY1d%~)YmA0c6}kygG;q7P$XaY1rST&+F}z%GBMgT01-(N-pZ8W@Zz2$yHP$uo=rMHME>BDrRnv$@-a-!~{Y3p_yD`F#XZOfBSb7t($9elF@-C+XStruN zAb{*e_7x)&mAb7ekl2mqnb>UZ7Sr@f@Wx0H%NMZXjG~eoexOezHSE(c{4NaMtzdm_ zE8sLik$q_6K&)7wj)PIZ4ub%Sgp2ju3?+FfLV#5RAc#G`U+dfd$W`z$3CD0?y>W`I zbC6ZqOG14nN$k}yEChy7fS;zA5MO)~CrhuR9Th)#CXx=Nr` zgDc7Y)yNLnqv5%|8iA4bLGt-MyytG-i{Rfi?A9>UfBnauUOfGY9;;^WMnTjHluTHU zq=;|`z%ZLk`0-H(E3A-Y50&g&6-g>I2Jg}cPUFm(NGCnBlVT*0IPshcl8<*`#PTcH zGIKkMN3BHexYgkmz|Ey_NxGGlReB~#geFM@6V$303JDt7*SOx7wkYaO(&zy8UFH(X z_y0)%65;8+UX zXhBfytWfaOHVIE`wd17^N^p4cdK8WML=f*E0pN2Xp|k^o6BLc;SJ-tpuQO9L%MK=q zA-hO6B*{PwQAsN*hVXk&ZkO@PECr#W$*SO)tronpScmipe?mdz3g||!>PG=&FHT)H zGRd#D>)c~9Dh%3>88$a?q*_7L-fp{Um1Xkr3Vsj|JhcNP3ffq~;2jbocCwdux-mFj z#^YPLnuHWU!G#;0SnzHdGNV?aVC*WC{x}{b{}P9ssIay`@KQJ;!ABDQD((^puq!Kr zph&DzNKkx+AhD4oIAyOLa}rHhbi{x^o@z#XUL#V^)}!oFHCCT$ptXS?Y~x0Y; zK0*GAYhf;}gY0s{YqmqbHIFT@qPqnmf3vXH0#sL5zuD7S9GN{Qdr79g4N*HiD!IqE zD2Pr}klz59T~K>B?i>f+Hj?Li-`fl6j}7S~|^@DJbYwE*Si<*(u% z!|SwRLvA}BjRi%ZU0LZTiP2)e!1?g#ChgzfC;6xyE}X5ZXRkZ&>A;hjbKydACi14P zLIFwX#;iioj7{)$YE#kKXhiLXY!pu4fa00jJZL*vp{@kFh?OXwzY9rg;$Q8x02vt> z6SV&x?>U5(&1{L7G$S61l~o}gCt3EbAHX9UY5na^oGjJDX*2UXN{{4CT^3x}n~j|D ztC0V~8WgCHZj<~DWdkv5c7>ER%GsfQCF zVwr0fdtuF1&*SDzx$n5!RAE%0;r#d5tZBn}C7z}iz z2s=3lE(D|Zha{Hv@x&%%pBIwX1<6DBeE0N!cwX6u8x4&pTDni|Uru>0YdH{6zat-p z)0fd%cwJ0>)dlt{3Uld(`ng=brkk)DWjiy_X*1t`p5X96ALCmK7A$yzhm7?28p17k zQCD>x1@q%cUYp?TclFxJp(eu9YDVenJJd~1#gatStjk2zvZJa~bW_%%BBcOUr~Nj0 zk-Oj^xb#(ozu@_rcl-N@tkdU4b?GJK&5i3O?}u)**zBxU-3|UdsK~)xi8oKc$NSl8N@t}6lMXl7<`2X6ErW;MTvm_$7!otG$M6PPi zVGg0@cW2F-_3W85XFf6-jrly5Zs5fCp_gGXTTrn!4aH;EqGa4Uv0uM8j9-u97uMs# zsuO7EGUw&;B61M9h@3=jB1bjXeu{4q5BeYS2+!n?+_-V$%#@Urx43hBKQAxuS4Bld z%ZiJOV?u$|iOI;xib+_tC1%4jKabh`?4p>>L+>4%hAdhZJMF)Jbs*{B`-k{U@obTU z$i<)2gFzF&AB7ksZ03LHUlQLDNqkNCj{lht`g0hh<}?rkF%SbW5WS2412r@~@!~|F Qr~m)}07*qoM6N<$g1!)j0RR91 literal 0 HcmV?d00001 diff --git a/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_512x512.png b/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..7028370d522db2826324565a5b2ec7d19d6dc500 GIT binary patch literal 63830 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 literal 0 HcmV?d00001 diff --git a/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_512x512@2x.png b/phpmon/Assets.xcassets/AppIconEAP.appiconset/icon_512x512@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d21b65a549adf2bd3f0a33a67a56ce32273129 GIT binary patch literal 166398 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 literal 0 HcmV?d00001 From 0e3c9a5a68cb7c4f5b406744d4103de38933416c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 24 Mar 2023 00:21:45 +0100 Subject: [PATCH 134/194] =?UTF-8?q?=E2=9C=A8=20Added=20new=20target,=20did?= =?UTF-8?q?=20some=20testing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 +++++++++--- ... Monitor EA.xcscheme => PHP Monitor EAP.xcscheme} | 0 phpmon/Credits.html | 4 ++-- phpmon/Domain/Menu/MainMenu+Switcher.swift | 11 +++++++++-- 4 files changed, 20 insertions(+), 7 deletions(-) rename PHP Monitor.xcodeproj/xcshareddata/xcschemes/{PHP Monitor EA.xcscheme => PHP Monitor EAP.xcscheme} (100%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 70d49d6..2bc7b87 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3304,6 +3304,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3333,6 +3334,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3560,6 +3562,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor DEV"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3670,6 +3673,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor DEV"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3678,7 +3682,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.dev; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "$(TARGET_NAME) DEV"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -3780,6 +3784,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor EAP"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3788,7 +3793,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "$(TARGET_NAME) EAP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -3952,6 +3957,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = phpmon/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = "PHP Monitor EAP"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.developer-tools"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -3960,7 +3966,7 @@ MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 6.0; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon.eap; - PRODUCT_NAME = "$(TARGET_NAME) DEV"; + PRODUCT_NAME = "$(TARGET_NAME) EAP"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EA.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme similarity index 100% rename from PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EA.xcscheme rename to PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme diff --git a/phpmon/Credits.html b/phpmon/Credits.html index 078adb3..4eba565 100644 --- a/phpmon/Credits.html +++ b/phpmon/Credits.html @@ -13,10 +13,10 @@
-

+

Do you enjoy using the app? Is it helping you save time? Leave a star on GitHub!

Having issues? Consult the FAQ section, I did my best to ensure everything is documented.

Want to support further development of PHP Monitor? You can financially support the continued development of this app.

-

Get the latest on Mastodon. Give me a follow on Mastodon to learn about what's brewing and when new updates drop.

+

Get the latest on Twitter or Mastodon. Give me a follow on Twitter or Mastodon to learn about what's brewing and when new updates drop.


diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index 087e0cc..c4485b5 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -120,11 +120,18 @@ extension MainMenu { preference: .notifyAboutVersionChange ) - guard let install = PhpEnv.phpInstall else { + guard PhpEnv.phpInstall != nil else { Log.err("Cannot notify about version change if PHP is unlinked") return } - Task { await Valet.shared.notifyAboutBrokenPhpFpm() } + guard Valet.installed == true else { + Log.info("Skipping check for broken PHP-FPM version, Valet is not installed") + return + } + + Task { + await Valet.shared.notifyAboutBrokenPhpFpm() + } } } From b456fdc65c55680345c05cdb1af1616a62766f8d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 24 Mar 2023 00:30:53 +0100 Subject: [PATCH 135/194] =?UTF-8?q?=F0=9F=90=9B=20Valet=20specific=20file?= =?UTF-8?q?=20checks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Warnings/Services/PhpConfigChecker.swift | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift b/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift index 656959f..f745f64 100644 --- a/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift +++ b/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift @@ -8,6 +8,11 @@ import Foundation +struct FileExistenceCheck { + let condition: (() -> Bool)? + let path: String +} + class PhpConfigChecker { public static var shared = PhpConfigChecker() @@ -17,15 +22,21 @@ class PhpConfigChecker { public func check() { missing = [] - let shouldExist = [ - "php.ini", - "php-fpm.conf", - "php-fpm.d/valet-fpm.conf" + let shouldExist: [FileExistenceCheck] = [ + FileExistenceCheck(condition: nil, path: "php.ini"), + FileExistenceCheck(condition: nil, path: "php-fpm.conf"), + FileExistenceCheck(condition: { Valet.installed }, path: "php-fpm.d/valet-fpm.conf") ] for version in PhpEnv.shared.availablePhpVersions { for file in shouldExist { - let fullFilePath = Paths.etcPath.appending("/php/\(version)/\(file)") + // Early exit in case our condition is not met + if file.condition != nil && file.condition!() == false { + continue + } + + // Do the check + let fullFilePath = Paths.etcPath.appending("/php/\(version)/\(file.path)") if !FileSystem.fileExists(fullFilePath) { missing.append(fullFilePath) } From 6b72d4da6556f84539ab5cf462e18799c60b4892 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 24 Mar 2023 00:40:53 +0100 Subject: [PATCH 136/194] =?UTF-8?q?=F0=9F=91=8C=20Disallow=20installation?= =?UTF-8?q?=20of=20linked=20PHP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 14 ++++++++++++-- phpmon/Localizable.strings | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index e438c23..f01f3f6 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -170,12 +170,22 @@ struct PhpFormulaeView: View { description: "phpman.failures.install.desc".localized( "brew install \(formula)" ), - button: "generic.ok" + button: "generic.ok".localized ) } } public func uninstall(_ formula: BrewFormula) async { + // Disallow removal of the currently active versipn + if formula.installedVersion == PhpEnv.shared.currentInstall?.version.text { + self.presentErrorAlert( + title: "phpman.uninstall_prevented.title".localized, + description: "phpman.uninstall_prevented.desc".localized, + button: "generic.ok".localized + ) + return + } + let command = RemovePhpVersionCommand(formula: formula.name) do { @@ -199,7 +209,7 @@ struct PhpFormulaeView: View { description: "phpman.failures.uninstall.desc".localized( "brew uninstall \(formula) --force" ), - button: "generic.ok" + button: "generic.ok".localized ) } } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 0470afd..a6857f4 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -99,6 +99,9 @@ "phpman.failures.install.title" = "Install failed!"; "phpman.failures.install.desc" = "Unfortunately, the automatic installation failed. You can manually try to run this command: `%@` and find out what goes wrong. Remember to restart PHP Monitor (or press the refresh button) when this is done."; +"phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor."; +"phpman.uninstall_prevented.desc" = "In order to prevent issues with PHP Monitor and further crashes, it isn't possible to uninstall the currently linked version of PHP via this UI. You can switch versions and try again, or uninstall this version manually via the terminal.\n\nPlease note that PHP Monitor may crash if you uninstall the currently linked PHP version."; + "phpman.failures.uninstall.title" = "Uninstall failed!"; "phpman.failures.uninstall.desc" = "Unfortunately, the automatic uninstallation failed. You can manually try to run this command: `%@` and find out what goes wrong. Remember to restart PHP Monitor (or press the refresh button) when this is done."; From ff8eb4fa04ec6513780aafd1dcc0fd2baeb2069b Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 24 Mar 2023 00:47:27 +0100 Subject: [PATCH 137/194] =?UTF-8?q?=F0=9F=91=8C=20Use=20app=20colors=20for?= =?UTF-8?q?=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StatusColorBlue.colorset/Contents.json | 38 +++++++++++++++++++ .../SwiftUI/PhpManager/PhpFormulaeView.swift | 4 +- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 phpmon/Assets.xcassets/StatusColorBlue.colorset/Contents.json diff --git a/phpmon/Assets.xcassets/StatusColorBlue.colorset/Contents.json b/phpmon/Assets.xcassets/StatusColorBlue.colorset/Contents.json new file mode 100644 index 0000000..4fc8e42 --- /dev/null +++ b/phpmon/Assets.xcassets/StatusColorBlue.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.988", + "green" : "0.580", + "red" : "0.278" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0.988", + "green" : "0.723", + "red" : "0.277" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index f01f3f6..1bb3004 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -313,9 +313,9 @@ extension BrewFormula { var iconColor: Color { if self.hasUpgrade { - return .blue + return Color("StatusColorBlue") } else if self.isInstalled { - return .green + return Color("StatusColorGreen") } return Color.gray.opacity(0.3) } From 641328760684472a9a3c6191d15dcab249d92271 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 24 Mar 2023 01:03:19 +0100 Subject: [PATCH 138/194] =?UTF-8?q?=F0=9F=91=8C=20Fix=20updater=20bundle?= =?UTF-8?q?=20logic,=20skip=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 11 +++++----- phpmon-updater/LaunchControl.swift | 8 +------ phpmon/Domain/App/AppUpdater.swift | 30 +++++++++++++++------------ 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 2bc7b87..2dd5ccb 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3299,6 +3299,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1205; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3328,7 +3329,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3557,7 +3558,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3668,7 +3669,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3779,7 +3780,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3952,7 +3953,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon-updater/LaunchControl.swift b/phpmon-updater/LaunchControl.swift index 4adceff..deef6ac 100644 --- a/phpmon-updater/LaunchControl.swift +++ b/phpmon-updater/LaunchControl.swift @@ -24,14 +24,8 @@ class LaunchControl { public static func terminateApplications(bundleIds: [String]) async { let runningApplications = NSWorkspace.shared.runningApplications - // Look for these instances - let ids = [ - "com.nicoverbruggen.phpmon.dev", - "com.nicoverbruggen.phpmon" - ] - // Terminate all instances found - for id in ids { + for id in bundleIds { if let phpmon = runningApplications.first(where: { (application) in return application.bundleIdentifier == id }) { diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index 4456ae9..7a314d2 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -26,7 +26,7 @@ class AppUpdater { var caskUrl = Constants.Urls.StableBuildCaskFile - if App.identifier.contains("phpmon.eap") { + if App.identifier.contains(".phpmon.eap") { caskUrl = Constants.Urls.EarlyAccessCaskFile } else if App.identifier.contains(".phpmon.dev") { caskUrl = Constants.Urls.DevBuildCaskFile @@ -72,7 +72,7 @@ class AppUpdater { : "brew upgrade phpmon" Task { @MainActor in - BetterAlert().withInformation( + var alert = BetterAlert().withInformation( title: "updater.alerts.newer_version_available.title" .localized(latestVersionOnline.humanReadable), subtitle: "updater.alerts.newer_version_available.subtitle" @@ -89,17 +89,21 @@ class AppUpdater { vc.close(with: .OK) } ) - .withSecondary( - text: "updater.alerts.buttons.release_notes".localized, - action: { _ in - let urlSegments = self.caskFile.url.split(separator: "/") - let tag = urlSegments[urlSegments.count - 2] // ../download/{tag}/{file.zip} - NSWorkspace.shared.open( - Constants.Urls.GitHubReleases.appendingPathComponent("/tag/\(tag)") - ) - } - ) - .withTertiary(text: "updater.alerts.buttons.dismiss".localized, action: { vc in + + if !App.identifier.contains(".phpmon.eap") { + alert = alert.withSecondary( + text: "updater.alerts.buttons.release_notes".localized, + action: { _ in + let urlSegments = self.caskFile.url.split(separator: "/") + let tag = urlSegments[urlSegments.count - 2] // ../download/{tag}/{file.zip} + NSWorkspace.shared.open( + Constants.Urls.GitHubReleases.appendingPathComponent("/tag/\(tag)") + ) + } + ) + } + + alert.withTertiary(text: "updater.alerts.buttons.dismiss".localized, action: { vc in vc.close(with: .OK) }) .show() From 4c7361e6354e7ac7293a74f40fd2d39d620e8869 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 24 Mar 2023 01:05:15 +0100 Subject: [PATCH 139/194] =?UTF-8?q?=F0=9F=94=A7=20Bump=20PHP=20Monitor=20S?= =?UTF-8?q?elf-Updater?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEVELOPER.md | 8 +++++++- PHP Monitor.xcodeproj/project.pbxproj | 24 ++++++++++++------------ 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/DEVELOPER.md b/DEVELOPER.md index 3856261..3518e67 100644 --- a/DEVELOPER.md +++ b/DEVELOPER.md @@ -28,16 +28,22 @@ defaults delete com.nicoverbruggen.phpmon && killall cfprefsd build button in Xcode +### PHP Monitor + If you'd like to build PHP Monitor yourself, you need: * Xcode (usually the latest version) -* *PHP Monitor Self-Updater.app* in the `phpmon-updater` directory. You can build it yourself, it is included as a target) or copy the signed app so it is included w/ PHP Monitor +* *PHP Monitor Self-Updater.app* in the `phpmon-updater` directory (You can build it yourself, it is included as a target OR copy the signed app so it is included w/ PHP Monitor) * The contents of this repository Once you have downloaded this repository, open `PHP Monitor.xcodeproj`, and you should be able to build the app for your system by pressing Cmd-R. This will create a debug build. (If Xcode complains about code signing, you can turn it off.) If you'd like to create a production build, choose "Any Mac" as the target and select Product > Archive. +### PHP Monitor Updater + +Select the separate target and build. You can then copy the product to the `phpmon-updater` directory. The binary will be re-signed when distributing the main build. + ## 🚀 Release procedure 1. Merge into `main` diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 2dd5ccb..c54e306 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3051,7 +3051,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 26; + CURRENT_PROJECT_VERSION = 30; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3084,7 +3084,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 26; + CURRENT_PROJECT_VERSION = 30; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3117,7 +3117,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 26; + CURRENT_PROJECT_VERSION = 30; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3150,7 +3150,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 26; + CURRENT_PROJECT_VERSION = 30; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3299,7 +3299,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1200; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3329,7 +3329,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1200; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3558,7 +3558,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1200; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3669,7 +3669,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1200; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3780,7 +3780,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1200; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3812,7 +3812,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 26; + CURRENT_PROJECT_VERSION = 30; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3953,7 +3953,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1200; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3985,7 +3985,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 26; + CURRENT_PROJECT_VERSION = 30; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; From 85d7c8f9a38d1bb3616655418a91bb560500f3c8 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Sat, 25 Mar 2023 12:42:45 +0100 Subject: [PATCH 140/194] =?UTF-8?q?=F0=9F=8F=97=20Added=20#warning=20for?= =?UTF-8?q?=20disabled=20notifications?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Watcher/App+BrewWatch.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpmon/Domain/Watcher/App+BrewWatch.swift b/phpmon/Domain/Watcher/App+BrewWatch.swift index 1929040..9a4df96 100644 --- a/phpmon/Domain/Watcher/App+BrewWatch.swift +++ b/phpmon/Domain/Watcher/App+BrewWatch.swift @@ -26,13 +26,13 @@ extension App { } public func onHomebrewPhpModification() async { - #warning("This functionality working means that switcher code needs to change") let previous = PhpEnv.shared.currentInstall?.version.text Log.info("Something changed in the Homebrew binary directory...") await PhpEnv.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() let new = PhpEnv.shared.currentInstall?.version.text if previous != new { + #warning("Notifications should be opt-in and are currently disabled") Log.info("The PHP version has changed, new version is now: \(new ?? "unlinked")") /* // These notifications will cause duplicate notifications if using the switcher From c5e8c4c4a61950f1092ae01d3404c5eb49cb45f6 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 27 Mar 2023 18:51:17 +0200 Subject: [PATCH 141/194] =?UTF-8?q?=E2=9C=A8=20Add=20helpful=20dialog=20fo?= =?UTF-8?q?r=20What's=20This?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++---- phpmon/Common/PHP/PHP Version/PhpHelper.swift | 29 ++++++++++++------- phpmon/Domain/Menu/MainMenu+Actions.swift | 13 +++++++++ phpmon/Domain/Menu/StatusMenu+Items.swift | 3 +- phpmon/Localizable.strings | 8 +++-- 5 files changed, 45 insertions(+), 20 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index c54e306..bb1c865 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3299,7 +3299,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3329,7 +3329,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3558,7 +3558,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3669,7 +3669,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3780,7 +3780,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3953,7 +3953,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1200; + CURRENT_PROJECT_VERSION = 1205; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon/Common/PHP/PHP Version/PhpHelper.swift b/phpmon/Common/PHP/PHP Version/PhpHelper.swift index b248bb1..be41b47 100644 --- a/phpmon/Common/PHP/PHP Version/PhpHelper.swift +++ b/phpmon/Common/PHP/PHP Version/PhpHelper.swift @@ -50,16 +50,7 @@ class PhpHelper { .resolvingSymlinksInPath().path // The contents of the script! - let script = """ - #!/bin/zsh - # \(keyPhrase) - # It reflects the location of PHP \(version)'s binaries on your system. - # Usage: . pm\(dotless) - [[ $ZSH_EVAL_CONTEXT =~ :file$ ]] \\ - && echo "PHP Monitor has enabled this terminal to use PHP \(version)." \\ - || echo "You must run '. pm\(dotless)' (or 'source pm\(dotless)') instead!"; - export PATH=\(path):$PATH - """ + let script = script(path, keyPhrase, version, dotless) Task { @MainActor in try FileSystem.writeAtomicallyToFile(destination, content: script) @@ -87,6 +78,24 @@ class PhpHelper { } } + private static func script( + _ path: String, + _ keyPhrase: String, + _ version: String, + _ dotless: String + ) -> String { + return """ + #!/bin/zsh + # \(keyPhrase) + # It reflects the location of PHP \(version)'s binaries on your system. + # Usage: . pm\(dotless) + [[ $ZSH_EVAL_CONTEXT =~ :file$ ]] \\ + && echo "PHP Monitor has enabled this terminal to use PHP \(version)." \\ + || echo "You must run '. pm\(dotless)' (or 'source pm\(dotless)') instead!"; + export PATH=\(path):$PATH + """ + } + private static func createSymlink(_ dotless: String) async { let source = "\(Paths.homePath)/.config/phpmon/bin/pm\(dotless)" let destination = "/usr/local/bin/pm\(dotless)" diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift index b94f5df..2cbcdef 100644 --- a/phpmon/Domain/Menu/MainMenu+Actions.swift +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -18,6 +18,19 @@ extension MainMenu { } } + @MainActor @objc func displayUnlinkedInfo() { + Task { @MainActor in + BetterAlert() + .withInformation( + title: "phpman.unlinked.title".localized, + subtitle: "phpman.unlinked.desc".localized, + description: "phpman.unlinked.detail".localized + ) + .withPrimary(text: "generic.ok".localized) + .show() + } + } + @MainActor @objc func fixHomebrewPermissions() { if !BetterAlert() .withInformation( diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index b8bc49b..59e8dd3 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -16,10 +16,9 @@ extension StatusMenu { if PhpEnv.phpInstall == nil { addItem(HeaderView.asMenuItem(text: "⚠️ " + "mi_no_php_linked".localized, minimumWidth: 280)) addItems([ - // TODO: Make sure these buttons do something NSMenuItem.separator(), NSMenuItem(title: "mi_fix_php_link".localized, action: #selector(MainMenu.linkPhpBinary)), - NSMenuItem(title: "mi_no_php_linked_explain".localized) + NSMenuItem(title: "mi_no_php_linked_explain".localized, action: #selector(MainMenu.displayUnlinkedInfo)) ]) return } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index a6857f4..8e9ee6a 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -90,8 +90,8 @@ // PHPMAN -"phpman.title" = "PHP Manager"; -"phpman.description" = "**PHP Manager** lets you install different PHP versions via Homebrew."; +"phpman.title" = "PHP Version Manager"; +"phpman.description" = "**PHP Version Manager** lets you install different PHP versions via Homebrew."; "phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well, but only if Homebrew would otherwise have broken those other packages via a shared dependency. (More in the FAQ!)"; "phpman.refresh.button" = "Search for Updates"; "phpman.refresh.button.description" = "You can press this button to check (again) if any updates are available to installed PHP versions. When you first open this window, PHP Monitor already does this check."; @@ -105,6 +105,10 @@ "phpman.failures.uninstall.title" = "Uninstall failed!"; "phpman.failures.uninstall.desc" = "Unfortunately, the automatic uninstallation failed. You can manually try to run this command: `%@` and find out what goes wrong. Remember to restart PHP Monitor (or press the refresh button) when this is done."; +"phpman.unlinked.title" = "None of the versions of PHP installed on your system are currently linked."; +"phpman.unlinked.desc" = "You likely still have some version of PHP that is currently installed, but currently no version of PHP is linked."; +"phpman.unlinked.detail" = "Without any PHP version linked, the `php` binary is not accessible on your system and you cannot run any PHP scripts without explicitly being part of the PATH. You can have PHP Monitor automatically resolve this problem (choose Fix Automatically in the main menu), or fix it yourself by running `brew link php --force`."; + // GENERIC "generic.ok" = "OK"; From 4bca47a6d9a0abdad554832046b2ebdae9f5ad14 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 27 Mar 2023 19:37:47 +0200 Subject: [PATCH 142/194] =?UTF-8?q?=E2=9C=A8=20Add=20early=20access=20rele?= =?UTF-8?q?ase=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Core/Constants.swift | 4 ++++ phpmon/Domain/App/AppUpdater.swift | 32 +++++++++++++++--------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/phpmon/Common/Core/Constants.swift b/phpmon/Common/Core/Constants.swift index 99c7a3e..8fbef99 100644 --- a/phpmon/Common/Core/Constants.swift +++ b/phpmon/Common/Core/Constants.swift @@ -86,6 +86,10 @@ struct Constants { string: "https://phpmon.app/builds/early-access/sponsors/phpmon-eap.rb" )! + static let EarlyAccessChangelog = URL( + string: "https://phpmon.app/early-access/release-notes" + )! + } } diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index 7a314d2..43b2fde 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -72,7 +72,7 @@ class AppUpdater { : "brew upgrade phpmon" Task { @MainActor in - var alert = BetterAlert().withInformation( + BetterAlert().withInformation( title: "updater.alerts.newer_version_available.title" .localized(latestVersionOnline.humanReadable), subtitle: "updater.alerts.newer_version_available.subtitle" @@ -89,21 +89,21 @@ class AppUpdater { vc.close(with: .OK) } ) - - if !App.identifier.contains(".phpmon.eap") { - alert = alert.withSecondary( - text: "updater.alerts.buttons.release_notes".localized, - action: { _ in - let urlSegments = self.caskFile.url.split(separator: "/") - let tag = urlSegments[urlSegments.count - 2] // ../download/{tag}/{file.zip} - NSWorkspace.shared.open( - Constants.Urls.GitHubReleases.appendingPathComponent("/tag/\(tag)") - ) - } - ) - } - - alert.withTertiary(text: "updater.alerts.buttons.dismiss".localized, action: { vc in + .withSecondary( + text: "updater.alerts.buttons.release_notes".localized, + action: { _ in + NSWorkspace.shared.open({ + if App.identifier.contains(".eap") { + return Constants.Urls.EarlyAccessChangelog + } else { + let urlSegments = self.caskFile.url.split(separator: "/") + let tag = urlSegments[urlSegments.count - 2] // ../download/{tag}/{file.zip} + return Constants.Urls.GitHubReleases.appendingPathComponent("/tag/\(tag)") + } + }()) + } + ) + .withTertiary(text: "updater.alerts.buttons.dismiss".localized, action: { vc in vc.close(with: .OK) }) .show() From 9f608439fc8c66932119fbab9fecb9515f9b7c62 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Mon, 3 Apr 2023 20:15:13 +0200 Subject: [PATCH 143/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Upgrade=20command?= =?UTF-8?q?=20dry-run=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 ++++ .../Commands/UpgradePhpVersionCommand.swift | 49 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index bb1c865..23c398e 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -511,6 +511,10 @@ C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; C47699F128A2F3150060FEB8 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.swift */; }; C476FF9822B0DD830098105B /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; }; + C4777E0C29D71AFB007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; + C4777E0D29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; + C4777E0E29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; + C4777E0F29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; C47DF1B1299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; @@ -956,6 +960,7 @@ C47699EE28A2F2A30060FEB8 /* WarningManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningManager.swift; sourceTree = ""; }; C47699F028A2F3150060FEB8 /* Warning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Warning.swift; sourceTree = ""; }; C476FF9722B0DD830098105B /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = ""; }; + C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpgradePhpVersionCommand.swift; sourceTree = ""; }; C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginItemManager.swift; sourceTree = ""; }; C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = ""; }; C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = ""; }; @@ -1744,6 +1749,7 @@ C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */, C4B79EC529CA474200A483EE /* FakeCommand.swift */, C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */, + C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */, C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */, ); path = Commands; @@ -2263,6 +2269,7 @@ C43931CA29C4C03F0069165B /* Brew.swift in Sources */, C42C49DB27C2806F0074ABAC /* MainMenu+FixMyValet.swift in Sources */, C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */, + C4777E0C29D71AFB007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C4998F0A2617633900B2526E /* PreferencesWindowController.swift in Sources */, C46FA9882822EFDC00D78807 /* PhpConfigurationFile.swift in Sources */, C4F8C0A422D4F12C002EFE61 /* DateExtension.swift in Sources */, @@ -2510,6 +2517,7 @@ C471E86828F9BB650021E251 /* PreferencesWindowController.swift in Sources */, C471E86928F9BB650021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, C48DDD0F29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, + C4777E0E29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C4AFC4B029C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C471E86A28F9BB650021E251 /* PrefsVC.swift in Sources */, C471E86B28F9BB650021E251 /* PreferenceName.swift in Sources */, @@ -2744,6 +2752,7 @@ C471E80E28F9BAE80021E251 /* DateExtension.swift in Sources */, C490E3BA29BCA368006D2DE6 /* App+BrewWatch.swift in Sources */, C471E7D028F9BA630021E251 /* FileSystemProtocol.swift in Sources */, + C4777E0F29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C471E81228F9BAE80021E251 /* TimeIntervalExtension.swift in Sources */, C471E7DF28F9BAAB0021E251 /* RealCommand.swift in Sources */, C469E701294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */, @@ -2974,6 +2983,7 @@ C4927F0C27B2DFC200C55AFD /* Errors.swift in Sources */, C485707628BF455100539B36 /* SectionHeaderView.swift in Sources */, C46EBC4828DB9644007ACC74 /* RealShell.swift in Sources */, + C4777E0D29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C48DDD0E29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C4E4404727C56F4700D225E1 /* ValetSite.swift in Sources */, C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift new file mode 100644 index 0000000..171f9bd --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift @@ -0,0 +1,49 @@ +// +// InstallPhpVersionCommand.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 21/03/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +public typealias BrewDependent = String + +class UpgradePhpVersionCommand: BrewCommand { + let formula: String + let version: String + + init(formula: String) { + self.version = formula + .replacingOccurrences(of: "php@", with: "") + .replacingOccurrences(of: "shivammathur/php/", with: "") + self.formula = formula + } + + func execute() async throws -> [BrewDependent] { + let command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=true; \ + export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + \(Paths.brew) upgrade \(formula) -n + """ + + // Use this command to do a dry-run of the upgrade + // This will let us figure out the impact or failure modes + let (process, _) = try! await Shell.attach( + command, + didReceiveOutput: { text, _ in + if !text.isEmpty { + Log.perf(text) + } + }, + withTimeout: .minutes(5) + ) + + return [] + } + + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + // + } +} From 7e5cbadc09268981c0d183f5be31faf98c71cf28 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Tue, 4 Apr 2023 20:50:51 +0200 Subject: [PATCH 144/194] =?UTF-8?q?=F0=9F=91=8C=20Various=20improvements?= =?UTF-8?q?=20to=20PHP=20Version=20Manager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - A warning has been added if you are not running Homebrew 4.0, since running older (or newer) versions of Homebrew are not officially supported. This check is only displayed once per cold app boot. - The PHP Version Manager now shows the full version number for up-to-date PHP installations (mostly important for patch version). - You must now confirm the deletion of an installed version of PHP before PHP Monitor will uninstall that version. - It is no longer possible to press the refresh button if the app is already busy checking for updated PHP versions --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++-- phpmon/Common/Helpers/Alert.swift | 2 + .../Domain/Integrations/Homebrew/Brew.swift | 2 +- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 64 +++++++++++++++---- phpmon/Localizable.strings | 25 +++++++- 5 files changed, 82 insertions(+), 23 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 23c398e..4bcc27f 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3309,7 +3309,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1210; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3339,7 +3339,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1210; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3568,7 +3568,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1210; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3679,7 +3679,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1210; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3790,7 +3790,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1210; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3963,7 +3963,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1205; + CURRENT_PROJECT_VERSION = 1210; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon/Common/Helpers/Alert.swift b/phpmon/Common/Helpers/Alert.swift index bc6c8c1..64809e2 100644 --- a/phpmon/Common/Helpers/Alert.swift +++ b/phpmon/Common/Helpers/Alert.swift @@ -14,6 +14,7 @@ class Alert { messageText: String, informativeText: String, buttonTitle: String = "generic.ok".localized, + buttonIsDestructive: Bool = false, secondButtonTitle: String = "generic.cancel".localized, style: NSAlert.Style = .warning, onFirstButtonPressed: @escaping (() -> Void) @@ -27,6 +28,7 @@ class Alert { alert.messageText = messageText alert.informativeText = informativeText alert.addButton(withTitle: buttonTitle) + alert.buttons.first?.hasDestructiveAction = buttonIsDestructive if !secondButtonTitle.isEmpty { alert.addButton(withTitle: secondButtonTitle) } diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index d8e2883..285426d 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -30,7 +30,7 @@ class Brew { Log.info("The user has Homebrew \(version.text) installed.") if version.major < 4 { - Log.warn("Managing PHP versions is only supported with Homebrew 4 or newer!") + Log.warn("Managing PHP versions is only officially supported with Homebrew 4 or newer!") } } else { Log.warn("The Homebrew version could not be determined.") diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 1bb3004..12847a8 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -35,11 +35,28 @@ struct PhpFormulaeView: View { self.status = PhpFormulaeStatus( busy: true, - title: "Checking for updates!", - description: "Checking if any PHP version is outdated..." + title: "phpman.busy.title".localized, + description: "phpman.busy.description.outdated".localized ) Task { [self] in + guard let version = Brew.shared.version else { + return + } + + await delay(seconds: 1) + + if version.major != 4 { + Task { @MainActor in + self.presentErrorAlert( + title: "phpman.warnings.unsupported.title".localized, + description: "phpman.warnings.unsupported.desc".localized(version.text), + button: "generic.ok".localized, + style: .warning + ) + } + } + await PhpEnv.detectPhpVersions() await self.handler.refreshPhpVersions(loadOutdated: false) await self.handler.refreshPhpVersions(loadOutdated: true) @@ -74,8 +91,8 @@ struct PhpFormulaeView: View { Task { // Reload warnings Task { @MainActor in self.status.busy = true - self.status.title = "Checking for updates!" - self.status.description = "Checking if any PHP version is outdated..." + self.status.title = "phpman.busy.title".localized + self.status.description = "phpman.busy.description.outdated".localized } await self.handler.refreshPhpVersions(loadOutdated: true) Task { @MainActor in @@ -88,6 +105,7 @@ struct PhpFormulaeView: View { .controlSize(.large) } .focusable(false) + .disabled(self.status.busy) Text("phpman.refresh.button.description".localizedForSwiftUI) .foregroundColor(.gray) @@ -112,26 +130,26 @@ struct PhpFormulaeView: View { .font(.system(size: 11)) .foregroundColor(.gray) } else if formula.isInstalled && formula.installedVersion != nil { - Text("Latest version is currently installed.").font(.system(size: 11)) + Text("\(formula.installedVersion!) is currently installed.").font(.system(size: 11)) .foregroundColor(.gray) } else { - Text("This version can be installed.") + Text("phpman.version.available_for_installation".localizedForSwiftUI) .font(.system(size: 11)) .foregroundColor(.gray) } } .frame(maxWidth: .infinity, alignment: .leading) if formula.isInstalled { - Button("Uninstall") { - Task { await self.uninstall(formula) } + Button("phpman.buttons.uninstall".localizedForSwiftUI, role: .destructive) { + Task { await self.confirmUninstall(formula) } } } else { - Button("Install") { + Button("phpman.buttons.install".localizedForSwiftUI) { Task { await self.install(formula) } } } if formula.hasUpgrade { - Button("Update") { + Button("phpman.buttons.update".localizedForSwiftUI) { Task { await self.install(formula) } } } @@ -175,7 +193,7 @@ struct PhpFormulaeView: View { } } - public func uninstall(_ formula: BrewFormula) async { + public func confirmUninstall(_ formula: BrewFormula) async { // Disallow removal of the currently active versipn if formula.installedVersion == PhpEnv.shared.currentInstall?.version.text { self.presentErrorAlert( @@ -186,6 +204,21 @@ struct PhpFormulaeView: View { return } + Alert.confirm( + onWindow: App.shared.versionManagerWindowController!.window!, + messageText: "phpman.warnings.removal.title".localized(formula.displayName), + informativeText: "phpman.warnings.removal.desc".localized(formula.displayName), + buttonTitle: "phpman.warnings.removal.button".localized, + buttonIsDestructive: true, + secondButtonTitle: "generic.cancel".localized, + style: .warning, + onFirstButtonPressed: { + Task { await self.uninstall(formula) } + } + ) + } + + public func uninstall(_ formula: BrewFormula) async { let command = RemovePhpVersionCommand(formula: formula.name) do { @@ -230,14 +263,19 @@ struct PhpFormulaeView: View { } } - public func presentErrorAlert(title: String, description: String, button: String) { + public func presentErrorAlert( + title: String, + description: String, + button: String, + style: NSAlert.Style = .critical + ) { Alert.confirm( onWindow: App.shared.versionManagerWindowController!.window!, messageText: title, informativeText: description, buttonTitle: button, secondButtonTitle: "", - style: .critical, + style: style, onFirstButtonPressed: {} ) } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 8e9ee6a..ecf27a4 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -90,13 +90,32 @@ // PHPMAN +"phpman.busy.title" = "Checking for updates!"; +"phpman.busy.description.outdated" = "Checking if any PHP version is outdated..."; + +"phpman.version.available_for_installation" = "This version can be installed"; +"phpman.buttons.uninstall" = "Uninstall"; +"phpman.buttons.install" = "Install"; +"phpman.buttons.update" = "Update"; + "phpman.title" = "PHP Version Manager"; "phpman.description" = "**PHP Version Manager** lets you install different PHP versions via Homebrew."; -"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well, but only if Homebrew would otherwise have broken those other packages via a shared dependency. (More in the FAQ!)"; +"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well. For more information, please consult the FAQ."; "phpman.refresh.button" = "Search for Updates"; -"phpman.refresh.button.description" = "You can press this button to check (again) if any updates are available to installed PHP versions. When you first open this window, PHP Monitor already does this check."; +"phpman.refresh.button.description" = "You can press the refresh button to check if any updates are available to installed PHP versions."; -"phpman.failures.install.title" = "Install failed!"; +"phpman.warnings.unsupported.title" = "Your version of Homebrew may cause issues"; +"phpman.warnings.unsupported.desc" = "No functionality is disabled, but some commands may not work as expected. You are currently running Homebrew %@. + +Currently, Homebrew 4 is the only supported version for the PHP Version Manager. If you are running a newer version of Homebrew, you may wish to check if a newer version of PHP Monitor is available."; + +"phpman.warnings.removal.title" = "Are you sure you want to uninstall %@?"; +"phpman.warnings.removal.desc" = "Please note that configuration files will not be removed, so it should be easy to reinstall later if needed. + +You may be asked for your password during the uninstallation process if file permissions don't allow a simple removal."; +"phpman.warnings.removal.button" = "Uninstall"; + +"phpman.failures.install.title" = "Installation failed!"; "phpman.failures.install.desc" = "Unfortunately, the automatic installation failed. You can manually try to run this command: `%@` and find out what goes wrong. Remember to restart PHP Monitor (or press the refresh button) when this is done."; "phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor."; From f48a265bbf2fb275e4773b4a51f95b5afc4a2629 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 12 Apr 2023 13:40:22 +0200 Subject: [PATCH 145/194] =?UTF-8?q?=F0=9F=94=A7=20New=20bug=20report=20for?= =?UTF-8?q?mat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/bug_report.md | 38 ------------- .github/ISSUE_TEMPLATE/bug_report.yaml | 62 +++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 22 -------- .github/ISSUE_TEMPLATE/feature_request.yaml | 31 +++++++++++ 4 files changed, 93 insertions(+), 60 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yaml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yaml diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 3348463..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug report -about: Something going wrong? File a bug report! -title: '' -labels: bug -assignees: nicoverbruggen - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Required information** - - Did you consult the FAQ in the README? [yes/no] - - Did you try "Fix My Valet"? [yes/no] - - OS: [e.g. macOS Monterey] - - PHP Monitor version [e.g. v5.0.1] - -**Additional log** -You can help me figure out even more information by sending me your verbose log for your latest session of PHP Monitor. Logging is disabled by default. - -You can start extra verbose logging by running: `touch ~/.config/phpmon/verbose` and restarting PHP Monitor. You can find the latest log in: `~/.config/phpmon/last_session.log`. Please attach it here! - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml new file mode 100644 index 0000000..1ec6684 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yaml @@ -0,0 +1,62 @@ +name: 🐞 Bug report +description: Something going wrong? File a bug report! +title: "[Bug] " +labels: [bug] +assignees: nicoverbruggen +body: +- type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. + options: + - label: I have searched the existing issues + required: true +- type: textarea + attributes: + label: Current Behavior + description: A concise description of what you're experiencing. + validations: + required: false +- type: textarea + attributes: + label: Expected Behavior + description: A concise description of what you expected to happen. + validations: + required: false +- type: textarea + attributes: + label: Steps To Reproduce + description: Steps to reproduce the behavior. + placeholder: | + 1. Open this menu... + 2. Click here... + 3. Scroll to... + 4. See error... + validations: + required: false +- type: textarea + attributes: + label: Environment + description: | + examples: + - **macOS**: (e.g. Ventura 13.3) + - **Valet**: (e.g. 4.0) + - **PHP Monitor**: (e.g. 5.8) + value: | + - macOS: + - Valet: + - PHP Monitor: + render: markdown + validations: + required: false +- type: textarea + attributes: + label: Do you have a log file (or a screenshot) or any additional information? + description: | + You can start extra verbose logging by running: `touch ~/.config/phpmon/verbose` and restarting PHP Monitor. + + You can find the latest log in: `~/.config/phpmon/last_session.log`. Please attach it here! + + (You can attach images or log files by clicking this area to highlight it and then dragging files in.) + validations: + required: false \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index c7bd578..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -name: Feature request -about: Suggest an enhancement. -title: '' -labels: enhancement -assignees: nicoverbruggen - ---- - -_Enhancement requests that are not immediately approved will be moved to a discussion instead._ - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml new file mode 100644 index 0000000..7d5b2fa --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -0,0 +1,31 @@ +name: 😎 Feature request +description: Do you have a great idea for an enhancement that could improve PHP Monitor? +title: "[Feature] <title>" +labels: [enhancement] +assignees: nicoverbruggen +body: +- type: checkboxes + attributes: + label: Is there an existing issue for this? + description: Please search to see if an issue already exists for the bug you encountered. Please make sure you've checked the discussions tab as well. Enhancement requests that are not immediately approved will be moved to a discussion instead, so you will find some there. + options: + - label: I have searched the existing issues and discussions + required: true +- type: textarea + attributes: + label: Is this feature request related to a problem? + description: "A clear and concise description of what the problem is. For example: 'I am always frustrated when...'" + validations: + required: true +- type: textarea + attributes: + label: Describe the solution you'd like to see + description: What would be a user-friendly way of resolving this particular issue? + validations: + required: true +- type: textarea + attributes: + label: Additional information or context + description: Add any other context or screenshots about the feature request here. + validations: + required: false \ No newline at end of file From 227131bd7e86401bc2da646aeea81950c884c3f9 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Mon, 17 Apr 2023 18:42:42 +0200 Subject: [PATCH 146/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20info=20about=20?= =?UTF-8?q?using=20PHP=20Manager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9f0053f..7d6d471 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,6 @@ All stable and supported PHP versions are also supported by PHP Monitor. However Backports that are installable via PHP Monitor's **PHP Manager** functionality are subject to availability via [this tap](https://github.com/shivammathur/homebrew-php). For maximum compatibility with older PHP versions, you may wish to keep using Valet 2 or 3. For more information, please see [SECURITY.md](./SECURITY.md) to find out which versions of PHP are supported with different versions of Valet. - </details> <details> @@ -113,7 +112,13 @@ For maximum compatibility with older PHP versions, you may wish to keep using Va Assuming you have installed the `php` formula, the latest stable version of PHP is installed. At the time of writing, this is PHP 8.2. -You can install other supported versions of PHP via PHP Monitor's **PHP Manager**. You can manually install or upgrade PHP versions too, but this is not recommended. +You can install other supported versions of PHP via PHP Monitor's **PHP Manager**. (You can manually install or upgrade PHP versions too, but this is not recommended.) + +Please keep in mind that installing or updating PHP versions, even when done via PHP Monitor's **PHP Manager**, may cause other required formula dependencies (required software needed to keep those PHP versions functional) to be upgraded. It might not be very transparent when this happens, but this is likely the cause if installing a PHP version takes longer than expected: usually other dependencies are also being installed. + +Additionally, upgrading one specific version of PHP may also cause other installed versions of PHP to *also* be updated in one go, if the dependencies for that one version also apply to the other (newer) version(s) of PHP. It's a bit tricky to manage PHP versions via Homebrew, and even PHP Monitor may encounter some difficulties. + +If you encounter a strange scenario or a malfunction, please open an issue on the issue tracker and get in touch. I'd like to keep enhancing this process to make it as foolproof as possible. > *Note*: Using PHP Monitor when managing PHP versions may cause [temporary alias conflicts](https://github.com/nicoverbruggen/phpmon/issues/54#issuecomment-979789724) while the core tap alias and the tap's alias refer to a different version of PHP, but this is generally speaking a minor inconvenience, since this normally only applies when a new PHP version releases. </details> From 4b1fc1a5ceeba282a5df59d3f01609e50a82d7b5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 22 Apr 2023 10:08:53 +0200 Subject: [PATCH 147/194] =?UTF-8?q?=F0=9F=91=8C=20Improve=20visibility=20o?= =?UTF-8?q?f=20Standalone=20Mode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 42 +++++--- phpmon/Domain/Menu/MainMenu.swift | 12 +++ phpmon/Domain/Menu/StatusMenu+Items.swift | 4 + phpmon/Domain/Menu/StatusMenu.swift | 4 + .../Domain/Preferences/PreferencesTabs.swift | 87 +++++++++++++++ .../{PrefsVC.swift => PreferencesVC.swift} | 101 +++--------------- phpmon/Localizable.strings | 7 ++ 7 files changed, 152 insertions(+), 105 deletions(-) create mode 100644 phpmon/Domain/Preferences/PreferencesTabs.swift rename phpmon/Domain/Preferences/{PrefsVC.swift => PreferencesVC.swift} (70%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 4bcc27f..fa0f7ee 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -9,7 +9,7 @@ /* Begin PBXBuildFile section */ 03E36FE728D9219000636F7F /* ActiveShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E36FE628D9219000636F7F /* ActiveShell.swift */; }; 03E36FE828D9219000636F7F /* ActiveShell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E36FE628D9219000636F7F /* ActiveShell.swift */; }; - 5420395926135DC100FB00FA /* PrefsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PrefsVC.swift */; }; + 5420395926135DC100FB00FA /* PreferencesVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PreferencesVC.swift */; }; 5420395F2613607600FB00FA /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395E2613607600FB00FA /* Preferences.swift */; }; 5489625828312FAD004F647A /* CreatedFromFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5489625728312FAD004F647A /* CreatedFromFile.swift */; }; 5489625928313231004F647A /* CreatedFromFile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5489625728312FAD004F647A /* CreatedFromFile.swift */; }; @@ -129,6 +129,10 @@ C42F26762805FEE200938AC7 /* nginx-secure-proxy.test in Resources */ = {isa = PBXBuildFile; fileRef = C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */; }; C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; C43603A1275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */; }; + C436B39D29F3C42500B6A64E /* PreferencesTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */; }; + C436B39E29F3C42500B6A64E /* PreferencesTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */; }; + C436B39F29F3C42500B6A64E /* PreferencesTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */; }; + C436B3A029F3C42500B6A64E /* PreferencesTabs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */; }; C43931C529C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; C43931C629C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; C43931C729C4BD610069165B /* PhpFormulaeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43931C429C4BD610069165B /* PhpFormulaeView.swift */; }; @@ -383,7 +387,7 @@ C471E86728F9BB650021E251 /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; C471E86828F9BB650021E251 /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; C471E86928F9BB650021E251 /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; - C471E86A28F9BB650021E251 /* PrefsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PrefsVC.swift */; }; + C471E86A28F9BB650021E251 /* PreferencesVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PreferencesVC.swift */; }; C471E86B28F9BB650021E251 /* PreferenceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = C450C8C528C919EC002A2B4B /* PreferenceName.swift */; }; C471E86C28F9BB650021E251 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395E2613607600FB00FA /* Preferences.swift */; }; C471E86D28F9BB650021E251 /* CustomPrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED4227834C5200AB15D8 /* CustomPrefs.swift */; }; @@ -472,7 +476,7 @@ C471E8CA28F9BB8F0021E251 /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; C471E8CB28F9BB8F0021E251 /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; C471E8CC28F9BB8F0021E251 /* PreferencesWindowController+Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */; }; - C471E8CD28F9BB8F0021E251 /* PrefsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PrefsVC.swift */; }; + C471E8CD28F9BB8F0021E251 /* PreferencesVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PreferencesVC.swift */; }; C471E8CE28F9BB8F0021E251 /* PreferenceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = C450C8C528C919EC002A2B4B /* PreferenceName.swift */; }; C471E8CF28F9BB8F0021E251 /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395E2613607600FB00FA /* Preferences.swift */; }; C471E8D028F9BB8F0021E251 /* CustomPrefs.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED4227834C5200AB15D8 /* CustomPrefs.swift */; }; @@ -521,7 +525,7 @@ C47DF1B2299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; C4811D2422D70A4700B5F6B3 /* App.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2322D70A4700B5F6B3 /* App.swift */; }; C4811D2A22D70F9A00B5F6B3 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; }; - C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PrefsVC.swift */; }; + C481F79726164A78004FBCFF /* PreferencesVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395826135DC100FB00FA /* PreferencesVC.swift */; }; C481F79A26164A7C004FBCFF /* Preferences.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5420395E2613607600FB00FA /* Preferences.swift */; }; C485706D28BF450900539B36 /* NSMenuItemExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40508B028ADAB44008FAC1F /* NSMenuItemExtension.swift */; }; C485706E28BF451C00539B36 /* OnboardingWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4FACE82288F1F9700FC478F /* OnboardingWindowController.swift */; }; @@ -824,7 +828,7 @@ /* Begin PBXFileReference section */ 03E36FE628D9219000636F7F /* ActiveShell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActiveShell.swift; sourceTree = "<group>"; }; - 5420395826135DC100FB00FA /* PrefsVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsVC.swift; sourceTree = "<group>"; }; + 5420395826135DC100FB00FA /* PreferencesVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesVC.swift; sourceTree = "<group>"; }; 5420395E2613607600FB00FA /* Preferences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preferences.swift; sourceTree = "<group>"; }; 5489625728312FAD004F647A /* CreatedFromFile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CreatedFromFile.swift; sourceTree = "<group>"; }; 54A18D3F282A566E000A0D81 /* nginx-secure-proxy-custom-tld.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-secure-proxy-custom-tld.test"; sourceTree = "<group>"; }; @@ -903,6 +907,7 @@ C42F26722805B4B400938AC7 /* ValetListable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetListable.swift; sourceTree = "<group>"; }; C42F26752805FEE200938AC7 /* nginx-secure-proxy.test */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "nginx-secure-proxy.test"; sourceTree = "<group>"; }; C436039F275E67610028EFC6 /* AppDelegate+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Notifications.swift"; sourceTree = "<group>"; }; + C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesTabs.swift; sourceTree = "<group>"; }; C43931C429C4BD610069165B /* PhpFormulaeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeView.swift; sourceTree = "<group>"; }; C43931C929C4C03F0069165B /* Brew.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Brew.swift; sourceTree = "<group>"; }; C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = "<group>"; }; @@ -1122,7 +1127,8 @@ children = ( C4998F092617633900B2526E /* PreferencesWindowController.swift */, C4FACE7F288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift */, - 5420395826135DC100FB00FA /* PrefsVC.swift */, + 5420395826135DC100FB00FA /* PreferencesVC.swift */, + C436B39C29F3C42500B6A64E /* PreferencesTabs.swift */, C450C8C528C919EC002A2B4B /* PreferenceName.swift */, 5420395E2613607600FB00FA /* Preferences.swift */, C4C3ED4227834C5200AB15D8 /* CustomPrefs.swift */, @@ -2275,7 +2281,7 @@ C4F8C0A422D4F12C002EFE61 /* DateExtension.swift in Sources */, C4AF9F7A2754499000D44ED0 /* Valet.swift in Sources */, C4EB53E728553117006F9937 /* ArrayExtension.swift in Sources */, - 5420395926135DC100FB00FA /* PrefsVC.swift in Sources */, + 5420395926135DC100FB00FA /* PreferencesVC.swift in Sources */, C4C8900328F0E28800CE5E97 /* FileSystemProtocol.swift in Sources */, C43603A0275E67610028EFC6 /* AppDelegate+Notifications.swift in Sources */, C45B9149295607F400F4EC78 /* Service.swift in Sources */, @@ -2320,6 +2326,7 @@ C4B79EBC29CA38DB00A483EE /* BrewCommand.swift in Sources */, C41CD0292628D8EE0065BBED /* GlobalKeybindPreference.swift in Sources */, C4B6091A2853AAD300C95265 /* SectionHeaderView.swift in Sources */, + C436B39D29F3C42500B6A64E /* PreferencesTabs.swift in Sources */, C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */, C4FACE80288F1C0D00FC478F /* PreferencesWindowController+Hotkey.swift in Sources */, C415D3B72770F294005EF286 /* Actions.swift in Sources */, @@ -2519,7 +2526,7 @@ C48DDD0F29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C4777E0E29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C4AFC4B029C4F32F00BF4E0D /* BrewFormula.swift in Sources */, - C471E86A28F9BB650021E251 /* PrefsVC.swift in Sources */, + C471E86A28F9BB650021E251 /* PreferencesVC.swift in Sources */, C471E86B28F9BB650021E251 /* PreferenceName.swift in Sources */, C471E86C28F9BB650021E251 /* Preferences.swift in Sources */, C4D3660D29113F20006BD146 /* System.swift in Sources */, @@ -2602,6 +2609,7 @@ C471E82928F9BB330021E251 /* Valet.swift in Sources */, C471E80728F9BAD40021E251 /* PhpConfigurationFile.swift in Sources */, C471E7D528F9BA8F0021E251 /* TestableConfigurations.swift in Sources */, + C436B39F29F3C42500B6A64E /* PreferencesTabs.swift in Sources */, C471E7E328F9BAC20021E251 /* Logger.swift in Sources */, C471E7FD28F9BACE0021E251 /* HomebrewService.swift in Sources */, C471E7E428F9BAC20021E251 /* Helpers.swift in Sources */, @@ -2626,6 +2634,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C436B3A029F3C42500B6A64E /* PreferencesTabs.swift in Sources */, C471E89028F9BB8F0021E251 /* AlertableError.swift in Sources */, C471E89128F9BB8F0021E251 /* Errors.swift in Sources */, C4B79EC929CA474200A483EE /* FakeCommand.swift in Sources */, @@ -2699,7 +2708,7 @@ C4D4CB3A29C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C471E8CB28F9BB8F0021E251 /* PreferencesWindowController.swift in Sources */, C471E8CC28F9BB8F0021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, - C471E8CD28F9BB8F0021E251 /* PrefsVC.swift in Sources */, + C471E8CD28F9BB8F0021E251 /* PreferencesVC.swift in Sources */, C471E8CE28F9BB8F0021E251 /* PreferenceName.swift in Sources */, C471E8CF28F9BB8F0021E251 /* Preferences.swift in Sources */, C4E2E84D28FC1E70003B070C /* DataExtension.swift in Sources */, @@ -2906,7 +2915,7 @@ C4AFC4AF29C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C4F780CD25D80B75000DBC97 /* Alert.swift in Sources */, C485706D28BF450900539B36 /* NSMenuItemExtension.swift in Sources */, - C481F79726164A78004FBCFF /* PrefsVC.swift in Sources */, + C481F79726164A78004FBCFF /* PreferencesVC.swift in Sources */, C495F5B028A42E080087F70A /* EnvironmentCheck.swift in Sources */, C41E871B2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */, C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */, @@ -3005,6 +3014,7 @@ C45E76152854A65300B4FE0C /* ServicesManager.swift in Sources */, C4D36602291132B7006BD146 /* ValetScanners.swift in Sources */, C40934AB298EEDA900D25014 /* CaskFileParserTest.swift in Sources */, + C436B39E29F3C42500B6A64E /* PreferencesTabs.swift in Sources */, C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */, C464ADAD275A7A3F003FCD53 /* DomainListWindowController.swift in Sources */, C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */, @@ -3309,7 +3319,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1210; + CURRENT_PROJECT_VERSION = 1215; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3339,7 +3349,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1210; + CURRENT_PROJECT_VERSION = 1215; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3568,7 +3578,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1210; + CURRENT_PROJECT_VERSION = 1215; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3679,7 +3689,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1210; + CURRENT_PROJECT_VERSION = 1215; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3790,7 +3800,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1210; + CURRENT_PROJECT_VERSION = 1215; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3963,7 +3973,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1210; + CURRENT_PROJECT_VERSION = 1215; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index d2c479c..f73e900 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -178,6 +178,18 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate NSApplication.shared.orderFrontStandardAboutPanel() } + @objc func openLiteModeInfo() { + Task { @MainActor in + BetterAlert().withInformation( + title: "lite_mode_explanation.title".localized, + subtitle: "lite_mode_explanation.subtitle".localized, + description: "lite_mode_explanation.description".localized + ) + .withPrimary(text: "generic.ok".localized) + .show() + } + } + @objc func openPrefs() { PreferencesWindowController.show() } diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 59e8dd3..270ad79 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -101,6 +101,10 @@ extension StatusMenu { } } + func addLiteModeMenuItem() { + addItem(NSMenuItem(title: "mi_lite_mode".localized, action: #selector(MainMenu.openLiteModeInfo))) + } + func addCoreMenuItems() { addItems([ NSMenuItem.separator(), diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 88d6623..6750565 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -65,6 +65,10 @@ class StatusMenu: NSMenu { addItem(NSMenuItem.separator()) + if !Valet.installed { + addLiteModeMenuItem() + } + addCoreMenuItems() } } diff --git a/phpmon/Domain/Preferences/PreferencesTabs.swift b/phpmon/Domain/Preferences/PreferencesTabs.swift new file mode 100644 index 0000000..746356d --- /dev/null +++ b/phpmon/Domain/Preferences/PreferencesTabs.swift @@ -0,0 +1,87 @@ +// +// PreferencesTabs.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 22/04/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import Cocoa + +class GeneralPreferencesVC: GenericPreferenceVC { + + // MARK: - Lifecycle + + public static func fromStoryboard() -> GenericPreferenceVC { + let vc = NSStoryboard(name: "Main", bundle: nil) + .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC + + _ = vc.addView(when: true, vc.getShowPhpDoctorSuggestionsPV()) + .addView(when: true, vc.getAutoRestartServicesPV()) + .addView(when: true, vc.getAutomaticComposerUpdatePV()) + .addView(when: true, vc.getShortcutPV()) + .addView(when: true, vc.getIntegrationsPV()) + .addView(when: true, vc.getAutomaticUpdateCheckPV()) + + if #available(macOS 13, *) { + vc.views.append(CheckboxPreferenceView.makeLoginItemView()) + } + + return vc + } +} + +class AppearancePreferencesVC: GenericPreferenceVC { + + public static func fromStoryboard() -> GenericPreferenceVC { + let vc = NSStoryboard(name: "Main", bundle: nil) + .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC + + _ = vc.addView(when: true, vc.getDynamicIconPV()) + .addView(when: true, vc.getIconOptionsPV()) + .addView(when: true, vc.getIconDensityPV()) + + return vc + } +} + +class MenuStructurePreferencesVC: GenericPreferenceVC { + + // swiftlint:disable line_length + public static func fromStoryboard() -> GenericPreferenceVC { + let vc = NSStoryboard(name: "Main", bundle: nil) + .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC + + _ = vc.addView(when: true, vc.displayFeature("prefs.display_global_version_switcher", .displayGlobalVersionSwitcher, true)) + .addView(when: Valet.installed, vc.displayFeature("prefs.display_services_manager", .displayServicesManager)) + .addView(when: Valet.installed, vc.displayFeature("prefs.display_valet_integration", .displayValetIntegration)) + .addView(when: true, vc.displayFeature("prefs.display_php_config_finder", .displayPhpConfigFinder)) + .addView(when: true, vc.displayFeature("prefs.display_composer_toolkit", .displayComposerToolkit)) + .addView(when: true, vc.displayFeature("prefs.display_limits_widget", .displayLimitsWidget)) + .addView(when: true, vc.displayFeature("prefs.display_extensions", .displayExtensions)) + .addView(when: true, vc.displayFeature("prefs.display_presets", .displayPresets)) + .addView(when: true, vc.displayFeature("prefs.display_misc", .displayMisc)) + + return vc + } +} + +class NotificationPreferencesVC: GenericPreferenceVC { + + public static func fromStoryboard() -> GenericPreferenceVC { + let vc = NSStoryboard(name: "Main", bundle: nil) + .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC + + _ = vc.addView(when: true, vc.getNotifyAboutVersionChangePV()) + .addView(when: true, vc.getNotifyAboutPresetsPV()) + .addView(when: Valet.installed, vc.getNotifyAboutSecureTogglePV()) + .addView(when: true, vc.getNotifyAboutGlobalComposerStatusPV()) + .addView(when: true, vc.getNotifyAboutServicesPV()) + .addView(when: Valet.installed, vc.getNotifyAboutPhpFpmChangePV()) + .addView(when: Valet.installed, vc.getWarnAboutNonStandardTldPV()) + + return vc + } + +} diff --git a/phpmon/Domain/Preferences/PrefsVC.swift b/phpmon/Domain/Preferences/PreferencesVC.swift similarity index 70% rename from phpmon/Domain/Preferences/PrefsVC.swift rename to phpmon/Domain/Preferences/PreferencesVC.swift index 8091174..8b594fd 100644 --- a/phpmon/Domain/Preferences/PrefsVC.swift +++ b/phpmon/Domain/Preferences/PreferencesVC.swift @@ -1,5 +1,5 @@ // -// PrefsVC.swift +// PreferencesVC.swift // PHP Monitor // // Created by Nico Verbruggen on 30/03/2021. @@ -28,6 +28,14 @@ class GenericPreferenceVC: NSViewController { Log.perf("deinit: \(String(describing: self)).\(#function)") } + func addView(when condition: Bool, _ view: NSView) -> GenericPreferenceVC { + if condition { + self.views.append(view) + } + + return self + } + func getDynamicIconPV() -> NSView { return CheckboxPreferenceView.make( sectionText: "prefs.dynamic_icon".localized, @@ -66,7 +74,7 @@ class GenericPreferenceVC: NSViewController { ) } - func getAutoRestartPV() -> NSView { + func getAutoRestartServicesPV() -> NSView { return CheckboxPreferenceView.make( sectionText: "prefs.services".localized, descriptionText: "prefs.auto_restart_services_desc".localized, @@ -188,7 +196,7 @@ class GenericPreferenceVC: NSViewController { ) } - func getWarnAboutNonStandardTLD() -> NSView { + func getWarnAboutNonStandardTldPV() -> NSView { return CheckboxPreferenceView.make( sectionText: "prefs.warnings".localized, descriptionText: "prefs.warn_about_non_standard_tld_desc".localized, @@ -198,7 +206,7 @@ class GenericPreferenceVC: NSViewController { ) } - func getDisplayMenuSectionPV( + func displayFeature( _ localizationKey: String, _ preference: PreferenceName, _ first: Bool = false @@ -225,88 +233,3 @@ class GenericPreferenceVC: NSViewController { } } } - -class GeneralPreferencesVC: GenericPreferenceVC { - - // MARK: - Lifecycle - - public static func fromStoryboard() -> GenericPreferenceVC { - let vc = NSStoryboard(name: "Main", bundle: nil) - .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC - - vc.views = [ - vc.getShowPhpDoctorSuggestionsPV(), - vc.getAutoRestartPV(), - vc.getAutomaticComposerUpdatePV(), - vc.getShortcutPV(), - vc.getIntegrationsPV(), - vc.getAutomaticUpdateCheckPV() - ] - - if #available(macOS 13, *) { - vc.views.append(CheckboxPreferenceView.makeLoginItemView()) - } - - return vc - } -} - -class NotificationPreferencesVC: GenericPreferenceVC { - - public static func fromStoryboard() -> GenericPreferenceVC { - let vc = NSStoryboard(name: "Main", bundle: nil) - .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC - - vc.views = [ - vc.getNotifyAboutVersionChangePV(), - vc.getNotifyAboutPresetsPV(), - vc.getNotifyAboutSecureTogglePV(), - vc.getNotifyAboutGlobalComposerStatusPV(), - vc.getNotifyAboutServicesPV(), - vc.getNotifyAboutPhpFpmChangePV(), - vc.getWarnAboutNonStandardTLD() - ] - - return vc - } - -} - -class MenuStructurePreferencesVC: GenericPreferenceVC { - - public static func fromStoryboard() -> GenericPreferenceVC { - let vc = NSStoryboard(name: "Main", bundle: nil) - .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC - - vc.views = [ - vc.getDisplayMenuSectionPV("prefs.display_global_version_switcher", .displayGlobalVersionSwitcher, true), - vc.getDisplayMenuSectionPV("prefs.display_services_manager", .displayServicesManager), - vc.getDisplayMenuSectionPV("prefs.display_valet_integration", .displayValetIntegration), - vc.getDisplayMenuSectionPV("prefs.display_php_config_finder", .displayPhpConfigFinder), - vc.getDisplayMenuSectionPV("prefs.display_composer_toolkit", .displayComposerToolkit), - vc.getDisplayMenuSectionPV("prefs.display_limits_widget", .displayLimitsWidget), - vc.getDisplayMenuSectionPV("prefs.display_extensions", .displayExtensions), - vc.getDisplayMenuSectionPV("prefs.display_presets", .displayPresets), - vc.getDisplayMenuSectionPV("prefs.display_misc", .displayMisc) - - ] - - return vc - } -} - -class AppearancePreferencesVC: GenericPreferenceVC { - - public static func fromStoryboard() -> GenericPreferenceVC { - let vc = NSStoryboard(name: "Main", bundle: nil) - .instantiateController(withIdentifier: "preferencesTemplateVC") as! GenericPreferenceVC - - vc.views = [ - vc.getDynamicIconPV(), - vc.getIconOptionsPV(), - vc.getIconDensityPV() - ] - - return vc - } -} diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index ecf27a4..22bae1c 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -71,6 +71,7 @@ "mi_preferences" = "Preferences..."; "mi_donate" = "Donate..."; "mi_check_for_updates" = "Check for Updates..."; +"mi_lite_mode" = "About Standalone Mode..."; "mi_quit" = "Quit PHP Monitor"; "mi_about" = "About PHP Monitor"; @@ -128,6 +129,12 @@ You may be asked for your password during the uninstallation process if file per "phpman.unlinked.desc" = "You likely still have some version of PHP that is currently installed, but currently no version of PHP is linked."; "phpman.unlinked.detail" = "Without any PHP version linked, the `php` binary is not accessible on your system and you cannot run any PHP scripts without explicitly being part of the PATH. You can have PHP Monitor automatically resolve this problem (choose Fix Automatically in the main menu), or fix it yourself by running `brew link php --force`."; +// LITE MODE + +"lite_mode_explanation.title" = "You are currently running PHP Monitor in Standalone Mode."; +"lite_mode_explanation.subtitle" = "PHP Monitor has additional features that are available for use if you happen to be a user of Laravel Valet. Right now, PHP Monitor could not detect an active installation of Valet on your system, so those features are unavailable."; +"lite_mode_explanation.description" = "For more information, I'd recommend checking out the README (accessible on GitHub) which will explain what steps you need to take to install Valet and make PHP Monitor run correctly with it installed. You will need to restart PHP Monitor after installing Laravel Valet before it will leave Standalone Mode."; + // GENERIC "generic.ok" = "OK"; From 2d0deed4fd1d47ca243df56748138a4c96f5544e Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 22 Apr 2023 10:13:16 +0200 Subject: [PATCH 148/194] =?UTF-8?q?=E2=9C=A8=20Add=20"Standalone=20Mode"?= =?UTF-8?q?=20menu=20item?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/StatusMenu+Items.swift | 14 +++++++++++--- phpmon/Domain/Menu/StatusMenu.swift | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index 270ad79..afa8114 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -102,16 +102,24 @@ extension StatusMenu { } func addLiteModeMenuItem() { - addItem(NSMenuItem(title: "mi_lite_mode".localized, action: #selector(MainMenu.openLiteModeInfo))) + addItems([ + NSMenuItem.separator(), + NSMenuItem(title: "mi_lite_mode".localized, action: #selector(MainMenu.openLiteModeInfo)) + ]) } - func addCoreMenuItems() { + func addPreferencesMenuItems() { addItems([ NSMenuItem.separator(), NSMenuItem(title: "mi_preferences".localized, action: #selector(MainMenu.openPrefs), keyEquivalent: ","), NSMenuItem(title: "mi_check_for_updates".localized, - action: #selector(MainMenu.checkForUpdates)), + action: #selector(MainMenu.checkForUpdates)) + ]) + } + + func addCoreMenuItems() { + addItems([ NSMenuItem.separator(), NSMenuItem(title: "mi_about".localized, action: #selector(MainMenu.openAbout)), diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 6750565..ae51fc7 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -65,6 +65,8 @@ class StatusMenu: NSMenu { addItem(NSMenuItem.separator()) + addPreferencesMenuItems() + if !Valet.installed { addLiteModeMenuItem() } From b7de54dfa7a0b45c2e67263468524a51ba7a4ff3 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sun, 23 Apr 2023 12:01:30 +0200 Subject: [PATCH 149/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Rework=20folder?= =?UTF-8?q?=20ownership=20operations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 30 +++-- .../Behaviors/BrewPermissionFixer.swift | 117 ++++++++++++++++++ .../Commands/InstallPhpVersionCommand.swift | 9 ++ .../Commands/RemovePhpVersionCommand.swift | 56 +-------- .../Commands/UpgradePhpVersionCommand.swift | 49 -------- .../{Commands => Fake}/FakeCommand.swift | 0 .../SwiftUI/PhpManager/PhpFormulaeView.swift | 3 + phpmon/Localizable.strings | 4 +- 8 files changed, 151 insertions(+), 117 deletions(-) create mode 100644 phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift delete mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift rename phpmon/Domain/Integrations/Homebrew/{Commands => Fake}/FakeCommand.swift (100%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index fa0f7ee..3f3f957 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -200,6 +200,10 @@ C45B91542956123A00F4EC78 /* FakeServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B91522956123A00F4EC78 /* FakeServicesManager.swift */; }; C45B91552956123A00F4EC78 /* FakeServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B91522956123A00F4EC78 /* FakeServicesManager.swift */; }; C45B91562956123A00F4EC78 /* FakeServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45B91522956123A00F4EC78 /* FakeServicesManager.swift */; }; + C45D654C29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45D654B29F52F74004C28F9 /* BrewPermissionFixer.swift */; }; + C45D654D29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45D654B29F52F74004C28F9 /* BrewPermissionFixer.swift */; }; + C45D654E29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45D654B29F52F74004C28F9 /* BrewPermissionFixer.swift */; }; + C45D654F29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45D654B29F52F74004C28F9 /* BrewPermissionFixer.swift */; }; C45E2A7529199248005C7CFD /* InternalSwitcherTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C471E7AF28F9B4940021E251 /* InternalSwitcherTest.swift */; }; C45E2A77291992DA005C7CFD /* FeatureTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E2A76291992DA005C7CFD /* FeatureTestCase.swift */; }; C45E76142854A65300B4FE0C /* ServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E76132854A65300B4FE0C /* ServicesManager.swift */; }; @@ -515,10 +519,6 @@ C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699EE28A2F2A30060FEB8 /* WarningManager.swift */; }; C47699F128A2F3150060FEB8 /* Warning.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47699F028A2F3150060FEB8 /* Warning.swift */; }; C476FF9822B0DD830098105B /* Alert.swift in Sources */ = {isa = PBXBuildFile; fileRef = C476FF9722B0DD830098105B /* Alert.swift */; }; - C4777E0C29D71AFB007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; - C4777E0D29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; - C4777E0E29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; - C4777E0F29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */; }; C47DF1AF299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; C47DF1B0299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; C47DF1B1299D5A3B0007055D /* LoginItemManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */; }; @@ -939,6 +939,7 @@ C45B9148295607F400F4EC78 /* Service.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Service.swift; sourceTree = "<group>"; }; C45B914D295608E300F4EC78 /* ValetServicesManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetServicesManager.swift; sourceTree = "<group>"; }; C45B91522956123A00F4EC78 /* FakeServicesManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeServicesManager.swift; sourceTree = "<group>"; }; + C45D654B29F52F74004C28F9 /* BrewPermissionFixer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewPermissionFixer.swift; sourceTree = "<group>"; }; C45E2A76291992DA005C7CFD /* FeatureTestCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureTestCase.swift; sourceTree = "<group>"; }; C45E76132854A65300B4FE0C /* ServicesManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesManager.swift; sourceTree = "<group>"; }; C463E37F284930EE00422731 /* PresetHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresetHelper.swift; sourceTree = "<group>"; }; @@ -965,7 +966,6 @@ C47699EE28A2F2A30060FEB8 /* WarningManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WarningManager.swift; sourceTree = "<group>"; }; C47699F028A2F3150060FEB8 /* Warning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Warning.swift; sourceTree = "<group>"; }; C476FF9722B0DD830098105B /* Alert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Alert.swift; sourceTree = "<group>"; }; - C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpgradePhpVersionCommand.swift; sourceTree = "<group>"; }; C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginItemManager.swift; sourceTree = "<group>"; }; C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; }; C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = "<group>"; }; @@ -1507,6 +1507,7 @@ C45B42C329C7C67400366A14 /* Fake */ = { isa = PBXGroup; children = ( + C4B79EC529CA474200A483EE /* FakeCommand.swift */, ); path = Fake; sourceTree = "<group>"; @@ -1522,6 +1523,14 @@ path = Services; sourceTree = "<group>"; }; + C45D654A29F52F5F004C28F9 /* Behaviors */ = { + isa = PBXGroup; + children = ( + C45D654B29F52F74004C28F9 /* BrewPermissionFixer.swift */, + ); + path = Behaviors; + sourceTree = "<group>"; + }; C464ADAA275A7A25003FCD53 /* DomainList */ = { isa = PBXGroup; children = ( @@ -1670,6 +1679,7 @@ C4AF9F6C275445D900D44ED0 /* Homebrew */ = { isa = PBXGroup; children = ( + C45D654A29F52F5F004C28F9 /* Behaviors */, C4B79EBA29CA38D100A483EE /* Commands */, C45B42C329C7C67400366A14 /* Fake */, C43931C929C4C03F0069165B /* Brew.swift */, @@ -1753,9 +1763,7 @@ isa = PBXGroup; children = ( C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */, - C4B79EC529CA474200A483EE /* FakeCommand.swift */, C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */, - C4777E0A29D71AF0007F0C67 /* UpgradePhpVersionCommand.swift */, C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */, ); path = Commands; @@ -2275,7 +2283,6 @@ C43931CA29C4C03F0069165B /* Brew.swift in Sources */, C42C49DB27C2806F0074ABAC /* MainMenu+FixMyValet.swift in Sources */, C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */, - C4777E0C29D71AFB007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C4998F0A2617633900B2526E /* PreferencesWindowController.swift in Sources */, C46FA9882822EFDC00D78807 /* PhpConfigurationFile.swift in Sources */, C4F8C0A422D4F12C002EFE61 /* DateExtension.swift in Sources */, @@ -2398,6 +2405,7 @@ C4B6091D2853AB9700C95265 /* ServicesView.swift in Sources */, C40508B128ADAB44008FAC1F /* NSMenuItemExtension.swift in Sources */, C4B97B7B275CF20A003F3378 /* App+GlobalHotkey.swift in Sources */, + C45D654C29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */, C4D3660B29113F20006BD146 /* System.swift in Sources */, C4D36601291132B7006BD146 /* ValetScanners.swift in Sources */, C4EED88927A48778006D7272 /* InterAppHandler.swift in Sources */, @@ -2524,13 +2532,13 @@ C471E86828F9BB650021E251 /* PreferencesWindowController.swift in Sources */, C471E86928F9BB650021E251 /* PreferencesWindowController+Hotkey.swift in Sources */, C48DDD0F29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, - C4777E0E29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C4AFC4B029C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C471E86A28F9BB650021E251 /* PreferencesVC.swift in Sources */, C471E86B28F9BB650021E251 /* PreferenceName.swift in Sources */, C471E86C28F9BB650021E251 /* Preferences.swift in Sources */, C4D3660D29113F20006BD146 /* System.swift in Sources */, C471E86D28F9BB650021E251 /* CustomPrefs.swift in Sources */, + C45D654E29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */, C4E2E84C28FC1E70003B070C /* DataExtension.swift in Sources */, C471E86E28F9BB650021E251 /* MenuBarIcons.swift in Sources */, C471E86F28F9BB650021E251 /* Stats.swift in Sources */, @@ -2734,6 +2742,7 @@ C471E8E428F9BB8F0021E251 /* NoWarningsView.swift in Sources */, C471E8E528F9BB8F0021E251 /* OnboardingView.swift in Sources */, C4B79EBF29CA38DB00A483EE /* BrewCommand.swift in Sources */, + C45D654F29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */, C471E8E628F9BB8F0021E251 /* VersionPopoverView.swift in Sources */, C471E8E728F9BB8F0021E251 /* NoDomainResultsView.swift in Sources */, C471E8E828F9BB8F0021E251 /* ServicesView.swift in Sources */, @@ -2761,7 +2770,6 @@ C471E80E28F9BAE80021E251 /* DateExtension.swift in Sources */, C490E3BA29BCA368006D2DE6 /* App+BrewWatch.swift in Sources */, C471E7D028F9BA630021E251 /* FileSystemProtocol.swift in Sources */, - C4777E0F29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C471E81228F9BAE80021E251 /* TimeIntervalExtension.swift in Sources */, C471E7DF28F9BAAB0021E251 /* RealCommand.swift in Sources */, C469E701294CF7B200A82AB2 /* FakeValetProxy.swift in Sources */, @@ -2845,6 +2853,7 @@ 54B48B60275F66AE006D90C5 /* Application.swift in Sources */, C4FE011228084FC200D1DE6D /* SelectionVC.swift in Sources */, C4D3661B291173EA006BD146 /* DictionaryExtension.swift in Sources */, + C45D654D29F52F74004C28F9 /* BrewPermissionFixer.swift in Sources */, C4F780C825D80B75000DBC97 /* DateExtension.swift in Sources */, C493084B279F331F009C240B /* AddSiteVC.swift in Sources */, C44A874928905BB000498BC4 /* ProgressVC.swift in Sources */, @@ -2992,7 +3001,6 @@ C4927F0C27B2DFC200C55AFD /* Errors.swift in Sources */, C485707628BF455100539B36 /* SectionHeaderView.swift in Sources */, C46EBC4828DB9644007ACC74 /* RealShell.swift in Sources */, - C4777E0D29D71AFD007F0C67 /* UpgradePhpVersionCommand.swift in Sources */, C48DDD0E29C75C9E00D032D9 /* BlockingOverlayView.swift in Sources */, C4E4404727C56F4700D225E1 /* ValetSite.swift in Sources */, C44CCD4A27AFF3BC00CE40E5 /* MainMenu+Async.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift new file mode 100644 index 0000000..9f94c6c --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift @@ -0,0 +1,117 @@ +// +// BrewPermissionFixer.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 23/04/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class BrewPermissionFixer { + + var broken: [DueOwnershipFormula] = [] + + /** + Takes ownership of the /BREW_PATH/Cellar/php/x.y.z/bin folder, for all PHP versions. + + This might not be required if the user has only used that version of PHP + with site isolation, so this method checks if it's required first. + + This is a required operation for *all* PHP versions when PHP Version Manager is running + operations, since any installation or upgrade may prompt the installation or upgrade + of other PHP versions, in which case the permissions need to set correctly. + */ + public func fixPermissions() async throws { + await determineBrokenFormulae() + + if broken.isEmpty { + return + } + + let appleScript = NSAppleScript( + source: "do shell script \"\(buildBrokenFormulaeScript())\" with administrator privileges" + ) + + let eventResult: NSAppleEventDescriptor? = appleScript? + .executeAndReturnError(nil) + + if eventResult == nil { + throw HomebrewPermissionError( + kind: .applescriptNilError + ) + } + + Log.info("Ownership was taken of the folder(s) at: " + broken + .map({ $0.path }) + .joined(separator: ", ")) + } + + /** + Determines which formulae's permissions are broken. + + To do so, PHP Monitor resolves which directory needs to be checked and verifies + whether the Homebrew binary directory for the given PHP version is owned by root. + */ + private func determineBrokenFormulae() async { + let formulae = PhpEnv.shared.cachedPhpInstallations.keys + + for formula in formulae { + let realFormula = formula == PhpEnv.brewPhpAlias + ? "php" + : "php@\(formula)" + + let binaryPath = "\(Paths.optPath)/\(realFormula)/bin" + + if isOwnedByRoot(path: binaryPath) { + let borked = DueOwnershipFormula( + formula: realFormula, + path: binaryPath + ) + + Log.warn("\(formula) is owned by root") + + broken.append(borked) + } + } + } + + /** + Generates the appropriate AppleScript script required to restore permissions. + This script also stops the services prior to taking ownership, which is requirement. + */ + private func buildBrokenFormulaeScript() -> String { + return broken + .map { b in + return """ + \(Paths.brew) services stop \(b.formula) \ + && chown -R \(Paths.whoami):admin \(b.path) + """ + } + .joined( + separator: " && " + ) + } + + /** + Checks if the directory at the path is owned by the `root` user, + by checking the FS owner account name attribute. + */ + private func isOwnedByRoot(path: String) -> Bool { + do { + let attributes = try FileManager.default.attributesOfItem(atPath: path) + if let owner = attributes[.ownerAccountName] as? String { + return owner == "root" + } + } catch { + return true + } + + return true + } + + struct DueOwnershipFormula { + let formula: String + let path: String + } +} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift index a1bfcd0..8b717ad 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift @@ -38,6 +38,14 @@ class InstallPhpVersionCommand: BrewCommand { \(Paths.brew) install \(formula) --force """ + #error("Must keep track of the active PHP version (if applicable)") + + do { + try await BrewPermissionFixer().fixPermissions() + } catch { + return + } + let (process, _) = try! await Shell.attach( command, didReceiveOutput: { text, _ in @@ -56,6 +64,7 @@ class InstallPhpVersionCommand: BrewCommand { onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) await PhpEnv.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() + #error("Must restore active PHP installation (if applicable)") onProgress(.create(value: 1, title: progressTitle, description: "The installation has succeeded.")) } else { throw BrewCommandError(error: "The command failed to run correctly.") diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift index 36ab697..de043cc 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift @@ -35,7 +35,7 @@ class RemovePhpVersionCommand: BrewCommand { """ do { - try await self.fixPermissions(for: formula) + try await BrewPermissionFixer().fixPermissions() } catch { return } @@ -59,58 +59,4 @@ class RemovePhpVersionCommand: BrewCommand { throw BrewCommandError(error: "The command failed to run correctly.") } } - - /** - Takes ownership of the /BREW_PATH/Cellar/php/x.y.z/bin folder (if required). - - This might not be required if the user has only used that version of PHP - with site isolation, so this method checks if it's required first. - */ - private func fixPermissions(for formula: String) async throws { - // Omit the prefix - let path = formula.replacingOccurrences(of: "shivammathur/php/", with: "") - - // Binary path needs to be checked for ownership - let binaryPath = "\(Paths.optPath)/\(path)/bin" - - // Check if it's even necessary to perform the fix - if !isOwnedByRoot(path: binaryPath) { - return - } - - Log.info("Need to take ownership of `\(binaryPath)`...") - - let script = """ - \(Paths.brew) services stop \(formula) \ - && chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(path) - """ - - let appleScript = NSAppleScript( - source: "do shell script \"\(script)\" with administrator privileges" - ) - - let eventResult: NSAppleEventDescriptor? = appleScript?.executeAndReturnError(nil) - - if eventResult == nil { - throw HomebrewPermissionError(kind: .applescriptNilError) - } - - Log.info("Ownership was taken of the folder at `\(binaryPath)`.") - } - - /** - Checks if a given path is owned by root. If so, ownership might need to be taken. - */ - private func isOwnedByRoot(path: String) -> Bool { - do { - let attributes = try FileManager.default.attributesOfItem(atPath: path) - if let owner = attributes[.ownerAccountName] as? String { - return owner == "root" - } - } catch { - return true - } - - return true - } } diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift deleted file mode 100644 index 171f9bd..0000000 --- a/phpmon/Domain/Integrations/Homebrew/Commands/UpgradePhpVersionCommand.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// InstallPhpVersionCommand.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 21/03/2023. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation - -public typealias BrewDependent = String - -class UpgradePhpVersionCommand: BrewCommand { - let formula: String - let version: String - - init(formula: String) { - self.version = formula - .replacingOccurrences(of: "php@", with: "") - .replacingOccurrences(of: "shivammathur/php/", with: "") - self.formula = formula - } - - func execute() async throws -> [BrewDependent] { - let command = """ - export HOMEBREW_NO_INSTALL_UPGRADE=true; \ - export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - \(Paths.brew) upgrade \(formula) -n - """ - - // Use this command to do a dry-run of the upgrade - // This will let us figure out the impact or failure modes - let (process, _) = try! await Shell.attach( - command, - didReceiveOutput: { text, _ in - if !text.isEmpty { - Log.perf(text) - } - }, - withTimeout: .minutes(5) - ) - - return [] - } - - func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { - // - } -} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/FakeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Fake/FakeCommand.swift similarity index 100% rename from phpmon/Domain/Integrations/Homebrew/Commands/FakeCommand.swift rename to phpmon/Domain/Integrations/Homebrew/Fake/FakeCommand.swift diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 12847a8..d20b7a7 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -148,11 +148,14 @@ struct PhpFormulaeView: View { Task { await self.install(formula) } } } + /* + // TODO: Remove this and add a "upgrade all" button instead? if formula.hasUpgrade { Button("phpman.buttons.update".localizedForSwiftUI) { Task { await self.install(formula) } } } + */ } .listRowBackground(index % 2 == 0 ? Color.gray.opacity(0) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 22bae1c..a765f31 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -94,10 +94,10 @@ "phpman.busy.title" = "Checking for updates!"; "phpman.busy.description.outdated" = "Checking if any PHP version is outdated..."; -"phpman.version.available_for_installation" = "This version can be installed"; +"phpman.version.available_for_installation" = "This version can be installed."; "phpman.buttons.uninstall" = "Uninstall"; "phpman.buttons.install" = "Install"; -"phpman.buttons.update" = "Update"; +"phpman.buttons.update_all" = "Update All"; "phpman.title" = "PHP Version Manager"; "phpman.description" = "**PHP Version Manager** lets you install different PHP versions via Homebrew."; From f9ee63ddf628339af332bfd186c4cc94e98e962a Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Tue, 25 Apr 2023 21:00:02 +0200 Subject: [PATCH 150/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Separate=20code?= =?UTF-8?q?=20into=20PhpGuard=20class?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 30 +++++--- .../Commands/InstallPhpVersionCommand.swift | 4 +- .../Integrations/Valet/Valet+Alerts.swift | 74 +++++++++++++++++++ phpmon/Domain/Integrations/Valet/Valet.swift | 34 +-------- phpmon/Domain/Menu/MainMenu+Startup.swift | 4 +- .../PHP/ActivePhpInstallation+Checks.swift | 38 ---------- phpmon/Domain/PHP/PhpGuard.swift | 70 ++++++++++++++++++ phpmon/Domain/Preferences/Stats.swift | 49 ------------ 8 files changed, 169 insertions(+), 134 deletions(-) create mode 100644 phpmon/Domain/Integrations/Valet/Valet+Alerts.swift delete mode 100644 phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift create mode 100644 phpmon/Domain/PHP/PhpGuard.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 3f3f957..067a933 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -74,8 +74,8 @@ C40C5C9D2846A40600E28255 /* Preset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C5C9B2846A40600E28255 /* Preset.swift */; }; C40C7F1E2772136000DDDCDC /* PhpEnv.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnv.swift */; }; C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnv.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 */; }; + C40C7F2827721FF600DDDCDC /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; + C40C7F2927721FF600DDDCDC /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; }; C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; }; C40F505628ECA64E004AD45B /* TestableConfigurations.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40F505428ECA64E004AD45B /* TestableConfigurations.swift */; }; @@ -362,7 +362,7 @@ C471E84A28F9BB650021E251 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C471E84B28F9BB650021E251 /* ServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E76132854A65300B4FE0C /* ServicesManager.swift */; }; C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; - C471E84D28F9BB650021E251 /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; }; + C471E84D28F9BB650021E251 /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C471E84E28F9BB650021E251 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; }; C471E84F28F9BB650021E251 /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */; }; C471E85028F9BB650021E251 /* MainMenu+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */; }; @@ -451,7 +451,7 @@ C471E8AD28F9BB8F0021E251 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C471E8AE28F9BB8F0021E251 /* ServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E76132854A65300B4FE0C /* ServicesManager.swift */; }; C471E8AF28F9BB8F0021E251 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; - C471E8B028F9BB8F0021E251 /* ActivePhpInstallation+Checks.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */; }; + C471E8B028F9BB8F0021E251 /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C471E8B128F9BB8F0021E251 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; }; C471E8B228F9BB8F0021E251 /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */; }; C471E8B328F9BB8F0021E251 /* MainMenu+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44CCD4827AFF3B700CE40E5 /* MainMenu+Async.swift */; }; @@ -583,6 +583,10 @@ C4A81CA528C67101008DD9D1 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */; }; C4ACA38F25C754C100060C66 /* PhpExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4ACA38E25C754C100060C66 /* PhpExtension.swift */; }; + C4ACE9E129F84EDD00110766 /* PhpGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4ACE9E029F84EDD00110766 /* PhpGuard.swift */; }; + C4ACE9E229F84EDD00110766 /* PhpGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4ACE9E029F84EDD00110766 /* PhpGuard.swift */; }; + C4ACE9E329F84EDD00110766 /* PhpGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4ACE9E029F84EDD00110766 /* PhpGuard.swift */; }; + C4ACE9E429F84EDD00110766 /* PhpGuard.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4ACE9E029F84EDD00110766 /* PhpGuard.swift */; }; C4AD38B228ECD9D300FA8D83 /* TestableFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AD38B128ECD9D300FA8D83 /* TestableFileSystem.swift */; }; C4AD38B328ECD9D300FA8D83 /* TestableFileSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AD38B128ECD9D300FA8D83 /* TestableFileSystem.swift */; }; C4AF9F72275445FF00D44ED0 /* valet-config.json in Resources */ = {isa = PBXBuildFile; fileRef = C4AF9F70275445FF00D44ED0 /* valet-config.json */; }; @@ -865,7 +869,7 @@ C40934AA298EEDA900D25014 /* CaskFileParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskFileParserTest.swift; sourceTree = "<group>"; }; C40C5C9B2846A40600E28255 /* Preset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preset.swift; sourceTree = "<group>"; }; C40C7F1D2772136000DDDCDC /* PhpEnv.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpEnv.swift; sourceTree = "<group>"; }; - C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ActivePhpInstallation+Checks.swift"; sourceTree = "<group>"; }; + C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Valet+Alerts.swift"; sourceTree = "<group>"; }; C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; }; C40F505428ECA64E004AD45B /* TestableConfigurations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableConfigurations.swift; sourceTree = "<group>"; }; C40FE736282ABA4F00A302C2 /* AppVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersion.swift; sourceTree = "<group>"; }; @@ -985,6 +989,7 @@ C4A81CA328C67101008DD9D1 /* PMTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMTableView.swift; sourceTree = "<group>"; }; C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainListKindCell.swift; sourceTree = "<group>"; }; C4ACA38E25C754C100060C66 /* PhpExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpExtension.swift; sourceTree = "<group>"; }; + C4ACE9E029F84EDD00110766 /* PhpGuard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpGuard.swift; sourceTree = "<group>"; }; C4AD38B128ECD9D300FA8D83 /* TestableFileSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableFileSystem.swift; sourceTree = "<group>"; }; C4AF9F70275445FF00D44ED0 /* valet-config.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "valet-config.json"; sourceTree = "<group>"; }; C4AF9F76275447F100D44ED0 /* ValetConfigurationTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValetConfigurationTest.swift; sourceTree = "<group>"; }; @@ -1656,6 +1661,7 @@ isa = PBXGroup; children = ( C4AF9F792754499000D44ED0 /* Valet.swift */, + C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */, C40175B629030F7A00763A68 /* Domains */, C4EF72C9294BC6E60088B538 /* Scanners */, C4C0E8D927F887BD002D32A9 /* Proxies */, @@ -1871,7 +1877,7 @@ C4D9ADBD27761084007277F4 /* PHP */ = { isa = PBXGroup; children = ( - C40C7F2727721FF600DDDCDC /* ActivePhpInstallation+Checks.swift */, + C4ACE9E029F84EDD00110766 /* PhpGuard.swift */, ); path = PHP; sourceTree = "<group>"; @@ -2312,7 +2318,7 @@ C4E49DED28F764A00026AC4E /* TestableCommand.swift in Sources */, C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */, C41E871A2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */, - C40C7F2827721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */, + C40C7F2827721FF600DDDCDC /* Valet+Alerts.swift in Sources */, C463E380284930EE00422731 /* PresetHelper.swift in Sources */, C41C02A927E61A65009F26CB /* FakeValetSite.swift in Sources */, C4E2E85C28FC282B003B070C /* TestableConfiguration.swift in Sources */, @@ -2343,6 +2349,7 @@ C4CDA893288F1A71007CE25F /* Keys.swift in Sources */, C43931C529C4BD610069165B /* PhpFormulaeView.swift in Sources */, C40175B82903108900763A68 /* ValetInteractor.swift in Sources */, + C4ACE9E129F84EDD00110766 /* PhpGuard.swift in Sources */, C4F361612836BFD9003598CC /* MainMenu+Actions.swift in Sources */, C46EBC4A28DB966A007ACC74 /* TestableShell.swift in Sources */, C44C198D276E3A1C0072762D /* TerminalProgressWindowController.swift in Sources */, @@ -2489,7 +2496,7 @@ C471E84B28F9BB650021E251 /* ServicesManager.swift in Sources */, C4D4CB3929C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */, - C471E84D28F9BB650021E251 /* ActivePhpInstallation+Checks.swift in Sources */, + C471E84D28F9BB650021E251 /* Valet+Alerts.swift in Sources */, C471E84E28F9BB650021E251 /* MainMenu.swift in Sources */, C40934A4298EEB2C00D25014 /* CaskFile.swift in Sources */, C471E84F28F9BB650021E251 /* MainMenu+Startup.swift in Sources */, @@ -2517,6 +2524,7 @@ C471E85F28F9BB650021E251 /* DomainListVC+Actions.swift in Sources */, C490E3B429BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, C4D5576629C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, + C4ACE9E329F84EDD00110766 /* PhpGuard.swift in Sources */, C471E86028F9BB650021E251 /* SelectionVC.swift in Sources */, C471E86128F9BB650021E251 /* AddSiteVC.swift in Sources */, C471E86228F9BB650021E251 /* AddProxyVC.swift in Sources */, @@ -2664,6 +2672,7 @@ C471E8A228F9BB8F0021E251 /* AppDelegate.swift in Sources */, C43931CD29C4C03F0069165B /* Brew.swift in Sources */, C451AFF92969E40F0078E617 /* HelpButton.swift in Sources */, + C4ACE9E429F84EDD00110766 /* PhpGuard.swift in Sources */, C471E8A328F9BB8F0021E251 /* AppDelegate+MenuOutlets.swift in Sources */, C4B79EB929CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C471E8A428F9BB8F0021E251 /* AppDelegate+Notifications.swift in Sources */, @@ -2680,7 +2689,7 @@ C471E8AD28F9BB8F0021E251 /* AppVersion.swift in Sources */, C471E8AE28F9BB8F0021E251 /* ServicesManager.swift in Sources */, C471E8AF28F9BB8F0021E251 /* EnvironmentManager.swift in Sources */, - C471E8B028F9BB8F0021E251 /* ActivePhpInstallation+Checks.swift in Sources */, + C471E8B028F9BB8F0021E251 /* Valet+Alerts.swift in Sources */, C471E8B128F9BB8F0021E251 /* MainMenu.swift in Sources */, C471E8B228F9BB8F0021E251 /* MainMenu+Startup.swift in Sources */, C471E8B328F9BB8F0021E251 /* MainMenu+Async.swift in Sources */, @@ -2869,7 +2878,7 @@ C4068CA827B07A1300544CD5 /* SelectPreferenceView.swift in Sources */, C4F780CE25D80B75000DBC97 /* LocalNotification.swift in Sources */, C41ADCE92970CCC700120423 /* FSNotifier.swift in Sources */, - C40C7F2927721FF600DDDCDC /* ActivePhpInstallation+Checks.swift in Sources */, + C40C7F2927721FF600DDDCDC /* Valet+Alerts.swift in Sources */, C485707A28BF457800539B36 /* WarningListView.swift in Sources */, C4C0E8E827F88B41002D32A9 /* DomainScanner.swift in Sources */, C449B4F027EE7FB800C47E8A /* DomainListTLSCell.swift in Sources */, @@ -2961,6 +2970,7 @@ C44CCD4127AFE2FC00CE40E5 /* AlertableError.swift in Sources */, C4CDA894288F1A71007CE25F /* Keys.swift in Sources */, C4D3660C29113F20006BD146 /* System.swift in Sources */, + C4ACE9E229F84EDD00110766 /* PhpGuard.swift in Sources */, C4D936CA27E3EB6100BD69FE /* PhpHelper.swift in Sources */, C4D36611291140BE006BD146 /* TestableFileSystemTest.swift in Sources */, C45B91542956123A00F4EC78 /* FakeServicesManager.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift index 8b717ad..734638e 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift @@ -38,7 +38,7 @@ class InstallPhpVersionCommand: BrewCommand { \(Paths.brew) install \(formula) --force """ - #error("Must keep track of the active PHP version (if applicable)") + // #error("Must keep track of the active PHP version (if applicable)") do { try await BrewPermissionFixer().fixPermissions() @@ -64,7 +64,7 @@ class InstallPhpVersionCommand: BrewCommand { onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) await PhpEnv.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() - #error("Must restore active PHP installation (if applicable)") + // #error("Must restore active PHP installation (if applicable)") onProgress(.create(value: 1, title: progressTitle, description: "The installation has succeeded.")) } else { throw BrewCommandError(error: "The command failed to run correctly.") diff --git a/phpmon/Domain/Integrations/Valet/Valet+Alerts.swift b/phpmon/Domain/Integrations/Valet/Valet+Alerts.swift new file mode 100644 index 0000000..3f722bc --- /dev/null +++ b/phpmon/Domain/Integrations/Valet/Valet+Alerts.swift @@ -0,0 +1,74 @@ +// +// ActivePhpInstallation.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 21/12/2021. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +extension Valet { + + /** + Notify the user about a non-default TLD being set. + */ + public func notifyAboutUnsupportedTLD() { + if Valet.shared.config.tld != "test" && Preferences.isEnabled(.warnAboutNonStandardTLD) { + Task { @MainActor in + BetterAlert().withInformation( + title: "alert.warnings.tld_issue.title".localized, + subtitle: "alert.warnings.tld_issue.subtitle".localized, + description: "alert.warnings.tld_issue.description".localized + ) + .withPrimary(text: "generic.ok".localized) + .withTertiary(text: "alert.do_not_tell_again".localized, action: { alert in + Preferences.update(.warnAboutNonStandardTLD, value: false) + alert.close(with: .alertThirdButtonReturn) + }) + .show() + } + } + } + + public func notifyAboutOutdatedValetVersion(_ version: VersionNumber) { + Task { @MainActor in + BetterAlert() + .withInformation( + title: "alert.min_valet_version.title".localized, + subtitle: "alert.min_valet_version.info".localized( + version.text, + Constants.MinimumRecommendedValetVersion + ) + ) + .withPrimary(text: "generic.ok".localized) + .show() + } + } + + /** + It is always possible that the system configuration for PHP-FPM has not been set up for Valet. + This can occur when a user manually installs a new PHP version, but does not run `valet install`. + In that case, we should alert the user! + + - Important: The underlying check is `checkPhpFpmStatus`, which can be run multiple times. + This method actively presents a modal if said checks fails, so don't call this method too many times. + */ + public func notifyAboutBrokenPhpFpm() async { + if await Valet.shared.phpFpmConfigurationValid() { + return + } + + Task { @MainActor in + BetterAlert() + .withInformation( + title: "alert.php_fpm_broken.title".localized, + subtitle: "alert.php_fpm_broken.info".localized, + description: "alert.php_fpm_broken.description".localized + ) + .withPrimary(text: "generic.ok".localized) + .show() + } + } + +} diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 2a287fd..095644c 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -79,27 +79,6 @@ class Valet { return self.shared.sites + self.shared.proxies } - /** - Notify the user about a non-default TLD being set. - */ - public static func notifyAboutUnsupportedTLD() { - if Valet.shared.config.tld != "test" && Preferences.isEnabled(.warnAboutNonStandardTLD) { - Task { @MainActor in - BetterAlert().withInformation( - title: "alert.warnings.tld_issue.title".localized, - subtitle: "alert.warnings.tld_issue.subtitle".localized, - description: "alert.warnings.tld_issue.description".localized - ) - .withPrimary(text: "generic.ok".localized) - .withTertiary(text: "alert.do_not_tell_again".localized, action: { alert in - Preferences.update(.warnAboutNonStandardTLD, value: false) - alert.close(with: .alertThirdButtonReturn) - }) - .show() - } - } - } - /** We don't want to load the initial config.json file as soon as the class is initialised. @@ -189,18 +168,7 @@ class Valet { if version.text.versionCompare(Constants.MinimumRecommendedValetVersion) == .orderedAscending { let recommended = Constants.MinimumRecommendedValetVersion Log.warn("Valet version \(version.text) is too old! (recommended: \(recommended))") - Task { @MainActor in - BetterAlert() - .withInformation( - title: "alert.min_valet_version.title".localized, - subtitle: "alert.min_valet_version.info".localized( - version.text, - Constants.MinimumRecommendedValetVersion - ) - ) - .withPrimary(text: "generic.ok".localized) - .show() - } + self.notifyAboutOutdatedValetVersion(version) } else { Log.info("Valet version \(version.text) is recent enough, OK " + "(recommended: \(Constants.MinimumRecommendedValetVersion))") diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 4bf5b76..e38c14c 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -101,7 +101,7 @@ extension MainMenu { await Valet.shared.notifyAboutBrokenPhpFpm() // A non-default TLD is not officially supported since Valet 3.2.x - Valet.notifyAboutUnsupportedTLD() + Valet.shared.notifyAboutUnsupportedTLD() } // Find out which services are active @@ -122,7 +122,7 @@ extension MainMenu { } // Check if the linked version has changed between launches of phpmon - Stats.evaluateLastLinkedPhpVersion() + PhpGuard().compareToLastGlobalVersion() // Check if an update was performed earlier AppUpdater.checkIfUpdateWasPerformed() diff --git a/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift b/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift deleted file mode 100644 index 4e14004..0000000 --- a/phpmon/Domain/PHP/ActivePhpInstallation+Checks.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// ActivePhpInstallation.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 21/12/2021. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation - -extension Valet { - - /** - It is always possible that the system configuration for PHP-FPM has not been set up for Valet. - This can occur when a user manually installs a new PHP version, but does not run `valet install`. - In that case, we should alert the user! - - - Important: The underlying check is `checkPhpFpmStatus`, which can be run multiple times. - This method actively presents a modal if said checks fails, so don't call this method too many times. - */ - public func notifyAboutBrokenPhpFpm() async { - if await Valet.shared.phpFpmConfigurationValid() { - return - } - - Task { @MainActor in - BetterAlert() - .withInformation( - title: "alert.php_fpm_broken.title".localized, - subtitle: "alert.php_fpm_broken.info".localized, - description: "alert.php_fpm_broken.description".localized - ) - .withPrimary(text: "generic.ok".localized) - .show() - } - } - -} diff --git a/phpmon/Domain/PHP/PhpGuard.swift b/phpmon/Domain/PHP/PhpGuard.swift new file mode 100644 index 0000000..c545a19 --- /dev/null +++ b/phpmon/Domain/PHP/PhpGuard.swift @@ -0,0 +1,70 @@ +// +// PhpGuard.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 25/04/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class PhpGuard { + + var currentVersion: String? + + init() { + guard let linked = PhpEnv.phpInstall else { + Log.warn("PHP Guard is unable to determine the current PHP version!") + return + } + + currentVersion = linked.version.short + Log.info("The currently linked version of PHP is: \(linked.version.short).") + } + + public func compareToLastGlobalVersion() { + guard let currentVersion else { + return + } + + let previousVersion = Stats.lastGlobalPhpVersion + + if previousVersion == "" { + Stats.persistCurrentGlobalPhpVersion(version: currentVersion) + return Log.warn("PHP Guard is saving the currently linked PHP version (first time only).") + } + Log.info("Previously, the globally linked PHP version was: \(previousVersion).") + + if previousVersion == currentVersion { + return Log.info("PHP Guard did not notice any changes in the linked PHP version.") + } + + // At this point, the version is *not* a match + Log.info("PHP Guard noticed a different PHP version. An alert will be displayed!") + + Task { @MainActor in + BetterAlert() + .withInformation( + title: "startup.version_mismatch.title".localized, + subtitle: "startup.version_mismatch.subtitle".localized( + currentVersion, + previousVersion + ), + description: "startup.version_mismatch.desc".localized() + ) + .withPrimary(text: "startup.version_mismatch.button_switch_back".localized( + previousVersion + ), action: { alert in + alert.close(with: .OK) + Task { MainMenu.shared.switchToAnyPhpVersion(previousVersion) } + }) + .withTertiary(text: "startup.version_mismatch.button_stay".localized( + currentVersion + ), action: { alert in + Stats.persistCurrentGlobalPhpVersion(version: currentVersion) + alert.close(with: .OK) + }) + .show() + } + } +} diff --git a/phpmon/Domain/Preferences/Stats.swift b/phpmon/Domain/Preferences/Stats.swift index dd800fb..1af2aed 100644 --- a/phpmon/Domain/Preferences/Stats.swift +++ b/phpmon/Domain/Preferences/Stats.swift @@ -140,53 +140,4 @@ class Stats { UserDefaults.standard.set(true, forKey: InternalStats.didSeeSponsorEncouragement.rawValue) } } - - public static func evaluateLastLinkedPhpVersion() { - guard let linked = PhpEnv.phpInstall else { - return Log.warn("PHP Guard is unable to determine the current PHP version!") - } - - let currentVersion = linked.version.short - let previousVersion = Stats.lastGlobalPhpVersion - - Log.info("The currently linked version of PHP is: \(currentVersion).") - - if previousVersion == "" { - Stats.persistCurrentGlobalPhpVersion(version: currentVersion) - return Log.warn("PHP Guard is saving the currently linked PHP version (first time only).") - } - Log.info("Previously, the globally linked PHP version was: \(previousVersion).") - - if previousVersion == currentVersion { - return Log.info("PHP Guard did not notice any changes in the linked PHP version.") - } - - // At this point, the version is *not* a match - Log.info("PHP Guard noticed a different PHP version. An alert will be displayed!") - - Task { @MainActor in - BetterAlert() - .withInformation( - title: "startup.version_mismatch.title".localized, - subtitle: "startup.version_mismatch.subtitle".localized( - currentVersion, - previousVersion - ), - description: "startup.version_mismatch.desc".localized() - ) - .withPrimary(text: "startup.version_mismatch.button_switch_back".localized( - previousVersion - ), action: { alert in - alert.close(with: .OK) - Task { MainMenu.shared.switchToAnyPhpVersion(previousVersion) } - }) - .withTertiary(text: "startup.version_mismatch.button_stay".localized( - currentVersion - ), action: { alert in - Stats.persistCurrentGlobalPhpVersion(version: currentVersion) - alert.close(with: .OK) - }) - .show() - } - } } From a21418a6081054fd00e19179fd1cd6e2acd2617c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 26 Apr 2023 19:49:22 +0200 Subject: [PATCH 151/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Keep=20track=20of?= =?UTF-8?q?=20and=20restore=20linked=20PHP=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/InstallPhpVersionCommand.swift | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift index 734638e..857bd1a 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift @@ -38,12 +38,14 @@ class InstallPhpVersionCommand: BrewCommand { \(Paths.brew) install \(formula) --force """ - // #error("Must keep track of the active PHP version (if applicable)") + // Keep track of the current PHP version prior to executing any operations + let phpGuard = PhpGuard() + // Try to fix permissions do { try await BrewPermissionFixer().fixPermissions() } catch { - return + throw BrewCommandError(error: "There was an issue fixing permissions.") } let (process, _) = try! await Shell.attach( @@ -61,10 +63,21 @@ class InstallPhpVersionCommand: BrewCommand { ) if process.terminationStatus <= 0 { + // Reload and restart PHP versions onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) + + // Check which version of PHP are now installed await PhpEnv.detectPhpVersions() + + // Keep track of the currently installed version await MainMenu.shared.refreshActiveInstallation() - // #error("Must restore active PHP installation (if applicable)") + + // If a PHP version was active prior to running the operations, attempt to restore it + if let version = phpGuard.currentVersion { + await MainMenu.shared.switchToAnyPhpVersion(version) + } + + // Let the UI know that the installation has been completed onProgress(.create(value: 1, title: progressTitle, description: "The installation has succeeded.")) } else { throw BrewCommandError(error: "The command failed to run correctly.") From 18496de1047abb74cab1e364eb4003247b329b6e Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Fri, 28 Apr 2023 14:22:05 +0200 Subject: [PATCH 152/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Change=20the=20wa?= =?UTF-8?q?y=20Homebrew=20operations=20run?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 +++ .../Integrations/Homebrew/BrewFormula.swift | 10 ++- .../Homebrew/Commands/BrewCommand.swift | 19 +++++- .../Homebrew/Commands/HomebrewOperation.swift | 67 +++++++++++++++++++ .../Commands/InstallPhpVersionCommand.swift | 24 +------ .../PhpManager/BlockingOverlayView.swift | 2 +- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 3 +- phpmon/Localizable.strings | 10 ++- 8 files changed, 115 insertions(+), 30 deletions(-) create mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 067a933..097869b 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -144,6 +144,10 @@ C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; }; C43A8A2025D9D1D700591B77 /* brew-formula.json in Resources */ = {isa = PBXBuildFile; fileRef = C43A8A1F25D9D1D700591B77 /* brew-formula.json */; }; C43A8A2425D9D20D00591B77 /* HomebrewPackageTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */; }; + C43BCD4429FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; + C43BCD4529FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; + C43BCD4629FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; + C43BCD4729FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; C43FDBE929A932B0003D85EC /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; C44067F527E2582B0045BD4E /* DomainListNameCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F427E2582B0045BD4E /* DomainListNameCell.swift */; }; C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F627E258410045BD4E /* DomainListPhpCell.swift */; }; @@ -917,6 +921,7 @@ C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = "<group>"; }; C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = "<group>"; }; C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackageTest.swift; sourceTree = "<group>"; }; + C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewOperation.swift; sourceTree = "<group>"; }; C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpConfigChecker.swift; sourceTree = "<group>"; }; C44067F427E2582B0045BD4E /* DomainListNameCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListNameCell.swift; sourceTree = "<group>"; }; C44067F627E258410045BD4E /* DomainListPhpCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListPhpCell.swift; sourceTree = "<group>"; }; @@ -1771,6 +1776,7 @@ C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */, C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */, C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */, + C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */, ); path = Commands; sourceTree = "<group>"; @@ -2442,6 +2448,7 @@ C40508AF28ADA23D008FAC1F /* NoDomainResultsView.swift in Sources */, C4B79ECB29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */, + C43BCD4429FBEF40001547BC /* HomebrewOperation.swift in Sources */, C4E2E84A28FC1E70003B070C /* DataExtension.swift in Sources */, C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */, C42337A3281F19F000459A48 /* Xdebug.swift in Sources */, @@ -2618,6 +2625,7 @@ C45B914B295607F400F4EC78 /* Service.swift in Sources */, C471E7D928F9BA8F0021E251 /* TestableShell.swift in Sources */, C471E81428F9BAE80021E251 /* NSWindowExtension.swift in Sources */, + C43BCD4629FBEF40001547BC /* HomebrewOperation.swift in Sources */, C471E7D328F9BA8F0021E251 /* ActiveShell.swift in Sources */, C4B79EC829CA474200A483EE /* FakeCommand.swift in Sources */, C471E7DE28F9BAA30021E251 /* CommandProtocol.swift in Sources */, @@ -2802,6 +2810,7 @@ C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, C471E82828F9BB310021E251 /* BrewDiagnostics.swift in Sources */, C471E81E28F9BB260021E251 /* BetterAlert.swift in Sources */, + C43BCD4729FBEF40001547BC /* HomebrewOperation.swift in Sources */, C44E985F29B23EBF0059F773 /* UpdateCheckTest.swift in Sources */, C471E7D228F9BA630021E251 /* ActiveFileSystem.swift in Sources */, C471E80028F9BAD10021E251 /* Xdebug.swift in Sources */, @@ -3033,6 +3042,7 @@ C4D36602291132B7006BD146 /* ValetScanners.swift in Sources */, C40934AB298EEDA900D25014 /* CaskFileParserTest.swift in Sources */, C436B39E29F3C42500B6A64E /* PreferencesTabs.swift in Sources */, + C43BCD4529FBEF40001547BC /* HomebrewOperation.swift in Sources */, C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */, C464ADAD275A7A3F003FCD53 /* DomainListWindowController.swift in Sources */, C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index 6d418ed..7ef5735 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -8,7 +8,7 @@ import Foundation -struct BrewFormula { +class BrewFormula { /// Name of the formula. let name: String @@ -30,4 +30,12 @@ struct BrewFormula { var hasUpgrade: Bool { return upgradeVersion != nil } + + public func getHomebrewFolder() -> String { + #error("This must return the path to the Homebrew folder") + } + + public func isHealthy() -> Bool { + #error("This must check if the PHP version works") + } } diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift index d4c7e3f..fc7ae42 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift @@ -13,7 +13,24 @@ protocol BrewCommand { } extension BrewCommand { - + internal func reportInstallationProgress(_ text: String) -> (Double, String)? { + if text.contains("Fetching") { + return (0.1, "phpman.steps.fetching".localized) + } + if text.contains("Downloading") { + return (0.25, "phpman.steps.downloading".localized) + } + if text.contains("Installing") { + return (0.60, "phpman.steps.installing".localized) + } + if text.contains("Pouring") { + return (0.80, "phpman.steps.pouring".localized) + } + if text.contains("Summary") { + return (0.90, "phpman.steps.summary".localized) + } + return nil + } } struct BrewCommandProgress { diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift new file mode 100644 index 0000000..fe016cc --- /dev/null +++ b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift @@ -0,0 +1,67 @@ +// +// HomebrewOperationManager.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 28/04/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class HomebrewOperation { + + let installing: [String] + let upgrading: [String] + + /** + You can pass in which PHP versions need to be upgraded and which ones need to be installed. + The process will be executed in two steps: first upgrades, then installations. + Upgrades come first because... well, otherwise installations may very well break. + Each version that is installed will need to be checked afterwards (if it is OK). + */ + public init( + upgrading: [String], + installing: [String] + ) { + self.installing = installing + self.upgrading = upgrading + } + + func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + try await self.upgradePackages() + try await self.installPackages() + } + + private func upgradePackages() async throws { + let command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=true; \ + export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + \(Paths.brew) upgrade \(self.upgrading.joined(separator: " ")) + """ + + print(command) + } + + private func installPackages() async throws { + let command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=true; \ + export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + \(Paths.brew) install \(self.upgrading.joined(separator: " ")) --force + """ + + print(command) + } + + private func determineHealth(formula: String) -> Bool { + #warning("Should return proper health") + return false + + // If the health comes back as negative, attempt to reinstall + let command = """ + export HOMEBREW_NO_INSTALL_UPGRADE=true; \ + export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + \(Paths.brew) reinstall \(formula) --force + """ + } + +} diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift index 857bd1a..a5df34c 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift @@ -20,7 +20,7 @@ class InstallPhpVersionCommand: BrewCommand { } func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { - let progressTitle = "Installing PHP \(version)..." + let progressTitle = "Running Homebrew operations..." onProgress(.create( value: 0.2, @@ -83,26 +83,4 @@ class InstallPhpVersionCommand: BrewCommand { throw BrewCommandError(error: "The command failed to run correctly.") } } - - private func reportInstallationProgress(_ text: String) -> (Double, String)? { - if text.contains("Fetching") { - return (0.1, "Fetching...") - } - if text.contains("Downloading") { - return (0.25, "Downloading package data...") - } - if text.contains("Already downloaded") || text.contains("Downloaded") { - return (0.50, "Downloaded!") - } - if text.contains("Installing") { - return (0.60, "Installing...") - } - if text.contains("Pouring") { - return (0.80, "Pouring...") - } - if text.contains("Summary") { - return (0.90, "The installation is done!") - } - return nil - } } diff --git a/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift b/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift index a816b28..27c6762 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/BlockingOverlayView.swift @@ -42,7 +42,7 @@ struct BlockingOverlayView<Content: View>: View { .font(.system(size: 11)) .foregroundColor(.primary) .padding(.top, -4) - } + }.padding(60) } }.background(Color.white) .disabled(isBlocking) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index d20b7a7..f95258f 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -149,10 +149,9 @@ struct PhpFormulaeView: View { } } /* - // TODO: Remove this and add a "upgrade all" button instead? if formula.hasUpgrade { Button("phpman.buttons.update".localizedForSwiftUI) { - Task { await self.install(formula) } + Task { await self.install(formula, upgrade: true) } } } */ diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index a765f31..53646cf 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -97,11 +97,11 @@ "phpman.version.available_for_installation" = "This version can be installed."; "phpman.buttons.uninstall" = "Uninstall"; "phpman.buttons.install" = "Install"; -"phpman.buttons.update_all" = "Update All"; +"phpman.buttons.update" = "Update"; "phpman.title" = "PHP Version Manager"; "phpman.description" = "**PHP Version Manager** lets you install different PHP versions via Homebrew."; -"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well. For more information, please consult the FAQ."; +"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well. If you haven't updated Homebrew in a bit, operations here may take a couple of minutes to complete as it is likely multiple dependencies and other (unrelated) packages will also be upgraded. (Partial upgrades aren't done to avoid breaking packages in general.)"; "phpman.refresh.button" = "Search for Updates"; "phpman.refresh.button.description" = "You can press the refresh button to check if any updates are available to installed PHP versions."; @@ -129,6 +129,12 @@ You may be asked for your password during the uninstallation process if file per "phpman.unlinked.desc" = "You likely still have some version of PHP that is currently installed, but currently no version of PHP is linked."; "phpman.unlinked.detail" = "Without any PHP version linked, the `php` binary is not accessible on your system and you cannot run any PHP scripts without explicitly being part of the PATH. You can have PHP Monitor automatically resolve this problem (choose Fix Automatically in the main menu), or fix it yourself by running `brew link php --force`."; +"phpman.steps.fetching" = "Fetching..."; +"phpman.steps.downloading" = "Downloading package data..."; +"phpman.steps.installing" = "Installing some package data..."; +"phpman.steps.pouring" = "Pouring... This can take a while..."; +"phpman.steps.summary" = "Some package has finished installing..."; + // LITE MODE "lite_mode_explanation.title" = "You are currently running PHP Monitor in Standalone Mode."; From 050c15489472a6a89f8b33738436c5d60f82ee87 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Fri, 28 Apr 2023 14:42:51 +0200 Subject: [PATCH 153/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Use=20`BrewFormul?= =?UTF-8?q?a`=20struct=20for=20operations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Domain/Integrations/Homebrew/BrewFormula.swift | 13 +++++++++---- .../Homebrew/Commands/HomebrewOperation.swift | 14 +++++++------- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 4 +++- phpmon/Localizable.strings | 2 +- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index 7ef5735..1ea7e32 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -8,7 +8,7 @@ import Foundation -class BrewFormula { +struct BrewFormula { /// Name of the formula. let name: String @@ -31,11 +31,16 @@ class BrewFormula { return upgradeVersion != nil } - public func getHomebrewFolder() -> String { - #error("This must return the path to the Homebrew folder") + var homebrewFolder: String { + let resolved = name + .replacingOccurrences(of: "shivammathur/php/", with: "") + .replacingOccurrences(of: "php@" + PhpEnv.brewPhpAlias, with: "php") + + return "\(Paths.optPath)/\(resolved)/bin" } public func isHealthy() -> Bool { - #error("This must check if the PHP version works") + return true + // #error("This must check if the PHP version works") } } diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift index fe016cc..3ae724c 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift @@ -10,8 +10,8 @@ import Foundation class HomebrewOperation { - let installing: [String] - let upgrading: [String] + let installing: [BrewFormula] + let upgrading: [BrewFormula] /** You can pass in which PHP versions need to be upgraded and which ones need to be installed. @@ -20,8 +20,8 @@ class HomebrewOperation { Each version that is installed will need to be checked afterwards (if it is OK). */ public init( - upgrading: [String], - installing: [String] + upgrading: [BrewFormula], + installing: [BrewFormula] ) { self.installing = installing self.upgrading = upgrading @@ -36,7 +36,7 @@ class HomebrewOperation { let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - \(Paths.brew) upgrade \(self.upgrading.joined(separator: " ")) + \(Paths.brew) upgrade \(self.upgrading.map { $0.name }.joined(separator: " ")) """ print(command) @@ -46,13 +46,13 @@ class HomebrewOperation { let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - \(Paths.brew) install \(self.upgrading.joined(separator: " ")) --force + \(Paths.brew) install \(self.upgrading.map { $0.name }.joined(separator: " ")) --force """ print(command) } - private func determineHealth(formula: String) -> Bool { + private func determineHealth(formula: BrewFormula) -> Bool { #warning("Should return proper health") return false diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index f95258f..91d1e5c 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -124,6 +124,7 @@ struct PhpFormulaeView: View { .padding(.horizontal, 5) VStack(alignment: .leading) { Text(formula.displayName).bold() + Text(formula.homebrewFolder) if formula.isInstalled && formula.hasUpgrade { Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") @@ -139,6 +140,8 @@ struct PhpFormulaeView: View { } } .frame(maxWidth: .infinity, alignment: .leading) + + /* if formula.isInstalled { Button("phpman.buttons.uninstall".localizedForSwiftUI, role: .destructive) { Task { await self.confirmUninstall(formula) } @@ -148,7 +151,6 @@ struct PhpFormulaeView: View { Task { await self.install(formula) } } } - /* if formula.hasUpgrade { Button("phpman.buttons.update".localizedForSwiftUI) { Task { await self.install(formula, upgrade: true) } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 53646cf..b7ef05d 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -101,7 +101,7 @@ "phpman.title" = "PHP Version Manager"; "phpman.description" = "**PHP Version Manager** lets you install different PHP versions via Homebrew."; -"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well. If you haven't updated Homebrew in a bit, operations here may take a couple of minutes to complete as it is likely multiple dependencies and other (unrelated) packages will also be upgraded. (Partial upgrades aren't done to avoid breaking packages in general.)"; +"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well. Installing or updating PHP versions may take some time, so please be patient."; "phpman.refresh.button" = "Search for Updates"; "phpman.refresh.button.description" = "You can press the refresh button to check if any updates are available to installed PHP versions."; From 24ef7eacfe8a5af4e44a040f274db19417a20faa Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sun, 30 Apr 2023 10:30:00 +0200 Subject: [PATCH 154/194] =?UTF-8?q?=F0=9F=8F=97=20Show=20banner=20to=20upd?= =?UTF-8?q?ate=20all=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 75 +++++++++++-------- 1 file changed, 44 insertions(+), 31 deletions(-) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 91d1e5c..fa60c13 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -84,34 +84,48 @@ struct PhpFormulaeView: View { } .padding(10) - Divider() + if self.hasUpdates { + Divider() + HStack(alignment: .center, spacing: 15) { + Text("One or more updates are available. (Please note that PHP Monitor will always install or update PHP versions in bulk, so you will always upgrade all installations at once.)") + .foregroundColor(.gray) + .font(.system(size: 11)) - HStack(alignment: .center, spacing: 15) { - Button { - Task { // Reload warnings - Task { @MainActor in - self.status.busy = true - self.status.title = "phpman.busy.title".localized - self.status.description = "phpman.busy.description.outdated".localized - } - await self.handler.refreshPhpVersions(loadOutdated: true) - Task { @MainActor in - self.status.busy = false - } - } - } label: { - Image(systemName: "arrow.clockwise") - .buttonStyle(.automatic) - .controlSize(.large) + Button("Update All", action: {}) + .focusable(false) + .disabled(self.status.busy) } - .focusable(false) - .disabled(self.status.busy) + .padding(10) + } else { + Divider() - Text("phpman.refresh.button.description".localizedForSwiftUI) - .foregroundColor(.gray) - .font(.system(size: 11)) + HStack(alignment: .center, spacing: 15) { + Button { + Task { // Reload warnings + Task { @MainActor in + self.status.busy = true + self.status.title = "phpman.busy.title".localized + self.status.description = "phpman.busy.description.outdated".localized + } + await self.handler.refreshPhpVersions(loadOutdated: true) + Task { @MainActor in + self.status.busy = false + } + } + } label: { + Image(systemName: "arrow.clockwise") + .buttonStyle(.automatic) + .controlSize(.large) + } + .focusable(false) + .disabled(self.status.busy) + + Text("phpman.refresh.button.description".localizedForSwiftUI) + .foregroundColor(.gray) + .font(.system(size: 11)) + } + .padding(10) } - .padding(10) BlockingOverlayView(busy: self.status.busy, title: self.status.title, text: self.status.description) { List(Array(formulae.phpVersions.enumerated()), id: \.1.name) { (index, formula) in @@ -141,7 +155,6 @@ struct PhpFormulaeView: View { } .frame(maxWidth: .infinity, alignment: .leading) - /* if formula.isInstalled { Button("phpman.buttons.uninstall".localizedForSwiftUI, role: .destructive) { Task { await self.confirmUninstall(formula) } @@ -151,12 +164,6 @@ struct PhpFormulaeView: View { Task { await self.install(formula) } } } - if formula.hasUpgrade { - Button("phpman.buttons.update".localizedForSwiftUI) { - Task { await self.install(formula, upgrade: true) } - } - } - */ } .listRowBackground(index % 2 == 0 ? Color.gray.opacity(0) @@ -283,6 +290,12 @@ struct PhpFormulaeView: View { onFirstButtonPressed: {} ) } + + var hasUpdates: Bool { + return self.formulae.phpVersions.contains { formula in + return formula.hasUpgrade + } + } } struct PhpFormulaeView_Previews: PreviewProvider { From 518fb16f23c59039c54caa19183aabc0ed4fd978 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Tue, 2 May 2023 20:17:12 +0200 Subject: [PATCH 155/194] =?UTF-8?q?=F0=9F=8F=97=20Cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 20 ++++ .../SwiftUI/PhpManager/BrewFormulaUI.swift | 30 ++++++ .../PhpManager/PhpFormulaeStatus.swift | 21 ++++ .../SwiftUI/PhpManager/PhpFormulaeView.swift | 97 +++++++------------ phpmon/Localizable.strings | 3 + 5 files changed, 111 insertions(+), 60 deletions(-) create mode 100644 phpmon/Domain/SwiftUI/PhpManager/BrewFormulaUI.swift create mode 100644 phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeStatus.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 097869b..c0f5ff2 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -78,6 +78,14 @@ C40C7F2927721FF600DDDCDC /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; }; C40C7F3127722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; }; + C40D725A2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */; }; + C40D725B2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */; }; + C40D725C2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */; }; + C40D725D2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */; }; + C40D725F2A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; + C40D72602A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; + C40D72612A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; + C40D72622A018AE30054A067 /* BrewFormulaUI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */; }; C40F505628ECA64E004AD45B /* TestableConfigurations.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40F505428ECA64E004AD45B /* TestableConfigurations.swift */; }; C40FE737282ABA4F00A302C2 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C40FE738282ABA4F00A302C2 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; @@ -875,6 +883,8 @@ C40C7F1D2772136000DDDCDC /* PhpEnv.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpEnv.swift; sourceTree = "<group>"; }; C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Valet+Alerts.swift"; sourceTree = "<group>"; }; C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; }; + C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeStatus.swift; sourceTree = "<group>"; }; + C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewFormulaUI.swift; sourceTree = "<group>"; }; C40F505428ECA64E004AD45B /* TestableConfigurations.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestableConfigurations.swift; sourceTree = "<group>"; }; C40FE736282ABA4F00A302C2 /* AppVersion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersion.swift; sourceTree = "<group>"; }; C40FE739282ABB2E00A302C2 /* AppVersionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppVersionTest.swift; sourceTree = "<group>"; }; @@ -1403,6 +1413,8 @@ C4D5576329C77CC5001A44CD /* PhpVersionManagerWC.swift */, C43931C429C4BD610069165B /* PhpFormulaeView.swift */, C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, + C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */, + C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */, ); path = PhpManager; sourceTree = "<group>"; @@ -2430,6 +2442,7 @@ C4D36615291160A1006BD146 /* WIP.swift in Sources */, C485707028BF452300539B36 /* WarningsWindowController.swift in Sources */, C4CE3BBA27B31F670086CA49 /* ComposerWindow.swift in Sources */, + C40D725A2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */, C4D9ADC8277611A0007277F4 /* InternalSwitcher.swift in Sources */, C4FACE83288F1F9700FC478F /* OnboardingWindowController.swift in Sources */, C4080FFA27BD956700BF2C6B /* BetterAlertVC.swift in Sources */, @@ -2447,6 +2460,7 @@ C4C3ED412783497000AB15D8 /* MainMenu+Startup.swift in Sources */, C40508AF28ADA23D008FAC1F /* NoDomainResultsView.swift in Sources */, C4B79ECB29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, + C40D725F2A018AE30054A067 /* BrewFormulaUI.swift in Sources */, C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */, C43BCD4429FBEF40001547BC /* HomebrewOperation.swift in Sources */, C4E2E84A28FC1E70003B070C /* DataExtension.swift in Sources */, @@ -2609,6 +2623,7 @@ C471E82628F9BB2E0021E251 /* ComposerJson.swift in Sources */, C471E82428F9BB2E0021E251 /* PhpFrameworks.swift in Sources */, C471E7E828F9BAC20021E251 /* Actions.swift in Sources */, + C40D72612A018AE30054A067 /* BrewFormulaUI.swift in Sources */, C471E82528F9BB2E0021E251 /* ComposerWindow.swift in Sources */, C471E80828F9BAD40021E251 /* PhpExtension.swift in Sources */, C471E7F928F9BACB0021E251 /* PhpSwitcher.swift in Sources */, @@ -2646,6 +2661,7 @@ C471E7E528F9BAC20021E251 /* Events.swift in Sources */, C471E7D628F9BA8F0021E251 /* RealFileSystem.swift in Sources */, C471E81728F9BAE80021E251 /* NSMenuExtension.swift in Sources */, + C40D725C2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */, C471E81328F9BAE80021E251 /* XibLoadable.swift in Sources */, C4D3661C291173EA006BD146 /* DictionaryExtension.swift in Sources */, C4B79ECD29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, @@ -2667,6 +2683,7 @@ C471E89428F9BB8F0021E251 /* LocalNotification.swift in Sources */, C40934A5298EEB2C00D25014 /* CaskFile.swift in Sources */, C471E89528F9BB8F0021E251 /* MenuBarImageGenerator.swift in Sources */, + C40D725D2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */, C471E89628F9BB8F0021E251 /* PMWindowController.swift in Sources */, C471E89728F9BB8F0021E251 /* VersionExtractor.swift in Sources */, C47DF1B2299D5A3B0007055D /* LoginItemManager.swift in Sources */, @@ -2751,6 +2768,7 @@ C471E8DE28F9BB8F0021E251 /* App+ConfigWatch.swift in Sources */, C471E8DF28F9BB8F0021E251 /* PhpConfigWatcher.swift in Sources */, C4CB250529B28BB800CA4492 /* MainMenuTest.swift in Sources */, + C40D72622A018AE30054A067 /* BrewFormulaUI.swift in Sources */, C4B79ECE29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C471E8E028F9BB8F0021E251 /* Preset.swift in Sources */, C471E8E128F9BB8F0021E251 /* PresetHelper.swift in Sources */, @@ -2926,7 +2944,9 @@ C4EED88A27A48778006D7272 /* InterAppHandler.swift in Sources */, C4159AF728E4D40400545349 /* RealShellTest.swift in Sources */, C450C8C728C919EC002A2B4B /* PreferenceName.swift in Sources */, + C40D725B2A018ACC0054A067 /* PhpFormulaeStatus.swift in Sources */, C48D6C75279CD3E400F26D7E /* PhpVersionNumberTest.swift in Sources */, + C40D72602A018AE30054A067 /* BrewFormulaUI.swift in Sources */, C485707B28BF458900539B36 /* VersionPopoverView.swift in Sources */, C4E2E85D28FC282B003B070C /* TestableConfiguration.swift in Sources */, C485706E28BF451C00539B36 /* OnboardingWindowController.swift in Sources */, diff --git a/phpmon/Domain/SwiftUI/PhpManager/BrewFormulaUI.swift b/phpmon/Domain/SwiftUI/PhpManager/BrewFormulaUI.swift new file mode 100644 index 0000000..907ad86 --- /dev/null +++ b/phpmon/Domain/SwiftUI/PhpManager/BrewFormulaUI.swift @@ -0,0 +1,30 @@ +// +// BrewFormulaUI.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 02/05/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation +import SwiftUI + +extension BrewFormula { + var icon: String { + if self.hasUpgrade { + return "arrow.up.square.fill" + } else if self.isInstalled { + return "checkmark.square.fill" + } + return "square.dashed" + } + + var iconColor: Color { + if self.hasUpgrade { + return Color("StatusColorBlue") + } else if self.isInstalled { + return Color("StatusColorGreen") + } + return Color.gray.opacity(0.3) + } +} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeStatus.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeStatus.swift new file mode 100644 index 0000000..b02f2b2 --- /dev/null +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeStatus.swift @@ -0,0 +1,21 @@ +// +// PhpFormulaeStatus.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 02/05/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class PhpFormulaeStatus: ObservableObject { + @Published var busy: Bool + @Published var title: String + @Published var description: String + + init(busy: Bool, title: String, description: String) { + self.busy = busy + self.title = title + self.description = description + } +} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index fa60c13..c1f2d75 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -9,18 +9,7 @@ import Foundation import SwiftUI -class PhpFormulaeStatus: ObservableObject { - @Published var busy: Bool - @Published var title: String - @Published var description: String - - init(busy: Bool, title: String, description: String) { - self.busy = busy - self.title = title - self.description = description - } -} - +// swiftlint:disable type_body_length struct PhpFormulaeView: View { @ObservedObject var formulae: BrewFormulaeObservable @ObservedObject var status: PhpFormulaeStatus @@ -40,26 +29,42 @@ struct PhpFormulaeView: View { ) Task { [self] in - guard let version = Brew.shared.version else { - return + await self.initialLoad() + } + } + + private func initialLoad() async { + guard let version = Brew.shared.version else { + return + } + + await delay(seconds: 1) + + if version.major != 4 { + Task { @MainActor in + self.presentErrorAlert( + title: "phpman.warnings.unsupported.title".localized, + description: "phpman.warnings.unsupported.desc".localized(version.text), + button: "generic.ok".localized, + style: .warning + ) } + } - await delay(seconds: 1) + await PhpEnv.detectPhpVersions() + await self.handler.refreshPhpVersions(loadOutdated: false) + await self.handler.refreshPhpVersions(loadOutdated: true) + self.status.busy = false + } - if version.major != 4 { - Task { @MainActor in - self.presentErrorAlert( - title: "phpman.warnings.unsupported.title".localized, - description: "phpman.warnings.unsupported.desc".localized(version.text), - button: "generic.ok".localized, - style: .warning - ) - } - } - - await PhpEnv.detectPhpVersions() - await self.handler.refreshPhpVersions(loadOutdated: false) - await self.handler.refreshPhpVersions(loadOutdated: true) + private func reload() async { + Task { @MainActor in + self.status.busy = true + self.status.title = "phpman.busy.title".localized + self.status.description = "phpman.busy.description.outdated".localized + } + await self.handler.refreshPhpVersions(loadOutdated: true) + Task { @MainActor in self.status.busy = false } } @@ -87,11 +92,11 @@ struct PhpFormulaeView: View { if self.hasUpdates { Divider() HStack(alignment: .center, spacing: 15) { - Text("One or more updates are available. (Please note that PHP Monitor will always install or update PHP versions in bulk, so you will always upgrade all installations at once.)") + Text("phpman.has_updates.description".localizedForSwiftUI) .foregroundColor(.gray) .font(.system(size: 11)) - Button("Update All", action: {}) + Button("phpman.has_updates.button".localizedForSwiftUI, action: {}) .focusable(false) .disabled(self.status.busy) } @@ -101,17 +106,7 @@ struct PhpFormulaeView: View { HStack(alignment: .center, spacing: 15) { Button { - Task { // Reload warnings - Task { @MainActor in - self.status.busy = true - self.status.title = "phpman.busy.title".localized - self.status.description = "phpman.busy.description.outdated".localized - } - await self.handler.refreshPhpVersions(loadOutdated: true) - Task { @MainActor in - self.status.busy = false - } - } + Task { await self.reload() } } label: { Image(systemName: "arrow.clockwise") .buttonStyle(.automatic) @@ -356,22 +351,4 @@ class FakeBrewFormulaeHandler: HandlesBrewFormulae { } } -extension BrewFormula { - var icon: String { - if self.hasUpgrade { - return "arrow.up.square.fill" - } else if self.isInstalled { - return "checkmark.square.fill" - } - return "square.dashed" - } - var iconColor: Color { - if self.hasUpgrade { - return Color("StatusColorBlue") - } else if self.isInstalled { - return Color("StatusColorGreen") - } - return Color.gray.opacity(0.3) - } -} diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index b7ef05d..6896b70 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -105,6 +105,9 @@ "phpman.refresh.button" = "Search for Updates"; "phpman.refresh.button.description" = "You can press the refresh button to check if any updates are available to installed PHP versions."; +"phpman.has_updates.description" = "One or more updates are available. (Please note that PHP Monitor will always install or update PHP versions in bulk, so you will always upgrade all installations at once.)"; +"phpman.has_updates.button" = "Update All"; + "phpman.warnings.unsupported.title" = "Your version of Homebrew may cause issues"; "phpman.warnings.unsupported.desc" = "No functionality is disabled, but some commands may not work as expected. You are currently running Homebrew %@. From bf610b6c4ef9100f7aaf3913a017bd4ce415bfef Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 6 May 2023 12:52:10 +0200 Subject: [PATCH 156/194] =?UTF-8?q?=F0=9F=8F=97=20PHP=20installation=20hea?= =?UTF-8?q?lth=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/Command/CommandProtocol.swift | 21 +++++++++++++++- phpmon/Common/Command/RealCommand.swift | 25 ++++++++++++++++++- phpmon/Common/PHP/PhpInstallation.swift | 25 ++++++++++++++++--- phpmon/Common/Testables/TestableCommand.swift | 4 +++ phpmon/Domain/Menu/MainMenu+Startup.swift | 6 ++--- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 4 +-- phpmon/Localizable.strings | 2 +- 7 files changed, 74 insertions(+), 13 deletions(-) diff --git a/phpmon/Common/Command/CommandProtocol.swift b/phpmon/Common/Command/CommandProtocol.swift index 9784ae8..0fe4a79 100644 --- a/phpmon/Common/Command/CommandProtocol.swift +++ b/phpmon/Common/Command/CommandProtocol.swift @@ -16,7 +16,26 @@ protocol CommandProtocol { - Parameter path: The path of the command or program to invoke. - Parameter arguments: A list of arguments that are passed on. - Parameter trimNewlines: Removes empty new line output. + - Parameter withStandardError: Outputs standard error output to the same string output as well. */ - func execute(path: String, arguments: [String], trimNewlines: Bool) -> String + func execute( + path: String, + arguments: [String], + trimNewlines: Bool, + withStandardError: Bool + ) -> String + + /** + Immediately executes a command. + + - Parameter path: The path of the command or program to invoke. + - Parameter arguments: A list of arguments that are passed on. + - Parameter trimNewlines: Removes empty new line output. + */ + func execute( + path: String, + arguments: [String], + trimNewlines: Bool + ) -> String } diff --git a/phpmon/Common/Command/RealCommand.swift b/phpmon/Common/Command/RealCommand.swift index 36cde64..11be535 100644 --- a/phpmon/Common/Command/RealCommand.swift +++ b/phpmon/Common/Command/RealCommand.swift @@ -9,13 +9,23 @@ import Cocoa public class RealCommand: CommandProtocol { - public func execute(path: String, arguments: [String], trimNewlines: Bool = false) -> String { + public func execute( + path: String, + arguments: [String], + trimNewlines: Bool, + withStandardError: Bool + ) -> String { let task = Process() task.launchPath = path task.arguments = arguments let pipe = Pipe() task.standardOutput = pipe + + if withStandardError { + task.standardError = pipe + } + task.launch() let data = pipe.fileHandleForReading.readDataToEndOfFile() @@ -30,4 +40,17 @@ public class RealCommand: CommandProtocol { return output } + public func execute( + path: String, + arguments: [String], + trimNewlines: Bool = false + ) -> String { + self.execute( + path: path, + arguments: arguments, + trimNewlines: trimNewlines, + withStandardError: false + ) + } + } diff --git a/phpmon/Common/PHP/PhpInstallation.swift b/phpmon/Common/PHP/PhpInstallation.swift index 4b19881..0eb0126 100644 --- a/phpmon/Common/PHP/PhpInstallation.swift +++ b/phpmon/Common/PHP/PhpInstallation.swift @@ -12,13 +12,17 @@ class PhpInstallation { var versionNumber: VersionNumber + var isHealthy: Bool = true + /** - In order to determine details about a PHP installation, we’ll simply run `php-config --version` - in the relevant directory. + In order to determine details about a PHP installation, + we’ll simply run `php-config --version` in the relevant directory. */ init(_ version: String) { - let phpConfigExecutablePath = "\(Paths.optPath)/php@\(version)/bin/php-config" + + let phpExecutablePath = "\(Paths.optPath)/php@\(version)/bin/php" + self.versionNumber = VersionNumber.make(from: version)! if FileSystem.fileExists(phpConfigExecutablePath) { @@ -32,6 +36,19 @@ class PhpInstallation { // If so, the app SHOULD crash, so that the users report what's up. self.versionNumber = try! VersionNumber.parse(longVersionString) } - } + if FileSystem.fileExists(phpExecutablePath) { + let testCommand = Command.execute( + path: phpExecutablePath, + arguments: ["-v"], + trimNewlines: false, + withStandardError: true + ).trimmingCharacters(in: .whitespacesAndNewlines) + + if testCommand.contains("Library not loaded") { + self.isHealthy = false + Log.err("The PHP installation of \(self.versionNumber.short) is not healthy!") + } + } + } } diff --git a/phpmon/Common/Testables/TestableCommand.swift b/phpmon/Common/Testables/TestableCommand.swift index b7e8503..a3679db 100644 --- a/phpmon/Common/Testables/TestableCommand.swift +++ b/phpmon/Common/Testables/TestableCommand.swift @@ -19,6 +19,10 @@ class TestableCommand: CommandProtocol { self.execute(path: path, arguments: arguments, trimNewlines: false) } + public func execute(path: String, arguments: [String], trimNewlines: Bool, withStandardError: Bool) -> String { + self.execute(path: path, arguments: arguments, trimNewlines: trimNewlines) + } + public func execute(path: String, arguments: [String], trimNewlines: Bool) -> String { let concatenatedCommand = "\(path) \(arguments.joined(separator: " "))" assert(commands.keys.contains(concatenatedCommand), "Command `\(concatenatedCommand)` not found") diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index e38c14c..7515e62 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -51,10 +51,10 @@ extension MainMenu { // Attempt to find out more info about Valet if Valet.shared.version != nil { Log.info("PHP Monitor has extracted the version number of Valet: \(Valet.shared.version!.text)") - } - // Validate the version (this will enforce which versions of PHP are supported) - Valet.shared.validateVersion() + // Validate the version (this will enforce which versions of PHP are supported) + Valet.shared.validateVersion() + } // Validate the Homebrew version (determines install/upgrade functionality) await Brew.shared.determineVersion() diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index c1f2d75..1cd18e2 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -133,7 +133,7 @@ struct PhpFormulaeView: View { .padding(.horizontal, 5) VStack(alignment: .leading) { Text(formula.displayName).bold() - Text(formula.homebrewFolder) + // Text(formula.homebrewFolder) if formula.isInstalled && formula.hasUpgrade { Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") @@ -350,5 +350,3 @@ class FakeBrewFormulaeHandler: HandlesBrewFormulae { ] } } - - diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 6896b70..d7fbb63 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -106,7 +106,7 @@ "phpman.refresh.button.description" = "You can press the refresh button to check if any updates are available to installed PHP versions."; "phpman.has_updates.description" = "One or more updates are available. (Please note that PHP Monitor will always install or update PHP versions in bulk, so you will always upgrade all installations at once.)"; -"phpman.has_updates.button" = "Update All"; +"phpman.has_updates.button" = "Upgrade All"; "phpman.warnings.unsupported.title" = "Your version of Homebrew may cause issues"; "phpman.warnings.unsupported.desc" = "No functionality is disabled, but some commands may not work as expected. You are currently running Homebrew %@. From b307251f81409663bf5013905eed63c04a55019c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 6 May 2023 21:03:13 +0200 Subject: [PATCH 157/194] =?UTF-8?q?=F0=9F=8F=97=20Health=20check=20in=20UI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/PhpInstallation.swift | 4 +++- .../Integrations/Homebrew/BrewFormula.swift | 17 ++++++++++++++--- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 9 ++++++++- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/phpmon/Common/PHP/PhpInstallation.swift b/phpmon/Common/PHP/PhpInstallation.swift index 0eb0126..5658747 100644 --- a/phpmon/Common/PHP/PhpInstallation.swift +++ b/phpmon/Common/PHP/PhpInstallation.swift @@ -45,7 +45,9 @@ class PhpInstallation { withStandardError: true ).trimmingCharacters(in: .whitespacesAndNewlines) - if testCommand.contains("Library not loaded") { + // If the "dyld: Library not loaded" issue pops up, we have an unhealthy PHP installation + // and we will need to reinstall this version of PHP via Homebrew. + if testCommand.contains("Library not loaded") && testCommand.contains("dyld") { self.isHealthy = false Log.err("The PHP installation of \(self.versionNumber.short) is not healthy!") } diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index 1ea7e32..c50483c 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -39,8 +39,19 @@ struct BrewFormula { return "\(Paths.optPath)/\(resolved)/bin" } - public func isHealthy() -> Bool { - return true - // #error("This must check if the PHP version works") + var shortVersion: String? { + guard let version = self.installedVersion else { + return nil + } + + return VersionNumber.make(from: version)?.short ?? nil + } + + public func isHealthy() -> Bool? { + guard let shortVersion = self.shortVersion else { + return nil + } + + return PhpEnv.shared.cachedPhpInstallations[shortVersion]?.isHealthy ?? nil } } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 1cd18e2..ac13164 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -133,7 +133,14 @@ struct PhpFormulaeView: View { .padding(.horizontal, 5) VStack(alignment: .leading) { Text(formula.displayName).bold() - // Text(formula.homebrewFolder) + + if formula.isHealthy() == nil { + Text("Unknown health") + } else { + Text(formula.isHealthy()! ? "Health OK" : "Broken!") + } + + Text(formula.homebrewFolder) if formula.isInstalled && formula.hasUpgrade { Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") From 64c259d8048613b8ba86d049fc76982a39110745 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 10 May 2023 19:24:11 +0200 Subject: [PATCH 158/194] =?UTF-8?q?=F0=9F=8F=97=20HomebrewOperation=20now?= =?UTF-8?q?=20allows=20(attempted)=20repair=20of=20broken=20PHP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Homebrew/Commands/HomebrewOperation.swift | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift index 3ae724c..0c9a140 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift @@ -30,37 +30,55 @@ class HomebrewOperation { func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { try await self.upgradePackages() try await self.installPackages() + try await self.repairBrokenPackages() } private func upgradePackages() async throws { + if self.upgrading.isEmpty { + return + } + let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ \(Paths.brew) upgrade \(self.upgrading.map { $0.name }.joined(separator: " ")) """ - - print(command) } private func installPackages() async throws { + if self.installing.isEmpty { + return + } + let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ \(Paths.brew) install \(self.upgrading.map { $0.name }.joined(separator: " ")) --force """ - - print(command) } - private func determineHealth(formula: BrewFormula) -> Bool { - #warning("Should return proper health") - return false + private func repairBrokenPackages() async throws { + let requiringRepair = PhpEnv.shared.cachedPhpInstallations.values + .filter({ !$0.isHealthy }) + .map { installation in + let formula = "php@\(installation.versionNumber.short)" + + if installation.versionNumber.short == PhpEnv.brewPhpAlias { + return "php" + } + + return formula + } + + if requiringRepair.isEmpty { + return + } // If the health comes back as negative, attempt to reinstall let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - \(Paths.brew) reinstall \(formula) --force + \(Paths.brew) reinstall \(requiringRepair.joined(separator: " ")) --force """ } From 1eeba747cf06b2a8a772930b75f78bb5f7ca0211 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 10 May 2023 19:55:40 +0200 Subject: [PATCH 159/194] =?UTF-8?q?=F0=9F=8F=97=20Copy=20logic=20from=20In?= =?UTF-8?q?stallPhpVersionCommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Homebrew/Commands/HomebrewOperation.swift | 83 +++++++++++++++++-- 1 file changed, 75 insertions(+), 8 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift index 0c9a140..60389c1 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift @@ -8,10 +8,11 @@ import Foundation -class HomebrewOperation { +class HomebrewOperation: BrewCommand { let installing: [BrewFormula] let upgrading: [BrewFormula] + let phpGuard: PhpGuard /** You can pass in which PHP versions need to be upgraded and which ones need to be installed. @@ -23,17 +24,26 @@ class HomebrewOperation { upgrading: [BrewFormula], installing: [BrewFormula] ) { + self.installing = installing self.upgrading = upgrading + self.phpGuard = PhpGuard() } func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { - try await self.upgradePackages() - try await self.installPackages() - try await self.repairBrokenPackages() + // Try to run all upgrade and installation operations + try await self.upgradePackages(onProgress) + try await self.installPackages(onProgress) + + // After performing operations, attempt to run repairs if needed + try await self.repairBrokenPackages(onProgress) + + // Finally, complete all operations + await self.completedOperations(onProgress) } - private func upgradePackages() async throws { + private func upgradePackages(_ onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + // If no upgrades are needed, early exit if self.upgrading.isEmpty { return } @@ -43,9 +53,12 @@ class HomebrewOperation { export HOMEBREW_NO_INSTALL_CLEANUP=true; \ \(Paths.brew) upgrade \(self.upgrading.map { $0.name }.joined(separator: " ")) """ + + try await run(command, onProgress) } - private func installPackages() async throws { + private func installPackages(_ onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + // If no installations are needed, early exit if self.installing.isEmpty { return } @@ -55,10 +68,15 @@ class HomebrewOperation { export HOMEBREW_NO_INSTALL_CLEANUP=true; \ \(Paths.brew) install \(self.upgrading.map { $0.name }.joined(separator: " ")) --force """ + + try await run(command, onProgress) } - private func repairBrokenPackages() async throws { - let requiringRepair = PhpEnv.shared.cachedPhpInstallations.values + private func repairBrokenPackages(_ onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + // Determine which PHP installations are considered unhealthy + // Build a list of formulae to reinstall + let requiringRepair = PhpEnv.shared + .cachedPhpInstallations.values .filter({ !$0.isHealthy }) .map { installation in let formula = "php@\(installation.versionNumber.short)" @@ -70,6 +88,7 @@ class HomebrewOperation { return formula } + // If no repairs are needed, early exit if requiringRepair.isEmpty { return } @@ -80,6 +99,54 @@ class HomebrewOperation { export HOMEBREW_NO_INSTALL_CLEANUP=true; \ \(Paths.brew) reinstall \(requiringRepair.joined(separator: " ")) --force """ + + try await run(command, onProgress) + } + + private func run(_ command: String, _ onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + let (process, _) = try! await Shell.attach( + command, + didReceiveOutput: { text, _ in + if !text.isEmpty { + Log.perf(text) + } + + if let (number, text) = self.reportInstallationProgress(text) { + onProgress(.create(value: number, title: "Running operations", description: text)) + } + }, + withTimeout: .minutes(15) + ) + + if process.terminationStatus <= 0 { + return + } else { + throw BrewCommandError(error: "The command failed to run correctly.") + } + } + + private func completedOperations(_ onProgress: @escaping (BrewCommandProgress) -> Void) async { + // Reload and restart PHP versions + onProgress(.create(value: 0.95, title: "Running operations", description: "Reloading PHP versions...")) + + // Check which version of PHP are now installed + await PhpEnv.detectPhpVersions() + + // Keep track of the currently installed version + await MainMenu.shared.refreshActiveInstallation() + + // If a PHP version was active prior to running the operations, attempt to restore it + if let version = phpGuard.currentVersion { + #warning("This should be happening silently") + await MainMenu.shared.switchToAnyPhpVersion(version) + } + + // Let the UI know that the installation has been completed + onProgress(.create( + value: 1, + title: "Operation completed", + description: "The installation has succeeded." + )) } } From 76d078735c652c70c403980d16b1fb479448dd00 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Thu, 11 May 2023 20:15:53 +0200 Subject: [PATCH 160/194] =?UTF-8?q?=F0=9F=8F=97=20Allow=20switching=20sile?= =?UTF-8?q?ntly,=20add=20operation=20title?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Homebrew/Commands/HomebrewOperation.swift | 13 +++++++------ phpmon/Domain/Menu/MainMenu+Actions.swift | 5 ++++- phpmon/Domain/Menu/MainMenu+Switcher.swift | 5 +++++ phpmon/Domain/Menu/MainMenu.swift | 8 ++++++++ 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift index 60389c1..2535d1a 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift @@ -10,6 +10,7 @@ import Foundation class HomebrewOperation: BrewCommand { + let title: String let installing: [BrewFormula] let upgrading: [BrewFormula] let phpGuard: PhpGuard @@ -21,10 +22,11 @@ class HomebrewOperation: BrewCommand { Each version that is installed will need to be checked afterwards (if it is OK). */ public init( + title: String, upgrading: [BrewFormula], installing: [BrewFormula] ) { - + self.title = title self.installing = installing self.upgrading = upgrading self.phpGuard = PhpGuard() @@ -112,7 +114,7 @@ class HomebrewOperation: BrewCommand { } if let (number, text) = self.reportInstallationProgress(text) { - onProgress(.create(value: number, title: "Running operations", description: text)) + onProgress(.create(value: number, title: self.title, description: text)) } }, withTimeout: .minutes(15) @@ -127,7 +129,7 @@ class HomebrewOperation: BrewCommand { private func completedOperations(_ onProgress: @escaping (BrewCommandProgress) -> Void) async { // Reload and restart PHP versions - onProgress(.create(value: 0.95, title: "Running operations", description: "Reloading PHP versions...")) + onProgress(.create(value: 0.95, title: self.title, description: "Reloading PHP versions...")) // Check which version of PHP are now installed await PhpEnv.detectPhpVersions() @@ -137,14 +139,13 @@ class HomebrewOperation: BrewCommand { // If a PHP version was active prior to running the operations, attempt to restore it if let version = phpGuard.currentVersion { - #warning("This should be happening silently") - await MainMenu.shared.switchToAnyPhpVersion(version) + await MainMenu.shared.switchToAnyPhpVersion(version, silently: true) } // Let the UI know that the installation has been completed onProgress(.create( value: 1, - title: "Operation completed", + title: "Operation completed!", description: "The installation has succeeded." )) } diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift index 2cbcdef..444b14b 100644 --- a/phpmon/Domain/Menu/MainMenu+Actions.swift +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -255,7 +255,10 @@ extension MainMenu { self.switchToPhpVersion(sender.version) } - public func switchToAnyPhpVersion(_ version: String) { + public func switchToAnyPhpVersion(_ version: String, silently: Bool = false) { + if silently { + MainMenu.shared.shouldSwitchSilently = true + } if PhpEnv.shared.availablePhpVersions.contains(version) { Task { MainMenu.shared.switchToPhpVersion(version) } } else { diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index c4485b5..a14f5d1 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -114,6 +114,11 @@ extension MainMenu { } @MainActor private func notifyAboutVersionChange(to version: String) { + if shouldSwitchSilently { + shouldSwitchSilently = false + return + } + LocalNotification.send( title: String(format: "notification.version_changed_title".localized, version), subtitle: String(format: "notification.version_changed_desc".localized, version), diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index f73e900..4d91c5b 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -26,6 +26,14 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate withLength: NSStatusItem.variableLength ) + // MARK: - State Variables + + /** + You can instruct the app to switch to a given PHP version silently. + That will toggle this flag to true. Upon switching, this flag will be reset. + */ + var shouldSwitchSilently: Bool = false + // MARK: - UI related /** From d2304323fe2b04373d44faf119b07429bc9ed934 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Thu, 11 May 2023 21:11:38 +0200 Subject: [PATCH 161/194] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Use=20new=20Instal?= =?UTF-8?q?lAndUpgradeCommand?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 30 +++---- .../Domain/Integrations/Homebrew/Brew.swift | 6 ++ .../Integrations/Homebrew/BrewFormula.swift | 6 ++ ...n.swift => InstallAndUpgradeCommand.swift} | 2 +- .../Commands/InstallPhpVersionCommand.swift | 86 ------------------- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 35 ++++++-- phpmon/Localizable.strings | 2 +- 7 files changed, 50 insertions(+), 117 deletions(-) rename phpmon/Domain/Integrations/Homebrew/Commands/{HomebrewOperation.swift => InstallAndUpgradeCommand.swift} (99%) delete mode 100644 phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index c0f5ff2..ba1f1af 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -152,10 +152,10 @@ C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A1925D9CD1000591B77 /* Utility.swift */; }; C43A8A2025D9D1D700591B77 /* brew-formula.json in Resources */ = {isa = PBXBuildFile; fileRef = C43A8A1F25D9D1D700591B77 /* brew-formula.json */; }; C43A8A2425D9D20D00591B77 /* HomebrewPackageTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */; }; - C43BCD4429FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; - C43BCD4529FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; - C43BCD4629FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; - C43BCD4729FBEF40001547BC /* HomebrewOperation.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */; }; + C43BCD4429FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* InstallAndUpgradeCommand.swift */; }; + C43BCD4529FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* InstallAndUpgradeCommand.swift */; }; + C43BCD4629FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* InstallAndUpgradeCommand.swift */; }; + C43BCD4729FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43BCD4329FBEF40001547BC /* InstallAndUpgradeCommand.swift */; }; C43FDBE929A932B0003D85EC /* PhpConfigChecker.swift in Sources */ = {isa = PBXBuildFile; fileRef = C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */; }; C44067F527E2582B0045BD4E /* DomainListNameCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F427E2582B0045BD4E /* DomainListNameCell.swift */; }; C44067F727E258410045BD4E /* DomainListPhpCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44067F627E258410045BD4E /* DomainListPhpCell.swift */; }; @@ -629,10 +629,6 @@ C4B79EBD29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; C4B79EBE29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; C4B79EBF29CA38DB00A483EE /* BrewCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */; }; - C4B79EC129CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; - C4B79EC229CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; - C4B79EC329CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; - C4B79EC429CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */; }; C4B79EC629CA474200A483EE /* FakeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC529CA474200A483EE /* FakeCommand.swift */; }; C4B79EC729CA474200A483EE /* FakeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC529CA474200A483EE /* FakeCommand.swift */; }; C4B79EC829CA474200A483EE /* FakeCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B79EC529CA474200A483EE /* FakeCommand.swift */; }; @@ -931,7 +927,7 @@ C43A8A1925D9CD1000591B77 /* Utility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utility.swift; sourceTree = "<group>"; }; C43A8A1F25D9D1D700591B77 /* brew-formula.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "brew-formula.json"; sourceTree = "<group>"; }; C43A8A2325D9D20D00591B77 /* HomebrewPackageTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewPackageTest.swift; sourceTree = "<group>"; }; - C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomebrewOperation.swift; sourceTree = "<group>"; }; + C43BCD4329FBEF40001547BC /* InstallAndUpgradeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallAndUpgradeCommand.swift; sourceTree = "<group>"; }; C43FDBE829A932B0003D85EC /* PhpConfigChecker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpConfigChecker.swift; sourceTree = "<group>"; }; C44067F427E2582B0045BD4E /* DomainListNameCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListNameCell.swift; sourceTree = "<group>"; }; C44067F627E258410045BD4E /* DomainListPhpCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainListPhpCell.swift; sourceTree = "<group>"; }; @@ -1021,7 +1017,6 @@ C4B6091C2853AB9700C95265 /* ServicesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServicesView.swift; sourceTree = "<group>"; }; C4B79EB529CA387F00A483EE /* BrewFormulaeHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewFormulaeHandler.swift; sourceTree = "<group>"; }; C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrewCommand.swift; sourceTree = "<group>"; }; - C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstallPhpVersionCommand.swift; sourceTree = "<group>"; }; C4B79EC529CA474200A483EE /* FakeCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeCommand.swift; sourceTree = "<group>"; }; C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RemovePhpVersionCommand.swift; sourceTree = "<group>"; }; C4B97B74275CF08C003F3378 /* AppDelegate+MenuOutlets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+MenuOutlets.swift"; sourceTree = "<group>"; }; @@ -1786,9 +1781,8 @@ isa = PBXGroup; children = ( C4B79EBB29CA38DB00A483EE /* BrewCommand.swift */, - C4B79EC029CA473000A483EE /* InstallPhpVersionCommand.swift */, + C43BCD4329FBEF40001547BC /* InstallAndUpgradeCommand.swift */, C4B79ECA29CA475900A483EE /* RemovePhpVersionCommand.swift */, - C43BCD4329FBEF40001547BC /* HomebrewOperation.swift */, ); path = Commands; sourceTree = "<group>"; @@ -2372,7 +2366,6 @@ C46EBC4A28DB966A007ACC74 /* TestableShell.swift in Sources */, C44C198D276E3A1C0072762D /* TerminalProgressWindowController.swift in Sources */, 54D9E0B827E4F51E003B9AD9 /* KeyCombo.swift in Sources */, - C4B79EC129CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C4C0E8E727F88B41002D32A9 /* DomainScanner.swift in Sources */, C4C3ED4327834C5200AB15D8 /* CustomPrefs.swift in Sources */, 54B48B5F275F66AE006D90C5 /* Application.swift in Sources */, @@ -2462,7 +2455,7 @@ C4B79ECB29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C40D725F2A018AE30054A067 /* BrewFormulaUI.swift in Sources */, C4D89BC62783C99400A02B68 /* ComposerJson.swift in Sources */, - C43BCD4429FBEF40001547BC /* HomebrewOperation.swift in Sources */, + C43BCD4429FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */, C4E2E84A28FC1E70003B070C /* DataExtension.swift in Sources */, C46FA23F246C358E00944F05 /* StringExtension.swift in Sources */, C42337A3281F19F000459A48 /* Xdebug.swift in Sources */, @@ -2528,7 +2521,6 @@ C471E85428F9BB650021E251 /* StatusMenu.swift in Sources */, C471E85528F9BB650021E251 /* StatusMenu+Items.swift in Sources */, C471E85628F9BB650021E251 /* DomainListCellProtocol.swift in Sources */, - C4B79EC329CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C4D36617291160A1006BD146 /* WIP.swift in Sources */, C471E85728F9BB650021E251 /* DomainListTLSCell.swift in Sources */, C471E85828F9BB650021E251 /* DomainListNameCell.swift in Sources */, @@ -2640,7 +2632,7 @@ C45B914B295607F400F4EC78 /* Service.swift in Sources */, C471E7D928F9BA8F0021E251 /* TestableShell.swift in Sources */, C471E81428F9BAE80021E251 /* NSWindowExtension.swift in Sources */, - C43BCD4629FBEF40001547BC /* HomebrewOperation.swift in Sources */, + C43BCD4629FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */, C471E7D328F9BA8F0021E251 /* ActiveShell.swift in Sources */, C4B79EC829CA474200A483EE /* FakeCommand.swift in Sources */, C471E7DE28F9BAA30021E251 /* CommandProtocol.swift in Sources */, @@ -2828,7 +2820,7 @@ C471E82C28F9BB340021E251 /* ValetListable.swift in Sources */, C471E82828F9BB310021E251 /* BrewDiagnostics.swift in Sources */, C471E81E28F9BB260021E251 /* BetterAlert.swift in Sources */, - C43BCD4729FBEF40001547BC /* HomebrewOperation.swift in Sources */, + C43BCD4729FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */, C44E985F29B23EBF0059F773 /* UpdateCheckTest.swift in Sources */, C471E7D228F9BA630021E251 /* ActiveFileSystem.swift in Sources */, C471E80028F9BAD10021E251 /* Xdebug.swift in Sources */, @@ -2852,7 +2844,6 @@ C4AFC4B129C4F32F00BF4E0D /* BrewFormula.swift in Sources */, C471E81F28F9BB290021E251 /* NginxConfigurationFile.swift in Sources */, C471E7BF28F9B90F0021E251 /* StartupTest.swift in Sources */, - C4B79EC429CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C4D3661D291173EA006BD146 /* DictionaryExtension.swift in Sources */, C471E80D28F9BAE80021E251 /* ArrayExtension.swift in Sources */, C471E7CD28F9BA600021E251 /* ShellProtocol.swift in Sources */, @@ -2911,7 +2902,6 @@ C449B4F027EE7FB800C47E8A /* DomainListTLSCell.swift in Sources */, C4FBFC532616485F00CDB8E1 /* PhpVersionDetectionTest.swift in Sources */, C43A8A2425D9D20D00591B77 /* HomebrewPackageTest.swift in Sources */, - C4B79EC229CA473000A483EE /* InstallPhpVersionCommand.swift in Sources */, C485707928BF456C00539B36 /* ArrayExtension.swift in Sources */, C4F780CA25D80B75000DBC97 /* HomebrewDecodable.swift in Sources */, C4C8E81C276F54E5003AC782 /* PhpConfigWatcher.swift in Sources */, @@ -3062,7 +3052,7 @@ C4D36602291132B7006BD146 /* ValetScanners.swift in Sources */, C40934AB298EEDA900D25014 /* CaskFileParserTest.swift in Sources */, C436B39E29F3C42500B6A64E /* PreferencesTabs.swift in Sources */, - C43BCD4529FBEF40001547BC /* HomebrewOperation.swift in Sources */, + C43BCD4529FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */, C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */, C464ADAD275A7A3F003FCD53 /* DomainListWindowController.swift in Sources */, C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */, diff --git a/phpmon/Domain/Integrations/Homebrew/Brew.swift b/phpmon/Domain/Integrations/Homebrew/Brew.swift index 285426d..5d94ac8 100644 --- a/phpmon/Domain/Integrations/Homebrew/Brew.swift +++ b/phpmon/Domain/Integrations/Homebrew/Brew.swift @@ -10,6 +10,12 @@ import Foundation class BrewFormulaeObservable: ObservableObject { @Published var phpVersions: [BrewFormula] = [] + + var upgradeable: [BrewFormula] { + return phpVersions.filter { formula in + formula.hasUpgrade + } + } } class Brew { diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index c50483c..c6076a9 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -31,6 +31,7 @@ struct BrewFormula { return upgradeVersion != nil } + /// The associated Homebrew folder with this PHP formula. var homebrewFolder: String { let resolved = name .replacingOccurrences(of: "shivammathur/php/", with: "") @@ -39,6 +40,7 @@ struct BrewFormula { return "\(Paths.optPath)/\(resolved)/bin" } + /// The short version associated with this formula, if installed. var shortVersion: String? { guard let version = self.installedVersion else { return nil @@ -47,6 +49,10 @@ struct BrewFormula { return VersionNumber.make(from: version)?.short ?? nil } + /** + * Determines if this PHP installation is healthy. + * Uses the cached installation health check as basis. + */ public func isHealthy() -> Bool? { guard let shortVersion = self.shortVersion else { return nil diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift similarity index 99% rename from phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift rename to phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index 2535d1a..334d2ad 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/HomebrewOperation.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -8,7 +8,7 @@ import Foundation -class HomebrewOperation: BrewCommand { +class InstallAndUpgradeCommand: BrewCommand { let title: String let installing: [BrewFormula] diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift deleted file mode 100644 index a5df34c..0000000 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallPhpVersionCommand.swift +++ /dev/null @@ -1,86 +0,0 @@ -// -// InstallPhpVersionCommand.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 21/03/2023. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation - -class InstallPhpVersionCommand: BrewCommand { - let formula: String - let version: String - - init(formula: String) { - self.version = formula - .replacingOccurrences(of: "php@", with: "") - .replacingOccurrences(of: "shivammathur/php/", with: "") - self.formula = formula - } - - func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { - let progressTitle = "Running Homebrew operations..." - - onProgress(.create( - value: 0.2, - title: progressTitle, - description: "Please wait while Homebrew installs PHP \(version)..." - )) - - if formula.contains("shivammathur") && !BrewDiagnostics.installedTaps.contains("shivammathur/php") { - await Shell.quiet("brew tap shivammathur/php") - } - - let command = """ - export HOMEBREW_NO_INSTALL_UPGRADE=true; \ - export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - \(Paths.brew) install \(formula) --force - """ - - // Keep track of the current PHP version prior to executing any operations - let phpGuard = PhpGuard() - - // Try to fix permissions - do { - try await BrewPermissionFixer().fixPermissions() - } catch { - throw BrewCommandError(error: "There was an issue fixing permissions.") - } - - let (process, _) = try! await Shell.attach( - command, - didReceiveOutput: { text, _ in - if !text.isEmpty { - Log.perf(text) - } - - if let (number, text) = self.reportInstallationProgress(text) { - onProgress(.create(value: number, title: progressTitle, description: text)) - } - }, - withTimeout: .minutes(5) - ) - - if process.terminationStatus <= 0 { - // Reload and restart PHP versions - onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) - - // Check which version of PHP are now installed - await PhpEnv.detectPhpVersions() - - // Keep track of the currently installed version - await MainMenu.shared.refreshActiveInstallation() - - // If a PHP version was active prior to running the operations, attempt to restore it - if let version = phpGuard.currentVersion { - await MainMenu.shared.switchToAnyPhpVersion(version) - } - - // Let the UI know that the installation has been completed - onProgress(.create(value: 1, title: progressTitle, description: "The installation has succeeded.")) - } else { - throw BrewCommandError(error: "The command failed to run correctly.") - } - } -} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index ac13164..0603e84 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -96,9 +96,12 @@ struct PhpFormulaeView: View { .foregroundColor(.gray) .font(.system(size: 11)) - Button("phpman.has_updates.button".localizedForSwiftUI, action: {}) - .focusable(false) - .disabled(self.status.busy) + Button("phpman.has_updates.button".localizedForSwiftUI, action: { + Task { await self.upgradeAll(self.formulae.upgradeable) } + + }) + .focusable(false) + .disabled(self.status.busy) } .padding(10) } else { @@ -134,6 +137,7 @@ struct PhpFormulaeView: View { VStack(alignment: .leading) { Text(formula.displayName).bold() + /* if formula.isHealthy() == nil { Text("Unknown health") } else { @@ -141,6 +145,7 @@ struct PhpFormulaeView: View { } Text(formula.homebrewFolder) + */ if formula.isInstalled && formula.hasUpgrade { Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") @@ -177,9 +182,7 @@ struct PhpFormulaeView: View { }.frame(width: 600, height: 600) } - public func install(_ formula: BrewFormula) async { - let command = InstallPhpVersionCommand(formula: formula.name) - + public func runCommand(_ command: InstallAndUpgradeCommand) async { do { self.setBusyStatus(true) try await command.execute { progress in @@ -198,14 +201,28 @@ struct PhpFormulaeView: View { self.setBusyStatus(false) self.presentErrorAlert( title: "phpman.failures.install.title".localized, - description: "phpman.failures.install.desc".localized( - "brew install \(formula)" - ), + description: "phpman.failures.install.desc".localized, button: "generic.ok".localized ) } } + public func upgradeAll(_ formulae: [BrewFormula]) async { + await self.runCommand(InstallAndUpgradeCommand( + title: "Installing updates...", + upgrading: formulae, + installing: [] + )) + } + + public func install(_ formula: BrewFormula) async { + await self.runCommand(InstallAndUpgradeCommand( + title: "Installing \(formula.displayName)", + upgrading: [], + installing: [formula] + )) + } + public func confirmUninstall(_ formula: BrewFormula) async { // Disallow removal of the currently active versipn if formula.installedVersion == PhpEnv.shared.currentInstall?.version.text { diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index d7fbb63..df47edf 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -120,7 +120,7 @@ You may be asked for your password during the uninstallation process if file per "phpman.warnings.removal.button" = "Uninstall"; "phpman.failures.install.title" = "Installation failed!"; -"phpman.failures.install.desc" = "Unfortunately, the automatic installation failed. You can manually try to run this command: `%@` and find out what goes wrong. Remember to restart PHP Monitor (or press the refresh button) when this is done."; +"phpman.failures.install.desc" = "Unfortunately, the automatic installation failed. PHP Monitor can only do so much and it's always possible that installations can fail for some unknown reason. At this point I'd recommend checking out the README to find out how to manually install a given PHP version via the Terminal. Remember to restart PHP Monitor (or press the refresh button) when this is done."; "phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor."; "phpman.uninstall_prevented.desc" = "In order to prevent issues with PHP Monitor and further crashes, it isn't possible to uninstall the currently linked version of PHP via this UI. You can switch versions and try again, or uninstall this version manually via the terminal.\n\nPlease note that PHP Monitor may crash if you uninstall the currently linked PHP version."; From 104f3a7d8c675f8d397ada562fba81ea22c3e055 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Thu, 11 May 2023 21:20:22 +0200 Subject: [PATCH 162/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20a=20bug=20related?= =?UTF-8?q?=20to=20installing=20PHP=20versions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Homebrew/Commands/InstallAndUpgradeCommand.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index 334d2ad..4da07fd 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -37,6 +37,9 @@ class InstallAndUpgradeCommand: BrewCommand { try await self.upgradePackages(onProgress) try await self.installPackages(onProgress) + // Re-check the installed versions + await PhpEnv.detectPhpVersions() + // After performing operations, attempt to run repairs if needed try await self.repairBrokenPackages(onProgress) @@ -68,7 +71,7 @@ class InstallAndUpgradeCommand: BrewCommand { let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ - \(Paths.brew) install \(self.upgrading.map { $0.name }.joined(separator: " ")) --force + \(Paths.brew) install \(self.installing.map { $0.name }.joined(separator: " ")) --force """ try await run(command, onProgress) From 67ec63212ce912b40bc62d027df3f1e375260189 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Thu, 11 May 2023 22:08:42 +0200 Subject: [PATCH 163/194] =?UTF-8?q?=F0=9F=8F=97=20WIP:=20Cleanup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/InstallAndUpgradeCommand.swift | 3 ++ phpmon/Domain/Integrations/Valet/Valet.swift | 3 +- phpmon/Domain/Menu/StatusMenu.swift | 1 + phpmon/Domain/Watcher/App+BrewWatch.swift | 41 ++++++------------- 4 files changed, 19 insertions(+), 29 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index 4da07fd..02ad1a3 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -145,6 +145,9 @@ class InstallAndUpgradeCommand: BrewCommand { await MainMenu.shared.switchToAnyPhpVersion(version, silently: true) } + // Also rebuild the content of the main menu + await MainMenu.shared.rebuild() + // Let the UI know that the installation has been completed onProgress(.create( value: 1, diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 095644c..303de81 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -62,7 +62,8 @@ class Valet { } lazy var installed: Bool = { - return FileSystem.fileExists(Paths.binPath.appending("/valet")) && FileSystem.anyExists("~/.config/valet") + return FileSystem.fileExists(Paths.binPath.appending("/valet")) + && FileSystem.anyExists("~/.config/valet") }() /** diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index ae51fc7..0e3084e 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -8,6 +8,7 @@ import Cocoa class StatusMenu: NSMenu { + // swiftlint:disable cyclomatic_complexity func addMenuItems() { addPhpVersionMenuItems() addItem(NSMenuItem.separator()) diff --git a/phpmon/Domain/Watcher/App+BrewWatch.swift b/phpmon/Domain/Watcher/App+BrewWatch.swift index 9a4df96..5247daf 100644 --- a/phpmon/Domain/Watcher/App+BrewWatch.swift +++ b/phpmon/Domain/Watcher/App+BrewWatch.swift @@ -14,42 +14,27 @@ extension App { let notifier = FSNotifier( for: URL(fileURLWithPath: Paths.binPath), eventMask: .all, - onChange: { - Task { await self.onHomebrewPhpModification() } - // Removing requires termination and then removing reference - // self.watchers[.homebrewBinaries]?.terminate() - // self.watchers[.homebrewBinaries] = nil - } + onChange: { Task { await self.onHomebrewPhpModification() } } ) App.shared.watchers[.homebrewBinaries] = notifier } + public func destroyHomebrewWatchers() { + // Removing requires termination and then removing reference + self.watchers[.homebrewBinaries]?.terminate() + self.watchers[.homebrewBinaries] = nil + } + public func onHomebrewPhpModification() async { - let previous = PhpEnv.shared.currentInstall?.version.text + // let previous = PhpEnv.shared.currentInstall?.version.text Log.info("Something changed in the Homebrew binary directory...") await PhpEnv.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() - let new = PhpEnv.shared.currentInstall?.version.text - if previous != new { - #warning("Notifications should be opt-in and are currently disabled") - Log.info("The PHP version has changed, new version is now: \(new ?? "unlinked")") - /* - // These notifications will cause duplicate notifications if using the switcher - if new != nil { - LocalNotification.send( - title: "Globally linked PHP version has changed!", - subtitle: "PHP \(new!) is now active.", - preference: nil - ) - } else { - LocalNotification.send( - title: "Globally linked PHP version has changed!", - subtitle: "PHP is now unlinked.", - preference: nil - ) - } - */ - } + // let new = PhpEnv.shared.currentInstall?.version.text + + // TODO: + // Check if the new and previous version are different + // if so, we can show a notification if needed } } From 458b952787c42d64af1557bfd7afd4b9effa10d3 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Thu, 11 May 2023 22:21:44 +0200 Subject: [PATCH 164/194] =?UTF-8?q?=F0=9F=8F=97=20Keep=20track=20of=20Home?= =?UTF-8?q?brew=20error=20log?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Integrations/Homebrew/Commands/BrewCommand.swift | 1 + .../Homebrew/Commands/InstallAndUpgradeCommand.swift | 6 +++++- .../Homebrew/Commands/RemovePhpVersionCommand.swift | 5 ++++- phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift | 7 +++++-- phpmon/Localizable.strings | 4 +++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift index fc7ae42..2f67281 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/BrewCommand.swift @@ -45,4 +45,5 @@ struct BrewCommandProgress { struct BrewCommandError: Error { let error: String + let log: [String] } diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index 02ad1a3..0ce05ff 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -109,11 +109,14 @@ class InstallAndUpgradeCommand: BrewCommand { } private func run(_ command: String, _ onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + var loggedMessages: [String] = [] + let (process, _) = try! await Shell.attach( command, didReceiveOutput: { text, _ in if !text.isEmpty { Log.perf(text) + loggedMessages.append(text) } if let (number, text) = self.reportInstallationProgress(text) { @@ -124,9 +127,10 @@ class InstallAndUpgradeCommand: BrewCommand { ) if process.terminationStatus <= 0 { + loggedMessages = [] return } else { - throw BrewCommandError(error: "The command failed to run correctly.") + throw BrewCommandError(error: "The command failed to run correctly.", log: loggedMessages) } } diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift index de043cc..72b18e1 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift @@ -40,11 +40,14 @@ class RemovePhpVersionCommand: BrewCommand { return } + var loggedMessages: [String] = [] + let (process, _) = try! await Shell.attach( command, didReceiveOutput: { text, _ in if !text.isEmpty { Log.perf(text) + loggedMessages.append(text) } }, withTimeout: .minutes(5) @@ -56,7 +59,7 @@ class RemovePhpVersionCommand: BrewCommand { await MainMenu.shared.refreshActiveInstallation() onProgress(.create(value: 1, title: progressTitle, description: "The operation has succeeded.")) } else { - throw BrewCommandError(error: "The command failed to run correctly.") + throw BrewCommandError(error: "The command failed to run correctly.", log: loggedMessages) } } } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 0603e84..6f9fa10 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -197,11 +197,14 @@ struct PhpFormulaeView: View { } } } - } catch { + } catch let error { + let error = error as! BrewCommandError + let messages = error.log.suffix(5).joined(separator: "\n") + self.setBusyStatus(false) self.presentErrorAlert( title: "phpman.failures.install.title".localized, - description: "phpman.failures.install.desc".localized, + description: "phpman.failures.install.desc".localized(messages), button: "generic.ok".localized ) } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index df47edf..64239f4 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -120,7 +120,9 @@ You may be asked for your password during the uninstallation process if file per "phpman.warnings.removal.button" = "Uninstall"; "phpman.failures.install.title" = "Installation failed!"; -"phpman.failures.install.desc" = "Unfortunately, the automatic installation failed. PHP Monitor can only do so much and it's always possible that installations can fail for some unknown reason. At this point I'd recommend checking out the README to find out how to manually install a given PHP version via the Terminal. Remember to restart PHP Monitor (or press the refresh button) when this is done."; +"phpman.failures.install.desc" = "Unfortunately, the installation or upgrade failed for some reason. I can't do much about this, but I will show you the last messages that were returned by Homebrew: + +%@"; "phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor."; "phpman.uninstall_prevented.desc" = "In order to prevent issues with PHP Monitor and further crashes, it isn't possible to uninstall the currently linked version of PHP via this UI. You can switch versions and try again, or uninstall this version manually via the terminal.\n\nPlease note that PHP Monitor may crash if you uninstall the currently linked PHP version."; From 8b79dc44d05e94b64ee0e6eede6694a3a8be7fa5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Thu, 11 May 2023 22:42:56 +0200 Subject: [PATCH 165/194] =?UTF-8?q?=F0=9F=8F=97=20Avoid=20dependents=20che?= =?UTF-8?q?ck=20for=20reinstall?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Homebrew/Commands/InstallAndUpgradeCommand.swift | 1 + phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index 0ce05ff..c48115e 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -102,6 +102,7 @@ class InstallAndUpgradeCommand: BrewCommand { let command = """ export HOMEBREW_NO_INSTALL_UPGRADE=true; \ export HOMEBREW_NO_INSTALL_CLEANUP=true; \ + export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=true; \ \(Paths.brew) reinstall \(requiringRepair.joined(separator: " ")) --force """ diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 6f9fa10..5a19f5c 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -199,9 +199,11 @@ struct PhpFormulaeView: View { } } catch let error { let error = error as! BrewCommandError - let messages = error.log.suffix(5).joined(separator: "\n") + let messages = error.log.suffix(2).joined(separator: "\n") self.setBusyStatus(false) + await self.handler.refreshPhpVersions(loadOutdated: false) + self.presentErrorAlert( title: "phpman.failures.install.title".localized, description: "phpman.failures.install.desc".localized(messages), From c6f49de70c7a32f70b795cddf4adc93d320b373a Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 13 May 2023 13:06:01 +0200 Subject: [PATCH 166/194] =?UTF-8?q?=F0=9F=94=A7=20New=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ phpmon/Localizable.strings | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index ba1f1af..bca9b82 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3357,7 +3357,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1215; + CURRENT_PROJECT_VERSION = 1230; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3387,7 +3387,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1215; + CURRENT_PROJECT_VERSION = 1230; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3616,7 +3616,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1215; + CURRENT_PROJECT_VERSION = 1230; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3727,7 +3727,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1215; + CURRENT_PROJECT_VERSION = 1230; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3838,7 +3838,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1215; + CURRENT_PROJECT_VERSION = 1230; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -4011,7 +4011,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1215; + CURRENT_PROJECT_VERSION = 1230; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 64239f4..2ea472e 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -100,8 +100,8 @@ "phpman.buttons.update" = "Update"; "phpman.title" = "PHP Version Manager"; -"phpman.description" = "**PHP Version Manager** lets you install different PHP versions via Homebrew."; -"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well. Installing or updating PHP versions may take some time, so please be patient."; +"phpman.description" = "**PHP Version Manager** lets you install, upgrade and delete different PHP versions via Homebrew without needing to run the commands in the terminal yourself."; +"phpman.disclaimer" = "Please note that installing or upgrading PHP versions may cause other Homebrew packages to be upgraded as well. Most installation steps usually take some time, so please be patient while Homebrew does its job."; "phpman.refresh.button" = "Search for Updates"; "phpman.refresh.button.description" = "You can press the refresh button to check if any updates are available to installed PHP versions."; @@ -120,7 +120,7 @@ You may be asked for your password during the uninstallation process if file per "phpman.warnings.removal.button" = "Uninstall"; "phpman.failures.install.title" = "Installation failed!"; -"phpman.failures.install.desc" = "Unfortunately, the installation or upgrade failed for some reason. I can't do much about this, but I will show you the last messages that were returned by Homebrew: +"phpman.failures.install.desc" = "Unfortunately, the operation returned an error code for some reason. You may find that the formulae have been correctly installed or upgraded. Unfortunately, I can't do much about this. Please check out the last few messages from Homebrew here for more information on what happened: %@"; From ab993efbde75df8c029a6f1abe6b5ad7a2d7f471 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 13 May 2023 13:09:28 +0200 Subject: [PATCH 167/194] =?UTF-8?q?=F0=9F=90=9B=20Ensure=20quit=20menu=20i?= =?UTF-8?q?tem=20is=20always=20available?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/StatusMenu.swift | 36 ++++++++++++++--------------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 0e3084e..f5c8a31 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -38,30 +38,28 @@ class StatusMenu: NSMenu { addItem(NSMenuItem.separator()) } - if PhpEnv.shared.isBusy { - return - } + if !PhpEnv.shared.isBusy { + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayLimitsWidget) { + addStatsMenuItem() + addItem(NSMenuItem.separator()) + } - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayLimitsWidget) { - addStatsMenuItem() - addItem(NSMenuItem.separator()) - } + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayExtensions) { + addExtensionsMenuItems() + NSMenuItem.separator() - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayExtensions) { - addExtensionsMenuItems() - NSMenuItem.separator() + addXdebugMenuItem() + } - addXdebugMenuItem() - } + addPhpDoctorMenuItem() - addPhpDoctorMenuItem() + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayPresets) { + addPresetsMenuItem() + } - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayPresets) { - addPresetsMenuItem() - } - - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayMisc) { - addFirstAidAndServicesMenuItems() + if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayMisc) { + addFirstAidAndServicesMenuItems() + } } addItem(NSMenuItem.separator()) From c7ee4b8838d92fe0edff2efca543ad62e738d242 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sun, 14 May 2023 11:47:35 +0200 Subject: [PATCH 168/194] =?UTF-8?q?=E2=9C=A8=20Update=20README,=20check=20?= =?UTF-8?q?for=20broken=20formulae?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 +++++--- phpmon/Domain/App/Startup.swift | 15 +++++++++++ .../Integrations/Homebrew/BrewFormula.swift | 6 +++++ phpmon/Domain/Menu/StatusMenu.swift | 1 + .../Domain/Preferences/PreferencesTabs.swift | 1 + phpmon/Domain/Presets/Preset.swift | 1 + .../SwiftUI/PhpManager/PhpFormulaeView.swift | 25 +++++++++++-------- phpmon/Localizable.strings | 6 +++++ 8 files changed, 52 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 7d6d471..9a8ebc8 100644 --- a/README.md +++ b/README.md @@ -25,15 +25,14 @@ PHP Monitor is a universal application that runs natively on Apple Silicon **and * macOS 12.4 or later (Monterey and Ventura are supported) * Homebrew is installed in `/usr/local/homebrew` or `/opt/homebrew` * Homebrew `php` formula is installed -* Laravel Valet (works with Valet v2, v3 and v4) -_You may need to update your Valet installation to keep everything working if a major version update of PHP has been released. You can do this by running `composer global update && valet install`. Some features are not supported when running Valet 2._ +_Starting with PHP Monitor 6.0, you do not need to have Laravel Valet installed for PHP Monitor to work. To get access to all features of PHP Monitor however, installing Valet is **recommended**._ For more information, please see [SECURITY.md](./SECURITY.md) to find out which version of the app is currently supported. ## 🚀 How to install -Again, make sure you have **[Laravel Valet](https://laravel.com/docs/master/valet)** installed first: +Again, if you want to have access to *all features* of PHP Monitor, I recommend installing **[Laravel Valet](https://laravel.com/docs/master/valet)** first: ```sh composer global require laravel/valet @@ -41,6 +40,8 @@ valet install valet trust ``` +Currently, PHP Monitor is compatible with Laravel Valet v2, v3 and v4. Each of these versions of Valet support slightly different PHP versions, which is why legacy versions remain supported. Please note that some features are not available in older versions of Valet, like site isolation. + #### Manual installation (recommended, first time only) Once that's done, you can [download the latest release](https://github.com/nicoverbruggen/phpmon/releases/latest), unzip it and place it in `/Applications`. @@ -126,7 +127,9 @@ If you encounter a strange scenario or a malfunction, please open an issue on th <details> <summary><strong>I want PHP Monitor to start up when I boot my Mac!</strong></summary> -You can do this by dragging *PHP Monitor.app* into the **Login Items** section in **System Preferences > Users & Groups** for your account. +If you are running macOS Ventura or newer, there's an option in the Settings menu that you can select: "Start PHP Monitor at login". + +If you are on an older version of macOS, you can do this by dragging *PHP Monitor.app* into the **Login Items** section in **System Preferences > Users & Groups** for your account. Super convenient! </details> diff --git a/phpmon/Domain/App/Startup.swift b/phpmon/Domain/App/Startup.swift index 81941da..cea3bbf 100644 --- a/phpmon/Domain/App/Startup.swift +++ b/phpmon/Domain/App/Startup.swift @@ -135,6 +135,21 @@ class Startup { descriptionText: "startup.errors.php_binary.desc".localized(Paths.php) ), // ================================================================================= + // Ensure that the main PHP installation is not broken. + // ================================================================================= + EnvironmentCheck( + command: { + return await Shell.pipe("\(Paths.binPath)/php -v").err + .contains("Library not loaded") + }, + name: "`no dyld issue detected", + titleText: "startup.errors.dyld_library.title".localized, + subtitleText: "startup.errors.dyld_library.subtitle".localized( + Paths.optPath + ), + descriptionText: "startup.errors.dyld_library.desc".localized + ), + // ================================================================================= // The Valet binary must exist. // ================================================================================= EnvironmentCheck( diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index c6076a9..37c38b8 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -49,6 +49,12 @@ struct BrewFormula { return VersionNumber.make(from: version)?.short ?? nil } + /// A quick variable that you can check to see if the install is unhealthy. + /// Will report true if no health information is available. + var healthy: Bool { + return isHealthy() ?? true + } + /** * Determines if this PHP installation is healthy. * Uses the cached installation health check as basis. diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index f5c8a31..84e8822 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -72,4 +72,5 @@ class StatusMenu: NSMenu { addCoreMenuItems() } + // swiftlint:enable cyclomatic_complexity } diff --git a/phpmon/Domain/Preferences/PreferencesTabs.swift b/phpmon/Domain/Preferences/PreferencesTabs.swift index 746356d..1df4bcb 100644 --- a/phpmon/Domain/Preferences/PreferencesTabs.swift +++ b/phpmon/Domain/Preferences/PreferencesTabs.swift @@ -65,6 +65,7 @@ class MenuStructurePreferencesVC: GenericPreferenceVC { return vc } + // swiftlint:enable line_length } class NotificationPreferencesVC: GenericPreferenceVC { diff --git a/phpmon/Domain/Presets/Preset.swift b/phpmon/Domain/Presets/Preset.swift index b40dc2e..3af88b4 100644 --- a/phpmon/Domain/Presets/Preset.swift +++ b/phpmon/Domain/Presets/Preset.swift @@ -196,6 +196,7 @@ struct Preset: Codable, Equatable { + info + "</i>" + "</span>" } + // swiftlint:enable void_function_in_ternary // MARK: - Reverting diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 5a19f5c..0b311bf 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -137,16 +137,6 @@ struct PhpFormulaeView: View { VStack(alignment: .leading) { Text(formula.displayName).bold() - /* - if formula.isHealthy() == nil { - Text("Unknown health") - } else { - Text(formula.isHealthy()! ? "Health OK" : "Broken!") - } - - Text(formula.homebrewFolder) - */ - if formula.isInstalled && formula.hasUpgrade { Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") .font(.system(size: 11)) @@ -159,6 +149,12 @@ struct PhpFormulaeView: View { .font(.system(size: 11)) .foregroundColor(.gray) } + + if !formula.healthy { + Text("This PHP installation is broken.") + .font(.system(size: 11)) + .foregroundColor(.red) + } } .frame(maxWidth: .infinity, alignment: .leading) @@ -212,6 +208,14 @@ struct PhpFormulaeView: View { } } + public func repairAll() async { + await self.runCommand(InstallAndUpgradeCommand( + title: "Repairing installations...", + upgrading: [], + installing: [] + )) + } + public func upgradeAll(_ formulae: [BrewFormula]) async { await self.runCommand(InstallAndUpgradeCommand( title: "Installing updates...", @@ -321,6 +325,7 @@ struct PhpFormulaeView: View { } } } +// swiftlint:enable type_body_length struct PhpFormulaeView_Previews: PreviewProvider { static var previews: some View { diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 2ea472e..6f1bde2 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -574,6 +574,12 @@ You can do this by running `composer global update` in your terminal. After that "startup.errors.php_opt.subtitle" = "The PHP alias was not found in `%@`. The app will not work correctly until you resolve this issue."; "startup.errors.php_opt.desc" = "If you already have the `php` formula installed, you may need to run `brew install php` in order for PHP Monitor to detect this installation."; +/// PHP binary is broken +"startup.errors.dyld_library.title" = "PHP is installed, but appears to be broken"; +"startup.errors.dyld_library.subtitle" = "When PHP Monitor is attempting to run commands, it is failing to do so correctly. This is usually an indicator of a broken PHP installation."; +"startup.errors.dyld_library.desc" = "Running `brew reinstall php && brew link php` in your Terminal may resolve this issue, so please give that a try."; + +/// Valet is not installed "startup.errors.valet_executable.title" = "Laravel Valet is not correctly installed"; "startup.errors.valet_executable.subtitle" = "You must install Valet with Composer. The app will not work correctly until you resolve this issue."; "startup.errors.valet_executable.desc" = "If you haven't installed Laravel Valet yet, please do so first. If you have it installed but are seeing this message anyway, then try running `which valet` in Terminal, it should return: `%@`."; From 2b7bb3f35288cd77ead1b8e51f29c764ed389c23 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sun, 14 May 2023 12:04:25 +0200 Subject: [PATCH 169/194] =?UTF-8?q?=F0=9F=91=8C=20Show=20repair=20button?= =?UTF-8?q?=20in=20version=20manager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 22 ++++++++++++++----- phpmon/Localizable.strings | 4 ++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 0b311bf..a814641 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -134,15 +134,19 @@ struct PhpFormulaeView: View { .frame(width: 16, height: 16) .foregroundColor(formula.iconColor) .padding(.horizontal, 5) - VStack(alignment: .leading) { + VStack(alignment: .leading, spacing: 2) { Text(formula.displayName).bold() if formula.isInstalled && formula.hasUpgrade { - Text("\(formula.installedVersion!) installed, \(formula.upgradeVersion!) available.") - .font(.system(size: 11)) - .foregroundColor(.gray) + Text("phpman.version.has_update".localized( + formula.installedVersion!, + formula.upgradeVersion! + )) + .font(.system(size: 11)) + .foregroundColor(.gray) } else if formula.isInstalled && formula.installedVersion != nil { - Text("\(formula.installedVersion!) is currently installed.").font(.system(size: 11)) + Text("phpman.version.installed".localized(formula.installedVersion!)) + .font(.system(size: 11)) .foregroundColor(.gray) } else { Text("phpman.version.available_for_installation".localizedForSwiftUI) @@ -151,13 +155,19 @@ struct PhpFormulaeView: View { } if !formula.healthy { - Text("This PHP installation is broken.") + Text("phpman.version.broken".localizedForSwiftUI) .font(.system(size: 11)) .foregroundColor(.red) } } .frame(maxWidth: .infinity, alignment: .leading) + if !formula.healthy { + Button("phpman.buttons.repair".localizedForSwiftUI, role: .destructive) { + Task { await self.repairAll() } + } + } + if formula.isInstalled { Button("phpman.buttons.uninstall".localizedForSwiftUI, role: .destructive) { Task { await self.confirmUninstall(formula) } diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 6f1bde2..76bd2ce 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -94,10 +94,14 @@ "phpman.busy.title" = "Checking for updates!"; "phpman.busy.description.outdated" = "Checking if any PHP version is outdated..."; +"phpman.version.broken" = "This version appears to be broken, you can attempt repair."; +"phpman.version.has_update" = "Version %@ installed, %@ available."; +"phpman.version.installed" = "Version %@ is currently installed."; "phpman.version.available_for_installation" = "This version can be installed."; "phpman.buttons.uninstall" = "Uninstall"; "phpman.buttons.install" = "Install"; "phpman.buttons.update" = "Update"; +"phpman.buttons.repair" = "Repair"; "phpman.title" = "PHP Version Manager"; "phpman.description" = "**PHP Version Manager** lets you install, upgrade and delete different PHP versions via Homebrew without needing to run the commands in the terminal yourself."; From f88035b42527c2a2d02056eb4ed6099ab54ad87e Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Mon, 15 May 2023 19:04:05 +0200 Subject: [PATCH 170/194] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Rename=20PhpEnv=20?= =?UTF-8?q?to=20PhpEnvironments?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 20 ++++----- phpmon/Common/Core/Actions.swift | 6 +-- phpmon/Common/Core/Homebrew.swift | 4 +- phpmon/Common/PHP/ActivePhpInstallation.swift | 2 +- phpmon/Common/PHP/Extensions/Xdebug.swift | 4 +- .../{PhpEnv.swift => PhpEnvironments.swift} | 43 +++++++++++++++---- .../PHP/Switcher/InternalSwitcher.swift | 6 +-- phpmon/Domain/App/AppDelegate.swift | 6 +-- .../DomainList/Cells/DomainListPhpCell.swift | 4 +- .../DomainList/DomainListVC+ContextMenu.swift | 2 +- .../Composer/ComposerWindow.swift | 4 +- .../Behaviors/BrewPermissionFixer.swift | 4 +- .../Homebrew/BrewDiagnostics.swift | 8 ++-- .../Integrations/Homebrew/BrewFormula.swift | 4 +- .../Homebrew/BrewFormulaeHandler.swift | 2 +- .../Commands/InstallAndUpgradeCommand.swift | 8 ++-- .../Commands/RemovePhpVersionCommand.swift | 2 +- .../Valet/Domains/FakeValetInteractor.swift | 2 +- .../Valet/Sites/FakeValetSite.swift | 2 +- .../Integrations/Valet/Sites/ValetSite.swift | 8 ++-- phpmon/Domain/Integrations/Valet/Valet.swift | 4 +- phpmon/Domain/Menu/MainMenu+Actions.swift | 32 +++++++------- phpmon/Domain/Menu/MainMenu+Async.swift | 6 +-- phpmon/Domain/Menu/MainMenu+FixMyValet.swift | 10 ++--- phpmon/Domain/Menu/MainMenu+Startup.swift | 6 +-- phpmon/Domain/Menu/MainMenu+Switcher.swift | 6 +-- phpmon/Domain/Menu/MainMenu.swift | 10 ++--- phpmon/Domain/Menu/StatusMenu+Items.swift | 37 ++++++++-------- phpmon/Domain/Menu/StatusMenu.swift | 18 ++++---- phpmon/Domain/PHP/PhpGuard.swift | 2 +- phpmon/Domain/Presets/Preset.swift | 16 +++---- .../SwiftUI/Domains/VersionPopoverView.swift | 2 +- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 6 +-- .../Warnings/Services/PhpConfigChecker.swift | 2 +- phpmon/Domain/Watcher/App+BrewWatch.swift | 6 +-- phpmon/Domain/Watcher/App+ConfigWatch.swift | 2 +- 36 files changed, 167 insertions(+), 139 deletions(-) rename phpmon/Common/PHP/PHP Version/{PhpEnv.swift => PhpEnvironments.swift} (83%) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index bca9b82..43b8b11 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -72,8 +72,8 @@ C40B24F427A310830018C7D2 /* StatusMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C47331A1247093B7009A0597 /* StatusMenu.swift */; }; C40C5C9C2846A40600E28255 /* Preset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C5C9B2846A40600E28255 /* Preset.swift */; }; C40C5C9D2846A40600E28255 /* Preset.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C5C9B2846A40600E28255 /* Preset.swift */; }; - C40C7F1E2772136000DDDCDC /* PhpEnv.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnv.swift */; }; - C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnv.swift */; }; + C40C7F1E2772136000DDDCDC /* PhpEnvironments.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnvironments.swift */; }; + C40C7F1F2772136000DDDCDC /* PhpEnvironments.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnvironments.swift */; }; C40C7F2827721FF600DDDCDC /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C40C7F2927721FF600DDDCDC /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C40C7F3027722E8D00DDDCDC /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2F27722E8D00DDDCDC /* Logger.swift */; }; @@ -288,10 +288,10 @@ C471E7EF28F9BAC30021E251 /* Actions.swift in Sources */ = {isa = PBXBuildFile; fileRef = C415D3B62770F294005EF286 /* Actions.swift */; }; C471E7F028F9BAC30021E251 /* Paths.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4B5853B2770FE3900DA4FBE /* Paths.swift */; }; C471E7F128F9BAC70021E251 /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; - C471E7F228F9BAC70021E251 /* PhpEnv.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnv.swift */; }; + C471E7F228F9BAC70021E251 /* PhpEnvironments.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnvironments.swift */; }; C471E7F328F9BAC70021E251 /* PhpHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D936C827E3EB6100BD69FE /* PhpHelper.swift */; }; C471E7F428F9BAC80021E251 /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; - C471E7F528F9BAC80021E251 /* PhpEnv.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnv.swift */; }; + C471E7F528F9BAC80021E251 /* PhpEnvironments.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F1D2772136000DDDCDC /* PhpEnvironments.swift */; }; C471E7F628F9BAC80021E251 /* PhpHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D936C827E3EB6100BD69FE /* PhpHelper.swift */; }; C471E7F728F9BACB0021E251 /* PhpSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADBE277610E1007277F4 /* PhpSwitcher.swift */; }; C471E7F828F9BACB0021E251 /* InternalSwitcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D9ADC7277611A0007277F4 /* InternalSwitcher.swift */; }; @@ -876,7 +876,7 @@ C40934A6298EEB8700D25014 /* phpmon-dev.rb */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.ruby; path = "phpmon-dev.rb"; sourceTree = "<group>"; }; C40934AA298EEDA900D25014 /* CaskFileParserTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CaskFileParserTest.swift; sourceTree = "<group>"; }; C40C5C9B2846A40600E28255 /* Preset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Preset.swift; sourceTree = "<group>"; }; - C40C7F1D2772136000DDDCDC /* PhpEnv.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpEnv.swift; sourceTree = "<group>"; }; + C40C7F1D2772136000DDDCDC /* PhpEnvironments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpEnvironments.swift; sourceTree = "<group>"; }; C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Valet+Alerts.swift"; sourceTree = "<group>"; }; C40C7F2F27722E8D00DDDCDC /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = "<group>"; }; C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpFormulaeStatus.swift; sourceTree = "<group>"; }; @@ -1654,7 +1654,7 @@ children = ( C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */, C4CE7F9529683B43000102CF /* PhpVersionNumberCollection.swift */, - C40C7F1D2772136000DDDCDC /* PhpEnv.swift */, + C40C7F1D2772136000DDDCDC /* PhpEnvironments.swift */, C4D936C827E3EB6100BD69FE /* PhpHelper.swift */, ); path = "PHP Version"; @@ -2427,7 +2427,7 @@ C4D3660B29113F20006BD146 /* System.swift in Sources */, C4D36601291132B7006BD146 /* ValetScanners.swift in Sources */, C4EED88927A48778006D7272 /* InterAppHandler.swift in Sources */, - C40C7F1E2772136000DDDCDC /* PhpEnv.swift in Sources */, + C40C7F1E2772136000DDDCDC /* PhpEnvironments.swift in Sources */, C4B79EB629CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C476FF9822B0DD830098105B /* Alert.swift in Sources */, C474B00624C0E98C00066A22 /* LocalNotification.swift in Sources */, @@ -2626,7 +2626,7 @@ C490E3B929BCA368006D2DE6 /* App+BrewWatch.swift in Sources */, C471E7FF28F9BAD10021E251 /* Xdebug.swift in Sources */, C409349F298EE8E900D25014 /* AppUpdater.swift in Sources */, - C471E7F228F9BAC70021E251 /* PhpEnv.swift in Sources */, + C471E7F228F9BAC70021E251 /* PhpEnvironments.swift in Sources */, C471E7E628F9BAC20021E251 /* Process.swift in Sources */, C471E81928F9BAE80021E251 /* NSMenuItemExtension.swift in Sources */, C45B914B295607F400F4EC78 /* Service.swift in Sources */, @@ -2824,7 +2824,7 @@ C44E985F29B23EBF0059F773 /* UpdateCheckTest.swift in Sources */, C471E7D228F9BA630021E251 /* ActiveFileSystem.swift in Sources */, C471E80028F9BAD10021E251 /* Xdebug.swift in Sources */, - C471E7F528F9BAC80021E251 /* PhpEnv.swift in Sources */, + C471E7F528F9BAC80021E251 /* PhpEnvironments.swift in Sources */, C471E7ED28F9BAC30021E251 /* Process.swift in Sources */, C471E81128F9BAE80021E251 /* NSMenuItemExtension.swift in Sources */, C471E7CC28F9BA5B0021E251 /* TestableShell.swift in Sources */, @@ -3055,7 +3055,7 @@ C43BCD4529FBEF40001547BC /* InstallAndUpgradeCommand.swift in Sources */, C4551657297AED18009B8466 /* ValetRcTest.swift in Sources */, C464ADAD275A7A3F003FCD53 /* DomainListWindowController.swift in Sources */, - C40C7F1F2772136000DDDCDC /* PhpEnv.swift in Sources */, + C40C7F1F2772136000DDDCDC /* PhpEnvironments.swift in Sources */, C464ADB0275A7A6A003FCD53 /* DomainListVC.swift in Sources */, C43A8A1A25D9CD1000591B77 /* Utility.swift in Sources */, C46EBC4B28DB966A007ACC74 /* TestableShell.swift in Sources */, diff --git a/phpmon/Common/Core/Actions.swift b/phpmon/Common/Core/Actions.swift index 1579a82..b62bdf8 100644 --- a/phpmon/Common/Core/Actions.swift +++ b/phpmon/Common/Core/Actions.swift @@ -47,8 +47,8 @@ class Actions { "chown -R \(Paths.whoami):admin \(Paths.cellarPath)/\(HomebrewFormulae.dnsmasq)" ] - PhpEnv.shared.availablePhpVersions.forEach { version in - let formula = version == PhpEnv.brewPhpAlias + PhpEnvironments.shared.availablePhpVersions.forEach { version in + let formula = version == PhpEnvironments.brewPhpAlias ? "php" : "php@\(version)" servicesCommands.append("\(Paths.brew) services stop \(formula)") @@ -125,7 +125,7 @@ class Actions { extensions and/or run `composer global update`. */ public static func fixMyValet() async { - await InternalSwitcher().performSwitch(to: PhpEnv.brewPhpAlias) + await InternalSwitcher().performSwitch(to: PhpEnvironments.brewPhpAlias) await brew("services restart \(HomebrewFormulae.dnsmasq)", sudo: HomebrewFormulae.dnsmasq.elevated) await brew("services restart \(HomebrewFormulae.php)", sudo: HomebrewFormulae.php.elevated) await brew("services restart \(HomebrewFormulae.nginx)", sudo: HomebrewFormulae.nginx.elevated) diff --git a/phpmon/Common/Core/Homebrew.swift b/phpmon/Common/Core/Homebrew.swift index 7f2e35b..57add14 100644 --- a/phpmon/Common/Core/Homebrew.swift +++ b/phpmon/Common/Core/Homebrew.swift @@ -10,11 +10,11 @@ import Foundation struct HomebrewFormulae { static var php: HomebrewFormula { - if PhpEnv.shared.homebrewPackage == nil { + if PhpEnvironments.shared.homebrewPackage == nil { return HomebrewFormula("php", elevated: true) } - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { return HomebrewFormula("php", elevated: true) } diff --git a/phpmon/Common/PHP/ActivePhpInstallation.swift b/phpmon/Common/PHP/ActivePhpInstallation.swift index df23aac..0a94d45 100644 --- a/phpmon/Common/PHP/ActivePhpInstallation.swift +++ b/phpmon/Common/PHP/ActivePhpInstallation.swift @@ -32,7 +32,7 @@ class ActivePhpInstallation { // MARK: - Computed var formula: String { - return (version.short == PhpEnv.brewPhpAlias) ? "php" : "php@\(version.short)" + return (version.short == PhpEnvironments.brewPhpAlias) ? "php" : "php@\(version.short)" } // MARK: - Initializer diff --git a/phpmon/Common/PHP/Extensions/Xdebug.swift b/phpmon/Common/PHP/Extensions/Xdebug.swift index 615d71e..5f70d9d 100644 --- a/phpmon/Common/PHP/Extensions/Xdebug.swift +++ b/phpmon/Common/PHP/Extensions/Xdebug.swift @@ -12,11 +12,11 @@ import Cocoa class Xdebug { public static var enabled: Bool { - return PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") != nil + return PhpEnvironments.shared.getConfigFile(forKey: "xdebug.mode") != nil } public static var activeModes: [String] { - guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else { + guard let file = PhpEnvironments.shared.getConfigFile(forKey: "xdebug.mode") else { return [] } diff --git a/phpmon/Common/PHP/PHP Version/PhpEnv.swift b/phpmon/Common/PHP/PHP Version/PhpEnvironments.swift similarity index 83% rename from phpmon/Common/PHP/PHP Version/PhpEnv.swift rename to phpmon/Common/PHP/PHP Version/PhpEnvironments.swift index a884413..7d0a1f8 100644 --- a/phpmon/Common/PHP/PHP Version/PhpEnv.swift +++ b/phpmon/Common/PHP/PHP Version/PhpEnvironments.swift @@ -1,5 +1,5 @@ // -// PhpSwitcher.swift +// PhpEnvironments.swift // PHP Monitor // // Created by Nico Verbruggen on 21/12/2021. @@ -8,18 +8,27 @@ import Foundation -class PhpEnv { +class PhpEnvironments { // MARK: - Initializer + /** + + */ init() { self.currentInstall = ActivePhpInstallation.load() } + /** + Creates the shared instance. Called when starting the app. + */ static func prepare() { _ = Self.shared } + /** + Determine which PHP version the `php` formula is aliased to. + */ func determinePhpAlias() async { let brewPhpAlias = await Shell.pipe("\(Paths.brew) info php --json").out @@ -36,8 +45,8 @@ class PhpEnv { /** The delegate that is informed of updates. */ weak var delegate: PhpSwitcherDelegate? - /** The static app instance. Accessible at any time. */ - static let shared = PhpEnv() + /** The static instance. Accessible at any time. */ + static let shared = PhpEnvironments() /** Whether the switcher is busy performing any actions. */ var isBusy: Bool = false { @@ -71,9 +80,9 @@ class PhpEnv { As such, we take that information from Homebrew. */ static var brewPhpAlias: String { - if PhpEnv.shared.homebrewPackage == nil { return "8.2" } + if PhpEnvironments.shared.homebrewPackage == nil { return "8.2" } - return PhpEnv.shared.homebrewPackage.version + return PhpEnvironments.shared.homebrewPackage.version } /** @@ -90,16 +99,30 @@ class PhpEnv { // MARK: - Methods + /** + The switcher that is currently in use. + This was originally added so the Internal and Valet switcher could be swapped out, + but currently this is no longer needed. + */ public static var switcher: PhpSwitcher { return InternalSwitcher() } + /** + Alias that detects which versions of PHP are installed. + See also: `detectPhpVersions()`. Please note that this method + does *not* return the set of PHP versions that are supported. + */ public static func detectPhpVersions() async { _ = await Self.shared.detectPhpVersions() } /** Detects which versions of PHP are installed. + This step also detects which versions of PHP are incompatible with the current version of Valet. + If a PHP installation is currently broken, that will also be reflected. + + Returns a `Set<String>` of installations that are considered valid. */ public func detectPhpVersions() async -> Set<String> { let files = await Shell.pipe("ls \(Paths.optPath) | grep php@").out @@ -184,6 +207,10 @@ class PhpEnv { return output } + /** + Returns a list of `VersionNumber` instances based on the available PHP versions + that are valid to switch to for a given constraint. + */ public func validVersions(for constraint: String) -> [VersionNumber] { constraint.split(separator: "|").flatMap { return PhpVersionNumberCollection @@ -196,7 +223,7 @@ class PhpEnv { Validates whether the currently running version matches the provided version. */ public func validate(_ version: String) -> Bool { - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { Log.info("It appears as if no PHP installation is currently active.") return false } @@ -217,7 +244,7 @@ class PhpEnv { You can then use the configuration file instance to change values. */ public func getConfigFile(forKey key: String) -> PhpConfigurationFile? { - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { return nil } diff --git a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift index f09d057..ca5087d 100644 --- a/phpmon/Common/PHP/Switcher/InternalSwitcher.swift +++ b/phpmon/Common/PHP/Switcher/InternalSwitcher.swift @@ -25,7 +25,7 @@ class InternalSwitcher: PhpSwitcher { let versions = getVersionsToBeHandled(version) await withTaskGroup(of: String.self, body: { group in - for available in PhpEnv.shared.availablePhpVersions { + for available in PhpEnvironments.shared.availablePhpVersions { group.addTask { await self.unlinkAndStopPhpVersion(available) return available @@ -76,7 +76,7 @@ class InternalSwitcher: PhpSwitcher { } func unlinkAndStopPhpVersion(_ version: String) async { - let formula = (version == PhpEnv.brewPhpAlias) ? "php" : "php@\(version)" + let formula = (version == PhpEnvironments.brewPhpAlias) ? "php" : "php@\(version)" await brew("unlink \(formula)") if Valet.installed { @@ -88,7 +88,7 @@ class InternalSwitcher: PhpSwitcher { } func linkAndStartPhpVersion(_ version: String, primary: Bool) async { - let formula = (version == PhpEnv.brewPhpAlias) ? "php" : "php@\(version)" + let formula = (version == PhpEnvironments.brewPhpAlias) ? "php" : "php@\(version)" if primary { Log.info("\(formula) is the primary formula, linking...") diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index 5bba9eb..6b4f2cc 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -44,11 +44,11 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele let brew: Brew /** - The PhpEnv singleton that handles PHP version + The PhpEnvironments singleton that handles PHP version detection, as well as switching. It is initialized when the app is ready and passed all checks. */ - var phpEnvironment: PhpEnv! = nil + var phpEnvironments: PhpEnvironments! = nil /** The logger is responsible for different levels of logging. @@ -98,7 +98,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele } func initializeSwitcher() { - self.phpEnvironment = PhpEnv.shared + self.phpEnvironments = PhpEnvironments.shared } static func initializeTestingProfile(_ path: String) { diff --git a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift index a875ed6..a0cbcf7 100644 --- a/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift +++ b/phpmon/Domain/DomainList/Cells/DomainListPhpCell.swift @@ -59,11 +59,11 @@ class DomainListPhpCell: NSTableCellView, DomainListCellProtocol { return [] } - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { return [] } - return PhpEnv.shared.validVersions(for: site.preferredPhpVersion).filter({ version in + return PhpEnvironments.shared.validVersions(for: site.preferredPhpVersion).filter({ version in version.short != install.version.short }) } diff --git a/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift b/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift index 6ec9b9a..f806890 100644 --- a/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift +++ b/phpmon/Domain/DomainList/DomainListVC+ContextMenu.swift @@ -105,7 +105,7 @@ extension DomainListVC { private func addIsolate(to menu: NSMenu, with site: ValetSite) { var items: [NSMenuItem] = [] - for version in PhpEnv.shared.availablePhpVersions.reversed() { + for version in PhpEnvironments.shared.availablePhpVersions.reversed() { let item = PhpMenuItem( title: "domain_list.always_use_php".localized(version), action: #selector(self.isolateSite), diff --git a/phpmon/Domain/Integrations/Composer/ComposerWindow.swift b/phpmon/Domain/Integrations/Composer/ComposerWindow.swift index 7434fc5..212412e 100644 --- a/phpmon/Domain/Integrations/Composer/ComposerWindow.swift +++ b/phpmon/Domain/Integrations/Composer/ComposerWindow.swift @@ -27,7 +27,7 @@ import Foundation return } - PhpEnv.shared.isBusy = true + PhpEnvironments.shared.isBusy = true MainMenu.shared.setBusyImage() MainMenu.shared.rebuild() @@ -105,7 +105,7 @@ import Foundation // MARK: Main Menu Update private func removeBusyStatus() { - PhpEnv.shared.isBusy = false + PhpEnvironments.shared.isBusy = false Task { @MainActor in MainMenu.shared.updatePhpVersionInStatusBar() } diff --git a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift index 9f94c6c..90bb9ad 100644 --- a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift +++ b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift @@ -54,10 +54,10 @@ class BrewPermissionFixer { whether the Homebrew binary directory for the given PHP version is owned by root. */ private func determineBrokenFormulae() async { - let formulae = PhpEnv.shared.cachedPhpInstallations.keys + let formulae = PhpEnvironments.shared.cachedPhpInstallations.keys for formula in formulae { - let realFormula = formula == PhpEnv.brewPhpAlias + let realFormula = formula == PhpEnvironments.brewPhpAlias ? "php" : "php@\(formula)" diff --git a/phpmon/Domain/Integrations/Homebrew/BrewDiagnostics.swift b/phpmon/Domain/Integrations/Homebrew/BrewDiagnostics.swift index b842105..1141a62 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewDiagnostics.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewDiagnostics.swift @@ -66,7 +66,7 @@ class BrewDiagnostics { public static func checkForValetMisconfiguration() async { Log.info("Checking for PHP-FPM issues with Valet...") - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { Log.info("Will skip check for issues if no PHP version is linked.") return } @@ -103,13 +103,13 @@ class BrewDiagnostics { from: tapAlias.data(using: .utf8)! ).first! - if tapPhp.version != PhpEnv.brewPhpAlias { + if tapPhp.version != PhpEnvironments.brewPhpAlias { Log.warn("The `php` formula alias seems to be the different between the tap and core. " + "This could be a problem!") Log.info("Determining whether both of these versions are installed...") - let bothInstalled = PhpEnv.shared.availablePhpVersions.contains(tapPhp.version) - && PhpEnv.shared.availablePhpVersions.contains(PhpEnv.brewPhpAlias) + let bothInstalled = PhpEnvironments.shared.availablePhpVersions.contains(tapPhp.version) + && PhpEnvironments.shared.availablePhpVersions.contains(PhpEnvironments.brewPhpAlias) if bothInstalled { Log.warn("Both conflicting aliases seem to be installed, warning the user!") diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift index 37c38b8..140cae0 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormula.swift @@ -35,7 +35,7 @@ struct BrewFormula { var homebrewFolder: String { let resolved = name .replacingOccurrences(of: "shivammathur/php/", with: "") - .replacingOccurrences(of: "php@" + PhpEnv.brewPhpAlias, with: "php") + .replacingOccurrences(of: "php@" + PhpEnvironments.brewPhpAlias, with: "php") return "\(Paths.optPath)/\(resolved)/bin" } @@ -64,6 +64,6 @@ struct BrewFormula { return nil } - return PhpEnv.shared.cachedPhpInstallations[shortVersion]?.isHealthy ?? nil + return PhpEnvironments.shared.cachedPhpInstallations[shortVersion]?.isHealthy ?? nil } } diff --git a/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift index 859bb1b..9fb0cd4 100644 --- a/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift +++ b/phpmon/Domain/Integrations/Homebrew/BrewFormulaeHandler.swift @@ -43,7 +43,7 @@ class BrewFormulaeHandler: HandlesBrewFormulae { } return Brew.phpVersionFormulae.map { (version, formula) in - let fullVersion = PhpEnv.shared.cachedPhpInstallations[version]?.versionNumber.text + let fullVersion = PhpEnvironments.shared.cachedPhpInstallations[version]?.versionNumber.text var upgradeVersion: String? if let version = fullVersion { diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index c48115e..5d7b318 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -38,7 +38,7 @@ class InstallAndUpgradeCommand: BrewCommand { try await self.installPackages(onProgress) // Re-check the installed versions - await PhpEnv.detectPhpVersions() + await PhpEnvironments.detectPhpVersions() // After performing operations, attempt to run repairs if needed try await self.repairBrokenPackages(onProgress) @@ -80,13 +80,13 @@ class InstallAndUpgradeCommand: BrewCommand { private func repairBrokenPackages(_ onProgress: @escaping (BrewCommandProgress) -> Void) async throws { // Determine which PHP installations are considered unhealthy // Build a list of formulae to reinstall - let requiringRepair = PhpEnv.shared + let requiringRepair = PhpEnvironments.shared .cachedPhpInstallations.values .filter({ !$0.isHealthy }) .map { installation in let formula = "php@\(installation.versionNumber.short)" - if installation.versionNumber.short == PhpEnv.brewPhpAlias { + if installation.versionNumber.short == PhpEnvironments.brewPhpAlias { return "php" } @@ -140,7 +140,7 @@ class InstallAndUpgradeCommand: BrewCommand { onProgress(.create(value: 0.95, title: self.title, description: "Reloading PHP versions...")) // Check which version of PHP are now installed - await PhpEnv.detectPhpVersions() + await PhpEnvironments.detectPhpVersions() // Keep track of the currently installed version await MainMenu.shared.refreshActiveInstallation() diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift index 72b18e1..c8eb40f 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift @@ -55,7 +55,7 @@ class RemovePhpVersionCommand: BrewCommand { if process.terminationStatus <= 0 { onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) - await PhpEnv.detectPhpVersions() + await PhpEnvironments.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() onProgress(.create(value: 1, title: progressTitle, description: "The operation has succeeded.")) } else { diff --git a/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift b/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift index 9817111..b312449 100644 --- a/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift +++ b/phpmon/Domain/Integrations/Valet/Domains/FakeValetInteractor.swift @@ -75,7 +75,7 @@ class FakeValetInteractor: ValetInteractor { override func isolate(site: ValetSite, version: String) async throws { await delay(seconds: delayTime) - site.isolatedPhpVersion = PhpEnv.shared.cachedPhpInstallations[version] + site.isolatedPhpVersion = PhpEnvironments.shared.cachedPhpInstallations[version] site.evaluateCompatibility() } diff --git a/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift index b866f8c..8849d07 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/FakeValetSite.swift @@ -42,7 +42,7 @@ class FakeValetSite: ValetSite { self.isolatedPhpVersion = PhpInstallation(isolated) } - if PhpEnv.shared.currentInstall != nil { + if PhpEnvironments.shared.currentInstall != nil { self.evaluateCompatibility() } } diff --git a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift index 3290697..0ba1610 100644 --- a/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift +++ b/phpmon/Domain/Integrations/Valet/Sites/ValetSite.swift @@ -57,7 +57,7 @@ class ValetSite: ValetListable { /// Which version of PHP is actually used to serve this site. var servingPhpVersion: String { return self.isolatedPhpVersion?.versionNumber.short - ?? PhpEnv.phpInstall?.version.short + ?? PhpEnvironments.phpInstall?.version.short ?? "???" } @@ -98,12 +98,12 @@ class ValetSite: ValetListable { */ public func determineIsolated() { if let version = ValetSite.isolatedVersion("~/.config/valet/Nginx/\(self.name).\(self.tld)") { - if !PhpEnv.shared.cachedPhpInstallations.keys.contains(version) { + if !PhpEnvironments.shared.cachedPhpInstallations.keys.contains(version) { Log.err("The PHP version \(version) is isolated for the site \(self.name) " + "but that PHP version is unavailable.") return } - self.isolatedPhpVersion = PhpEnv.shared.cachedPhpInstallations[version] + self.isolatedPhpVersion = PhpEnvironments.shared.cachedPhpInstallations[version] } else { self.isolatedPhpVersion = nil } @@ -238,7 +238,7 @@ class ValetSite: ValetListable { return } - guard let linked = PhpEnv.phpInstall else { + guard let linked = PhpEnvironments.phpInstall else { self.isCompatibleWithPreferredPhpVersion = false return } diff --git a/phpmon/Domain/Integrations/Valet/Valet.swift b/phpmon/Domain/Integrations/Valet/Valet.swift index 303de81..f9ba951 100644 --- a/phpmon/Domain/Integrations/Valet/Valet.swift +++ b/phpmon/Domain/Integrations/Valet/Valet.swift @@ -157,7 +157,7 @@ class Valet { return } - if PhpEnv.phpInstall == nil { + if PhpEnvironments.phpInstall == nil { Log.info("Cannot validate Valet version if no PHP version is linked.") return } @@ -192,7 +192,7 @@ class Valet { that means that Valet won't work properly. */ func phpFpmConfigurationValid() async -> Bool { - guard let version = PhpEnv.shared.currentInstall?.version else { + guard let version = PhpEnvironments.shared.currentInstall?.version else { Log.info("Cannot check PHP-FPM status: no version of PHP is active") return true } diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift index 444b14b..6843daa 100644 --- a/phpmon/Domain/Menu/MainMenu+Actions.swift +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -105,7 +105,7 @@ extension MainMenu { } @objc func disableAllXdebugModes() { - guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else { + guard let file = PhpEnvironments.shared.getConfigFile(forKey: "xdebug.mode") else { Log.info("xdebug.mode could not be found in any .ini file, aborting.") return } @@ -124,7 +124,7 @@ extension MainMenu { @objc func toggleXdebugMode(sender: XdebugMenuItem) { Log.info("Switching Xdebug to mode: \(sender.mode)") - guard let file = PhpEnv.shared.getConfigFile(forKey: "xdebug.mode") else { + guard let file = PhpEnvironments.shared.getConfigFile(forKey: "xdebug.mode") else { return Log.info("xdebug.mode could not be found in any .ini file, aborting.") } @@ -226,7 +226,7 @@ extension MainMenu { } @objc func openActiveConfigFolder() { - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { // TODO: Can't open the config if no PHP version is active return } @@ -259,7 +259,7 @@ extension MainMenu { if silently { MainMenu.shared.shouldSwitchSilently = true } - if PhpEnv.shared.availablePhpVersions.contains(version) { + if PhpEnvironments.shared.availablePhpVersions.contains(version) { Task { MainMenu.shared.switchToPhpVersion(version) } } else { Task { @@ -275,18 +275,18 @@ extension MainMenu { @objc func switchToPhpVersion(_ version: String) { setBusyImage() - PhpEnv.shared.isBusy = true - PhpEnv.shared.delegate = self - PhpEnv.shared.delegate?.switcherDidStartSwitching(to: version) + PhpEnvironments.shared.isBusy = true + PhpEnvironments.shared.delegate = self + PhpEnvironments.shared.delegate?.switcherDidStartSwitching(to: version) Task(priority: .userInitiated) { [unowned self] in updatePhpVersionInStatusBar() rebuild() - await PhpEnv.switcher.performSwitch(to: version) + await PhpEnvironments.switcher.performSwitch(to: version) - PhpEnv.shared.currentInstall = ActivePhpInstallation() + PhpEnvironments.shared.currentInstall = ActivePhpInstallation() App.shared.handlePhpConfigWatcher() - PhpEnv.shared.delegate?.switcherDidCompleteSwitch(to: version) + PhpEnvironments.shared.delegate?.switcherDidCompleteSwitch(to: version) } } @@ -302,18 +302,18 @@ extension MainMenu { func switchToPhp(_ version: String) async { Task { @MainActor [self] in setBusyImage() - PhpEnv.shared.isBusy = true - PhpEnv.shared.delegate = self - PhpEnv.shared.delegate?.switcherDidStartSwitching(to: version) + PhpEnvironments.shared.isBusy = true + PhpEnvironments.shared.delegate = self + PhpEnvironments.shared.delegate?.switcherDidStartSwitching(to: version) } updatePhpVersionInStatusBar() rebuild() - await PhpEnv.switcher.performSwitch(to: version) + await PhpEnvironments.switcher.performSwitch(to: version) - PhpEnv.shared.currentInstall = ActivePhpInstallation() + PhpEnvironments.shared.currentInstall = ActivePhpInstallation() App.shared.handlePhpConfigWatcher() - PhpEnv.shared.delegate?.switcherDidCompleteSwitch(to: version) + PhpEnvironments.shared.delegate?.switcherDidCompleteSwitch(to: version) } } diff --git a/phpmon/Domain/Menu/MainMenu+Async.swift b/phpmon/Domain/Menu/MainMenu+Async.swift index e81e688..c610a7c 100644 --- a/phpmon/Domain/Menu/MainMenu+Async.swift +++ b/phpmon/Domain/Menu/MainMenu+Async.swift @@ -46,7 +46,7 @@ extension MainMenu { ] ) { if behaviours.contains(.reloadsPhpInstallation) { - PhpEnv.shared.isBusy = true + PhpEnvironments.shared.isBusy = true } if behaviours.contains(.setsBusyUI) { @@ -59,12 +59,12 @@ extension MainMenu { do { try execute() } catch let e { error = e } if behaviours.contains(.setsBusyUI) { - PhpEnv.shared.isBusy = false + PhpEnvironments.shared.isBusy = false } Task { @MainActor [self, error] in if behaviours.contains(.reloadsPhpInstallation) { - PhpEnv.shared.currentInstall = ActivePhpInstallation() + PhpEnvironments.shared.currentInstall = ActivePhpInstallation() } if behaviours.contains(.updatesMenuBarContents) { diff --git a/phpmon/Domain/Menu/MainMenu+FixMyValet.swift b/phpmon/Domain/Menu/MainMenu+FixMyValet.swift index 709856f..d685c9a 100644 --- a/phpmon/Domain/Menu/MainMenu+FixMyValet.swift +++ b/phpmon/Domain/Menu/MainMenu+FixMyValet.swift @@ -12,9 +12,9 @@ import AppKit extension MainMenu { @MainActor @objc func fixMyValet() { - let previousVersion = PhpEnv.phpInstall?.version.short + let previousVersion = PhpEnvironments.phpInstall?.version.short - if !PhpEnv.shared.availablePhpVersions.contains(PhpEnv.brewPhpAlias) { + if !PhpEnvironments.shared.availablePhpVersions.contains(PhpEnvironments.brewPhpAlias) { presentAlertForMissingFormula() return } @@ -22,7 +22,7 @@ extension MainMenu { if !BetterAlert() .withInformation( title: "alert.fix_my_valet.title".localized, - subtitle: "alert.fix_my_valet.info".localized(PhpEnv.brewPhpAlias) + subtitle: "alert.fix_my_valet.info".localized(PhpEnvironments.brewPhpAlias) ) .withPrimary(text: "alert.fix_my_valet.ok".localized) .withSecondary(text: "alert.fix_my_valet.cancel".localized) @@ -34,7 +34,7 @@ extension MainMenu { Task { @MainActor in await Actions.fixMyValet() - if previousVersion == PhpEnv.brewPhpAlias || previousVersion == nil { + if previousVersion == PhpEnvironments.brewPhpAlias || previousVersion == nil { self.presentAlertForSameVersion() } else { self.presentAlertForDifferentVersion(version: previousVersion!) @@ -74,7 +74,7 @@ extension MainMenu { alert.close(with: .alertSecondButtonReturn) MainMenu.shared.switchToPhpVersion(version) }) - .withSecondary(text: "alert.fix_my_valet_done.stay".localized(PhpEnv.brewPhpAlias)) + .withSecondary(text: "alert.fix_my_valet_done.stay".localized(PhpEnvironments.brewPhpAlias)) .withTertiary(text: "", action: { _ in NSWorkspace.shared.open(Constants.Urls.FrequentlyAskedQuestions) }) diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 7515e62..e75308b 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -32,7 +32,7 @@ extension MainMenu { */ private func onEnvironmentPass() async { // Determine what the `php` formula is aliased to - await PhpEnv.shared.determinePhpAlias() + await PhpEnvironments.shared.determinePhpAlias() // Initialize preferences _ = Preferences.shared @@ -60,7 +60,7 @@ extension MainMenu { await Brew.shared.determineVersion() // Actually detect the PHP versions - await PhpEnv.detectPhpVersions() + await PhpEnvironments.detectPhpVersions() // Check for an alias conflict await BrewDiagnostics.checkForCaskConflict() @@ -69,7 +69,7 @@ extension MainMenu { updatePhpVersionInStatusBar() // Attempt to find out if PHP-FPM is broken - PhpEnv.prepare() + PhpEnvironments.prepare() // Set up the filesystem watcher for the Homebrew binaries App.shared.prepareHomebrewWatchers() diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index a14f5d1..3efbefa 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -16,7 +16,7 @@ extension MainMenu { nonisolated func switcherDidCompleteSwitch(to version: String) { // Mark as no longer busy - PhpEnv.shared.isBusy = false + PhpEnvironments.shared.isBusy = false Task { // Things to do after reloading domain list data if Valet.installed { @@ -28,7 +28,7 @@ extension MainMenu { updatePhpVersionInStatusBar() rebuild() - if !PhpEnv.shared.validate(version) { + if !PhpEnvironments.shared.validate(version) { self.suggestFixMyValet(failed: version) return } @@ -125,7 +125,7 @@ extension MainMenu { preference: .notifyAboutVersionChange ) - guard PhpEnv.phpInstall != nil else { + guard PhpEnvironments.phpInstall != nil else { Log.err("Cannot notify about version change if PHP is unlinked") return } diff --git a/phpmon/Domain/Menu/MainMenu.swift b/phpmon/Domain/Menu/MainMenu.swift index 4d91c5b..885d999 100644 --- a/phpmon/Domain/Menu/MainMenu.swift +++ b/phpmon/Domain/Menu/MainMenu.swift @@ -78,8 +78,8 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate /** Reloads which PHP versions is currently active. */ @objc func refreshActiveInstallation() { - if !PhpEnv.shared.isBusy { - PhpEnv.shared.currentInstall = ActivePhpInstallation.load() + if !PhpEnvironments.shared.isBusy { + PhpEnvironments.shared.currentInstall = ActivePhpInstallation.load() updatePhpVersionInStatusBar() } else { Log.perf("Skipping version refresh due to busy status!") @@ -122,7 +122,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate BetterAlert().withInformation( title: "startup.unsupported_versions_explanation.title".localized, subtitle: "startup.unsupported_versions_explanation.subtitle".localized( - PhpEnv.shared.incompatiblePhpVersions + PhpEnvironments.shared.incompatiblePhpVersions .map({ version in return "• PHP \(version)" }) @@ -151,7 +151,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate /** Refreshes the icon with the PHP version. */ @objc func refreshIcon() { Task { @MainActor [self] in - if PhpEnv.shared.isBusy { + if PhpEnvironments.shared.isBusy { setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!) } else { if Preferences.preferences[.shouldDisplayDynamicIcon] as! Bool == false { @@ -161,7 +161,7 @@ class MainMenu: NSObject, NSWindowDelegate, NSMenuDelegate, PhpSwitcherDelegate // The dynamic icon has been requested let long = Preferences.preferences[.fullPhpVersionDynamicIcon] as! Bool - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { setStatusBarImage(version: "???") return } diff --git a/phpmon/Domain/Menu/StatusMenu+Items.swift b/phpmon/Domain/Menu/StatusMenu+Items.swift index afa8114..fd9ca10 100644 --- a/phpmon/Domain/Menu/StatusMenu+Items.swift +++ b/phpmon/Domain/Menu/StatusMenu+Items.swift @@ -13,7 +13,7 @@ import Cocoa extension StatusMenu { func addPhpVersionMenuItems() { - if PhpEnv.phpInstall == nil { + if PhpEnvironments.phpInstall == nil { addItem(HeaderView.asMenuItem(text: "⚠️ " + "mi_no_php_linked".localized, minimumWidth: 280)) addItems([ NSMenuItem.separator(), @@ -23,28 +23,29 @@ extension StatusMenu { return } - if PhpEnv.phpInstall!.hasErrorState { + if PhpEnvironments.phpInstall!.hasErrorState { let brokenMenuItems = ["mi_php_broken_1", "mi_php_broken_2", "mi_php_broken_3", "mi_php_broken_4"] return addItems(brokenMenuItems.map { NSMenuItem(title: $0.localized) }) } addItem(HeaderView.asMenuItem( - text: "\("mi_php_version".localized) \(PhpEnv.phpInstall!.version.long)", + text: "\("mi_php_version".localized) \(PhpEnvironments.phpInstall!.version.long)", minimumWidth: 280 // this ensures the menu is at least wide enough not to cause clipping )) } func addPhpActionMenuItems() { - if PhpEnv.shared.isBusy { + if PhpEnvironments.shared.isBusy { addItem(NSMenuItem(title: "mi_busy".localized)) return } - if PhpEnv.shared.availablePhpVersions.isEmpty && PhpEnv.shared.incompatiblePhpVersions.isEmpty { + if PhpEnvironments.shared.availablePhpVersions.isEmpty + && PhpEnvironments.shared.incompatiblePhpVersions.isEmpty { return } - if PhpEnv.shared.currentInstall == nil { + if PhpEnvironments.shared.currentInstall == nil { return } @@ -54,7 +55,7 @@ extension StatusMenu { } func addServicesManagerMenuItem() { - if PhpEnv.shared.isBusy { + if PhpEnvironments.shared.isBusy { return } @@ -66,20 +67,20 @@ extension StatusMenu { func addSwitchToPhpMenuItems() { var shortcutKey = 1 - for index in (0..<PhpEnv.shared.availablePhpVersions.count) { + for index in (0..<PhpEnvironments.shared.availablePhpVersions.count) { // Get the short and long version - let shortVersion = PhpEnv.shared.availablePhpVersions[index] - let longVersion = PhpEnv.shared.cachedPhpInstallations[shortVersion]!.versionNumber + let shortVersion = PhpEnvironments.shared.availablePhpVersions[index] + let longVersion = PhpEnvironments.shared.cachedPhpInstallations[shortVersion]!.versionNumber let long = Preferences.preferences[.fullPhpVersionDynamicIcon] as! Bool let versionString = long ? longVersion.text : shortVersion let action = #selector(MainMenu.switchToPhpVersion(sender:)) - let brew = (shortVersion == PhpEnv.brewPhpAlias) ? "php" : "php@\(shortVersion)" + let brew = (shortVersion == PhpEnvironments.brewPhpAlias) ? "php" : "php@\(shortVersion)" let menuItem = PhpMenuItem( title: "\("mi_php_switch".localized) \(versionString) (\(brew))", - action: (shortVersion == PhpEnv.phpInstall?.version.short) + action: (shortVersion == PhpEnvironments.phpInstall?.version.short) ? nil : action, keyEquivalent: "\(shortcutKey)" ) @@ -90,11 +91,11 @@ extension StatusMenu { addItem(menuItem) } - if !PhpEnv.shared.incompatiblePhpVersions.isEmpty { + if !PhpEnvironments.shared.incompatiblePhpVersions.isEmpty { addItem(NSMenuItem.separator()) addItem(NSMenuItem( title: "⚠️ " + "mi_php_unsupported".localized( - "\(PhpEnv.shared.incompatiblePhpVersions.count)" + "\(PhpEnvironments.shared.incompatiblePhpVersions.count)" ), action: #selector(MainMenu.showIncompatiblePhpVersionsAlert) )) @@ -175,7 +176,7 @@ extension StatusMenu { ), NSMenuItem( title: "mi_update_global_composer".localized, - action: PhpEnv.shared.isBusy + action: PhpEnvironments.shared.isBusy ? nil : #selector(MainMenu.updateGlobalComposerDependencies), keyEquivalent: "g", @@ -187,7 +188,7 @@ extension StatusMenu { // MARK: - Stats func addStatsMenuItem() { - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { Log.info("Not showing stats menu item if no PHP version is linked.") return } @@ -204,7 +205,7 @@ extension StatusMenu { // MARK: - Extensions func addExtensionsMenuItems() { - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { Log.info("Not showing extensions menu items if no PHP version is linked.") return } @@ -311,7 +312,7 @@ extension StatusMenu { if Valet.installed { items.append(contentsOf: [ NSMenuItem.separator(), - NSMenuItem(title: "mi_fix_my_valet".localized(PhpEnv.brewPhpAlias), + NSMenuItem(title: "mi_fix_my_valet".localized(PhpEnvironments.brewPhpAlias), action: #selector(MainMenu.fixMyValet), toolTip: "mi_fix_my_valet_tooltip".localized), NSMenuItem(title: "mi_fix_brew_permissions".localized(), diff --git a/phpmon/Domain/Menu/StatusMenu.swift b/phpmon/Domain/Menu/StatusMenu.swift index 84e8822..1e995be 100644 --- a/phpmon/Domain/Menu/StatusMenu.swift +++ b/phpmon/Domain/Menu/StatusMenu.swift @@ -13,12 +13,12 @@ class StatusMenu: NSMenu { addPhpVersionMenuItems() addItem(NSMenuItem.separator()) - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayGlobalVersionSwitcher) { + if PhpEnvironments.phpInstall != nil && Preferences.isEnabled(.displayGlobalVersionSwitcher) { addPhpActionMenuItems() addItem(NSMenuItem.separator()) } - if PhpEnv.phpInstall != nil && Valet.installed && Preferences.isEnabled(.displayServicesManager) { + if PhpEnvironments.phpInstall != nil && Valet.installed && Preferences.isEnabled(.displayServicesManager) { addServicesManagerMenuItem() addItem(NSMenuItem.separator()) } @@ -28,23 +28,23 @@ class StatusMenu: NSMenu { addItem(NSMenuItem.separator()) } - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayPhpConfigFinder) { + if PhpEnvironments.phpInstall != nil && Preferences.isEnabled(.displayPhpConfigFinder) { addConfigurationMenuItems() addItem(NSMenuItem.separator()) } - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayComposerToolkit) { + if PhpEnvironments.phpInstall != nil && Preferences.isEnabled(.displayComposerToolkit) { addComposerMenuItems() addItem(NSMenuItem.separator()) } - if !PhpEnv.shared.isBusy { - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayLimitsWidget) { + if !PhpEnvironments.shared.isBusy { + if PhpEnvironments.phpInstall != nil && Preferences.isEnabled(.displayLimitsWidget) { addStatsMenuItem() addItem(NSMenuItem.separator()) } - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayExtensions) { + if PhpEnvironments.phpInstall != nil && Preferences.isEnabled(.displayExtensions) { addExtensionsMenuItems() NSMenuItem.separator() @@ -53,11 +53,11 @@ class StatusMenu: NSMenu { addPhpDoctorMenuItem() - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayPresets) { + if PhpEnvironments.phpInstall != nil && Preferences.isEnabled(.displayPresets) { addPresetsMenuItem() } - if PhpEnv.phpInstall != nil && Preferences.isEnabled(.displayMisc) { + if PhpEnvironments.phpInstall != nil && Preferences.isEnabled(.displayMisc) { addFirstAidAndServicesMenuItems() } } diff --git a/phpmon/Domain/PHP/PhpGuard.swift b/phpmon/Domain/PHP/PhpGuard.swift index c545a19..7c2cc71 100644 --- a/phpmon/Domain/PHP/PhpGuard.swift +++ b/phpmon/Domain/PHP/PhpGuard.swift @@ -13,7 +13,7 @@ class PhpGuard { var currentVersion: String? init() { - guard let linked = PhpEnv.phpInstall else { + guard let linked = PhpEnvironments.phpInstall else { Log.warn("PHP Guard is unable to determine the current PHP version!") return } diff --git a/phpmon/Domain/Presets/Preset.swift b/phpmon/Domain/Presets/Preset.swift index 3af88b4..3233267 100644 --- a/phpmon/Domain/Presets/Preset.swift +++ b/phpmon/Domain/Presets/Preset.swift @@ -88,7 +88,7 @@ struct Preset: Codable, Equatable { applyConfigurationValue(key: conf.key, value: conf.value ?? "") } - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { Log.info("Cannot toggle extensions if no PHP version is linked.") return } @@ -129,12 +129,12 @@ struct Preset: Codable, Equatable { // MARK: - Apply Functionality private func switchToPhpVersionIfValid() async -> Bool { - if PhpEnv.shared.currentInstall?.version.short == self.version! { + if PhpEnvironments.shared.currentInstall?.version.short == self.version! { Log.info("The version we are supposed to switch to is already active.") return true } - if PhpEnv.shared.availablePhpVersions.first(where: { $0 == self.version }) != nil { + if PhpEnvironments.shared.availablePhpVersions.first(where: { $0 == self.version }) != nil { await MainMenu.shared.switchToPhp(self.version!) return true } else { @@ -144,7 +144,7 @@ struct Preset: Codable, Equatable { subtitle: "alert.php_switch_unavailable.subtitle".localized(version!), description: "alert.php_switch_unavailable.info".localized( version!, - PhpEnv.shared.availablePhpVersions.joined(separator: ", ") + PhpEnvironments.shared.availablePhpVersions.joined(separator: ", ") ) ).withPrimary( text: "alert.php_switch_unavailable.ok".localized @@ -155,7 +155,7 @@ struct Preset: Codable, Equatable { } private func applyConfigurationValue(key: String, value: String) { - guard let file = PhpEnv.shared.getConfigFile(forKey: key) else { + guard let file = PhpEnvironments.shared.getConfigFile(forKey: key) else { return } @@ -218,7 +218,7 @@ struct Preset: Codable, Equatable { return nil } - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { return nil } @@ -235,7 +235,7 @@ struct Preset: Codable, Equatable { private func diffExtensions() -> [String: Bool] { var items: [String: Bool] = [:] - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { fatalError("If no PHP version is linked, diffing extensions is not possible.") } @@ -257,7 +257,7 @@ struct Preset: Codable, Equatable { var items: [String: String?] = [:] for (key, _) in self.configuration { - guard let file = PhpEnv.shared.getConfigFile(forKey: key) else { + guard let file = PhpEnvironments.shared.getConfigFile(forKey: key) else { break } diff --git a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift index d73a22a..8475cff 100644 --- a/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift +++ b/phpmon/Domain/SwiftUI/Domains/VersionPopoverView.swift @@ -97,7 +97,7 @@ struct VersionPopoverView: View { if site.isolatedPhpVersion != nil { information += "alert.composer_php_isolated.desc".localized( site.isolatedPhpVersion!.versionNumber.short, - PhpEnv.phpInstall?.version.short ?? "???" + PhpEnvironments.phpInstall?.version.short ?? "???" ) information += "\n\n" } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index a814641..682c7c7 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -51,7 +51,7 @@ struct PhpFormulaeView: View { } } - await PhpEnv.detectPhpVersions() + await PhpEnvironments.detectPhpVersions() await self.handler.refreshPhpVersions(loadOutdated: false) await self.handler.refreshPhpVersions(loadOutdated: true) self.status.busy = false @@ -244,7 +244,7 @@ struct PhpFormulaeView: View { public func confirmUninstall(_ formula: BrewFormula) async { // Disallow removal of the currently active versipn - if formula.installedVersion == PhpEnv.shared.currentInstall?.version.text { + if formula.installedVersion == PhpEnvironments.shared.currentInstall?.version.text { self.presentErrorAlert( title: "phpman.uninstall_prevented.title".localized, description: "phpman.uninstall_prevented.desc".localized, @@ -297,7 +297,7 @@ struct PhpFormulaeView: View { } public func setBusyStatus(_ busy: Bool) { - PhpEnv.shared.isBusy = busy + PhpEnvironments.shared.isBusy = busy if busy { Task { @MainActor in MainMenu.shared.setBusyImage() diff --git a/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift b/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift index f745f64..6ba9e7f 100644 --- a/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift +++ b/phpmon/Domain/Warnings/Services/PhpConfigChecker.swift @@ -28,7 +28,7 @@ class PhpConfigChecker { FileExistenceCheck(condition: { Valet.installed }, path: "php-fpm.d/valet-fpm.conf") ] - for version in PhpEnv.shared.availablePhpVersions { + for version in PhpEnvironments.shared.availablePhpVersions { for file in shouldExist { // Early exit in case our condition is not met if file.condition != nil && file.condition!() == false { diff --git a/phpmon/Domain/Watcher/App+BrewWatch.swift b/phpmon/Domain/Watcher/App+BrewWatch.swift index 5247daf..6986b7b 100644 --- a/phpmon/Domain/Watcher/App+BrewWatch.swift +++ b/phpmon/Domain/Watcher/App+BrewWatch.swift @@ -27,11 +27,11 @@ extension App { } public func onHomebrewPhpModification() async { - // let previous = PhpEnv.shared.currentInstall?.version.text + // let previous = PhpEnvironments.shared.currentInstall?.version.text Log.info("Something changed in the Homebrew binary directory...") - await PhpEnv.detectPhpVersions() + await PhpEnvironments.detectPhpVersions() await MainMenu.shared.refreshActiveInstallation() - // let new = PhpEnv.shared.currentInstall?.version.text + // let new = PhpEnvironments.shared.currentInstall?.version.text // TODO: // Check if the new and previous version are different diff --git a/phpmon/Domain/Watcher/App+ConfigWatch.swift b/phpmon/Domain/Watcher/App+ConfigWatch.swift index ac7bf95..9588b80 100644 --- a/phpmon/Domain/Watcher/App+ConfigWatch.swift +++ b/phpmon/Domain/Watcher/App+ConfigWatch.swift @@ -33,7 +33,7 @@ extension App { return } - guard let install = PhpEnv.phpInstall else { + guard let install = PhpEnvironments.phpInstall else { Log.info("It appears as if no PHP installation is currently active.") Log.info("The FS watcher will be disabled until a PHP install is active.") return From 0fe9281e3c2069aab61726c2a0d5c36f20670a06 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Mon, 15 May 2023 19:06:58 +0200 Subject: [PATCH 171/194] =?UTF-8?q?=F0=9F=94=A7=20Fix=20deploy=20targets?= =?UTF-8?q?=20for=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 36 +++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 43b8b11..550ce23 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3417,7 +3417,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3435,7 +3435,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3453,7 +3453,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3471,7 +3471,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3488,7 +3488,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3506,7 +3506,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3524,7 +3524,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3542,7 +3542,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3649,7 +3649,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -3760,7 +3760,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -3904,7 +3904,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -3920,7 +3920,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -3937,7 +3937,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -4077,7 +4077,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -4093,7 +4093,7 @@ DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.feature-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -4110,7 +4110,7 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.ui-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -4134,7 +4134,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; @@ -4155,7 +4155,7 @@ "@executable_path/../Frameworks", "@loader_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PRODUCT_BUNDLE_IDENTIFIER = "com.nicoverbruggen.phpmon.unit-tests"; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; From 7f04dd5fcb481b9633070e596a37a96f948a01c6 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Mon, 15 May 2023 19:15:02 +0200 Subject: [PATCH 172/194] =?UTF-8?q?=E2=9C=85=20Fix=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/unit/Parsers/HomebrewUpgradableTest.swift | 5 ++--- tests/unit/Testables/Shell/RealShellTest.swift | 4 ++-- tests/unit/Versions/PhpVersionDetectionTest.swift | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/unit/Parsers/HomebrewUpgradableTest.swift b/tests/unit/Parsers/HomebrewUpgradableTest.swift index aa46be0..a4adf27 100644 --- a/tests/unit/Parsers/HomebrewUpgradableTest.swift +++ b/tests/unit/Parsers/HomebrewUpgradableTest.swift @@ -20,15 +20,14 @@ class HomebrewUpgradableTest: XCTestCase { : .instant(try! String(contentsOf: Self.outdatedFileUrl)) ]) - let env = PhpEnv.shared + let env = PhpEnvironments.shared env.cachedPhpInstallations = [ "8.1": PhpInstallation("8.1.16"), "8.2": PhpInstallation("8.2.3"), "7.4": PhpInstallation("7.4.11") ] - let brew = Brew.shared - let data = await brew.getPhpVersions() + let data = await BrewFormulaeHandler().loadPhpVersions(loadOutdated: true) XCTAssertTrue(data.contains(where: { formula in formula.installedVersion == "8.1.16" && formula.upgradeVersion == "8.1.17" diff --git a/tests/unit/Testables/Shell/RealShellTest.swift b/tests/unit/Testables/Shell/RealShellTest.swift index 685b0b6..47ac6e1 100644 --- a/tests/unit/Testables/Shell/RealShellTest.swift +++ b/tests/unit/Testables/Shell/RealShellTest.swift @@ -60,7 +60,7 @@ class RealShellTest: XCTestCase { expectation.fulfill() } - wait(for: [expectation], timeout: 5.0) + await fulfillment(of: [expectation], timeout: 5.0) } func test_system_processes_run_in_parallel() async { @@ -74,6 +74,6 @@ class RealShellTest: XCTestCase { } await thing() - wait(for: [expectation], timeout: 1.0) + await fulfillment(of: [expectation], timeout: 5.0) } } diff --git a/tests/unit/Versions/PhpVersionDetectionTest.swift b/tests/unit/Versions/PhpVersionDetectionTest.swift index b496495..ddc1d63 100644 --- a/tests/unit/Versions/PhpVersionDetectionTest.swift +++ b/tests/unit/Versions/PhpVersionDetectionTest.swift @@ -11,7 +11,7 @@ import XCTest class PhpVersionDetectionTest: XCTestCase { func test_can_detect_valid_php_versions() async throws { - let outcome = await PhpEnv.shared.extractPhpVersions( + let outcome = await PhpEnvironments.shared.extractPhpVersions( from: [ "", // empty lines should be omitted "php@8.0", From 29d17b38800cacd101c319432d3137e7b88cf741 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Mon, 15 May 2023 19:44:50 +0200 Subject: [PATCH 173/194] =?UTF-8?q?=E2=9C=85=20Ensure=20all=20UI=20tests?= =?UTF-8?q?=20pass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/Shared/TestableConfigurations.swift | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/Shared/TestableConfigurations.swift b/tests/Shared/TestableConfigurations.swift index c04ef26..ee3fdcb 100644 --- a/tests/Shared/TestableConfigurations.swift +++ b/tests/Shared/TestableConfigurations.swift @@ -37,6 +37,20 @@ class TestableConfigurations { """), ], shellOutput: [ + "/opt/homebrew/bin/brew --version" + : .instant(""" + Homebrew 4.0.17-93-gb0dc84b + Homebrew/homebrew-core (git revision 4113c35d80d; last commit 2023-04-06) + Homebrew/homebrew-cask (git revision bcd8ecb74c; last commit 2023-04-06) + """), + "/opt/homebrew/bin/php -v" + : .instant(""" + PHP 8.2.6 (cli) (built: May 11 2023 12:51:38) (NTS) + Copyright (c) The PHP Group + Zend Engine v4.2.6, Copyright (c) Zend Technologies + with Zend OPcache v8.2.6, Copyright (c), by Zend Technologies + with Xdebug v3.2.0, Copyright (c) 2002-2022, by Derick Rethans + """), "sysctl -n sysctl.proc_translated" : .instant("0"), "id -un" @@ -116,7 +130,7 @@ class TestableConfigurations { cask 'phpmon-dev' do depends_on formula: 'gnu-sed' - version '6.0.0_2000' + version '6.0.0_1000' sha256 '1cb147bd1b1fbd52971d90dff577465b644aee7c878f15ede57f46e8f217067a' url 'https://github.com/nicoverbruggen/phpmon/releases/download/v6.0/phpmon-dev.zip' @@ -152,6 +166,9 @@ class TestableConfigurations { "/opt/homebrew/bin/php -r echo ini_get('memory_limit');": "512M", "/opt/homebrew/bin/php -r echo ini_get('upload_max_filesize');": "512M", "/opt/homebrew/bin/php -r echo ini_get('post_max_size');": "512M", + "/opt/homebrew/opt/php@8.2/bin/php -v": "OK (no full output needed for testing)", + "/opt/homebrew/opt/php@8.1/bin/php -v": "OK (no full output needed for testing)", + "/opt/homebrew/opt/php@8.0/bin/php -v": "OK (no full output needed for testing)" ], preferenceOverrides: [ .automaticBackgroundUpdateCheck: false From 402e65f82db3411bef9f93131829556a95e4ae2c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 17 May 2023 20:02:57 +0200 Subject: [PATCH 174/194] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Apply=20recommenda?= =?UTF-8?q?tions=20about=20dead=20code=20stripping?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 33 ++++++++++++++++++- .../xcschemes/PHP Monitor DEV.xcscheme | 2 +- .../xcschemes/PHP Monitor EAP.xcscheme | 2 +- .../PHP Monitor Self-Updater.xcscheme | 2 +- .../xcschemes/PHP Monitor.xcscheme | 2 +- .../xcschemes/Unit Tests.xcscheme | 2 +- 6 files changed, 37 insertions(+), 6 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 550ce23..1898aef 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -2118,8 +2118,9 @@ C41C1B2B22B0097F00E7CF16 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 1420; - LastUpgradeCheck = 1420; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = "Nico Verbruggen"; TargetAttributes = { C406A5EF298AD2CE00B5B85A = { @@ -3110,6 +3111,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 30; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3143,6 +3145,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 30; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3176,6 +3179,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 30; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3209,6 +3213,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 30; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3414,6 +3419,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3432,6 +3438,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3450,6 +3457,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3468,6 +3476,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3486,6 +3495,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 12.4; @@ -3504,6 +3514,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 12.4; @@ -3522,6 +3533,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 12.4; @@ -3540,6 +3552,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 12.4; @@ -3587,6 +3600,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -3617,6 +3631,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1230; + DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3641,6 +3656,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3691,6 +3707,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -3728,6 +3745,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1230; + DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3752,6 +3770,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3802,6 +3821,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; @@ -3839,6 +3859,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1230; + DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -3871,6 +3892,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 30; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -3896,6 +3918,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3917,6 +3940,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -3935,6 +3959,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 12.4; @@ -3982,6 +4007,7 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; @@ -4012,6 +4038,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1230; + DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; @@ -4044,6 +4071,7 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 30; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; ENABLE_HARDENED_RUNTIME = YES; GENERATE_INFOPLIST_FILE = YES; @@ -4069,6 +4097,7 @@ buildSettings = { CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -4090,6 +4119,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = ""; @@ -4108,6 +4138,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; + DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 8M54J5J787; GENERATE_INFOPLIST_FILE = YES; MACOSX_DEPLOYMENT_TARGET = 12.4; diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme index 9f9fe5d..2e915fa 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor DEV.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1420" + LastUpgradeVersion = "1430" version = "1.3"> <BuildAction parallelizeBuildables = "YES" diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme index a2eb38c..4aa04cf 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor EAP.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1420" + LastUpgradeVersion = "1430" version = "1.3"> <BuildAction parallelizeBuildables = "YES" diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme index 4e093b7..f2e4baa 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor Self-Updater.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1420" + LastUpgradeVersion = "1430" version = "1.3"> <BuildAction parallelizeBuildables = "YES" diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor.xcscheme index e80f43c..47d77b1 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/PHP Monitor.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1420" + LastUpgradeVersion = "1430" version = "1.7"> <BuildAction parallelizeBuildables = "YES" diff --git a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/Unit Tests.xcscheme b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/Unit Tests.xcscheme index 5e60c5e..325c87d 100644 --- a/PHP Monitor.xcodeproj/xcshareddata/xcschemes/Unit Tests.xcscheme +++ b/PHP Monitor.xcodeproj/xcshareddata/xcschemes/Unit Tests.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1420" + LastUpgradeVersion = "1430" version = "1.3"> <BuildAction parallelizeBuildables = "YES" From 20a0059f73208f614596d6836257ac017d023e45 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 17 May 2023 20:10:41 +0200 Subject: [PATCH 175/194] =?UTF-8?q?=F0=9F=91=8C=20Alter=20update=20notific?= =?UTF-8?q?ation=20for=20DEV=20&=20EAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/App/AppUpdater.swift | 18 +++++++++++++----- phpmon/Domain/Menu/MainMenu+Startup.swift | 3 --- phpmon/Localizable.strings | 3 ++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/phpmon/Domain/App/AppUpdater.swift b/phpmon/Domain/App/AppUpdater.swift index 43b2fde..a2a985c 100644 --- a/phpmon/Domain/App/AppUpdater.swift +++ b/phpmon/Domain/App/AppUpdater.swift @@ -187,11 +187,19 @@ class AppUpdater { // Cleanup the upgrade.success file if FileSystem.fileExists("~/.config/phpmon/updater/upgrade.success") { Task { @MainActor in - LocalNotification.send( - title: "notification.phpmon_updated.title".localized, - subtitle: "notification.phpmon_updated.desc".localized(App.shortVersion), - preference: nil - ) + if App.identifier.contains(".phpmon.eap") || App.identifier.contains(".phpmon.dev") { + LocalNotification.send( + title: "notification.phpmon_updated.title".localized, + subtitle: "notification.phpmon_updated_dev.desc".localized(App.shortVersion, App.bundleVersion), + preference: nil + ) + } else { + LocalNotification.send( + title: "notification.phpmon_updated.title".localized, + subtitle: "notification.phpmon_updated.desc".localized(App.shortVersion), + preference: nil + ) + } } Log.info("The `upgrade.success` file was found! An update was installed. Cleaning up...") diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index e75308b..8a71c15 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -124,9 +124,6 @@ extension MainMenu { // Check if the linked version has changed between launches of phpmon PhpGuard().compareToLastGlobalVersion() - // Check if an update was performed earlier - AppUpdater.checkIfUpdateWasPerformed() - // We are ready! Log.info("PHP Monitor is ready to serve!") diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 76bd2ce..5b2a263 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -426,7 +426,8 @@ This has no effect on other terminals, only for the particular terminal session "notification.preset_reverted_desc" = "The last preset you applied has been undone. Your previous configuration is now active."; "notification.phpmon_updated.title" = "PHP Monitor has been updated!"; -"notification.phpmon_updated.desc" = "You are now running PHP Monitor v%@."; +"notification.phpmon_updated.desc" = "You are now running PHP Monitor v%@. Thanks for staying up-to-date!"; +"notification.phpmon_updated_dev.desc" = "PHP Monitor v%@ (build %@) is now installed and active."; // Composer Update "alert.composer_missing.title" = "Composer not found!"; From c4749673c941b61bdf2767ac360787b03af3228c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 17 May 2023 20:13:13 +0200 Subject: [PATCH 176/194] =?UTF-8?q?=F0=9F=94=A7=20Bump=20build=20number=20?= =?UTF-8?q?for=20EAP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 1898aef..8c3103a 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3362,7 +3362,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1230; + CURRENT_PROJECT_VERSION = 1235; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3392,7 +3392,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1230; + CURRENT_PROJECT_VERSION = 1235; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3630,7 +3630,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1230; + CURRENT_PROJECT_VERSION = 1235; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3744,7 +3744,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1230; + CURRENT_PROJECT_VERSION = 1235; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3858,7 +3858,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1230; + CURRENT_PROJECT_VERSION = 1235; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -4037,7 +4037,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1230; + CURRENT_PROJECT_VERSION = 1235; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; From a8cf6daa940e0f76b4e41567945587434a5e3a2b Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 17 May 2023 12:07:20 +0200 Subject: [PATCH 177/194] =?UTF-8?q?=F0=9F=91=8C=20Check=20for=20/usr/local?= =?UTF-8?q?/homebrew=20directory=20(#251)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For this to work, Homebrew cannot be installed in /usr/local, which means that the /usr/local/Cellar folder will be missing and the folder /usr/local/homebrew will exist. --- phpmon/Common/Core/Paths.swift | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/phpmon/Common/Core/Paths.swift b/phpmon/Common/Core/Paths.swift index 18c80e6..fffecb5 100644 --- a/phpmon/Common/Core/Paths.swift +++ b/phpmon/Common/Core/Paths.swift @@ -19,7 +19,17 @@ public class Paths { private var userName: String init() { + // Assume the default directory is correct baseDir = App.architecture != "x86_64" ? .opt : .usr + + // Ensure that if a different location is used, it takes precendence + if baseDir == .usr + && FileSystem.directoryExists("/usr/local/homebrew") + && !FileSystem.directoryExists("/usr/local/Cellar") { + Log.warn("Using /usr/local/homebrew as base directory!") + baseDir = .usr_hb + } + userName = identity() Log.info("The current username is `\(userName)`.") } @@ -100,6 +110,8 @@ public class Paths { Paths.composer = "/usr/local/bin/composer" } else if FileSystem.fileExists("/opt/homebrew/bin/composer") { Paths.composer = "/opt/homebrew/bin/composer" + } else if FileSystem.fileExists("/usr/local/homebrew/bin/composer") { + Paths.composer = "/usr/local/homebrew/bin/composer" } else { Paths.composer = nil Log.warn("Composer was not found.") @@ -111,6 +123,7 @@ public class Paths { public enum HomebrewDir: String { case opt = "/opt/homebrew" case usr = "/usr/local" + case usr_hb = "/usr/local/homebrew" } } From 2848b4dcd2dc0334515c351c7d0e97b808125abe Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Thu, 18 May 2023 12:41:08 +0200 Subject: [PATCH 178/194] =?UTF-8?q?=F0=9F=94=A5=20Cleanup=20and=20Valet=20?= =?UTF-8?q?checks=20after=20version=20switch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 ---------- phpmon/Common/Core/Helpers.swift | 7 ------- phpmon/Domain/App/App.swift | 3 --- phpmon/Domain/App/EnvironmentManager.swift | 22 ---------------------- phpmon/Domain/Menu/MainMenu+Startup.swift | 2 -- phpmon/Domain/Menu/MainMenu+Switcher.swift | 13 ++++++++++--- 6 files changed, 10 insertions(+), 47 deletions(-) delete mode 100644 phpmon/Domain/App/EnvironmentManager.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 8c3103a..84f4124 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -373,7 +373,6 @@ C471E84828F9BB650021E251 /* EnvironmentCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */; }; C471E84A28F9BB650021E251 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C471E84B28F9BB650021E251 /* ServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E76132854A65300B4FE0C /* ServicesManager.swift */; }; - C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C471E84D28F9BB650021E251 /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C471E84E28F9BB650021E251 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; }; C471E84F28F9BB650021E251 /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */; }; @@ -462,7 +461,6 @@ C471E8AB28F9BB8F0021E251 /* EnvironmentCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */; }; C471E8AD28F9BB8F0021E251 /* AppVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40FE736282ABA4F00A302C2 /* AppVersion.swift */; }; C471E8AE28F9BB8F0021E251 /* ServicesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C45E76132854A65300B4FE0C /* ServicesManager.swift */; }; - C471E8AF28F9BB8F0021E251 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C471E8B028F9BB8F0021E251 /* Valet+Alerts.swift in Sources */ = {isa = PBXBuildFile; fileRef = C40C7F2727721FF600DDDCDC /* Valet+Alerts.swift */; }; C471E8B128F9BB8F0021E251 /* MainMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */; }; C471E8B228F9BB8F0021E251 /* MainMenu+Startup.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4C3ED402783497000AB15D8 /* MainMenu+Startup.swift */; }; @@ -589,8 +587,6 @@ C495F5B028A42E080087F70A /* EnvironmentCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */; }; C4998F0A2617633900B2526E /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; C4998F0B2617633900B2526E /* PreferencesWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4998F092617633900B2526E /* PreferencesWindowController.swift */; }; - C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; - C4A6957728D23EE300A14CF8 /* EnvironmentManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */; }; C4A81CA428C67101008DD9D1 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; C4A81CA528C67101008DD9D1 /* PMTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4A81CA328C67101008DD9D1 /* PMTableView.swift */; }; C4AC51FC27E27F47008528CA /* DomainListKindCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */; }; @@ -996,7 +992,6 @@ C4998F092617633900B2526E /* PreferencesWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesWindowController.swift; sourceTree = "<group>"; }; C49EAA5129B12A5A00AB28FC /* Measurements.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Measurements.swift; sourceTree = "<group>"; }; C49EAA5629B1689200AB28FC /* App+BrewWatch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "App+BrewWatch.swift"; sourceTree = "<group>"; }; - C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnvironmentManager.swift; sourceTree = "<group>"; }; C4A81CA328C67101008DD9D1 /* PMTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PMTableView.swift; sourceTree = "<group>"; }; C4AC51FB27E27F47008528CA /* DomainListKindCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DomainListKindCell.swift; sourceTree = "<group>"; }; C4ACA38E25C754C100060C66 /* PhpExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhpExtension.swift; sourceTree = "<group>"; }; @@ -1725,7 +1720,6 @@ C4D8016522B1584700C6DA1B /* Startup.swift */, C495F5AE28A42E080087F70A /* EnvironmentCheck.swift */, C40FE736282ABA4F00A302C2 /* AppVersion.swift */, - C4A6957528D23EE300A14CF8 /* EnvironmentManager.swift */, C409349C298EE8E900D25014 /* AppUpdater.swift */, ); path = App; @@ -2329,7 +2323,6 @@ C45B914E295608E300F4EC78 /* ValetServicesManager.swift in Sources */, C4D5576429C77CC5001A44CD /* PhpVersionManagerWC.swift in Sources */, C4E49DED28F764A00026AC4E /* TestableCommand.swift in Sources */, - C4A6957628D23EE300A14CF8 /* EnvironmentManager.swift in Sources */, C41E871A2763D42300161EE0 /* DomainListVC+ContextMenu.swift in Sources */, C40C7F2827721FF600DDDCDC /* Valet+Alerts.swift in Sources */, C463E380284930EE00422731 /* PresetHelper.swift in Sources */, @@ -2510,7 +2503,6 @@ C471E84A28F9BB650021E251 /* AppVersion.swift in Sources */, C471E84B28F9BB650021E251 /* ServicesManager.swift in Sources */, C4D4CB3929C109CF00DB9F93 /* InternalSwitcher+Valet.swift in Sources */, - C471E84C28F9BB650021E251 /* EnvironmentManager.swift in Sources */, C471E84D28F9BB650021E251 /* Valet+Alerts.swift in Sources */, C471E84E28F9BB650021E251 /* MainMenu.swift in Sources */, C40934A4298EEB2C00D25014 /* CaskFile.swift in Sources */, @@ -2706,7 +2698,6 @@ C471E8AB28F9BB8F0021E251 /* EnvironmentCheck.swift in Sources */, C471E8AD28F9BB8F0021E251 /* AppVersion.swift in Sources */, C471E8AE28F9BB8F0021E251 /* ServicesManager.swift in Sources */, - C471E8AF28F9BB8F0021E251 /* EnvironmentManager.swift in Sources */, C471E8B028F9BB8F0021E251 /* Valet+Alerts.swift in Sources */, C471E8B128F9BB8F0021E251 /* MainMenu.swift in Sources */, C471E8B228F9BB8F0021E251 /* MainMenu+Startup.swift in Sources */, @@ -3046,7 +3037,6 @@ C4B79EB729CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C4B5853F2770FE3900DA4FBE /* Paths.swift in Sources */, C481F79A26164A7C004FBCFF /* Preferences.swift in Sources */, - C4A6957728D23EE300A14CF8 /* EnvironmentManager.swift in Sources */, C4E0F7EE27BEBDA9007475F2 /* NSWindowExtension.swift in Sources */, C4A81CA528C67101008DD9D1 /* PMTableView.swift in Sources */, C45E76152854A65300B4FE0C /* ServicesManager.swift in Sources */, diff --git a/phpmon/Common/Core/Helpers.swift b/phpmon/Common/Core/Helpers.swift index e35af77..bd2a7f8 100644 --- a/phpmon/Common/Core/Helpers.swift +++ b/phpmon/Common/Core/Helpers.swift @@ -8,13 +8,6 @@ // MARK: Common Shell Commands -/** - Runs a `valet` command. Defaults to running as superuser. - */ -func valet(_ command: String, sudo: Bool = true) async -> String { - return await Shell.pipe("\(sudo ? "sudo " : "")" + "\(Paths.valet) \(command)").out -} - /** Runs a `brew` command. Can run as superuser. */ diff --git a/phpmon/Domain/App/App.swift b/phpmon/Domain/App/App.swift index 1803555..a73922a 100644 --- a/phpmon/Domain/App/App.swift +++ b/phpmon/Domain/App/App.swift @@ -62,9 +62,6 @@ class App { // MARK: Variables - /** Technical information about the current environment. */ - var environment = EnvironmentManager() - /** The list of preferences that are currently active. */ var preferences: [PreferenceName: Bool]! diff --git a/phpmon/Domain/App/EnvironmentManager.swift b/phpmon/Domain/App/EnvironmentManager.swift deleted file mode 100644 index 3d5788c..0000000 --- a/phpmon/Domain/App/EnvironmentManager.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// EnvironmentManager.swift -// PHP Monitor -// -// Created by Nico Verbruggen on 14/09/2022. -// Copyright © 2023 Nico Verbruggen. All rights reserved. -// - -import Foundation - -public class EnvironmentManager { - static var values: [EnvironmentProperty: Bool] = [:] - - public func process() async { - Self.values[.hasValetInstalled] = Valet.shared.installed - } -} - -public enum EnvironmentProperty { - case hasHomebrewInstalled - case hasValetInstalled -} diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 8a71c15..cab3f64 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -18,8 +18,6 @@ extension MainMenu { self.setStatusBar(image: NSImage(named: NSImage.Name("StatusBarIcon"))!) } - await App.shared.environment.process() - if await Startup().checkEnvironment() { await self.onEnvironmentPass() } else { diff --git a/phpmon/Domain/Menu/MainMenu+Switcher.swift b/phpmon/Domain/Menu/MainMenu+Switcher.swift index 3efbefa..cafc6f1 100644 --- a/phpmon/Domain/Menu/MainMenu+Switcher.swift +++ b/phpmon/Domain/Menu/MainMenu+Switcher.swift @@ -28,7 +28,7 @@ extension MainMenu { updatePhpVersionInStatusBar() rebuild() - if !PhpEnvironments.shared.validate(version) { + if Valet.installed && !PhpEnvironments.shared.validate(version) { self.suggestFixMyValet(failed: version) return } @@ -46,7 +46,15 @@ extension MainMenu { } // Check if Valet still works correctly - self.checkForPlatformIssues() + if Valet.installed { + self.checkForPlatformIssues() + } + + // Check if the silent switch occurred and reset it + if shouldSwitchSilently { + shouldSwitchSilently = false + return + } // Update stats Stats.incrementSuccessfulSwitchCount() @@ -115,7 +123,6 @@ extension MainMenu { @MainActor private func notifyAboutVersionChange(to version: String) { if shouldSwitchSilently { - shouldSwitchSilently = false return } From 326e5c58e2e6d65f573b83bb1209f3f6ee5b0199 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Fri, 19 May 2023 11:49:50 +0200 Subject: [PATCH 179/194] =?UTF-8?q?=F0=9F=90=9B=20Empty=20byte=20count=20n?= =?UTF-8?q?ow=20returns=20a=20warning=20symbol?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Common/PHP/ActivePhpInstallation.swift | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/phpmon/Common/PHP/ActivePhpInstallation.swift b/phpmon/Common/PHP/ActivePhpInstallation.swift index 0a94d45..c4ea2ea 100644 --- a/phpmon/Common/PHP/ActivePhpInstallation.swift +++ b/phpmon/Common/PHP/ActivePhpInstallation.swift @@ -129,9 +129,18 @@ class ActivePhpInstallation { return "∞" } + if value.isEmpty { + return "⚠️" + } + // Check if the syntax is valid otherwise let regex = try! NSRegularExpression(pattern: #"^([0-9]*)(K|M|G|)$"#, options: []) - let match = regex.matches(in: value, options: [], range: NSRange(location: 0, length: value.count)).first + + let match = regex.matches( + in: value, options: [], + range: NSRange(location: 0, length: value.count) + ).first + return (match == nil) ? "⚠️" : "\(value)B" } From 82626b71740a011c23c6635598f4d7310142c710 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Mon, 22 May 2023 17:14:21 +0200 Subject: [PATCH 180/194] =?UTF-8?q?=F0=9F=94=A7=20Bump=20build=20for=20new?= =?UTF-8?q?=20DEV=20build?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 84f4124..78030cf 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3352,7 +3352,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1235; + CURRENT_PROJECT_VERSION = 1240; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3382,7 +3382,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1235; + CURRENT_PROJECT_VERSION = 1240; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3620,7 +3620,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1235; + CURRENT_PROJECT_VERSION = 1240; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3734,7 +3734,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1235; + CURRENT_PROJECT_VERSION = 1240; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3848,7 +3848,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1235; + CURRENT_PROJECT_VERSION = 1240; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -4027,7 +4027,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1235; + CURRENT_PROJECT_VERSION = 1240; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; From 7f4c6878e4f87f77117f62b0823511ea0c248d1c Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Mon, 22 May 2023 20:12:49 +0200 Subject: [PATCH 181/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9a8ebc8..20ea64f 100644 --- a/README.md +++ b/README.md @@ -584,9 +584,9 @@ Thank you very much for your contributions, kind words and support. ### Loading info about PHP in the background -This utility runs `php-config --version` in the background periodically. It also checks your `.ini` files for extensions and loads more information about your limits (memory limit, POST limit, upload limit). +This app runs `php-config --version` in the background periodically, usually whenever your Homebrew configuration is modified. A filesystem watcher is used to determine if anything changes in your Homebrew's `bin` directory. -In order to save power, this only happens once every 60 seconds. +PHP Monitor also checks your `.ini` files for extensions and loads more information about your limits (memory limit, POST limit, upload limit). See also the section on *Config change detection* below. ### Switching PHP versions From a3368effeca802397e5578938fc5bb99e8b4b6c9 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 24 May 2023 18:59:44 +0200 Subject: [PATCH 182/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20async=20issue=20wh?= =?UTF-8?q?en=20PHP=20Guard=20reset=20kicks=20in?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Whenever PHP Guard is used to reset the PHP version when a different PHP version is installed using the PHP Version Manager, it would previously kick its version switching process off asynchronously as a separate task which meant that the app would go into "ready" state too soon. Now this is considered a blocking task that the app will wait for (async) before turning the app back into its "ready" state again. --- .../Commands/InstallAndUpgradeCommand.swift | 2 +- phpmon/Domain/Menu/MainMenu+Actions.swift | 24 +++++++++++++++++++ .../SwiftUI/PhpManager/PhpFormulaeView.swift | 6 ++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index 5d7b318..29f162f 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -147,7 +147,7 @@ class InstallAndUpgradeCommand: BrewCommand { // If a PHP version was active prior to running the operations, attempt to restore it if let version = phpGuard.currentVersion { - await MainMenu.shared.switchToAnyPhpVersion(version, silently: true) + await MainMenu.shared.switchToPhpVersionAndWait(version, silently: true) } // Also rebuild the content of the main menu diff --git a/phpmon/Domain/Menu/MainMenu+Actions.swift b/phpmon/Domain/Menu/MainMenu+Actions.swift index 6843daa..c89bdeb 100644 --- a/phpmon/Domain/Menu/MainMenu+Actions.swift +++ b/phpmon/Domain/Menu/MainMenu+Actions.swift @@ -273,6 +273,30 @@ extension MainMenu { } } + func switchToPhpVersionAndWait(_ version: String, silently: Bool = false) async { + if silently { + MainMenu.shared.shouldSwitchSilently = true + } + + if !PhpEnvironments.shared.availablePhpVersions.contains(version) { + Log.warn("This PHP version is currently unavailable, not switching!") + return + } + + setBusyImage() + PhpEnvironments.shared.isBusy = true + PhpEnvironments.shared.delegate = self + PhpEnvironments.shared.delegate?.switcherDidStartSwitching(to: version) + + updatePhpVersionInStatusBar() + rebuild() + await PhpEnvironments.switcher.performSwitch(to: version) + + PhpEnvironments.shared.currentInstall = ActivePhpInstallation() + App.shared.handlePhpConfigWatcher() + PhpEnvironments.shared.delegate?.switcherDidCompleteSwitch(to: version) + } + @objc func switchToPhpVersion(_ version: String) { setBusyImage() PhpEnvironments.shared.isBusy = true diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 682c7c7..38f6de8 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -197,12 +197,16 @@ struct PhpFormulaeView: View { self.status.description = progress.description self.status.busy = progress.value != 1 + // Whenever a key step is finished, refresh the PHP versions if progress.value == 1 { - self.setBusyStatus(false) await self.handler.refreshPhpVersions(loadOutdated: false) } } } + // Finally, after completing the command, also refresh PHP versions + await self.handler.refreshPhpVersions(loadOutdated: false) + // and mark the app as no longer busy + self.setBusyStatus(false) } catch let error { let error = error as! BrewCommandError let messages = error.log.suffix(2).joined(separator: "\n") From 6a921d8e3ed32161fafe34ad762b8f7d60925c30 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 24 May 2023 19:05:58 +0200 Subject: [PATCH 183/194] =?UTF-8?q?=F0=9F=90=9B=20Use=20PHP=20Guard=20when?= =?UTF-8?q?=20removing=20a=20PHP=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ .../Homebrew/Commands/RemovePhpVersionCommand.swift | 9 +++++++++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 78030cf..ed8e4a3 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3352,7 +3352,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1240; + CURRENT_PROJECT_VERSION = 1245; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3382,7 +3382,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1240; + CURRENT_PROJECT_VERSION = 1245; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3620,7 +3620,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1240; + CURRENT_PROJECT_VERSION = 1245; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3734,7 +3734,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1240; + CURRENT_PROJECT_VERSION = 1245; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3848,7 +3848,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1240; + CURRENT_PROJECT_VERSION = 1245; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -4027,7 +4027,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1240; + CURRENT_PROJECT_VERSION = 1245; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift index c8eb40f..e1d3612 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/RemovePhpVersionCommand.swift @@ -11,12 +11,14 @@ import Foundation class RemovePhpVersionCommand: BrewCommand { let formula: String let version: String + let phpGuard: PhpGuard init(formula: String) { self.version = formula .replacingOccurrences(of: "php@", with: "") .replacingOccurrences(of: "shivammathur/php/", with: "") self.formula = formula + self.phpGuard = PhpGuard() } func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { @@ -55,8 +57,15 @@ class RemovePhpVersionCommand: BrewCommand { if process.terminationStatus <= 0 { onProgress(.create(value: 0.95, title: progressTitle, description: "Reloading PHP versions...")) + await PhpEnvironments.detectPhpVersions() + await MainMenu.shared.refreshActiveInstallation() + + if let version = phpGuard.currentVersion { + await MainMenu.shared.switchToPhpVersionAndWait(version, silently: true) + } + onProgress(.create(value: 1, title: progressTitle, description: "The operation has succeeded.")) } else { throw BrewCommandError(error: "The command failed to run correctly.", log: loggedMessages) From 40c24793f595928728c11b4c4aaf908bf0e068fb Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 24 May 2023 19:08:41 +0200 Subject: [PATCH 184/194] =?UTF-8?q?=F0=9F=90=9B=20Show=20"Please=20wait"?= =?UTF-8?q?=20text=20when=20running=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Homebrew/Commands/InstallAndUpgradeCommand.swift | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift index 29f162f..20ed421 100644 --- a/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift +++ b/phpmon/Domain/Integrations/Homebrew/Commands/InstallAndUpgradeCommand.swift @@ -33,6 +33,14 @@ class InstallAndUpgradeCommand: BrewCommand { } func execute(onProgress: @escaping (BrewCommandProgress) -> Void) async throws { + let progressTitle = "Please wait..." + + onProgress(.create( + value: 0.2, + title: progressTitle, + description: "PHP Monitor is preparing Homebrew..." + )) + // Try to run all upgrade and installation operations try await self.upgradePackages(onProgress) try await self.installPackages(onProgress) From cbebf75b48e17fb89e15c6fcfb77f90921ba5ff5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 24 May 2023 19:17:41 +0200 Subject: [PATCH 185/194] =?UTF-8?q?=F0=9F=90=9B=20Fix=20error=20message,?= =?UTF-8?q?=20check=20sbin=20folder=20ownership?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Homebrew/Behaviors/BrewPermissionFixer.swift | 15 ++++++++++++++- .../SwiftUI/PhpManager/PhpFormulaeView.swift | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift index 90bb9ad..eded4c7 100644 --- a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift +++ b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift @@ -69,7 +69,20 @@ class BrewPermissionFixer { path: binaryPath ) - Log.warn("\(formula) is owned by root") + Log.warn("\(formula) is owned by root (bin folder)") + + broken.append(borked) + } + + let serverBinaryPath = "\(Paths.optPath)/\(realFormula)/sbin" + + if isOwnedByRoot(path: serverBinaryPath) { + let borked = DueOwnershipFormula( + formula: realFormula, + path: serverBinaryPath + ) + + Log.warn("\(formula) is owned by root (sbin folder)") broken.append(borked) } diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 38f6de8..7403737 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -293,7 +293,7 @@ struct PhpFormulaeView: View { self.presentErrorAlert( title: "phpman.failures.uninstall.title".localized, description: "phpman.failures.uninstall.desc".localized( - "brew uninstall \(formula) --force" + "brew uninstall \(formula.name) --force" ), button: "generic.ok".localized ) From 8240b676c1d743f4a21fb0dfd54d5970d8c0675d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 24 May 2023 19:19:04 +0200 Subject: [PATCH 186/194] =?UTF-8?q?=F0=9F=90=9B=20Own=20the=20entire=20Hom?= =?UTF-8?q?ebrew=20formula=20directory?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Behaviors/BrewPermissionFixer.swift | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift index eded4c7..5ffe885 100644 --- a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift +++ b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift @@ -61,28 +61,14 @@ class BrewPermissionFixer { ? "php" : "php@\(formula)" - let binaryPath = "\(Paths.optPath)/\(realFormula)/bin" - - if isOwnedByRoot(path: binaryPath) { + if isOwnedByRoot(path: "\(Paths.optPath)/\(realFormula)/bin") + || isOwnedByRoot(path: "\(Paths.optPath)/\(realFormula)/sbin") { let borked = DueOwnershipFormula( formula: realFormula, - path: binaryPath + path: "\(Paths.optPath)/\(realFormula)" ) - Log.warn("\(formula) is owned by root (bin folder)") - - broken.append(borked) - } - - let serverBinaryPath = "\(Paths.optPath)/\(realFormula)/sbin" - - if isOwnedByRoot(path: serverBinaryPath) { - let borked = DueOwnershipFormula( - formula: realFormula, - path: serverBinaryPath - ) - - Log.warn("\(formula) is owned by root (sbin folder)") + Log.warn("\(formula) is owned by root") broken.append(borked) } From 6fc613ac4cbd4aaeb2f9e87845c850aa60b90bd4 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Wed, 24 May 2023 19:29:38 +0200 Subject: [PATCH 187/194] =?UTF-8?q?=F0=9F=90=9B=20Own=20/bin=20and=20/sbin?= =?UTF-8?q?=20folders=20specifically?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Behaviors/BrewPermissionFixer.swift | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift index 5ffe885..3ab3b87 100644 --- a/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift +++ b/phpmon/Domain/Integrations/Homebrew/Behaviors/BrewPermissionFixer.swift @@ -61,16 +61,25 @@ class BrewPermissionFixer { ? "php" : "php@\(formula)" - if isOwnedByRoot(path: "\(Paths.optPath)/\(realFormula)/bin") - || isOwnedByRoot(path: "\(Paths.optPath)/\(realFormula)/sbin") { - let borked = DueOwnershipFormula( - formula: realFormula, - path: "\(Paths.optPath)/\(realFormula)" - ) + let binFolderOwned = isOwnedByRoot(path: "\(Paths.optPath)/\(realFormula)/bin") + let sbinFolderOwned = isOwnedByRoot(path: "\(Paths.optPath)/\(realFormula)/sbin") + if binFolderOwned || sbinFolderOwned { Log.warn("\(formula) is owned by root") - broken.append(borked) + if binFolderOwned { + broken.append(DueOwnershipFormula( + formula: realFormula, + path: "\(Paths.optPath)/\(realFormula)/bin" + )) + } + + if sbinFolderOwned { + broken.append(DueOwnershipFormula( + formula: realFormula, + path: "\(Paths.optPath)/\(realFormula)/sbin" + )) + } } } } From cdbd959159c36599d610b5c9bff16afa26bedbf6 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Fri, 26 May 2023 20:49:18 +0200 Subject: [PATCH 188/194] =?UTF-8?q?=F0=9F=91=8C=20Update=20strings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Localizable.strings | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 5b2a263..627b8e3 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -739,7 +739,7 @@ COMMON TROUBLESHOOTING TIPS • %@ -When files like these are missing, it's recommended to reinstall the appropriate PHP version(s) via Homebrew again, which should restore the configuration files that are missing. Missing configuration files can be the reason why you get '502 Bad Gateway' errors, even after running Fix My Valet."; +When files like these are missing, you should switch to the PHP version associated with those files: that may resolve the problem. If this doesn't fix the issue, it's recommended to reinstall the appropriate PHP version(s) via Homebrew again, which should restore the configuration files that are missing. Missing configuration files can be the reason why you get '502 Bad Gateway' errors, even after running Fix My Valet (if you are using Valet)."; "warnings.none" = "There are no recommendations available for you right now. You're all good!"; @@ -751,14 +751,14 @@ When files like these are missing, it's recommended to reinstall the appropriate "onboarding.explore.lite" = "You now have access to PHP Monitor's most important features. Please note that some features (greyed out below) are currently unavailable because Laravel Valet is not active."; "onboarding.tour.menu_bar.title" = "Power In Your Menu Bar"; -"onboarding.tour.menu_bar" = "PHP Monitor lives in your menu bar. From this menu, you can access most of PHP Monitor's key functionality, including switching the globally linked PHP version, locating config files, and much more."; +"onboarding.tour.menu_bar" = "PHP Monitor lives in your menu bar. From this menu, you can access most of PHP Monitor's key functionality, including switching the globally linked PHP version, locating config files, installing different PHP versions, and more."; "onboarding.tour.faq_hint" = "**Questions?** I recommend that you check out the [README](https://github.com/nicoverbruggen/phpmon/blob/main/README.md) on GitHub: it contains a comprehensive FAQ with various tips and common questions and answers."; "onboarding.tour.services.title" = "Manage Homebrew Services"; "onboarding.tour.services" = "Once you click on the menu bar item, you can see at a glance based on the checkmarks or crosses if all of the Homebrew services are up and running. You can also click on a service to quickly toggle it."; "onboarding.tour.domains.title" = "Manage Domains"; "onboarding.tour.domains" = "By opening the Domains window via the menu bar item, you can view which domains are linked and parked, as well as active nginx proxies."; "onboarding.tour.isolation.title" = "Isolate Domains"; -"onboarding.tour.isolation" = "If you have Valet 3 installed, you can even use domain isolation by right-clicking on a given domain in the Domains window. This allows you to pick a specific version of PHP to use for that domain, and that domain only."; +"onboarding.tour.isolation" = "If you have Valet 3 or newer installed, you can even use domain isolation by right-clicking on a given domain in the Domains window. This allows you to pick a specific version of PHP to use for that domain, and that domain only."; "onboarding.tour.feature_unavailable" = "This feature is currently unavailable and requires Laravel Valet to be installed."; "onboarding.tour.once" = "You will only see the Welcome Tour once. You can re-open the Welcome Tour later via the menu bar icon (available in the menu, under First Aid & Services)."; "onboarding.tour.close" = "Close Tour"; From 2b2b027317ae2c06c193427679eb0af4e31c1ce5 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Fri, 26 May 2023 21:27:36 +0200 Subject: [PATCH 189/194] =?UTF-8?q?=F0=9F=93=9D=20Update=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 20ea64f..49df68e 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,9 @@ PHP Monitor is a universal application that runs natively on Apple Silicon **and * Your user account can administer your computer (required for some functionality, e.g. certificate generation) * macOS 12.4 or later (Monterey and Ventura are supported) -* Homebrew is installed in `/usr/local/homebrew` or `/opt/homebrew` +* Homebrew is installed in the default location (`/usr/local/homebrew` or `/opt/homebrew`) * Homebrew `php` formula is installed +* Optional but recommended: Laravel Valet _Starting with PHP Monitor 6.0, you do not need to have Laravel Valet installed for PHP Monitor to work. To get access to all features of PHP Monitor however, installing Valet is **recommended**._ @@ -134,6 +135,14 @@ If you are on an older version of macOS, you can do this by dragging *PHP Monito Super convenient! </details> +<details> +<summary><strong>What features are unavailable in Standalone Mode?</strong></summary> + +The services manager is disabled, and all other obvious Laravel Valet integrations (configuration finder, domains list, Fix My Valet) are also disabled. + +(Most other features remain available.) +</details> + <details> <summary><strong>I want to set up PHP Monitor from scratch! I don't have Homebrew installed either, where do I begin?</strong></summary> @@ -160,7 +169,7 @@ If you're on an Apple Silicon-based Mac, you'll need to add: and add the following to your `.zshrc` file, but add this BEFORE the homebrew PATH additions: export PATH=$HOME/bin:~/.composer/vendor/bin:$PATH - + If you're adding `composer` and Homebrew binaries, ensure that Homebrew binaries are preferred by adding these to the path last. On my system, that looks like this: export PATH=$HOME/bin:/usr/local/bin:$PATH @@ -179,8 +188,12 @@ Make sure PHP is linked correctly: should return: `/usr/local/bin/php` (or `/opt/homebrew/bin/php` if you are on Apple Silicon) +**If you don't need Laravel Valet, you can stop here. PHP Monitor will work like this in Standalone Mode.** + +If you'd like to have Valet as well, continue and install Valet with Composer, like this. + composer global require laravel/valet - + For optimal results, you should lock your PHP platform for global dependencies to the oldest version of PHP you intend to run. If that version is PHP 7.0, your `~/.composer/composer.json` file could look like this (please adjust the version accordingly!): ``` @@ -199,18 +212,13 @@ For optimal results, you should lock your PHP platform for global dependencies t Run `composer global update` again. This ensures that when you switch to a different global PHP version, [Valet won't break](https://github.com/nicoverbruggen/phpmon/issues/178). If it does, PHP Monitor will let you know what you can do about this. Then, install Valet: - + valet install This should install `dnsmasq` and set up Valet. Great, almost there! valet trust -You can now install PHP Monitor, if you haven't already: - - brew tap nicoverbruggen/homebrew-cask - brew install --cask phpmon - Finally, run PHP Monitor. Since the app is notarized and signed with a developer ID, it should work. You will need to approve the initial launch of the app, but you should be ready to go now. </details> @@ -219,13 +227,17 @@ Finally, run PHP Monitor. Since the app is notarized and signed with a developer PHP Monitor will check if an update is available every time you start the app. -You can disable this behaviour by going to Preferences (via the PHP Monitor icon in the menu bar) and unchecking "Automatically check for updates". You can always check for updates manually. +You can disable this behaviour by going to Preferences (via the PHP Monitor icon in the menu bar) and unchecking "Automatically check for updates". (You can always check for updates manually.) </details> <details> <summary><strong>I have PHP Monitor installed, and it works. I want to upgrade my PHP installations to the latest version, what's the best way to do this?</strong></summary> +The easiest way is to simply use the built-in **PHP Version Manager**, which will allow you to upgrade your PHP versions with one click. + +If you want to do this manually, you can follow the instructions below. + It's easy to make a mistake here, and end up with an unlinked version of PHP or have versions missing from PHP Monitor. Here's what I usually do: @@ -255,7 +267,7 @@ This should resolve the issue! If that does not fix the issue, run `brew link ph brew install php brew link php --force - + </details> <details> @@ -310,12 +322,14 @@ Make sure you have at least **Valet 3.0** installed, since support for isolation <details> <summary><strong>One of the limits (memory limit, max POST size, max upload size) shows an exclamation mark!</strong></summary> -The value you provided in your INI file is invalid. If that is the case, PHP will attempt to parse your value as bytes, which is usually unintended. (`1GB` will resolve to merely a few bytes, and all of your applications will run out of memory!) +The value you provided in your `.ini` file is invalid. If that is the case, PHP will attempt to parse your value as bytes, which is usually unintended. (`1GB` will resolve to merely a few bytes, and all of your applications will run out of memory!) You must a provide a value like so: `1024K`, `256M`, `1G`. Alternatively, `-1` is also allowed, or just an integer (which will result in N amount of bytes being the limit). **Example**: Trying to use `1GB` as the memory limit, for example, will result in this exclamation mark. The correct way to set a 1GB limit is by using `1G` as the value. (Note: The displayed value will append `B` for clarity, so if you set `1G`, the value reported by PHP Monitor will be 1 GB.) +(If you are using Valet, you can adjust these limits in the `.conf.d/php-memory-limits.ini` file. Otherwise, you may need to adjust `php.ini`.) + </details> <details> @@ -404,6 +418,9 @@ You can omit the `php` key in the preset if you do not wish for the preset to sw <details> <summary><strong>How do I ensure additional Homebrew services are shown in the app?</strong></summary> +> **Info** +> Homebrew services aren't displayed if you are using Valet in Standalone Mode. + You must set these services up in a JSON file, located in `~/.config/phpmon/config.json`. You can specify custom services in the configuration file for Homebrew services that run as your own user (not root). @@ -594,7 +611,7 @@ This utility will detect which PHP versions you have installed via Homebrew, and The switcher will disable all PHP-FPM services not belonging to the version you wish to use, and link the desired version of PHP. Then, it'll restart your desired PHP version's FPM process. This all happens in parallel, so this should be a bit faster than Valet’s switcher. -If you're using Valet 3, versions of PHP-FPM required to keep isolated sites up and running will also be started or stopped as needed. +If you're using Valet 3 or newer, versions of PHP-FPM required to keep isolated sites up and running will also be started or stopped as needed. ### Config change detection From b041ca37be951155c6414c984c69279d4d443808 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 27 May 2023 11:53:11 +0200 Subject: [PATCH 190/194] =?UTF-8?q?=F0=9F=90=9B=20Disable=20Sites=20menu?= =?UTF-8?q?=20item=20when=20Standalone?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 10 ++++ phpmon/Domain/App/AppDelegate.swift | 18 ++++++ phpmon/Domain/App/Base.lproj/Main.storyboard | 38 ++++++------ phpmon/Domain/Menu/MainMenu+Startup.swift | 3 + .../PhpManager/FakeBrewFormulaeHandler.swift | 58 +++++++++++++++++++ .../SwiftUI/PhpManager/PhpFormulaeView.swift | 58 +++---------------- 6 files changed, 119 insertions(+), 66 deletions(-) create mode 100644 phpmon/Domain/SwiftUI/PhpManager/FakeBrewFormulaeHandler.swift diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index ed8e4a3..3915b16 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -554,6 +554,10 @@ C485707B28BF458900539B36 /* VersionPopoverView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C44264BF2850BD2A007400F1 /* VersionPopoverView.swift */; }; C485707C28BF459500539B36 /* NoWarningsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C41C708C28AA7F7900E8D498 /* NoWarningsView.swift */; }; C485707D28BF45A200539B36 /* WarningView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4297F7928970D59004C4630 /* WarningView.swift */; }; + C489E0BB2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */; }; + C489E0BC2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */; }; + C489E0BD2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */; }; + C489E0BE2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */; }; C48D0C9325CC804200CC7490 /* XibLoadable.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D0C9225CC804200CC7490 /* XibLoadable.swift */; }; C48D6C70279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; C48D6C71279CD2AC00F26D7E /* VersionNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */; }; @@ -980,6 +984,7 @@ C47DF1AE299D5A3B0007055D /* LoginItemManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginItemManager.swift; sourceTree = "<group>"; }; C4811D2322D70A4700B5F6B3 /* App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = App.swift; sourceTree = "<group>"; }; C4811D2922D70F9A00B5F6B3 /* MainMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenu.swift; sourceTree = "<group>"; }; + C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FakeBrewFormulaeHandler.swift; sourceTree = "<group>"; }; C48D0C9225CC804200CC7490 /* XibLoadable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = XibLoadable.swift; sourceTree = "<group>"; }; C48D6C6F279CD2AC00F26D7E /* VersionNumber.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionNumber.swift; sourceTree = "<group>"; }; C48D6C73279CD3E400F26D7E /* PhpVersionNumberTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhpVersionNumberTest.swift; sourceTree = "<group>"; }; @@ -1405,6 +1410,7 @@ C48DDD0C29C75C9E00D032D9 /* BlockingOverlayView.swift */, C40D72592A018ACC0054A067 /* PhpFormulaeStatus.swift */, C40D725E2A018AE30054A067 /* BrewFormulaUI.swift */, + C489E0BA2A220A4200323F5E /* FakeBrewFormulaeHandler.swift */, ); path = PhpManager; sourceTree = "<group>"; @@ -2282,6 +2288,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + C489E0BB2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */, C41ADCE82970CCC700120423 /* FSNotifier.swift in Sources */, C47699EF28A2F2A30060FEB8 /* WarningManager.swift in Sources */, C490E3BB29BCA375006D2DE6 /* Measurements.swift in Sources */, @@ -2638,6 +2645,7 @@ C471E7FD28F9BACE0021E251 /* HomebrewService.swift in Sources */, C471E7E428F9BAC20021E251 /* Helpers.swift in Sources */, C4CB6E67292C362C002E9027 /* Homebrew.swift in Sources */, + C489E0BD2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */, C45E2A77291992DA005C7CFD /* FeatureTestCase.swift in Sources */, C471E82028F9BB290021E251 /* NginxConfigurationFile.swift in Sources */, C471E7D428F9BA8F0021E251 /* ActiveFileSystem.swift in Sources */, @@ -2687,6 +2695,7 @@ C4B79EB929CA387F00A483EE /* BrewFormulaeHandler.swift in Sources */, C471E8A428F9BB8F0021E251 /* AppDelegate+Notifications.swift in Sources */, C490E3B329BC9FEA006D2DE6 /* ProgressWindowView.swift in Sources */, + C489E0BE2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */, C490E3B229BC9FE8006D2DE6 /* ProgressViewSubject.swift in Sources */, C471E8A528F9BB8F0021E251 /* AppDelegate+InterApp.swift in Sources */, C471E8A628F9BB8F0021E251 /* App.swift in Sources */, @@ -2973,6 +2982,7 @@ C4B97B79275CF1B5003F3378 /* App+ActivationPolicy.swift in Sources */, C4E2E86528FC2F1B003B070C /* XCPMApplication.swift in Sources */, C4E49DE828F764050026AC4E /* ActiveCommand.swift in Sources */, + C489E0BC2A220A4200323F5E /* FakeBrewFormulaeHandler.swift in Sources */, C4CE3BBB27B324230086CA49 /* MainMenu+Switcher.swift in Sources */, C4B79ECC29CA475900A483EE /* RemovePhpVersionCommand.swift in Sources */, C4FD87AA29AB9ABD0002D701 /* PhpConfigChecker.swift in Sources */, diff --git a/phpmon/Domain/App/AppDelegate.swift b/phpmon/Domain/App/AppDelegate.swift index 6b4f2cc..ca73add 100644 --- a/phpmon/Domain/App/AppDelegate.swift +++ b/phpmon/Domain/App/AppDelegate.swift @@ -11,6 +11,10 @@ import UserNotifications @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate { + static var instance: AppDelegate { + return NSApplication.shared.delegate as! AppDelegate + } + // MARK: - Variables /** @@ -121,4 +125,18 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele await menu.startup() } } + + // MARK: - Menu Items + + @IBOutlet weak var menuItemSites: NSMenuItem! + + /** + Ensure relevant menu items in the main menu bar (not the pop-up menu) + are disabled or hidden when needed. + */ + public func configureMenuItems(standalone: Bool) { + if standalone { + menuItemSites.isHidden = true + } + } } diff --git a/phpmon/Domain/App/Base.lproj/Main.storyboard b/phpmon/Domain/App/Base.lproj/Main.storyboard index d7aa2aa..a2302ba 100644 --- a/phpmon/Domain/App/Base.lproj/Main.storyboard +++ b/phpmon/Domain/App/Base.lproj/Main.storyboard @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> -<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="21507" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> +<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="21701" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES"> <dependencies> <deployment identifier="macosx"/> - <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21507"/> + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="21701"/> <capability name="Image references" minToolsVersion="12.0"/> <capability name="Named colors" minToolsVersion="9.0"/> <capability name="Search Toolbar Item" minToolsVersion="12.0" minSystemVersion="11.0"/> @@ -34,18 +34,6 @@ </items> </menu> </menuItem> - <menuItem title="File" id="XRy-v5-KNb"> - <modifierMask key="keyEquivalentModifierMask"/> - <menu key="submenu" title="File" id="zA7-mh-f1x"> - <items> - <menuItem title="Close" keyEquivalent="w" id="2FI-pQ-tuO"> - <connections> - <action selector="performClose:" target="Ady-hI-5gd" id="ZHq-so-Sba"/> - </connections> - </menuItem> - </items> - </menu> - </menuItem> <menuItem title="Sites" id="9gy-d3-Pos"> <modifierMask key="keyEquivalentModifierMask"/> <menu key="submenu" title="Sites" id="YTZ-bb-TOG"> @@ -82,12 +70,12 @@ <modifierMask key="keyEquivalentModifierMask"/> <menu key="submenu" title="Edit" id="8Pm-83-BlM"> <items> - <menuItem title="Undo" keyEquivalent="z" id="jCt-Yf-FSE"> + <menuItem title="Undo" enabled="NO" keyEquivalent="z" id="jCt-Yf-FSE"> <connections> <action selector="undo:" target="Ady-hI-5gd" id="O3z-27-Ug0"/> </connections> </menuItem> - <menuItem title="Redo" keyEquivalent="Z" id="fCh-1M-Qyg"> + <menuItem title="Redo" enabled="NO" keyEquivalent="Z" id="fCh-1M-Qyg"> <connections> <action selector="redo:" target="Ady-hI-5gd" id="utE-Bv-fdY"/> </connections> @@ -297,6 +285,18 @@ </items> </menu> </menuItem> + <menuItem title="Window" id="XRy-v5-KNb"> + <modifierMask key="keyEquivalentModifierMask"/> + <menu key="submenu" title="Window" id="zA7-mh-f1x"> + <items> + <menuItem title="Close" keyEquivalent="w" id="2FI-pQ-tuO"> + <connections> + <action selector="performClose:" target="Ady-hI-5gd" id="ZHq-so-Sba"/> + </connections> + </menuItem> + </items> + </menu> + </menuItem> <menuItem title="Help" id="wpr-3q-Mcd"> <modifierMask key="keyEquivalentModifierMask"/> <menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ"> @@ -317,7 +317,11 @@ </application> <customObject id="YLy-65-1bz" customClass="NSFontManager"/> <customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/> - <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="PHP_Monitor" customModuleProvider="target"/> + <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="PHP_Monitor" customModuleProvider="target"> + <connections> + <outlet property="menuItemSites" destination="9gy-d3-Pos" id="nul-IL-YuR"/> + </connections> + </customObject> </objects> <point key="canvasLocation" x="-360" y="-94"/> </scene> diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index cab3f64..8d06353 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -88,6 +88,9 @@ extension MainMenu { // Load the global hotkey App.shared.loadGlobalHotkey() + // Set up menu items + AppDelegate.instance.configureMenuItems(standalone: !Valet.installed) + if Valet.installed { // Preload all sites await Valet.shared.startPreloadingSites() diff --git a/phpmon/Domain/SwiftUI/PhpManager/FakeBrewFormulaeHandler.swift b/phpmon/Domain/SwiftUI/PhpManager/FakeBrewFormulaeHandler.swift new file mode 100644 index 0000000..759fdd1 --- /dev/null +++ b/phpmon/Domain/SwiftUI/PhpManager/FakeBrewFormulaeHandler.swift @@ -0,0 +1,58 @@ +// +// FakeBrewFormulaeHandler.swift +// PHP Monitor +// +// Created by Nico Verbruggen on 27/05/2023. +// Copyright © 2023 Nico Verbruggen. All rights reserved. +// + +import Foundation + +class FakeBrewFormulaeHandler: HandlesBrewFormulae { + public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { + return [ + BrewFormula( + name: "php", + displayName: "PHP 8.2", + installedVersion: "8.2.3", + upgradeVersion: "8.2.4" + ), + BrewFormula( + name: "php@8.1", + displayName: "PHP 8.1", + installedVersion: "8.1.17", + upgradeVersion: nil + ), + BrewFormula( + name: "php@8.0", + displayName: "PHP 8.0", + installedVersion: nil, + upgradeVersion: nil + ), + BrewFormula( + name: "php@7.4", + displayName: "PHP 7.4", + installedVersion: nil, + upgradeVersion: nil + ), + BrewFormula( + name: "php@7.3", + displayName: "PHP 7.3", + installedVersion: nil, + upgradeVersion: nil + ), + BrewFormula( + name: "php@7.2", + displayName: "PHP 7.2", + installedVersion: nil, + upgradeVersion: nil + ), + BrewFormula( + name: "php@7.1", + displayName: "PHP 7.1", + installedVersion: nil, + upgradeVersion: nil + ) + ] + } +} diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 7403737..a7088d7 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -189,6 +189,15 @@ struct PhpFormulaeView: View { } public func runCommand(_ command: InstallAndUpgradeCommand) async { + if PhpEnvironments.shared.isBusy { + self.presentErrorAlert( + title: "phpman.busy.title".localized, + description: "phpman.busy.desc".localized, + button: "generic.ok".localized + ) + return + } + do { self.setBusyStatus(true) try await command.execute { progress in @@ -349,52 +358,3 @@ struct PhpFormulaeView_Previews: PreviewProvider { ).frame(width: 600, height: 600) } } - -class FakeBrewFormulaeHandler: HandlesBrewFormulae { - public func loadPhpVersions(loadOutdated: Bool) async -> [BrewFormula] { - return [ - BrewFormula( - name: "php", - displayName: "PHP 8.2", - installedVersion: "8.2.3", - upgradeVersion: "8.2.4" - ), - BrewFormula( - name: "php@8.1", - displayName: "PHP 8.1", - installedVersion: "8.1.17", - upgradeVersion: nil - ), - BrewFormula( - name: "php@8.0", - displayName: "PHP 8.0", - installedVersion: nil, - upgradeVersion: nil - ), - BrewFormula( - name: "php@7.4", - displayName: "PHP 7.4", - installedVersion: nil, - upgradeVersion: nil - ), - BrewFormula( - name: "php@7.3", - displayName: "PHP 7.3", - installedVersion: nil, - upgradeVersion: nil - ), - BrewFormula( - name: "php@7.2", - displayName: "PHP 7.2", - installedVersion: nil, - upgradeVersion: nil - ), - BrewFormula( - name: "php@7.1", - displayName: "PHP 7.1", - installedVersion: nil, - upgradeVersion: nil - ) - ] - } -} From 54f83a0aedb72bb899356ead320774cdd7342651 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 27 May 2023 11:57:41 +0200 Subject: [PATCH 191/194] =?UTF-8?q?=F0=9F=90=9B=20Prevent=20operations=20w?= =?UTF-8?q?hen=20PHP=20Monitor=20is=20busy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift | 4 ++-- phpmon/Localizable.strings | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index a7088d7..8dcf239 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -191,8 +191,8 @@ struct PhpFormulaeView: View { public func runCommand(_ command: InstallAndUpgradeCommand) async { if PhpEnvironments.shared.isBusy { self.presentErrorAlert( - title: "phpman.busy.title".localized, - description: "phpman.busy.desc".localized, + title: "phpman.action_prevented_busy.title".localized, + description: "phpman.action_prevented_busy.desc".localized, button: "generic.ok".localized ) return diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 627b8e3..45a9688 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -128,6 +128,9 @@ You may be asked for your password during the uninstallation process if file per %@"; +"phpman.action_prevented_busy.title" = "PHP Monitor is currently busy."; +"phpman.action_prevented_busy.desc" = "PHP Monitor is currently doing something like switching between PHP versions. To ensure your system does not break, you will need to wait until PHP Monitor is ready in order before you try this again."; + "phpman.uninstall_prevented.title" = "You cannot uninstall the currently active version of PHP via PHP Monitor."; "phpman.uninstall_prevented.desc" = "In order to prevent issues with PHP Monitor and further crashes, it isn't possible to uninstall the currently linked version of PHP via this UI. You can switch versions and try again, or uninstall this version manually via the terminal.\n\nPlease note that PHP Monitor may crash if you uninstall the currently linked PHP version."; From 3c7bed0a9b0027563252742a57a38c903080eabf Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 27 May 2023 12:11:59 +0200 Subject: [PATCH 192/194] =?UTF-8?q?=F0=9F=94=A7=20Bump=20build=20number=20?= =?UTF-8?q?for=20release=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PHP Monitor.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/PHP Monitor.xcodeproj/project.pbxproj b/PHP Monitor.xcodeproj/project.pbxproj index 3915b16..a1f46bd 100644 --- a/PHP Monitor.xcodeproj/project.pbxproj +++ b/PHP Monitor.xcodeproj/project.pbxproj @@ -3362,7 +3362,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1245; + CURRENT_PROJECT_VERSION = 1250; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3392,7 +3392,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1245; + CURRENT_PROJECT_VERSION = 1250; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3630,7 +3630,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1245; + CURRENT_PROJECT_VERSION = 1250; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3744,7 +3744,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1245; + CURRENT_PROJECT_VERSION = 1250; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -3858,7 +3858,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1245; + CURRENT_PROJECT_VERSION = 1250; DEAD_CODE_STRIPPING = YES; DEBUG = YES; DEVELOPMENT_TEAM = 8M54J5J787; @@ -4037,7 +4037,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1245; + CURRENT_PROJECT_VERSION = 1250; DEAD_CODE_STRIPPING = YES; DEBUG = NO; DEVELOPMENT_TEAM = 8M54J5J787; From 5c9b06d83b62b82e76a2132938bf0330db1c1b30 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 27 May 2023 12:43:31 +0200 Subject: [PATCH 193/194] =?UTF-8?q?=F0=9F=91=8C=20Missing=20localized=20st?= =?UTF-8?q?rings?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift | 6 +++--- phpmon/Localizable.strings | 4 ++++ 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift index 8dcf239..83c8ffc 100644 --- a/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift +++ b/phpmon/Domain/SwiftUI/PhpManager/PhpFormulaeView.swift @@ -233,7 +233,7 @@ struct PhpFormulaeView: View { public func repairAll() async { await self.runCommand(InstallAndUpgradeCommand( - title: "Repairing installations...", + title: "phpman.operations.repairing".localized, upgrading: [], installing: [] )) @@ -241,7 +241,7 @@ struct PhpFormulaeView: View { public func upgradeAll(_ formulae: [BrewFormula]) async { await self.runCommand(InstallAndUpgradeCommand( - title: "Installing updates...", + title: "phpman.operations.updating".localized, upgrading: formulae, installing: [] )) @@ -249,7 +249,7 @@ struct PhpFormulaeView: View { public func install(_ formula: BrewFormula) async { await self.runCommand(InstallAndUpgradeCommand( - title: "Installing \(formula.displayName)", + title: "phpman.operations.installing".localized(formula.displayName), upgrading: [], installing: [formula] )) diff --git a/phpmon/Localizable.strings b/phpmon/Localizable.strings index 45a9688..45b5d2c 100644 --- a/phpmon/Localizable.strings +++ b/phpmon/Localizable.strings @@ -141,6 +141,10 @@ You may be asked for your password during the uninstallation process if file per "phpman.unlinked.desc" = "You likely still have some version of PHP that is currently installed, but currently no version of PHP is linked."; "phpman.unlinked.detail" = "Without any PHP version linked, the `php` binary is not accessible on your system and you cannot run any PHP scripts without explicitly being part of the PATH. You can have PHP Monitor automatically resolve this problem (choose Fix Automatically in the main menu), or fix it yourself by running `brew link php --force`."; +"phpman.operations.repairing" = "Repairing installations..."; +"phpman.operations.updating" = "Installing updates..."; +"phpman.operations.installing" = "Installing %@..."; + "phpman.steps.fetching" = "Fetching..."; "phpman.steps.downloading" = "Downloading package data..."; "phpman.steps.installing" = "Installing some package data..."; From 7955c777e790f94858d420301cb9a0693c8b8c88 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen <mail@nicoverbruggen.be> Date: Sat, 27 May 2023 12:46:39 +0200 Subject: [PATCH 194/194] =?UTF-8?q?=F0=9F=93=9D=20Updated=20credits=20w/?= =?UTF-8?q?=20sponsors?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The list of sponsors includes a list of all public sponsors. (Private sponsors have been omitted from the list.) --- phpmon/Credits.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/phpmon/Credits.html b/phpmon/Credits.html index 4eba565..4f45299 100644 --- a/phpmon/Credits.html +++ b/phpmon/Credits.html @@ -17,7 +17,9 @@ <p><b>Having issues?</b> Consult the <a href="https://phpmon.app/faq">FAQ</a> section, I did my best to ensure everything is documented.</p> <p><b>Want to support further development of PHP Monitor?</b> You can <a href="https://phpmon.app/sponsor">financially support</a> the continued development of this app.</p> <p><b>Get the latest on Twitter or Mastodon.</b> Give me a <a href="https://twitter.com/nicoverbruggen">follow on Twitter</a> or <a href="https://phpc.social/@nicoverbruggen">Mastodon</a> to learn about what's brewing and when new updates drop.</p> - <br> + <p><b>Special thanks</b> to all current and past <a href="https://github.com/sponsors/nicoverbruggen#sponsors"><b>sponsors</b></a> of PHP Monitor, who have helped to make further development of the app possible.</p> + <p><b>Made possible by these GitHub Sponsors</b>: @abdusfauzi, @abicons, @adrolli, @andresayej, @andyunleashed, @anzacorp, @argirisp, @AshPowell, @aurawindsurfing, @awsmug, @barrycarton, @BertvanHoekelen, @calebporzio, @caseyalee, @cgreuling, @cjcox17, @Diewy, @drfraker, @driftingly, @duellsy, @edalzell, @EYOND, @faithfm, @frankmichel, @gwleuverink, @hopkins385, @intrepidws, @jacksleight, @JacobBennett, @jasonvarga, @jeromegamez, @jimmyaldape, @jimmysawczuk, @joetannenbaum, @jolora, @joshuablum, @jpeinelt, @jreviews, @JustSteveKing, @Kajvdh, @KFoobar, @Laravel-Backpack, @leganz, @martinleveille, @mathiasonea, @matthewmnewman, @mcastillo1030, @megabubbletea, @mennen-online, @mike-healy, @mostafakram, @mpociot, @MrMicky-FR, @MrMooky, @murdercode, @nckrtl, @nhedger, @ninjaparade, @ozanuzer, @pepatel, @philbraun, @pickuse2013, @pk-informatics, @Plytas, @rderimay, @rickyjohnston, @rico, @RobertBoes, @runofthemill, @SahinU88, @sdebacker, @sdevore, @shadracnicholas, @simonhamp, @SRWieZ, @stefanbauer, @StriveMedia, @swilla, @Tailcode-Studio, @theutz, @ThomasEnssner, @tillkruss, @timothyrowan, @ttnppedr, @vincent-tarrit, @WheresMarco, @xPand4B, @xuandung38, @yeslandi89, @zackkatz, @zacksmash, @zaherg.<br/>(Some names have been omitted due to their sponsorships being private. Thank you all!) + <br/> </body> </html>

Do you enjoy using the app? Leave a star on GitHub!