mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-12 03:56:15 -08:00
feat(tmdb): clickable director/creator chips and directing credits on person pages (#1227)
* feat(tmdb): clickable director/creator chips and directing credits on person pages Directors were plain merged text — no photos, no navigation — while the data was already sitting in the cached TMDB payloads (credits.crew and created_by both carry id + profile_path; they just were not typed or parsed). - tmdb-merge: enrichedDirectors (crew, job === 'Director', deduped by person id) and enrichedCreators (created_by) produce the same chip shape as the cast (TmdbEnrichedCastMember) into a new tmdb_directors field on all three merges (Xtream VOD, Xtream series, Stalker); types widened (crew id/profile_path, created_by id/profile_path). - Detail views (shared VodDetailsComponent, Xtream vod/serial routes, Stalker series view) render the Director row as clickable avatar chips when tmdb_directors is present — same markup and openActor handler as the cast strip — falling back to the plain text otherwise. Stalker re-normalization allowlist preserves the new field. - Person pages: mapPersonFilmography now merges combined_credits.crew (jobs Director/Creator) into the filmography — acting wins the per-title dedup, directing-only titles show the job in the character slot. Everything else (library matching, All-portals scope, filters, search fallback, back button) works unchanged because the person page is role-agnostic. Existing caches work as-is: crew/created_by were always part of the stored payloads. Tests: merge spec (director/creator chips + crew-row dedup ×3 merges), person spec (crew credits, Producer excluded, acting-wins dedup), stalker-vod.utils passthrough. Docs updated (CLAUDE.md + architecture). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * fix(tmdb): address director-pages review — split oversized spec, stable track keys, translated crew roles - tmdb-merge.spec.ts grew past the 400-line lint ceiling — the Stalker merge suite moved to tmdb-merge-stalker.spec.ts (fixes the CI Lint job). - All cast/director chip loops now track by TMDB person id with an index fallback ('p<id>' / 'i<index>') instead of member.name — distinct people can share a name and creator payloads carry no dedup (greptile). - Directing-only filmography credits carry the role in a new crewJob field ('Director' | 'Creator') instead of stuffing TMDB's raw English job into character; ActorViewComponent renders it through translated labels (XTREAM.CREW_JOB_DIRECTOR/CREATOR, added to all 18 locales via the i18n patch workflow, matching each locale's existing glossary — pt "Diretor", de "Regisseur") (Codex). Tests: person spec asserts character/crewJob separation; merge suites green after the split (15 + stalker file). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
1 parent
59c15493a7
commit
5aa44d19d4
40 files changed
+528
-154
No files matched your search
@@ -65,8 +65,11 @@ Integration glue per portal:
|
||||
|
||||
Components read the selection through signals and re-render when the merged
|
||||
item lands. Enriched cast (`tmdb_cast` with profile photos) renders as
|
||||
avatar chips in the detail views; a "check key" button in the settings
|
||||
section validates the API key against `/configuration`.
|
||||
avatar chips in the detail views, and so do directors/creators
|
||||
(`tmdb_directors`: movie directors from `credits.crew` with
|
||||
`job === 'Director'`, series creators from `created_by`) — both chip kinds
|
||||
carry `tmdbPersonId` and open the same person page. A "check key" button
|
||||
in the settings section validates the API key against `/configuration`.
|
||||
|
||||
## Match Confidence
|
||||
|
||||
@@ -187,7 +190,11 @@ Cast chips carry the TMDB person id (`tmdbPersonId` on
|
||||
current portal. The page loads `/person/{id}?append_to_response=
|
||||
combined_credits` via `TmdbEnrichmentService.getPersonDetails` (cached
|
||||
under `person:{id}` with media_type `person`) and renders the shared
|
||||
`ActorViewComponent` (`libs/ui/shared-portals`).
|
||||
`ActorViewComponent` (`libs/ui/shared-portals`). The filmography merges
|
||||
acting credits (`combined_credits.cast`) with directing/creating credits
|
||||
(`combined_credits.crew`, jobs `Director`/`Creator`) into one list —
|
||||
acting wins the per-title dedup, directing-only titles show the job in
|
||||
the character slot — so the page serves actors and directors alike.
|
||||
|
||||
Filmography has two scopes:
|
||||
|
||||
|
||||
Reference in new issue
Block a user