mirror of
https://github.com/nicoverbruggen/phpmon.git
synced 2025-12-21 03:10:06 +01:00
- RealShell is not reloaded during runtime (bugfix?) - Container variables are now private(set) - Initialization now also sets `webApi` property (new) - It is only possible to run `bind` on a `Container` once now (previously known as `prepare`) - Preparation for upcoming WebApi to replace `curl` command (for checking for updates)
93 lines
2.5 KiB
Swift
93 lines
2.5 KiB
Swift
//
|
|
// WarningManager.swift
|
|
// PHP Monitor
|
|
//
|
|
// Created by Nico Verbruggen on 09/08/2022.
|
|
// Copyright © 2023 Nico Verbruggen. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import Cocoa
|
|
|
|
class WarningManager: ObservableObject {
|
|
|
|
var container: Container
|
|
|
|
init(
|
|
container: Container,
|
|
fake: Bool = false
|
|
) {
|
|
self.container = container
|
|
|
|
self.evaluations = allAvailableWarnings()
|
|
|
|
if isRunningSwiftUIPreview || fake {
|
|
/// SwiftUI previews will always list all possible evaluations.
|
|
self.warnings = self.evaluations
|
|
}
|
|
}
|
|
|
|
/// Every possible evaluation that can be checked. Each evaluation also
|
|
/// includes a potential automatic fix, but not all evaluations have an
|
|
/// easy fix. This list is loaded from an extension.
|
|
private var evaluations: [Warning] = []
|
|
|
|
/// 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] = []
|
|
|
|
public func hasWarnings() -> Bool {
|
|
return !warnings.isEmpty
|
|
}
|
|
|
|
@MainActor func evaluateWarnings() {
|
|
Task { await 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 {
|
|
container.shell.reloadEnvPath()
|
|
|
|
await BrewDiagnostics.shared.loadInstalledTaps()
|
|
|
|
if ProcessInfo.processInfo.environment["EXTREME_DOCTOR_MODE"] != nil {
|
|
self.temporaryWarnings = self.evaluations
|
|
await self.broadcastWarnings()
|
|
return
|
|
}
|
|
|
|
await evaluate()
|
|
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 = []
|
|
|
|
for check in self.evaluations where await check.applies() {
|
|
Log.info("[DOCTOR] \(check.name) (!)")
|
|
self.temporaryWarnings.append(check)
|
|
continue
|
|
}
|
|
|
|
await self.broadcastWarnings()
|
|
}
|
|
}
|