OMDb is not written: no ratings, no critic scores, no episode fallback #108
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
MediaBrowser.Providers/Plugins/Omdb/is in the box:OmdbItemProvider(films and series),OmdbEpisodeProvider, andOmdbImageProvider.What it contributes that TMDb does not: the IMDb rating and vote count, Metacritic and Rotten Tomatoes scores, and the official rating in several cases — the numbers a client shows on a detail page under the poster. It also fills episodes for series TMDb answers thinly.
Ordering matters and is upstream's, not ours to invent: OMDb runs after TMDb and fills rather than replaces, which is the
mergerule already built.IHasOrderon each provider is where upstream records the sequence, and the answer key (D28) is where ours has to be measured.Needs an API key in the same shape the TMDb one is configured, and a cassette entry per request.
Where to start
MediaBrowser.Providers/Plugins/Omdb/—OmdbItemProvider(films and series),OmdbEpisodeProvider,OmdbImageProvider.Two things decide whether this is right, and both are already modelled here:
IHasOrderon each upstream provider records the sequence;
mergeincrates/jellyfin-app/src/metadata/mod.rsis the rule that implements it, andM10 already found that the lists do not all merge alike — a filling source
joins studios, tags and production locations and leaves genres and a cast
whole.
the cassette.
What it contributes that TMDb does not: the IMDb rating and vote count,
Metacritic and Rotten Tomatoes, and the official rating in several cases — which
also feeds
InheritedParentalRatingValue, so a change here moves what arating-limited account sees.
How to know it is done
The enriched answer key with the OMDb fetcher on: the ratings columns agree with
the rows upstream wrote, and nothing TMDb had already filled has moved.
House rules
CLAUDE.mdis the short version and these are the parts that bite: tests rununder
cargo nextest; upstream's source is the checkout inupstream/at thepin (
v12.0-rc5,6d501ba4) and not the clone beside the repository;generated files are regenerated rather than edited; a comment says what the code
does, not how it got there; and
Dnreferences stay out of code and comments.ARCHITECTURE.mddecides which crate a thing goes in and which dependency edgesare illegal,
DECISIONS.mdsays why a rule exists.The reference pair is
cargo xtask reference up(andreference provision,which is idempotent); a run is
cargo run -p jellyfin-harness -- replay --upstream URL --ours URL --scenario FILE --out DIR,with
diff-dbfor the two databases.crates/jellyfin-harness/README.mdsayswhat a diff means and what an ignore entry has to carry — every entry needs a
reason and an expiry milestone, and an adds-only history is the smell the risk
table names.
Landed on
mainwith batch E (6c9c399..d83f1ca).Measured the three ways this issue asks for: the cassette regenerated beside
the answer key, an offline chain test against the rows upstream wrote, and
artwork compared on the digest rather than on dimensions. The recording is now
crates/jellyfin-app/corpus/fetched.json— one file for all four databases,argued in D35.
A review round ran over the batch. Seven findings were fixed in
d83f1ca; whatsurvived is filed as #154, #155 and #156.