diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift b/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift index 200d053541..fa1e0011fe 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift @@ -19,6 +19,7 @@ public enum Key { static let engineVersion = "KeymanEngineVersion" static let keyboardPickerDisplayed = "KeyboardPickerDisplayed" static let synchronizeSWKeyboard = "KeymanSynchronizeSWKeyboard" + static let migrationLevel = "KeymanEngineMigrationLevel" // JSON keys for language REST calls static let options = "options" diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift b/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift index 21682a9de2..d5f7e5554d 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift @@ -84,4 +84,14 @@ public extension UserDefaults { public func userKeyboard(withID keyboardID: String, languageID: String) -> InstallableKeyboard? { return userKeyboards?.first { $0.id == keyboardID && $0.languageID == languageID } } + + var migrationLevel: Int { + get { + return integer(forKey: Key.migrationLevel) + } + + set(level) { + set(level, forKey: Key.migrationLevel) + } + } } diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Migrations.swift b/ios/engine/KMEI/KeymanEngine/Classes/Migrations.swift index fdb4e3a893..2417da3cdd 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Migrations.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Migrations.swift @@ -8,8 +8,17 @@ import Foundation +fileprivate enum MigrationLevel { + static let initial = 0 + static let migratedForKMP = 10 +} + enum Migrations { static func migrateForKMP(storage: Storage) { + guard storage.userDefaults.migrationLevel < MigrationLevel.migratedForKMP else { + return + } + let languageDir = storage.baseDir.appendingPathComponent("languages") let fontDir = storage.baseDir.appendingPathComponent("fonts") @@ -80,6 +89,8 @@ enum Migrations { // Remove keyboards that were not copied successfully let filteredUserKeyboards = userKeyboards.filter { successfulKeyboards.contains($0.id) } storage.userDefaults.userKeyboards = filteredUserKeyboards + storage.userDefaults.migrationLevel = MigrationLevel.migratedForKMP + storage.userDefaults.synchronize() // TODO: Remove old directory }