project: remove UTMQemuVirtualMachine from Remote client builds

This commit is contained in:
osy 2024-02-04 21:01:12 -08:00
parent be1f4ec87a
commit a258ec396c
9 changed files with 30 additions and 21 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -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

View File

@ -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)

View File

@ -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))

View File

@ -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()
}

View File

@ -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

View File

@ -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 {

View File

@ -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 */,