Skip to content

fix dubbed badge lookup for Kitsu cards, update AniSchedule feed - #84

Open
AnessBen wants to merge 1 commit into
Harborofficial:beta-branchfrom
AnessBen:fix/update_dub
Open

AnessBen wants to merge 1 commit into
Harborofficial:beta-branchfrom
AnessBen:fix/update_dub

Conversation

@AnessBen

@AnessBen AnessBen commented Nov 6, 2026

Copy link
Copy Markdown
Contributor

Summary

The AniSchedule feed’s previous URL was deprecated, so update the app to use the current v2 feed format.

Handle the Kitsu metadata case: when meta.id uses the kitsu: prefix, pass its numeric meta.malId to the dub lookup so it can match the feed. Other anime IDs keep their existing lookup behavior.

@Thunderhawkk

Copy link
Copy Markdown
Contributor

Thanks for updating the AniSchedule feed and addressing the missing DUB badges on Kitsu cards. I reviewed the changes and verified that the new v2 feed URL is valid and returns the expected data.

There are a few issues I'd like addressed before merging.

1. [P1] Update the Anime Dub Calendar to support the v2 feed

The new feed uses a different structure from the previous version, but mapDubFeedToCalendar() in calendar-sources.ts still expects the old format.

For example, it accesses e.media.media, e.episodeNumber, and e.episodeDate, none of which exist in the v2 response.

I checked the live v2 feed, which currently contains 52 anime entries and 320 scheduled episodes. However, the existing Calendar mapper skips every entry because the nested media object no longer exists.

Could you update the Calendar mapping to use the v2 structure, including:

  • id and idMal for anime identification.
  • title, coverImage, and bannerImage for metadata.
  • airingSchedule.nodes[].episode for episode numbers.
  • airingSchedule.nodes[].airingAt for release dates, converting Unix timestamps to local dates and times.

Please preserve the existing adult-content filtering, month filtering, deduplication, and episode ID behavior.

This should also resolve the TypeScript errors caused by references to fields removed from DubFeedEntry.

2. [P1] Complete Kitsu-to-MAL ID resolution for DUB badges

In use-card-shared-state.ts, the new logic passes meta.malId to animeHasDub() when the card has a kitsu: ID.

However, Harbor's built-in Kitsu metadata provider does not currently populate malId for its cards. I verified this in attrsToMeta() and the related-anime metadata mapping in providers/kitsu.ts.

Consequently, many Kitsu cards still pass undefined to animeHasDub(), so their DUB badges remain missing.

Could you use Harbor's existing anime ID-mapping infrastructure to resolve Kitsu IDs to their corresponding MAL or AniList IDs?

Ideally, this should use cached or batched mappings rather than making a separate network request for every visible card.

3. [P2] Apply the same DUB badge resolution to Big Picture

The current change only updates the shared Poster/TV card hook.

Big Picture still passes raw Kitsu IDs to animeHasDub() in bp-card-marks.tsx and bp-anime-hero-meta.tsx.

Since animeHasDub() doesn't recognize Kitsu IDs directly, those badges will remain missing in Big Picture.

Could you centralize the ID resolution so Poster cards, TV cards, Big Picture tiles, and Big Picture hero metadata all use the same matching behavior?

I'd also recommend adding regression tests for the v2 Calendar mapping, Kitsu cards without meta.malId, and DUB badge behavior across the different layouts.

Once these are addressed, I'll re-review the updated implementation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants