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 ->