Browse Source

home: fix alerts not showing

osy 9 months ago
parent
commit
dfb8fdb5e9

+ 9 - 2
Platform/Shared/BusyOverlay.swift

@@ -27,8 +27,15 @@ struct BusyOverlay: View {
                 EmptyView()
                 EmptyView()
             }
             }
         }
         }
-        .alert(item: $data.alertMessage) { alertMessage in
-            Alert(title: Text(alertMessage.message))
+        .alert(item: $data.alertItem) { item in
+            switch item {
+            case .downloadUrl(let url):
+                return Alert(title: Text("Download VM"), message: Text("Do you want to download '\(url)'?"), primaryButton: .cancel(), secondaryButton: .default(Text("Download")) {
+                    data.downloadUTMZip(from: url)
+                })
+            case .message(let message):
+                return Alert(title: Text(message))
+            }
         }
         }
     }
     }
 }
 }

+ 2 - 24
Platform/Shared/ContentView.swift

@@ -36,7 +36,6 @@ struct ContentView: View {
     @StateObject private var releaseHelper = UTMReleaseHelper()
     @StateObject private var releaseHelper = UTMReleaseHelper()
     @State private var newPopupPresented = false
     @State private var newPopupPresented = false
     @State private var openSheetPresented = false
     @State private var openSheetPresented = false
-    @State private var alertItem: AlertItem?
     @Environment(\.openURL) var openURL
     @Environment(\.openURL) var openURL
     @AppStorage("ServerAutostart") private var isServerAutostart: Bool = false
     @AppStorage("ServerAutostart") private var isServerAutostart: Bool = false
 
 
@@ -55,14 +54,6 @@ struct ContentView: View {
         }, content: {
         }, content: {
             VMReleaseNotesView(helper: releaseHelper).padding()
             VMReleaseNotesView(helper: releaseHelper).padding()
         })
         })
-        .alert(item: $alertItem) { item in
-            switch item {
-            case .downloadUrl(let url):
-                return Alert(title: Text("Download VM"), message: Text("Do you want to download '\(url)'?"), primaryButton: .cancel(), secondaryButton: .default(Text("Download")) {
-                    data.downloadUTMZip(from: url)
-                })
-            }
-        }
         .onReceive(NSNotification.ShowReleaseNotes) { _ in
         .onReceive(NSNotification.ShowReleaseNotes) { _ in
             Task {
             Task {
                 await releaseHelper.fetchReleaseNotes(force: true)
                 await releaseHelper.fetchReleaseNotes(force: true)
@@ -148,8 +139,8 @@ struct ContentView: View {
            components.host == "downloadVM",
            components.host == "downloadVM",
            let urlParameter = components.queryItems?.first(where: { $0.name == "url" })?.value,
            let urlParameter = components.queryItems?.first(where: { $0.name == "url" })?.value,
            let url = URL(string: urlParameter) {
            let url = URL(string: urlParameter) {
-            if alertItem == nil {
-                alertItem = .downloadUrl(url)
+            if data.alertItem == nil {
+                data.alertItem = .downloadUrl(url)
             }
             }
         } else if url.isFileURL {
         } else if url.isFileURL {
             data.busyWorkAsync {
             data.busyWorkAsync {
@@ -214,19 +205,6 @@ extension ContentView: DropDelegate {
     }
     }
 }
 }
 
 
-extension ContentView {
-    private enum AlertItem: Identifiable {
-        case downloadUrl(URL)
-
-        var id: Int {
-            switch self {
-            case .downloadUrl(let url):
-                return url.hashValue
-            }
-        }
-    }
-}
-
 struct ContentView_Previews: PreviewProvider {
 struct ContentView_Previews: PreviewProvider {
     static var previews: some View {
     static var previews: some View {
         ContentView()
         ContentView()

+ 11 - 0
Platform/Shared/VMWizardState.swift

@@ -59,6 +59,17 @@ enum VMBootDevice: Int, Identifiable {
     case kernel
     case kernel
 }
 }
 
 
+struct AlertMessage: Identifiable {
+    var message: String
+    public var id: String {
+        message
+    }
+
+    init(_ message: String) {
+        self.message = message
+    }
+}
+
 @MainActor class VMWizardState: ObservableObject {
 @MainActor class VMWizardState: ObservableObject {
     let bytesInMib = 1048576
     let bytesInMib = 1048576
     let bytesInGib = 1073741824
     let bytesInGib = 1073741824

+ 15 - 12
Platform/UTMData.swift

@@ -36,14 +36,17 @@ typealias ConcreteVirtualMachine = UTMRemoteSpiceVirtualMachine
 typealias ConcreteVirtualMachine = UTMQemuVirtualMachine
 typealias ConcreteVirtualMachine = UTMQemuVirtualMachine
 #endif
 #endif
 
 
-struct AlertMessage: Identifiable {
-    var message: String
-    public var id: String {
-        message
-    }
-    
-    init(_ message: String) {
-        self.message = message
+enum AlertItem: Identifiable {
+    case message(String)
+    case downloadUrl(URL)
+
+    var id: Int {
+        switch self {
+        case .downloadUrl(let url):
+            return url.hashValue
+        case .message(let message):
+            return message.hashValue
+        }
     }
     }
 }
 }
 
 
@@ -61,8 +64,8 @@ struct AlertMessage: Identifiable {
     @Published var showNewVMSheet: Bool
     @Published var showNewVMSheet: Bool
     
     
     /// View: show an alert message
     /// View: show an alert message
-    @Published var alertMessage: AlertMessage?
-    
+    @Published var alertItem: AlertItem?
+
     /// View: show busy spinner
     /// View: show busy spinner
     @Published var busy: Bool
     @Published var busy: Bool
     
     
@@ -398,7 +401,7 @@ struct AlertMessage: Identifiable {
     }
     }
     
     
     func showErrorAlert(message: String) {
     func showErrorAlert(message: String) {
-        alertMessage = AlertMessage(message)
+        alertItem = .message(message)
     }
     }
     
     
     func newVM() {
     func newVM() {
@@ -910,7 +913,7 @@ struct AlertMessage: Identifiable {
             } catch {
             } catch {
                 logger.error("\(error)")
                 logger.error("\(error)")
                 DispatchQueue.main.async {
                 DispatchQueue.main.async {
-                    self.alertMessage = AlertMessage(error.localizedDescription)
+                    self.alertItem = .message(error.localizedDescription)
                 }
                 }
             }
             }
         }
         }

+ 1 - 1
Platform/macOS/UTMDataExtension.swift

@@ -50,7 +50,7 @@ extension UTMData {
             }
             }
             if window == nil {
             if window == nil {
                 DispatchQueue.main.async {
                 DispatchQueue.main.async {
-                    self.alertMessage = AlertMessage(NSLocalizedString("This virtual machine cannot be run on this machine.", comment: "UTMDataExtension"))
+                    self.alertItem = .message(NSLocalizedString("This virtual machine cannot be run on this machine.", comment: "UTMDataExtension"))
                 }
                 }
             }
             }
         }
         }