mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-08-03 20:47:22 -04:00
54 lines
1.7 KiB
Swift
54 lines
1.7 KiB
Swift
// This file is part of Kiwix for iOS & macOS.
|
|
//
|
|
// Kiwix is free software; you can redistribute it and/or modify it
|
|
// under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 3 of the License, or
|
|
// any later version.
|
|
//
|
|
// Kiwix is distributed in the hope that it will be useful, but
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Kiwix; If not, see https://www.gnu.org/licenses/.
|
|
|
|
import Foundation
|
|
|
|
protocol UserDefaulting {
|
|
func bool(forKey defaultName: String) -> Bool
|
|
func setValue(_ value: Any?, forKey key: String)
|
|
}
|
|
extension UserDefaults: UserDefaulting {}
|
|
|
|
struct Migration {
|
|
let userDefaultsKey: String
|
|
let migration: () -> Bool
|
|
|
|
func migrate(_ userDefaults: UserDefaulting) -> Bool {
|
|
guard userDefaults.bool(forKey: userDefaultsKey) != true else {
|
|
// migration was done earlier
|
|
return true
|
|
}
|
|
let result: Bool = migration()
|
|
userDefaults.setValue(result, forKey: userDefaultsKey)
|
|
return result
|
|
}
|
|
}
|
|
|
|
struct MigrationService {
|
|
let migrations: [Migration]
|
|
|
|
init(migrations: [Migration] = Migrations.all) {
|
|
self.migrations = migrations
|
|
}
|
|
|
|
func migrateAll(using userDefaults: UserDefaulting = UserDefaults.standard) -> Bool {
|
|
var allSucceeded = true
|
|
for migration in migrations where migration.migrate(userDefaults) == false {
|
|
allSucceeded = false
|
|
}
|
|
return allSucceeded
|
|
}
|
|
}
|