diff --git a/phpmon/Domain/App/Services/FakeServicesManager.swift b/phpmon/Domain/App/Services/FakeServicesManager.swift index 83de60d..53ae7d2 100644 --- a/phpmon/Domain/App/Services/FakeServicesManager.swift +++ b/phpmon/Domain/App/Services/FakeServicesManager.swift @@ -12,15 +12,25 @@ class FakeServicesManager: ServicesManager { var fixedFormulae: [String] = [] var fixedStatus: ServiceStatus = .loading + override init() {} + init( formulae: [String] = ["php", "nginx", "dnsmasq"], status: ServiceStatus = .loading ) { + super.init() + Log.warn("A fake services manager is being used, so Homebrew formula resolver is set to act in fake mode.") Log.warn("If you do not want this behaviour, never instantiate FakeServicesManager!") self.fixedFormulae = formulae self.fixedStatus = status + + self.services = self.formulae.map { + let wrapper = ServiceWrapper(formula: $0) + wrapper.service = HomebrewService.dummy(named: $0.name, enabled: true) + return wrapper + } } override var formulae: [HomebrewFormula] { diff --git a/phpmon/Domain/App/Services/ServicesManager.swift b/phpmon/Domain/App/Services/ServicesManager.swift index 57cc1e0..da2fad4 100644 --- a/phpmon/Domain/App/Services/ServicesManager.swift +++ b/phpmon/Domain/App/Services/ServicesManager.swift @@ -13,7 +13,7 @@ class ServicesManager: ObservableObject { @ObservedObject static var shared: ServicesManager = ValetServicesManager() - @Published private(set) var services = [ServiceWrapper]() + @Published var services = [ServiceWrapper]() subscript(name: String) -> ServiceWrapper? { return self.services.first { wrapper in @@ -22,6 +22,10 @@ class ServicesManager: ObservableObject { } public var statusMessage: String { + if self.services.isEmpty { + return "Loading..." + } + let statuses = self.services[0...2].map { $0.status } if statuses.contains(.loading) { return "Determining Valet status..." @@ -37,6 +41,10 @@ class ServicesManager: ObservableObject { } public var statusColor: Color { + if self.services.isEmpty { + return .yellow + } + let statuses = self.services[0...2].map { $0.status } if statuses.contains(.loading) { return .orange diff --git a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift index 53e3963..4fd7c23 100644 --- a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift +++ b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift @@ -148,8 +148,11 @@ public struct BlueButton: ButtonStyle { struct ServicesView_Previews: PreviewProvider { static var previews: some View { - ServicesView(manager: FakeServicesManager(), perRow: 4) - .frame(width: 330.0) - .previewDisplayName("Loading") + ServicesView(manager: FakeServicesManager( + formulae: ["php", "nginx", "dnsmasq"], + status: .active + ), perRow: 4) + .frame(width: 330.0) + .previewDisplayName("Loading") } }