An album bills nobody and names no ids of its own #35

Closed
opened 2026-08-03 09:51:01 +02:00 by Claude · 1 comment
Collaborator

An album's row carries its artists in Artists and AlbumArtists (#24), but
nothing is billed for it: upstream writes one PeopleBaseItemMap row per album
artist and per artist, and a MusicAlbum names no external ids of its own.

Measured against the reference library:

upstream ours
albums with people 325 of 329 0
albums with external ids 278 of 329 0

Upstream's rules, both in MediaBrowser.Providers/Music/AlbumMetadataService.cs:

  • SetPeople bills the album artists as AlbumArtist and the artists as
    Artist, in that order, deduplicated — which is the shape
    crates/jellyfin-app/src/scan/people.rs::of_track already produces.
  • SetProviderIdFromSongs takes MusicBrainzAlbum,
    MusicBrainzReleaseGroup and MusicBrainzAlbumArtist from the tracks: the
    id most of them name, ties going to the first.

Both are summarised from the tracks, so they belong beside the columns in
crates/jellyfin-app/src/scan/summary.rs. Neither needs anything the scan does
not already read — the ids are on the track rows, and the artists are what the
album was just described with.

Note that filing the album row a second time already clears
PeopleBaseItemMap for it (save bills every write), so whatever writes the
people has to be the description itself rather than a step beside it.

An album's row carries its artists in `Artists` and `AlbumArtists` (#24), but nothing is billed for it: upstream writes one `PeopleBaseItemMap` row per album artist and per artist, and a `MusicAlbum` names no external ids of its own. Measured against the reference library: | | upstream | ours | |---|---|---| | albums with people | 325 of 329 | 0 | | albums with external ids | 278 of 329 | 0 | Upstream's rules, both in `MediaBrowser.Providers/Music/AlbumMetadataService.cs`: - `SetPeople` bills the album artists as `AlbumArtist` and the artists as `Artist`, in that order, deduplicated — which is the shape `crates/jellyfin-app/src/scan/people.rs::of_track` already produces. - `SetProviderIdFromSongs` takes `MusicBrainzAlbum`, `MusicBrainzReleaseGroup` and `MusicBrainzAlbumArtist` from the tracks: the id most of them name, ties going to the first. Both are summarised from the tracks, so they belong beside the columns in `crates/jellyfin-app/src/scan/summary.rs`. Neither needs anything the scan does not already read — the ids are on the track rows, and the artists are what the album was just described with. Note that filing the album row a second time already clears `PeopleBaseItemMap` for it (`save` bills every write), so whatever writes the people has to be the description itself rather than a step beside it.
Author
Collaborator

Fixed and merged.

An album is billed for the artists it was described with — album artists first,
then artists, deduplicated — and names the ids most of its tracks name, taking
MusicBrainzAlbum, MusicBrainzReleaseGroup and MusicBrainzAlbumArtist by
the same vote upstream uses, where a track naming none votes against having one.

The billing is part of the description rather than a step beside it, which is
what the issue asked for: filing a row clears who it bills, and the described
row is the last one filed.

Measured on the reference library:

upstream before after
albums billed 325 of 329 0 325 of 329
album external ids 278 0 278, no value differing

A database an older build wrote comes forward whole: the description is compared
on who it bills as well as on its columns, so an album whose columns already
agreed is no longer judged described and left unbilled. Two spellings of one
name are one person, so a row billing Lady Gaga for a column reading
Lady GaGa is one already billed rather than one to describe again on every
scan.

Fixed and merged. An album is billed for the artists it was described with — album artists first, then artists, deduplicated — and names the ids most of its tracks name, taking `MusicBrainzAlbum`, `MusicBrainzReleaseGroup` and `MusicBrainzAlbumArtist` by the same vote upstream uses, where a track naming none votes against having one. The billing is part of the description rather than a step beside it, which is what the issue asked for: filing a row clears who it bills, and the described row is the last one filed. Measured on the reference library: | | upstream | before | after | |---|---|---|---| | albums billed | 325 of 329 | 0 | **325 of 329** | | album external ids | 278 | 0 | **278**, no value differing | A database an older build wrote comes forward whole: the description is compared on who it bills as well as on its columns, so an album whose columns already agreed is no longer judged described and left unbilled. Two spellings of one name are one person, so a row billing `Lady Gaga` for a column reading `Lady GaGa` is one already billed rather than one to describe again on every scan.
Sign in to join this conversation.
No description provided.