From 5668f4ef3c7d46e6845da798d9bcc868074db233 Mon Sep 17 00:00:00 2001 From: tapframe <85391825+tapframe@users.noreply.github.com> Date: Sun, 5 Apr 2026 13:08:20 +0530 Subject: [PATCH] fix: catalog resettings on app start --- composeApp/build.gradle.kts | 8 +++----- .../home/HomeCatalogSettingsRepository.kt | 4 ++++ .../settings/SettingsFullScreenPages.kt | 18 +++++++++++++++++- .../app/features/settings/SettingsScreen.kt | 18 +++++++++++++++++- 4 files changed, 41 insertions(+), 7 deletions(-) diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 0c4e11738..ea4ce73f4 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -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) } } diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeCatalogSettingsRepository.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeCatalogSettingsRepository.kt index 1668870e9..c4f3214cc 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeCatalogSettingsRepository.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/home/HomeCatalogSettingsRepository.kt @@ -100,6 +100,10 @@ object HomeCatalogSettingsRepository { fun syncCatalogs(addons: List) { ensureLoaded() definitions = buildHomeCatalogDefinitions(addons) + if (definitions.isEmpty()) { + publish() + return + } normalizePreferences() publish() persist() diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsFullScreenPages.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsFullScreenPages.kt index 17121d0fc..9120b2613 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsFullScreenPages.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsFullScreenPages.kt @@ -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() + 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) } diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt index df6488c9b..6e1874e8e 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/settings/SettingsScreen.kt @@ -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() + 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) }