Browse Source

project: remove UTMQemuVirtualMachine from Remote client builds

osy 1 year ago
parent
commit
a258ec396c

+ 1 - 1
Configuration/UTMConfiguration.swift

@@ -120,7 +120,7 @@ extension UTMConfiguration {
             #endif
             // is it a legacy QEMU config?
             let dict = try NSDictionary(contentsOf: configURL, error: ()) as! [AnyHashable : Any]
-            let name = UTMQemuVirtualMachine.virtualMachineName(for: packageURL)
+            let name = ConcreteVirtualMachine.virtualMachineName(for: packageURL)
             let legacy = UTMLegacyQemuConfiguration(dictionary: dict, name: name, path: packageURL)
             return UTMQemuConfiguration(migrating: legacy)
         } else if stub.backend == .qemu {

+ 1 - 1
Platform/Shared/VMConfigSystemView.swift

@@ -177,7 +177,7 @@ private struct HardwareOptions: View {
                     }
                 }
                 .onChange(of: config.architecture) { newValue in
-                    isArchitectureSupported = UTMQemuVirtualMachine.isSupported(systemArchitecture: newValue)
+                    isArchitectureSupported = ConcreteVirtualMachine.isSupported(systemArchitecture: newValue)
                     if newValue != architecture {
                         architecture = newValue
                     }

+ 13 - 6
Platform/UTMData.swift

@@ -25,6 +25,13 @@ import SwiftUI
 import AltKit
 #endif
 
+#if WITH_REMOTE
+import CocoaSpiceNoUsb
+typealias ConcreteVirtualMachine = UTMRemoteSpiceVirtualMachine
+#else
+typealias ConcreteVirtualMachine = UTMQemuVirtualMachine
+#endif
+
 struct AlertMessage: Identifiable {
     var message: String
     public var id: String {
@@ -141,7 +148,7 @@ struct AlertMessage: Identifiable {
                 guard try file.resourceValues(forKeys: [.isDirectoryKey]).isDirectory ?? false else {
                     continue
                 }
-                guard UTMQemuVirtualMachine.isVirtualMachine(url: file) else {
+                guard ConcreteVirtualMachine.isVirtualMachine(url: file) else {
                     continue
                 }
                 await Task.yield()
@@ -326,7 +333,7 @@ struct AlertMessage: Identifiable {
         let nameForId = { (i: Int) in i <= 1 ? base : "\(base) \(i)" }
         for i in 1..<1000 {
             let name = nameForId(i)
-            let file = UTMQemuVirtualMachine.virtualMachinePath(for: name, in: documentsURL)
+            let file = ConcreteVirtualMachine.virtualMachinePath(for: name, in: documentsURL)
             if !fileManager.fileExists(atPath: file.path) {
                 return name
             }
@@ -460,8 +467,8 @@ struct AlertMessage: Identifiable {
     /// - Returns: The new VM
     @discardableResult func clone(vm: VMData) async throws -> VMData {
         let newName: String = newDefaultVMName(base: vm.detailsTitleLabel)
-        let newPath = UTMQemuVirtualMachine.virtualMachinePath(for: newName, in: documentsURL)
-        
+        let newPath = ConcreteVirtualMachine.virtualMachinePath(for: newName, in: documentsURL)
+
         try await copyItemWithCopyfile(at: vm.pathUrl, to: newPath)
         guard let newVM = try? VMData(url: newPath) else {
             throw UTMDataError.cloneFailed
@@ -688,7 +695,7 @@ struct AlertMessage: Identifiable {
     }
     
     func mountSupportTools(for vm: any UTMVirtualMachine) async throws {
-        guard let vm = vm as? UTMQemuVirtualMachine else {
+        guard let vm = vm as? any UTMSpiceVirtualMachine else {
             throw UTMDataError.unsupportedBackend
         }
         let task = UTMDownloadSupportToolsTask(for: vm)
@@ -837,7 +844,7 @@ struct AlertMessage: Identifiable {
     ///   - vm: VM to send mouse/tablet coordinates to
     ///   - components: Data (see UTM Wiki for details)
     func automationSendMouse(to vm: VMData, urlComponents components: URLComponents) {
-        guard let qemuVm = vm.wrapped as? UTMQemuVirtualMachine else { return } // FIXME: implement for Apple VM
+        guard let qemuVm = vm.wrapped as? any UTMSpiceVirtualMachine else { return } // FIXME: implement for Apple VM
         guard !qemuVm.config.displays.isEmpty else { return }
         guard let queryItems = components.queryItems else { return }
         /// Parse targeted position

+ 3 - 3
Platform/UTMDownloadSupportToolsTask.swift

@@ -18,8 +18,8 @@ import Foundation
 
 /// Downloads support tools ISO
 class UTMDownloadSupportToolsTask: UTMDownloadTask {
-    private let vm: UTMQemuVirtualMachine
-    
+    private let vm: any UTMSpiceVirtualMachine
+
     private static let supportToolsDownloadUrl = URL(string: "https://getutm.app/downloads/utm-guest-tools-latest.iso")!
     
     private var toolsUrl: URL {
@@ -42,7 +42,7 @@ class UTMDownloadSupportToolsTask: UTMDownloadTask {
         }
     }
     
-    init(for vm: UTMQemuVirtualMachine) {
+    init(for vm: any UTMSpiceVirtualMachine) {
         self.vm = vm
         let name = NSLocalizedString("Windows Guest Support Tools", comment: "UTMDownloadSupportToolsTask")
         super.init(for: Self.supportToolsDownloadUrl, named: name)

+ 4 - 0
Platform/VMData.swift

@@ -134,9 +134,11 @@ import SwiftUI
     /// - Parameter config: Configuration to create new VM
     convenience init<Config: UTMConfiguration>(creatingFromConfig config: Config, destinationUrl: URL) throws {
         self.init()
+        #if !WITH_REMOTE
         if let qemuConfig = config as? UTMQemuConfiguration {
             wrapped = try UTMQemuVirtualMachine(newForConfiguration: qemuConfig, destinationUrl: destinationUrl)
         }
+        #endif
         #if os(macOS)
         if let appleConfig = config as? UTMAppleConfiguration {
             wrapped = try UTMAppleVirtualMachine(newForConfiguration: appleConfig, destinationUrl: destinationUrl)
@@ -165,9 +167,11 @@ import SwiftUI
         }
         var loaded: (any UTMVirtualMachine)?
         let config = try UTMQemuConfiguration.load(from: url)
+        #if !WITH_REMOTE
         if let qemuConfig = config as? UTMQemuConfiguration {
             loaded = try UTMQemuVirtualMachine(packageUrl: url, configuration: qemuConfig, isShortcut: isShortcut(url))
         }
+        #endif
         #if os(macOS)
         if let appleConfig = config as? UTMAppleConfiguration {
             loaded = try UTMAppleVirtualMachine(packageUrl: url, configuration: appleConfig, isShortcut: isShortcut(url))

+ 1 - 1
Platform/iOS/UTMDataExtension.swift

@@ -26,7 +26,7 @@ extension UTMData {
         guard let wrapped = vm.wrapped else {
             return
         }
-        let session = VMSessionState(for: wrapped as! UTMQemuVirtualMachine)
+        let session = VMSessionState(for: wrapped as! (any UTMSpiceVirtualMachine))
         session.start()
     }
     

+ 3 - 3
Platform/iOS/VMDisplayHostedView.swift

@@ -19,7 +19,7 @@ import SwiftUI
 
 struct VMDisplayHostedView: UIViewControllerRepresentable {
     internal class Coordinator: VMDisplayViewControllerDelegate {
-        let vm: UTMQemuVirtualMachine
+        let vm: any UTMSpiceVirtualMachine
         let device: VMWindowState.Device
         @Binding var state: VMWindowState
         var vmStateCancellable: AnyCancellable?
@@ -100,7 +100,7 @@ struct VMDisplayHostedView: UIViewControllerRepresentable {
             }
         }
         
-        init(with vm: UTMQemuVirtualMachine, device: VMWindowState.Device, state: Binding<VMWindowState>) {
+        init(with vm: any UTMSpiceVirtualMachine, device: VMWindowState.Device, state: Binding<VMWindowState>) {
             self.vm = vm
             self.device = device
             self._state = state
@@ -131,7 +131,7 @@ struct VMDisplayHostedView: UIViewControllerRepresentable {
         }
     }
     
-    let vm: UTMQemuVirtualMachine
+    let vm: any UTMSpiceVirtualMachine
     let device: VMWindowState.Device
     
     @Binding var state: VMWindowState

+ 4 - 4
Platform/iOS/VMSessionState.swift

@@ -37,8 +37,8 @@ import SwiftUI
 
     let id: ID = ID()
 
-    let vm: UTMQemuVirtualMachine
-    
+    let vm: any UTMSpiceVirtualMachine
+
     var qemuConfig: UTMQemuConfiguration {
         vm.config
     }
@@ -81,7 +81,7 @@ import SwiftUI
     
     private var hasAutosave: Bool = false
 
-    init(for vm: UTMQemuVirtualMachine) {
+    init(for vm: any UTMSpiceVirtualMachine) {
         self.vm = vm
         super.init()
         vm.delegate = self
@@ -494,7 +494,7 @@ extension VMSessionState {
             }
             Task {
                 do {
-                    try await vm.saveSnapshot()
+                    try await vm.saveSnapshot(name: nil)
                     self.hasAutosave = true
                     logger.info("Save snapshot complete")
                 } catch {

+ 0 - 2
UTM.xcodeproj/project.pbxproj

@@ -1063,7 +1063,6 @@
 		CEF7F6102AEEDCC400E34952 /* UTMSerialPortDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848F71EB277A2F47006A0240 /* UTMSerialPortDelegate.swift */; };
 		CEF7F6112AEEDCC400E34952 /* VMConfigSoundView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D953A24AD4F980059923A /* VMConfigSoundView.swift */; };
 		CEF7F6122AEEDCC400E34952 /* UTMLegacyQemuConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CE31C244225E555600A965DD /* UTMLegacyQemuConfiguration.m */; };
-		CEF7F6132AEEDCC400E34952 /* UTMQemuVirtualMachine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 841E999728AC817D003C6CB6 /* UTMQemuVirtualMachine.swift */; };
 		CEF7F6142AEEDCC400E34952 /* VMDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE2D954B24AD4F980059923A /* VMDetailsView.swift */; };
 		CEF7F6152AEEDCC400E34952 /* VMDisplayMetalViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 5286EC94243748C3007E6CBC /* VMDisplayMetalViewController.m */; };
 		CEF7F6162AEEDCC400E34952 /* UTMQemuConfiguration+Arguments.swift in Sources */ = {isa = PBXBuildFile; fileRef = 848D99C328670F650055C215 /* UTMQemuConfiguration+Arguments.swift */; };
@@ -4108,7 +4107,6 @@
 				CEF7F6102AEEDCC400E34952 /* UTMSerialPortDelegate.swift in Sources */,
 				CEF7F6112AEEDCC400E34952 /* VMConfigSoundView.swift in Sources */,
 				CEF7F6122AEEDCC400E34952 /* UTMLegacyQemuConfiguration.m in Sources */,
-				CEF7F6132AEEDCC400E34952 /* UTMQemuVirtualMachine.swift in Sources */,
 				CEF7F6142AEEDCC400E34952 /* VMDetailsView.swift in Sources */,
 				CEF7F6152AEEDCC400E34952 /* VMDisplayMetalViewController.m in Sources */,
 				CEF7F6162AEEDCC400E34952 /* UTMQemuConfiguration+Arguments.swift in Sources */,