diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeState.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeState.kt index ac409eb71..b6f4e42ed 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeState.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeState.kt @@ -69,7 +69,7 @@ internal class PlayerScreenRuntime( var metaScreenSettingsUiState: MetaScreenSettingsUiState = MetaScreenSettingsUiState() var watchedUiState: WatchedUiState = WatchedUiState() var watchProgressUiState: WatchProgressUiState = WatchProgressUiState() - var sourceStreamsState: StreamsUiState = StreamsUiState() + var sourceStreamsState by mutableStateOf(StreamsUiState()) var episodeStreamsRepoState: StreamsUiState = StreamsUiState() var metaUiState: MetaDetailsUiState = MetaDetailsUiState() var addonsUiState: AddonsUiState = AddonsUiState() diff --git a/composeApp/src/commonTest/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeStateTest.kt b/composeApp/src/commonTest/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeStateTest.kt new file mode 100644 index 000000000..1d9091bb9 --- /dev/null +++ b/composeApp/src/commonTest/kotlin/com/nuvio/app/features/player/PlayerScreenRuntimeStateTest.kt @@ -0,0 +1,60 @@ +package com.nuvio.app.features.player + +import androidx.compose.runtime.derivedStateOf +import androidx.compose.ui.Modifier +import com.nuvio.app.features.streams.StreamsUiState +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class PlayerScreenRuntimeStateTest { + + @Test + fun sourceFilterUpdatesInvalidateUiWithoutPlaybackUpdates() { + val runtime = PlayerScreenRuntime(testPlayerScreenArgs()) + val selectedFilter = derivedStateOf { runtime.sourceStreamsState.selectedFilter } + + assertNull(selectedFilter.value) + + runtime.sourceStreamsState = StreamsUiState(selectedFilter = "addon-id") + + assertEquals("addon-id", selectedFilter.value) + } + + private fun testPlayerScreenArgs() = PlayerScreenArgs( + profileId = 1, + title = "Title", + sourceUrl = "https://example.com/video.mp4", + sourceAudioUrl = null, + sourceHeaders = emptyMap(), + sourceResponseHeaders = emptyMap(), + streamType = null, + providerName = "Provider", + streamTitle = "Source", + streamSubtitle = null, + initialBingeGroup = null, + pauseDescription = null, + onBack = {}, + onOpenInExternalPlayer = null, + onOpenExternalUrl = null, + modifier = Modifier, + logo = null, + poster = null, + background = null, + seasonNumber = null, + episodeNumber = null, + episodeTitle = null, + episodeThumbnail = null, + contentType = "movie", + videoId = "tt1234567", + parentMetaId = "tt1234567", + parentMetaType = "movie", + providerAddonId = null, + torrentInfoHash = null, + torrentFileIdx = null, + torrentFilename = null, + torrentTrackers = emptyList(), + initialPositionMs = 0L, + initialProgressFraction = null, + ) +}