diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogData.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogData.kt index f80fc23e..d0cdd365 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogData.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogData.kt @@ -102,6 +102,18 @@ fun mergeCatalogItems( } } +fun dedupeCatalogItems(items: List): List { + if (items.size < 2) return items + val seen = mutableSetOf() + return buildList(items.size) { + items.forEach { item -> + if (seen.add(item.stableKey())) { + add(item) + } + } + } +} + internal fun buildCatalogUrl( manifestUrl: String, type: String, diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogRepository.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogRepository.kt index 400cffd5..d1df68d4 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogRepository.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/catalog/CatalogRepository.kt @@ -75,6 +75,7 @@ object CatalogRepository { ?.items .orEmpty() .map { it.toMetaPreview() } + .let(::dedupeCatalogItems) }.fold( onSuccess = { items -> if (activeRequest != request) return@fold @@ -127,7 +128,7 @@ object CatalogRepository { if (activeRequest != request) return@fold val mergedItems = if (reset) { - page.items + dedupeCatalogItems(page.items) } else { mergeCatalogItems(_uiState.value.items, page.items) }