diff --git a/shared/src/iosMain/kotlin/com/fluxa/app/shared/FluxaApple.kt b/shared/src/iosMain/kotlin/com/fluxa/app/shared/FluxaApple.kt index 5876e87..e8df80f 100644 --- a/shared/src/iosMain/kotlin/com/fluxa/app/shared/FluxaApple.kt +++ b/shared/src/iosMain/kotlin/com/fluxa/app/shared/FluxaApple.kt @@ -15,7 +15,9 @@ import com.fluxa.app.shared.platform.AppleDetailRequestSnapshot import com.fluxa.app.shared.platform.AppleDetailSnapshot import com.fluxa.app.shared.platform.AppleDetailStreamSnapshot import com.fluxa.app.shared.platform.ApplePlaybackRequestSnapshot +import com.fluxa.app.shared.platform.AppleAddonStoreActionSnapshot import com.fluxa.app.shared.platform.AppleAddonStoreDataSource +import com.fluxa.app.shared.platform.AppleAddonStoreSnapshot import com.fluxa.app.shared.platform.ApplePluginsActionSnapshot import com.fluxa.app.shared.platform.ApplePluginsDataSource import com.fluxa.app.shared.platform.ApplePluginsSnapshot @@ -117,6 +119,14 @@ object FluxaApple { libraryDataSource.update(snapshot) } + fun setAddonStoreActionHandler(handler: (AppleAddonStoreActionSnapshot) -> Unit) { + addonStoreDataSource.setOnActionRequested(handler) + } + + fun updateAddonStore(snapshot: AppleAddonStoreSnapshot) { + addonStoreDataSource.update(snapshot) + } + fun setPluginsActionHandler(handler: (ApplePluginsActionSnapshot) -> Unit) { pluginsDataSource.setOnActionRequested(handler) } diff --git a/shared/src/iosMain/kotlin/com/fluxa/app/shared/platform/AppleAddonStoreDataSource.kt b/shared/src/iosMain/kotlin/com/fluxa/app/shared/platform/AppleAddonStoreDataSource.kt index d3bd8d5..5bc4f3f 100644 --- a/shared/src/iosMain/kotlin/com/fluxa/app/shared/platform/AppleAddonStoreDataSource.kt +++ b/shared/src/iosMain/kotlin/com/fluxa/app/shared/platform/AppleAddonStoreDataSource.kt @@ -1,8 +1,10 @@ package com.fluxa.app.shared.platform +import com.fluxa.app.common.AppStrings import com.fluxa.app.shared.feature.addonstore.AddonStoreDataSource import com.fluxa.app.shared.feature.addonstore.AddonStoreInputType import com.fluxa.app.shared.feature.addonstore.AddonStoreUiState +import com.fluxa.app.shared.feature.addonstore.InstalledAddonUiModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -15,6 +17,43 @@ data class AppleAddonStoreActionSnapshot( val direction: Int? = null ) +data class AppleInstalledAddonSnapshot( + val name: String, + val description: String, + val url: String, + val logoUrl: String?, + val version: String?, + val configurable: Boolean, + val isEnabled: Boolean, + val canMoveUp: Boolean, + val canMoveDown: Boolean, + val isRefreshing: Boolean +) + +data class AppleAddonStoreSnapshot( + val installedAddons: List = emptyList(), + val isLoading: Boolean = false, + val isSubmittingInput: Boolean = false, + val inputFailed: Boolean = false, + val addedAddonName: String? = null, + val clearInputOnSuccess: Boolean = false +) + +private fun AppleInstalledAddonSnapshot.toUiModel(): InstalledAddonUiModel = InstalledAddonUiModel( + name = name, + description = description, + url = url, + logoUrl = logoUrl, + version = version, + configUrl = null, + configurable = configurable, + isEnabled = isEnabled, + canRemove = true, + canMoveUp = canMoveUp, + canMoveDown = canMoveDown, + isRefreshing = isRefreshing +) + class AppleAddonStoreDataSource : AddonStoreDataSource { private val state = MutableStateFlow(AddonStoreUiState()) private var onActionRequested: (AppleAddonStoreActionSnapshot) -> Unit = {} @@ -69,6 +108,18 @@ class AppleAddonStoreDataSource : AddonStoreDataSource { onActionRequested = handler } + fun update(snapshot: AppleAddonStoreSnapshot) { + state.value = state.value.copy( + installedAddons = snapshot.installedAddons.map { it.toUiModel() }, + isLoading = snapshot.isLoading, + isSubmittingInput = snapshot.isSubmittingInput, + inputError = if (snapshot.inputFailed) AppStrings.t("en", "addons.manifest_unreachable") else null, + addedAddonName = snapshot.addedAddonName, + inputText = if (snapshot.clearInputOnSuccess) "" else state.value.inputText, + inputDetectedType = if (snapshot.clearInputOnSuccess) AddonStoreInputType.UNKNOWN else state.value.inputDetectedType + ) + } + private fun postAction(action: AppleAddonStoreActionSnapshot) { onActionRequested(action) }