From 61e5b2bd5206582d7487cfd0cd9fe4386a697131 Mon Sep 17 00:00:00 2001 From: KhooLy <73142442+KhooLy@users.noreply.github.com> Date: Fri, 17 Jul 2026 16:03:47 +0300 Subject: [PATCH] Fix Discover crash on scroll from duplicate grid item keys Addon catalogs can return overlapping items across paginated skip offsets, so the discover results list could contain the same type:id twice. LazyVerticalGrid requires unique keys and crashed with IllegalArgumentException once a duplicate scrolled into view. Dedupe results in the coordinator where they're assigned. --- .../com/fluxa/app/ui/catalog/HomeHeadlessBrowseCoordinator.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/fluxa/app/ui/catalog/HomeHeadlessBrowseCoordinator.kt b/app/src/main/java/com/fluxa/app/ui/catalog/HomeHeadlessBrowseCoordinator.kt index 06496d2..eb83fc4 100644 --- a/app/src/main/java/com/fluxa/app/ui/catalog/HomeHeadlessBrowseCoordinator.kt +++ b/app/src/main/java/com/fluxa/app/ui/catalog/HomeHeadlessBrowseCoordinator.kt @@ -94,7 +94,7 @@ internal class HomeHeadlessBrowseCoordinator( ) ) val state = result.state["discover"] as? Map<*, *> - results.value = decodeList(state?.get("results"), metaListType) + results.value = decodeList(state?.get("results"), metaListType).distinctBy { "${it.type}:${it.id}" } resultSources.value = decodeObject(state?.get("resultSources"), sourceMapType) ?: emptyMap() } finally { loading.value = false @@ -118,7 +118,7 @@ internal class HomeHeadlessBrowseCoordinator( ) ) val state = result.state["discover"] as? Map<*, *> - val updated = decodeList(state?.get("results"), metaListType) + val updated = decodeList(state?.get("results"), metaListType).distinctBy { "${it.type}:${it.id}" } val source = HomeCatalogSource(transportUrl, catalogId, contentType, genre) val sources = resultSources.value.toMutableMap() updated.forEach { item ->