Swiftgram/TelegramCore/LocalizationInfo.swift
Peter 0b96d69daa Fixed unread counter category for private channels
Added support for "contact joined" service messages
Updated password recovery API
Updated Localization APIs
Added limited contact presence polling after getDifference
2018-11-11 17:46:21 +04:00

85 lines
3.8 KiB
Swift

import Foundation
#if os(macOS)
import PostboxMac
#else
import Postbox
#endif
public struct LocalizationInfo: PostboxCoding, Equatable {
public let languageCode: String
public let baseLanguageCode: String?
public let customPluralizationCode: String?
public let title: String
public let localizedTitle: String
public let isOfficial: Bool
public let totalStringCount: Int32
public let translatedStringCount: Int32
public let platformUrl: String
public init(languageCode: String, baseLanguageCode: String?, customPluralizationCode: String?, title: String, localizedTitle: String, isOfficial: Bool, totalStringCount: Int32, translatedStringCount: Int32, platformUrl: String) {
self.languageCode = languageCode
self.baseLanguageCode = baseLanguageCode
self.customPluralizationCode = customPluralizationCode
self.title = title
self.localizedTitle = localizedTitle
self.isOfficial = isOfficial
self.totalStringCount = totalStringCount
self.translatedStringCount = translatedStringCount
self.platformUrl = platformUrl
}
public init(decoder: PostboxDecoder) {
self.languageCode = decoder.decodeStringForKey("lc", orElse: "")
self.baseLanguageCode = decoder.decodeOptionalStringForKey("nlc")
self.customPluralizationCode = decoder.decodeOptionalStringForKey("cpc")
self.title = decoder.decodeStringForKey("t", orElse: "")
self.localizedTitle = decoder.decodeStringForKey("lt", orElse: "")
self.isOfficial = decoder.decodeInt32ForKey("of", orElse: 0) != 0
self.totalStringCount = decoder.decodeInt32ForKey("tsc", orElse: 0)
self.translatedStringCount = decoder.decodeInt32ForKey("lsc", orElse: 0)
self.platformUrl = decoder.decodeStringForKey("platformUrl", orElse: "")
}
public func encode(_ encoder: PostboxEncoder) {
encoder.encodeString(self.languageCode, forKey: "lc")
if let baseLanguageCode = self.baseLanguageCode {
encoder.encodeString(baseLanguageCode, forKey: "nlc")
} else {
encoder.encodeNil(forKey: "nlc")
}
if let customPluralizationCode = self.customPluralizationCode {
encoder.encodeString(customPluralizationCode, forKey: "cpc")
} else {
encoder.encodeNil(forKey: "cpc")
}
encoder.encodeString(self.title, forKey: "t")
encoder.encodeString(self.localizedTitle, forKey: "lt")
encoder.encodeInt32(self.isOfficial ? 1 : 0, forKey: "of")
encoder.encodeInt32(self.totalStringCount, forKey: "tsc")
encoder.encodeInt32(self.translatedStringCount, forKey: "lsc")
encoder.encodeString(self.platformUrl, forKey: "platformUrl")
}
}
extension LocalizationInfo {
init(apiLanguage: Api.LangPackLanguage) {
switch apiLanguage {
case let .langPackLanguage(language):
self.init(languageCode: language.langCode, baseLanguageCode: language.baseLangCode, customPluralizationCode: language.pluralCode, title: language.name, localizedTitle: language.nativeName, isOfficial: (language.flags & (1 << 0)) != 0, totalStringCount: language.stringsCount, translatedStringCount: language.translatedCount, platformUrl: language.translationsUrl)
}
}
}
public final class SuggestedLocalizationInfo {
public let languageCode: String
public let extractedEntries: [LocalizationEntry]
public let availableLocalizations: [LocalizationInfo]
init(languageCode: String, extractedEntries: [LocalizationEntry], availableLocalizations: [LocalizationInfo]) {
self.languageCode = languageCode
self.extractedEntries = extractedEntries
self.availableLocalizations = availableLocalizations
}
}