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:
@@ -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 () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user