diff --git a/Source/GameCoreManager.swift b/Source/GameCoreManager.swift index e2d995f..721e3d0 100644 --- a/Source/GameCoreManager.swift +++ b/Source/GameCoreManager.swift @@ -46,7 +46,7 @@ public typealias StartupCompletionHandler = (Error?) -> Void String(format: "<%@ %p, ROM: %@, Core: %@, System: %@, Display Helper: %@>", "\(Self.self)", Unmanaged.passUnretained(self).toOpaque().debugDescription, - startupInfo.romPath, + startupInfo.romURL.path, plugin?.bundleIdentifier ?? "no plugin", systemPlugin?.systemIdentifier ?? "no systemPlugin", gameCoreOwner != nil ? Unmanaged.passUnretained(gameCoreOwner!).toOpaque().debugDescription : "no gameCoreOwner" @@ -173,16 +173,16 @@ extension GameCoreManager: OEGameCoreHelper { } } - public func saveStateToFile(atPath fileName: String, completionHandler block: @escaping (Bool, Error?) -> Void) { - gameCoreHelper!.saveStateToFile(atPath: fileName) { success, error in + public func saveStateToFile(at fileURL: URL, completionHandler block: @escaping (Bool, Error?) -> Void) { + gameCoreHelper!.saveStateToFile(at: fileURL) { success, error in RunLoop.main.perform { block(success, error) } } } - public func loadStateFromFile(atPath fileName: String, completionHandler block: @escaping (Bool, Error?) -> Void) { - gameCoreHelper!.loadStateFromFile(atPath: fileName) { success, error in + public func loadStateFromFile(at fileURL: URL, completionHandler block: @escaping (Bool, Error?) -> Void) { + gameCoreHelper!.loadStateFromFile(at: fileURL) { success, error in RunLoop.main.perform { block(success, error) } diff --git a/Source/OEGameCoreHelper.swift b/Source/OEGameCoreHelper.swift index d9391d0..b7d314b 100644 --- a/Source/OEGameCoreHelper.swift +++ b/Source/OEGameCoreHelper.swift @@ -75,8 +75,8 @@ import AudioToolbox func startEmulation(completionHandler handler: @escaping () -> Void) func resetEmulation(completionHandler handler: @escaping () -> Void) func stopEmulation(completionHandler handler: @escaping () -> Void) - func saveStateToFile(atPath fileName: String, completionHandler block: @escaping (Bool, Error?) -> Void) - func loadStateFromFile(atPath fileName: String, completionHandler block: @escaping (Bool, Error?) -> Void) + func saveStateToFile(at fileURL: URL, completionHandler block: @escaping (Bool, Error?) -> Void) + func loadStateFromFile(at fileURL: URL, completionHandler block: @escaping (Bool, Error?) -> Void) func setCheat(_ cheatCode: String, withType type: String, enabled: Bool) func setDisc(_ discNumber: UInt) func changeDisplay(withMode displayMode: String) diff --git a/Source/OEGameStartupInfo.swift b/Source/OEGameStartupInfo.swift index 3ca369f..3db9bcb 100644 --- a/Source/OEGameStartupInfo.swift +++ b/Source/OEGameStartupInfo.swift @@ -27,29 +27,29 @@ import Foundation @objc(OEGameStartupInfo) public class OEGameStartupInfo: NSObject, NSSecureCoding { public static var supportsSecureCoding: Bool { return true } - public let romPath: String + public let romURL: URL public let romMD5: String public let romHeader: String public let romSerial: String public let systemRegion: String public let displayModeInfo: [String: Any]? - public let shader: URL + public let shaderURL: URL public let shaderParameters: [String: Double] public let corePluginURL: URL public let systemPluginURL: URL - public init(romPath: String, romMD5: String, romHeader: String, romSerial: String, + public init(romURL: URL, romMD5: String, romHeader: String, romSerial: String, systemRegion: String, displayModeInfo: [String: Any]?, - shader: URL, shaderParameters: [String: Double], + shaderURL: URL, shaderParameters: [String: Double], corePluginURL: URL, systemPluginURL: URL) { - self.romPath = romPath + self.romURL = romURL self.romMD5 = romMD5 self.romHeader = romHeader self.romSerial = romSerial self.systemRegion = systemRegion self.displayModeInfo = displayModeInfo - self.shader = shader + self.shaderURL = shaderURL self.shaderParameters = shaderParameters self.corePluginURL = corePluginURL self.systemPluginURL = systemPluginURL @@ -59,39 +59,39 @@ import Foundation public required init?(coder: NSCoder) { guard - let romPath = coder.decodeObject(of: NSString.self, forKey: "romPath") as? String, + let romURL = coder.decodeObject(of: NSURL.self, forKey: "romPath") as? URL, let romMD5 = coder.decodeObject(of: NSString.self, forKey: "romMD5") as? String, let romHeader = coder.decodeObject(of: NSString.self, forKey: "romHeader") as? String, let romSerial = coder.decodeObject(of: NSString.self, forKey: "romSerial") as? String, let systemRegion = coder.decodeObject(of: NSString.self, forKey: "systemRegion") as? String, let displayModeInfo = coder.decodePropertyList(forKey: "displayModeInfo") as? [String: Any]?, - let shader = coder.decodeObject(of: NSURL.self, forKey: "shader") as? URL, + let shaderURL = coder.decodeObject(of: NSURL.self, forKey: "shaderURL") as? URL, let shaderParameters = coder.decodeObject(of: [NSString.self, NSDictionary.self, NSNumber.self], forKey: "shaderParameters") as? [String: Double], let corePluginURL = coder.decodeObject(of: NSURL.self, forKey: "corePluginURL") as? URL, let systemPluginURL = coder.decodeObject(of: NSURL.self, forKey: "systemPluginURL") as? URL else { return nil } - self.romPath = romPath + self.romURL = romURL self.romMD5 = romMD5 self.romHeader = romHeader self.romSerial = romSerial self.systemRegion = systemRegion self.displayModeInfo = displayModeInfo - self.shader = shader + self.shaderURL = shaderURL self.shaderParameters = shaderParameters self.corePluginURL = corePluginURL self.systemPluginURL = systemPluginURL } public func encode(with coder: NSCoder) { - coder.encode(romPath, forKey: "romPath") + coder.encode(romURL, forKey: "romURL") coder.encode(romMD5, forKey: "romMD5") coder.encode(romHeader, forKey: "romHeader") coder.encode(romSerial, forKey: "romSerial") coder.encode(systemRegion, forKey: "systemRegion") coder.encode(displayModeInfo, forKey: "displayModeInfo") - coder.encode(shader, forKey: "shader") + coder.encode(shaderURL, forKey: "shaderURL") coder.encode(shaderParameters, forKey: "shaderParameters") coder.encode(corePluginURL, forKey: "corePluginURL") coder.encode(systemPluginURL, forKey: "systemPluginURL") diff --git a/Source/OpenEmuHelperApp.swift b/Source/OpenEmuHelperApp.swift index e129cf9..387a9a4 100644 --- a/Source/OpenEmuHelperApp.swift +++ b/Source/OpenEmuHelperApp.swift @@ -242,11 +242,11 @@ extension OSLog { return // NO } - let aPath = (info.romPath as NSString).standardizingPath + let aPath = info.romURL.standardizedFileURL.path os_log(.info, log: .helper, "Load ROM at path %{public}@", aPath) - _shader = info.shader + _shader = info.shaderURL _shaderParameters = info.shaderParameters _systemController = OESystemPlugin.systemPlugin(bundleAtURL: info.systemPluginURL)!.controller _systemResponder = _systemController.newGameSystemResponder() @@ -455,15 +455,15 @@ extension OSLog { } } - public func saveStateToFile(atPath fileName: String, completionHandler block: @escaping (Bool, Error?) -> Void) { + public func saveStateToFile(at fileURL: URL, completionHandler block: @escaping (Bool, Error?) -> Void) { gameCore.perform { - self.gameCore.saveStateToFile(atPath: fileName, completionHandler: block) + self.gameCore.saveStateToFile(atPath: fileURL.path, completionHandler: block) } } - public func loadStateFromFile(atPath fileName: String, completionHandler block: @escaping (Bool, Error?) -> Void) { + public func loadStateFromFile(at fileURL: URL, completionHandler block: @escaping (Bool, Error?) -> Void) { gameCore.perform { - self.gameCore.loadStateFromFile(atPath: fileName, completionHandler: block) + self.gameCore.loadStateFromFile(atPath: fileURL.path, completionHandler: block) } }