From bd85584c88842dba6ab11d84ed1e18808417c83d Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Wed, 26 Nov 2025 12:07:58 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Address=20some=20MainActor=20ann?= =?UTF-8?q?otations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- phpmon/Domain/Menu/MainMenu+Startup.swift | 30 ++++++++----------- phpmon/Domain/SwiftUI/Menu/HeaderView.swift | 1 + phpmon/Domain/SwiftUI/Menu/ServicesView.swift | 20 ++++++------- phpmon/Domain/SwiftUI/Menu/StatsView.swift | 1 + 4 files changed, 25 insertions(+), 27 deletions(-) diff --git a/phpmon/Domain/Menu/MainMenu+Startup.swift b/phpmon/Domain/Menu/MainMenu+Startup.swift index 72b65618..36c3c796 100644 --- a/phpmon/Domain/Menu/MainMenu+Startup.swift +++ b/phpmon/Domain/Menu/MainMenu+Startup.swift @@ -151,24 +151,20 @@ extension MainMenu { When the environment is not OK, present an alert to inform the user. */ private func onEnvironmentFail() async { - Task { @MainActor [self] in - NVAlert() - .withInformation( - title: "alert.cannot_start.title".localized, - subtitle: "alert.cannot_start.subtitle".localized, - description: "alert.cannot_start.description".localized - ) - .withPrimary(text: "alert.cannot_start.retry".localized) - .withSecondary(text: "alert.cannot_start.close".localized, action: { vc in - vc.close(with: .alertSecondButtonReturn) - exit(1) - }) - .show() + NVAlert() + .withInformation( + title: "alert.cannot_start.title".localized, + subtitle: "alert.cannot_start.subtitle".localized, + description: "alert.cannot_start.description".localized + ) + .withPrimary(text: "alert.cannot_start.retry".localized) + .withSecondary(text: "alert.cannot_start.close".localized, action: { vc in + vc.close(with: .alertSecondButtonReturn) + exit(1) + }) + .show() - Task { // An issue occurred, fire startup checks again after dismissal - await startup() - } - } + await startup() } /** diff --git a/phpmon/Domain/SwiftUI/Menu/HeaderView.swift b/phpmon/Domain/SwiftUI/Menu/HeaderView.swift index 710ba5ee..884982b3 100644 --- a/phpmon/Domain/SwiftUI/Menu/HeaderView.swift +++ b/phpmon/Domain/SwiftUI/Menu/HeaderView.swift @@ -24,6 +24,7 @@ struct HeaderView: View { // MARK: - NSMenuItem + @MainActor static func asMenuItem( text: String, minimumWidth: CGFloat? = nil diff --git a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift index 8cc8801b..1b6b9738 100644 --- a/phpmon/Domain/SwiftUI/Menu/ServicesView.swift +++ b/phpmon/Domain/SwiftUI/Menu/ServicesView.swift @@ -12,6 +12,7 @@ import NVAlert struct ServicesView: View { + @MainActor static func asMenuItem(perRow: Int = 4) -> NSMenuItem { let view = { let rootView = Self(manager: ServicesManager.shared, perRow: perRow) @@ -103,6 +104,13 @@ struct ServiceView: View { var service: Service @State var isBusy: Bool = false + @MainActor + private func toggleService() async { + isBusy = true + await ServicesManager.shared.toggleService(named: service.name) + isBusy = false + } + var body: some View { VStack(alignment: .center, spacing: 0) { Text(service.name.uppercased()) @@ -133,11 +141,7 @@ struct ServiceView: View { } if service.status == .error { Button { - Task { - isBusy = true - await ServicesManager.shared.toggleService(named: service.name) - isBusy = false - } + Task { await toggleService() } } label: { Text("E") .frame(width: 12.0, height: 12.0) @@ -148,11 +152,7 @@ struct ServiceView: View { } if service.status == .active || service.status == .inactive { Button { - Task { - isBusy = true - await ServicesManager.shared.toggleService(named: service.name) - isBusy = false - } + Task { await toggleService() } } label: { Image( systemName: service.status == .active ? "checkmark" : "xmark" diff --git a/phpmon/Domain/SwiftUI/Menu/StatsView.swift b/phpmon/Domain/SwiftUI/Menu/StatsView.swift index b74cd56e..0cf990c1 100644 --- a/phpmon/Domain/SwiftUI/Menu/StatsView.swift +++ b/phpmon/Domain/SwiftUI/Menu/StatsView.swift @@ -10,6 +10,7 @@ import SwiftUI struct StatsView: View { + @MainActor static func asMenuItem(memory: String, post: String, upload: String) -> NSMenuItem { let item = NSMenuItem() let view = NSHostingView(