diff --git a/app/src/main/java/com/fluxa/app/ui/AddonActions.kt b/app/src/main/java/com/fluxa/app/ui/AddonActions.kt index ecd376a..6a7f847 100644 --- a/app/src/main/java/com/fluxa/app/ui/AddonActions.kt +++ b/app/src/main/java/com/fluxa/app/ui/AddonActions.kt @@ -23,6 +23,7 @@ internal fun installLocalAddonForProfile( onProfileChanged(updated) profileManager.saveProfileReplacingLocalAddons(updated) profileManager.setLastActiveProfile(updated) + homeViewModel.pushNuvioAddons(updated) homeViewModel.loadInitialData(updated, force = true) } } @@ -46,6 +47,7 @@ internal fun removeLocalAddonForProfile( onProfileChanged(updated) profileManager.saveProfileReplacingLocalAddons(updated) profileManager.setLastActiveProfile(updated) + homeViewModel.pushNuvioAddons(updated) homeViewModel.loadInitialData(updated, force = true) } } @@ -69,6 +71,7 @@ internal fun moveLocalAddonForProfile( onProfileChanged(updated) profileManager.saveProfileReplacingLocalAddons(updated) profileManager.setLastActiveProfile(updated) + homeViewModel.pushNuvioAddons(updated) homeViewModel.loadInitialData(updated, force = true) } } @@ -96,6 +99,7 @@ internal fun setLocalAddonEnabledForProfile( onProfileChanged(updated) profileManager.saveProfileReplacingLocalAddons(updated) profileManager.setLastActiveProfile(updated) + homeViewModel.pushNuvioAddons(updated) homeViewModel.loadInitialData(updated, force = true) } } diff --git a/app/src/main/java/com/fluxa/app/ui/catalog/HomeViewModel.kt b/app/src/main/java/com/fluxa/app/ui/catalog/HomeViewModel.kt index b7930c1..83e28a7 100644 --- a/app/src/main/java/com/fluxa/app/ui/catalog/HomeViewModel.kt +++ b/app/src/main/java/com/fluxa/app/ui/catalog/HomeViewModel.kt @@ -1324,6 +1324,12 @@ class HomeViewModel @Inject constructor( suspend fun isNuvioHealthy(): Boolean = nuvioSyncCoordinator.isHealthy() + fun pushNuvioAddons(profile: UserProfile) { + viewModelScope.launch { + runCatching { nuvioSyncCoordinator.pushAddons(profile) } + } + } + fun syncStremioIntegration( profile: UserProfile, onProfileUpdated: (UserProfile) -> Unit, diff --git a/data/src/main/java/com/fluxa/app/data/repository/NuvioSyncCoordinator.kt b/data/src/main/java/com/fluxa/app/data/repository/NuvioSyncCoordinator.kt index a0bd6d7..e611a2f 100644 --- a/data/src/main/java/com/fluxa/app/data/repository/NuvioSyncCoordinator.kt +++ b/data/src/main/java/com/fluxa/app/data/repository/NuvioSyncCoordinator.kt @@ -31,6 +31,28 @@ class NuvioSyncCoordinator @Inject constructor( ).requireSuccess() profileManager.saveProfile(current.copy(nuvioLastSyncAt = System.currentTimeMillis())) } + + suspend fun pushAddons(profile: UserProfile) { + val current = freshProfile(profile) ?: return + val token = current.nuvioAccessToken ?: return + val index = current.nuvioProfileIndex ?: return + val disabled = current.safeDisabledLocalAddonIds + nuvioService.pushAddons( + "Bearer $token", + mapOf( + "p_profile_id" to index, + "p_addons" to current.safeInstalledLocalAddons.mapIndexed { sortOrder, url -> + mapOf( + "url" to url, + "name" to url, + "enabled" to (com.fluxa.app.domain.discovery.StremioAddonUrls.identity(url) !in disabled), + "sort_order" to sortOrder + ) + } + ) + ).requireSuccess() + profileManager.saveProfile(current.copy(nuvioLastSyncAt = System.currentTimeMillis())) + } suspend fun pushWatchlist(profile: UserProfile, meta: Meta, isInWatchlist: Boolean) { val current = freshProfile(profile) ?: return val token = current.nuvioAccessToken ?: return