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 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-06-03 12:30:00 +02:00
parent 85bd428df7
commit cf1a1a26ff

View File

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