From cf1a1a26ffa4cbc92b10aaad4b6e8125e19ce2b8 Mon Sep 17 00:00:00 2001 From: Scarriffle Date: Wed, 3 Jun 2026 12:30:00 +0200 Subject: [PATCH] fix: de-duplicate the continue-listening row ABS returns items-in-progress once per in-progress podcast episode (same item id), which rendered duplicate cards. Collapse to one card per library item. Co-Authored-By: Claude Opus 4.8 --- src/pages/Home.tsx | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 5891d05..78b6b4a 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -13,6 +13,16 @@ interface RecentState { loading: boolean } +/** + * Collapse to one card per library item. ABS returns items-in-progress once per + * in-progress podcast episode (same title/cover), which looks like duplicates; keep + * only the first (most recent) occurrence of each id. + */ +function dedupeById(items: LibraryItem[]): LibraryItem[] { + const seen = new Set() + return items.filter((i) => (seen.has(i.id) ? false : (seen.add(i.id), true))) +} + export default function Home() { const libraries = useLibraryStore((s) => s.libraries) const librariesLoaded = useLibraryStore((s) => s.loaded) @@ -25,7 +35,7 @@ export default function Home() { let cancelled = false setContinueLoading(true) getItemsInProgress(20) - .then((items) => !cancelled && setContinueItems(items)) + .then((items) => !cancelled && setContinueItems(dedupeById(items))) .catch(() => !cancelled && setContinueItems([])) .finally(() => !cancelled && setContinueLoading(false)) return () => {