fix: catalog resettings on app start

This commit is contained in:
tapframe 2026-04-05 13:08:20 +05:30
parent cfe692014b
commit 5668f4ef3c
4 changed files with 41 additions and 7 deletions

View file

@ -246,11 +246,9 @@ kotlin {
}
afterEvaluate {
if (iosDistribution == "full") {
dependencies {
add("androidFullImplementation", libs.quickjs.kt)
add("androidFullImplementation", libs.ksoup)
}
dependencies {
add("fullImplementation", libs.quickjs.kt)
add("fullImplementation", libs.ksoup)
}
}

View file

@ -100,6 +100,10 @@ object HomeCatalogSettingsRepository {
fun syncCatalogs(addons: List<ManagedAddon>) {
ensureLoaded()
definitions = buildHomeCatalogDefinitions(addons)
if (definitions.isEmpty()) {
publish()
return
}
normalizePreferences()
publish()
persist()

View file

@ -24,13 +24,29 @@ fun HomescreenSettingsScreen(
onBack: () -> Unit,
) {
val addonsUiState by AddonRepository.uiState.collectAsStateWithLifecycle()
val homescreenCatalogRefreshKey = remember(addonsUiState.addons) {
val allManifestsSettled = addonsUiState.addons.isNotEmpty() &&
addonsUiState.addons.none { it.isRefreshing }
if (!allManifestsSettled) return@remember emptyList<String>()
addonsUiState.addons.mapNotNull { addon ->
val manifest = addon.manifest ?: return@mapNotNull null
buildString {
append(manifest.transportUrl)
append(':')
append(manifest.catalogs.joinToString(separator = ",") { catalog ->
"${catalog.type}:${catalog.id}:${catalog.extra.count { it.isRequired }}"
})
}
}
}
val homescreenSettingsUiState by HomeCatalogSettingsRepository.uiState.collectAsStateWithLifecycle()
LaunchedEffect(Unit) {
AddonRepository.initialize()
}
LaunchedEffect(addonsUiState.addons) {
LaunchedEffect(homescreenCatalogRefreshKey) {
if (homescreenCatalogRefreshKey.isEmpty()) return@LaunchedEffect
HomeCatalogSettingsRepository.syncCatalogs(addonsUiState.addons)
}

View file

@ -103,6 +103,21 @@ fun SettingsScreen(
AddonRepository.initialize()
AddonRepository.uiState
}.collectAsStateWithLifecycle()
val homescreenCatalogRefreshKey = remember(addonsUiState.addons) {
val allManifestsSettled = addonsUiState.addons.isNotEmpty() &&
addonsUiState.addons.none { it.isRefreshing }
if (!allManifestsSettled) return@remember emptyList<String>()
addonsUiState.addons.mapNotNull { addon ->
val manifest = addon.manifest ?: return@mapNotNull null
buildString {
append(manifest.transportUrl)
append(':')
append(manifest.catalogs.joinToString(separator = ",") { catalog ->
"${catalog.type}:${catalog.id}:${catalog.extra.count { it.isRequired }}"
})
}
}
}
val homescreenSettingsUiState by remember {
HomeCatalogSettingsRepository.uiState
}.collectAsStateWithLifecycle()
@ -119,7 +134,8 @@ fun SettingsScreen(
EpisodeReleaseNotificationsRepository.uiState
}.collectAsStateWithLifecycle()
LaunchedEffect(addonsUiState.addons) {
LaunchedEffect(homescreenCatalogRefreshKey) {
if (homescreenCatalogRefreshKey.isEmpty()) return@LaunchedEffect
HomeCatalogSettingsRepository.syncCatalogs(addonsUiState.addons)
}