From e11e4437c52852e8e1b615b756871d9e37fb57c4 Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Mon, 27 Apr 2020 13:03:28 -0700 Subject: [PATCH] =?UTF-8?q?Adds=20coreID=20to=20SaveState=E2=80=99s=20Harm?= =?UTF-8?q?ony=20metadata=20for=20backwards=20compatibility?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Delta/Database/Model/Human/SaveState.swift | 19 ++++++++++++++----- .../Extensions/HarmonyMetadataKey+Keys.swift | 3 +++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Delta/Database/Model/Human/SaveState.swift b/Delta/Database/Model/Human/SaveState.swift index b44b4ad..b9bc922 100644 --- a/Delta/Database/Model/Human/SaveState.swift +++ b/Delta/Database/Model/Human/SaveState.swift @@ -134,7 +134,7 @@ extension SaveState: Syncable public var syncableMetadata: [HarmonyMetadataKey : String] { guard let game = self.game else { return [:] } - return [.gameID: game.identifier, .gameName: game.name] + return [.gameID: game.identifier, .gameName: game.name, .coreID: self.coreIdentifier].compactMapValues { $0 } } public var syncableLocalizedName: String? { @@ -145,11 +145,20 @@ extension SaveState: Syncable { guard self.coreIdentifier == nil else { return } guard let game = self.game, let system = System(gameType: game.type) else { return } - - switch system + + if let coreIdentifier = record.remoteMetadata?[.coreID] { - case .ds: self.coreIdentifier = DS.core.identifier // Assume DS save state with nil coreIdentifier is from DeSmuME core. - default: self.coreIdentifier = system.deltaCore.identifier + // SaveState was synced to older version of Delta and lost its coreIdentifier, + // but it remains in the remote metadata so we can reassign it. + self.coreIdentifier = coreIdentifier + } + else + { + switch system + { + case .ds: self.coreIdentifier = DS.core.identifier // Assume DS save state with nil coreIdentifier is from DeSmuME core. + default: self.coreIdentifier = system.deltaCore.identifier + } } } } diff --git a/Delta/Extensions/HarmonyMetadataKey+Keys.swift b/Delta/Extensions/HarmonyMetadataKey+Keys.swift index aed531e..0b668ec 100644 --- a/Delta/Extensions/HarmonyMetadataKey+Keys.swift +++ b/Delta/Extensions/HarmonyMetadataKey+Keys.swift @@ -12,4 +12,7 @@ extension HarmonyMetadataKey { static let gameID = HarmonyMetadataKey("gameID") static let gameName = HarmonyMetadataKey("gameName") + + // Backwards compatibility + static let coreID = HarmonyMetadataKey("coreID") }