diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardKeymanPackage.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardKeymanPackage.swift index 71993234b7..45dc068002 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardKeymanPackage.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardKeymanPackage.swift @@ -17,6 +17,8 @@ public class KeyboardKeymanPackage : TypedKeymanPackage { if let packagedKeyboards = metadata.keyboards { for keyboard in packagedKeyboards { + keyboard.packageId = self.id + if(keyboard.isValid && FileManager.default.fileExists(atPath: self.sourceFolder.appendingPathComponent("\(keyboard.keyboardId).js").path)) { keyboards.append(keyboard) } else { diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeymanPackage.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeymanPackage.swift index d5fb1fe3e4..9aadd75242 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeymanPackage.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeymanPackage.swift @@ -24,11 +24,32 @@ public enum KMPError : String, Error { public class KeymanPackage { static private let kmpFile = "kmp.json" public let sourceFolder: URL + public let id: String internal let metadata: KMPMetadata + internal let isTemp: Bool internal init(metadata: KMPMetadata, folder: URL) { sourceFolder = folder self.metadata = metadata + + let folderName = folder.lastPathComponent + let cacheDirectory = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask)[0] + var nameComponents = folderName.components(separatedBy: ".") + + // Have we parsed a temporary extraction site? + // This case arises during package installation. + isTemp = folderName.hasSuffix(".kmp.zip") && folder.path.contains(cacheDirectory.path) + if isTemp { + nameComponents.removeLast() // .zip + nameComponents.removeLast() // .kmp + } + + // Lexical model packages use .model.kmp, so we remove the final 'model' bit. + if nameComponents.last == "model" { + nameComponents.removeLast() + } + + self.id = nameComponents.joined(separator: ".") } public func isKeyboard() -> Bool { diff --git a/ios/engine/KMEI/KeymanEngine/Classes/LexicalModelKeymanPackage.swift b/ios/engine/KMEI/KeymanEngine/Classes/LexicalModelKeymanPackage.swift index 9936b21ad6..5bc7c861df 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/LexicalModelKeymanPackage.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/LexicalModelKeymanPackage.swift @@ -17,6 +17,8 @@ public class LexicalModelKeymanPackage : TypedKeymanPackage