@@ -38,6 +38,7 @@ final class MainViewModel: NSObject, ObservableObject {
3838 @Published var virtualMac = VirtualMac ( )
3939 @Published var virtualMachine : VZVirtualMachine ?
4040 @Published var customRestoreImageURL : URL ?
41+ @Published var customHardDiskURL : URL ?
4142 @Published var diskSize = UserDefaults . standard. diskSize {
4243 didSet {
4344 UserDefaults . standard. diskSize = diskSize
@@ -58,20 +59,31 @@ final class MainViewModel: NSObject, ObservableObject {
5859 static var restoreImageExists : Bool {
5960 return FileManager . default. fileExists ( atPath: URL . restoreImageURL. path)
6061 }
61-
62+ var sharedFolderExists : Bool {
63+ if let hardDiskDirectoryBookmarkData = Bookmark . startAccess ( data: virtualMac. parameters. sharedFolder, forType: . hardDisk) {
64+ var isDirectory = ObjCBool ( false )
65+ if FileManager . default. fileExists ( atPath: hardDiskDirectoryBookmarkData. path, isDirectory: & isDirectory) ,
66+ isDirectory. boolValue == true
67+ {
68+ return true
69+ }
70+ }
71+ return false
72+ }
6273 var showConfigurationView : Bool {
6374 return ( Self . diskImageExists || Self . restoreImageExists) && state == . Stopped
6475 }
6576 var showSettingsInfo : Bool {
6677 return !Self. diskImageExists && state == . Stopped
6778 }
79+
80+ // MARK: - Public
6881
6982 override init ( ) {
7083 super. init ( )
7184 updateLabels ( for: state)
7285 readParametersFromDisk ( )
7386 loadLicenseInformationFromBundle ( )
74- moveFilesAfterUpdate ( )
7587 handleCommandLineArguments ( )
7688 }
7789
@@ -126,18 +138,33 @@ final class MainViewModel: NSObject, ObservableObject {
126138 } else {
127139 licenseInformationString = " License information not found "
128140 }
129-
141+
130142 licenseInformationTitleString = " virtualOS "
131143 if let version = Bundle . main. infoDictionary ? [ " CFBundleShortVersionString " ] as? String ,
132144 let build = Bundle . main. infoDictionary ? [ " CFBundleVersion " ] as? String
133145 {
134146 licenseInformationTitleString += " \( version) (Build \( build) ) "
135147 }
136148 }
149+
150+ func set( sharedFolderUrl: URL ) {
151+ if let sharedFolderData = Bookmark . createBookmarkData ( fromUrl: sharedFolderUrl) {
152+ _ = Bookmark . startAccess ( data: sharedFolderData, forType: . sharedFolder)
153+ virtualMac. parameters. sharedFolder = sharedFolderData
154+ objectWillChange. send ( )
155+ if let errorString = virtualMac. writeParametersToDisk ( ) {
156+ display ( errorString: errorString)
157+ }
158+ }
159+ }
137160
138161 // MARK: - Private
139162
140163 fileprivate func readParametersFromDisk( ) {
164+ if let hardDiskDirectoryBookmarkData = UserDefaults . standard. hardDiskDirectoryBookmarkData {
165+ _ = Bookmark . startAccess ( data: hardDiskDirectoryBookmarkData, forType: . hardDisk)
166+ }
167+
141168 if Self . diskImageExists {
142169 // read previous vm settings
143170 if let errorString = virtualMac. readFromDisk ( delegate: self ) {
@@ -176,7 +203,9 @@ final class MainViewModel: NSObject, ObservableObject {
176203 self . display ( errorString: " Download of restore image failed: \( errorString) " )
177204 } else {
178205 virtualOSApp. debugLog ( " Download of restore image completed " )
179- self . install ( virtualMac: self . virtualMac)
206+ DispatchQueue . main. async {
207+ self . install ( virtualMac: self . virtualMac)
208+ }
180209 }
181210 }
182211 }
@@ -306,16 +335,6 @@ final class MainViewModel: NSObject, ObservableObject {
306335 statusLabel = statusText
307336 }
308337
309- fileprivate func moveFilesAfterUpdate( ) {
310- let oldRestoreImageLocation = URL ( fileURLWithPath: NSHomeDirectory ( ) + " /RestoreImage.ipsw " )
311- let newRestoreImageLocation = URL ( fileURLWithPath: NSHomeDirectory ( ) + " /Documents/RestoreImage.ipsw " )
312- try ? FileManager . default. moveItem ( at: oldRestoreImageLocation, to: newRestoreImageLocation)
313-
314- let oldVirtualMachineLocation = URL ( fileURLWithPath: NSHomeDirectory ( ) + " /virtualOS.bundle " )
315- let newVirtualMachineLocation = URL ( fileURLWithPath: NSHomeDirectory ( ) + " /Documents/virtualOS.bundle " )
316- try ? FileManager . default. moveItem ( at: oldVirtualMachineLocation, to: newVirtualMachineLocation)
317- }
318-
319338 fileprivate func handleCommandLineArguments( ) {
320339 for arg in CommandLine . arguments where arg == " start " {
321340 start ( )
0 commit comments