mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 06:35:51 +00:00
Various fixes
This commit is contained in:
@@ -69,19 +69,36 @@ private enum TranslationSettingsControllerEntry: ItemListNodeEntry {
|
||||
}
|
||||
}
|
||||
|
||||
private func translationSettingsControllerEntries(theme: PresentationTheme, strings: PresentationStrings, settings: TranslationSettings, languages: [(String, String, String)]) -> [TranslationSettingsControllerEntry] {
|
||||
private func translationSettingsControllerEntries(theme: PresentationTheme, strings: PresentationStrings, initiallySelectedLanguages: Set<String>, settings: TranslationSettings, languages: [(String, String, String)]) -> [TranslationSettingsControllerEntry] {
|
||||
var entries: [TranslationSettingsControllerEntry] = []
|
||||
|
||||
|
||||
var index: Int32 = 0
|
||||
var selectedLanguages: Set<String>
|
||||
if let ignoredLanguages = settings.ignoredLanguages {
|
||||
selectedLanguages = Set(ignoredLanguages)
|
||||
} else {
|
||||
selectedLanguages = Set([strings.baseLanguageCode, systemLanguageCode()])
|
||||
selectedLanguages = Set([strings.baseLanguageCode])
|
||||
for language in systemLanguageCodes() {
|
||||
selectedLanguages.insert(language)
|
||||
}
|
||||
}
|
||||
|
||||
var addedLanguages = Set<String>()
|
||||
|
||||
for (code, title, subtitle) in languages {
|
||||
entries.append(.language(index, theme, title, subtitle, selectedLanguages.contains(code), code))
|
||||
index += 1
|
||||
if !addedLanguages.contains(code), initiallySelectedLanguages.contains(code) {
|
||||
addedLanguages.insert(code)
|
||||
entries.append(.language(index, theme, title, subtitle, selectedLanguages.contains(code), code))
|
||||
index += 1
|
||||
}
|
||||
}
|
||||
|
||||
for (code, title, subtitle) in languages {
|
||||
if !addedLanguages.contains(code) {
|
||||
addedLanguages.insert(code)
|
||||
entries.append(.language(index, theme, title, subtitle, selectedLanguages.contains(code), code))
|
||||
index += 1
|
||||
}
|
||||
}
|
||||
|
||||
return entries
|
||||
@@ -97,11 +114,15 @@ public func translationSettingsController(context: AccountContext) -> ViewContro
|
||||
let _ = updateTranslationSettingsInteractively(accountManager: context.sharedContext.accountManager, { current in
|
||||
var updated = current
|
||||
var updatedIgnoredLanguages = updated.ignoredLanguages ?? []
|
||||
if value {
|
||||
if current.ignoredLanguages == nil {
|
||||
updatedIgnoredLanguages.append(interfaceLanguageCode)
|
||||
updatedIgnoredLanguages.append(systemLanguageCode())
|
||||
if current.ignoredLanguages == nil {
|
||||
updatedIgnoredLanguages.append(interfaceLanguageCode)
|
||||
for language in systemLanguageCodes() {
|
||||
if !updatedIgnoredLanguages.contains(language) {
|
||||
updatedIgnoredLanguages.append(language)
|
||||
}
|
||||
}
|
||||
}
|
||||
if value {
|
||||
if !updatedIgnoredLanguages.contains(code) {
|
||||
updatedIgnoredLanguages.append(code)
|
||||
}
|
||||
@@ -142,13 +163,33 @@ public func translationSettingsController(context: AccountContext) -> ViewContro
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let initiallySelectedLanguages = Atomic<Set<String>?>(value: nil)
|
||||
|
||||
let sharedData = context.sharedContext.accountManager.sharedData(keys: [ApplicationSpecificSharedDataKeys.translationSettings])
|
||||
let signal = combineLatest(queue: Queue.mainQueue(), context.sharedContext.presentationData, sharedData)
|
||||
|> map { presentationData, sharedData -> (ItemListControllerState, (ItemListNodeState, Any)) in
|
||||
let settings = sharedData.entries[ApplicationSpecificSharedDataKeys.translationSettings]?.get(TranslationSettings.self) ?? TranslationSettings.defaultSettings
|
||||
|
||||
let initiallySelectedLanguages = initiallySelectedLanguages.modify({ current in
|
||||
if let current {
|
||||
return current
|
||||
} else {
|
||||
var selectedLanguages: Set<String>
|
||||
if let ignoredLanguages = settings.ignoredLanguages {
|
||||
selectedLanguages = Set(ignoredLanguages)
|
||||
} else {
|
||||
selectedLanguages = Set([presentationData.strings.baseLanguageCode])
|
||||
for language in systemLanguageCodes() {
|
||||
selectedLanguages.insert(language)
|
||||
}
|
||||
}
|
||||
return selectedLanguages
|
||||
}
|
||||
})
|
||||
|
||||
let controllerState = ItemListControllerState(presentationData: ItemListPresentationData(presentationData), title: .text(presentationData.strings.DoNotTranslate_Title), leftNavigationButton: nil, rightNavigationButton: nil, backNavigationButton: ItemListBackButton(title: presentationData.strings.Common_Back))
|
||||
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: translationSettingsControllerEntries(theme: presentationData.theme, strings: presentationData.strings, settings: settings, languages: languages), style: .blocks, animateChanges: false)
|
||||
let listState = ItemListNodeState(presentationData: ItemListPresentationData(presentationData), entries: translationSettingsControllerEntries(theme: presentationData.theme, strings: presentationData.strings, initiallySelectedLanguages: initiallySelectedLanguages ?? Set(), settings: settings, languages: languages), style: .blocks, animateChanges: false)
|
||||
|
||||
return (controllerState, (listState, arguments))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user