update LanguageRepository to dynamically handle language count and improve synchronization of enabled language IDs
This commit is contained in:
@@ -4,6 +4,7 @@ package eu.gaudian.translator.model.repository
|
||||
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import eu.gaudian.translator.R
|
||||
import eu.gaudian.translator.model.Language
|
||||
import eu.gaudian.translator.model.parseLanguagesFromResources
|
||||
import eu.gaudian.translator.model.repository.DataStoreKeys.LANGUAGE_INIT_METADATA_KEY
|
||||
@@ -88,13 +89,12 @@ class LanguageRepository(private val context: Context) {
|
||||
// Check if we already have default languages saved
|
||||
val savedDefaultLanguages = loadLanguages(LanguageListType.DEFAULT).firstOrNull() ?: emptyList()
|
||||
|
||||
// Check if we need to re-parse languages (first run, version change, or language change)
|
||||
// Check if we need to reparse languages (first run, version change, or language change)
|
||||
val shouldReparse = shouldReparseLanguages(savedDefaultLanguages)
|
||||
|
||||
if (shouldReparse) {
|
||||
Log.d("LanguageRepository", "Parsing languages from resources")
|
||||
val parsedLanguages = parseLanguagesFromResources(context)
|
||||
wipeHistoryAndFavorites()
|
||||
saveLanguages(LanguageListType.DEFAULT, parsedLanguages)
|
||||
// Save the current app version and locale to detect changes next time
|
||||
saveLanguageInitializationMetadata()
|
||||
@@ -112,8 +112,11 @@ class LanguageRepository(private val context: Context) {
|
||||
return true
|
||||
}
|
||||
|
||||
// Check if the number of languages matches expected count (51)
|
||||
if (savedLanguages.size != 51) {
|
||||
// Get expected language count from resources dynamically
|
||||
val expectedCount = context.resources.getStringArray(R.array.language_codes).size
|
||||
|
||||
// Check if the number of languages matches expected count from resources
|
||||
if (savedLanguages.size != expectedCount) {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -167,15 +170,22 @@ class LanguageRepository(private val context: Context) {
|
||||
val customLanguages = loadLanguages(LanguageListType.CUSTOM).first()
|
||||
val master = (defaultLanguages + customLanguages).distinctBy { it.nameResId }
|
||||
|
||||
// Sanitize existing enabled IDs and initialize if empty
|
||||
// Get existing enabled IDs
|
||||
val existingEnabled: List<Int> = try {
|
||||
context.dataStore.loadObjectList<Int>(DataStoreKeys.ALL_LANGUAGES_KEY).firstOrNull() ?: emptyList()
|
||||
} catch (_: Exception) {
|
||||
emptyList()
|
||||
}
|
||||
val masterIds = master.map { it.nameResId }.toSet()
|
||||
val sanitized = existingEnabled.filter { it in masterIds }
|
||||
val finalIds = sanitized.ifEmpty { master.filter { it.isSelected == true }.map { it.nameResId } }
|
||||
|
||||
// Sanitize existing enabled IDs (remove any that are no longer valid)
|
||||
val existingValidIds = existingEnabled.filter { it in masterIds }.toSet()
|
||||
|
||||
// Add any new languages from master that aren't already enabled
|
||||
val newLanguageIds = masterIds - existingValidIds
|
||||
|
||||
// Combine: keep existing enabled + add new languages
|
||||
val finalIds = (existingValidIds + newLanguageIds).toList()
|
||||
|
||||
context.dataStore.saveObjectList(DataStoreKeys.ALL_LANGUAGES_KEY, finalIds)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user