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 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() { export default function Home() {
const libraries = useLibraryStore((s) => s.libraries) const libraries = useLibraryStore((s) => s.libraries)
const librariesLoaded = useLibraryStore((s) => s.loaded) const librariesLoaded = useLibraryStore((s) => s.loaded)
@@ -25,7 +35,7 @@ export default function Home() {
let cancelled = false let cancelled = false
setContinueLoading(true) setContinueLoading(true)
getItemsInProgress(20) getItemsInProgress(20)
.then((items) => !cancelled && setContinueItems(items)) .then((items) => !cancelled && setContinueItems(dedupeById(items)))
.catch(() => !cancelled && setContinueItems([])) .catch(() => !cancelled && setContinueItems([]))
.finally(() => !cancelled && setContinueLoading(false)) .finally(() => !cancelled && setContinueLoading(false))
return () => { return () => {