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.Context
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
|
import eu.gaudian.translator.R
|
||||||
import eu.gaudian.translator.model.Language
|
import eu.gaudian.translator.model.Language
|
||||||
import eu.gaudian.translator.model.parseLanguagesFromResources
|
import eu.gaudian.translator.model.parseLanguagesFromResources
|
||||||
import eu.gaudian.translator.model.repository.DataStoreKeys.LANGUAGE_INIT_METADATA_KEY
|
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
|
// Check if we already have default languages saved
|
||||||
val savedDefaultLanguages = loadLanguages(LanguageListType.DEFAULT).firstOrNull() ?: emptyList()
|
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)
|
val shouldReparse = shouldReparseLanguages(savedDefaultLanguages)
|
||||||
|
|
||||||
if (shouldReparse) {
|
if (shouldReparse) {
|
||||||
Log.d("LanguageRepository", "Parsing languages from resources")
|
Log.d("LanguageRepository", "Parsing languages from resources")
|
||||||
val parsedLanguages = parseLanguagesFromResources(context)
|
val parsedLanguages = parseLanguagesFromResources(context)
|
||||||
wipeHistoryAndFavorites()
|
|
||||||
saveLanguages(LanguageListType.DEFAULT, parsedLanguages)
|
saveLanguages(LanguageListType.DEFAULT, parsedLanguages)
|
||||||
// Save the current app version and locale to detect changes next time
|
// Save the current app version and locale to detect changes next time
|
||||||
saveLanguageInitializationMetadata()
|
saveLanguageInitializationMetadata()
|
||||||
@@ -112,8 +112,11 @@ class LanguageRepository(private val context: Context) {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the number of languages matches expected count (51)
|
// Get expected language count from resources dynamically
|
||||||
if (savedLanguages.size != 51) {
|
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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,15 +170,22 @@ class LanguageRepository(private val context: Context) {
|
|||||||
val customLanguages = loadLanguages(LanguageListType.CUSTOM).first()
|
val customLanguages = loadLanguages(LanguageListType.CUSTOM).first()
|
||||||
val master = (defaultLanguages + customLanguages).distinctBy { it.nameResId }
|
val master = (defaultLanguages + customLanguages).distinctBy { it.nameResId }
|
||||||
|
|
||||||
// Sanitize existing enabled IDs and initialize if empty
|
// Get existing enabled IDs
|
||||||
val existingEnabled: List<Int> = try {
|
val existingEnabled: List<Int> = try {
|
||||||
context.dataStore.loadObjectList<Int>(DataStoreKeys.ALL_LANGUAGES_KEY).firstOrNull() ?: emptyList()
|
context.dataStore.loadObjectList<Int>(DataStoreKeys.ALL_LANGUAGES_KEY).firstOrNull() ?: emptyList()
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
emptyList()
|
emptyList()
|
||||||
}
|
}
|
||||||
val masterIds = master.map { it.nameResId }.toSet()
|
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)
|
context.dataStore.saveObjectList(DataStoreKeys.ALL_LANGUAGES_KEY, finalIds)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user