diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/watched/WatchedRepository.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/watched/WatchedRepository.kt index 5d3f179b2..8a389782f 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/watched/WatchedRepository.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/watched/WatchedRepository.kt @@ -113,6 +113,11 @@ internal suspend fun watchedProviderRefreshOrNull( null } +internal fun extraWatchedKeysChanged( + previous: Set?, + current: Set, +): Boolean = previous.orEmpty() != current + object WatchedRepository { private data class WatchedRefreshOperation( val profileId: Int, @@ -1099,7 +1104,10 @@ object WatchedRepository { adapter.observeExtraWatchedKeys(currentProfileId) .distinctUntilChanged() .collectLatest { extraKeys -> - val keysChanged = providerExtraWatchedKeys[providerId] != extraKeys + val keysChanged = extraWatchedKeysChanged( + previous = providerExtraWatchedKeys[providerId], + current = extraKeys, + ) if (keysChanged) { val freshItems = watchedProviderRefreshOrNull( refresh = { diff --git a/composeApp/src/commonTest/kotlin/com/nuvio/app/features/watched/WatchedRepositoryTest.kt b/composeApp/src/commonTest/kotlin/com/nuvio/app/features/watched/WatchedRepositoryTest.kt index 86f320b00..3eebb57dd 100644 --- a/composeApp/src/commonTest/kotlin/com/nuvio/app/features/watched/WatchedRepositoryTest.kt +++ b/composeApp/src/commonTest/kotlin/com/nuvio/app/features/watched/WatchedRepositoryTest.kt @@ -14,6 +14,26 @@ import kotlin.test.assertNull import kotlin.test.assertTrue class WatchedRepositoryTest { + @Test + fun emptyProviderExtraKeys_doNotTriggerInitialRefresh() { + assertFalse(extraWatchedKeysChanged(previous = null, current = emptySet())) + } + + @Test + fun populatedProviderExtraKeys_triggerRefreshFromEmptyState() { + assertTrue(extraWatchedKeysChanged(previous = null, current = setOf("series:tt1:-1:-1"))) + } + + @Test + fun changedProviderExtraKeys_triggerRefresh() { + assertTrue( + extraWatchedKeysChanged( + previous = setOf("series:tt1:-1:-1"), + current = setOf("series:tt2:-1:-1"), + ), + ) + } + @Test fun providerRefreshFailure_isContainedWithoutReplacingState() = runBlocking { val failure = IllegalStateException("rate limited")