spiegel-keyman/ios/engine/KMEI/KeymanEngine/Classes/KeyboardRepository/KeyboardRepository.swift
2019-07-01 12:41:15 +10:00

44 lines
1.5 KiB
Swift

//
// KeyboardRepository.swift
// KeymanEngine
//
// Created by Gabriel Wong on 2017-12-01.
// Copyright © 2017 SIL International. All rights reserved.
//
import Foundation
public protocol KeyboardRepository: class {
typealias CompletionHandler = (Error?) -> Void
var delegate: KeyboardRepositoryDelegate? { get set }
var languages: [String: Language]? { get }
var keyboards: [String: Keyboard]? { get }
func installableKeyboard(withID keyboardID: String, languageID: String) -> InstallableKeyboard?
func fetch(completionHandler: CompletionHandler?)
}
public extension KeyboardRepository {
func installableKeyboard(withID keyboardID: String, languageID: String) -> InstallableKeyboard? {
guard let keyboard = keyboards?.first(where: { $0.key == keyboardID })?.value else {
return nil
}
// If the Keyboard (still) supports the requested language, use that one.
guard let language = keyboard.languages?.first(where: {$0.id == languageID}) ??
// Otherwise, just use the first language listed for the keyboard.
keyboard.languages?.first ??
// In cases where the keyboard fails to specify any language, use the requested one if it's in the collection.
languages?[languageID]
else {
return nil
}
return InstallableKeyboard(keyboard: keyboard, language: language, isCustom: false)
}
func fetch(completionHandler: CompletionHandler? = nil) {
fetch(completionHandler: completionHandler)
}
}