Various fixes

This commit is contained in:
Ilya Laktyushin
2023-01-27 19:53:44 +04:00
parent 731442756a
commit 74cd2b6093
19 changed files with 195 additions and 62 deletions

View File

@@ -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))
}