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 () => {