* Correct Album Artists merge logic and Artist equality checks
Correct Album Artists merge logic in MetadataService that causes empty
metadata sources to overwrite populated Album Artists arrays. This impacted
People-to-BaseItem relationships and caused orphaned records in Peoples.
Correct equality checks to be case-sensitive so Jelly metadata exactly
matches file metadata.
* use StringComparer.Ordinal
---------
Co-authored-by: Evan <evan@MacBook-Pro.local>
Jellyfin implemented ARTISTS multivalue tag but did not implement the equivalent ALBUMARTISTS multivalue tag. This change adds ALBUMARTISTS support. If present and PreferNonstandardArtistsTag is set, ALBUMARTISTS will be used in preference to ALBUMARTIST. As with ARTISTS, the intent is to offer support for multiple album artists without affecting software that does not read ALBUMARTIST as a multivalued tag.
Example album before/after:
ALBUM : Amici e Rivali
ARTIST : Lawrence Brownlee / Michael Spyres
album_artist : Lawrence Brownlee
ARTISTS : Lawrence Brownlee;Michael Spyres
ALBUMARTISTS : Lawrence Brownlee;Michael Spyres
Before ALBUMARTISTS support, Jellyfin reports:
Album Artist: Lawrence Brownlee [hyperlinked]
On each track Artist: Lawrence Brownlee, Michael Spyres
After ALBUMARTISTS support, Jellyfin reoprts:
Album Artist: Lawrence Brownlee [hyperlinked], Michael Spyres [hyperlinked]
On each track Artist: none shown (no other artists in source metadata)
This is ideal as both key artists are hyperlinkable from their albums.
References to other products implementing ALBUMARTISTS:
- Navidrome: https://www.navidrome.org/docs/usage/tagging-guidelines/#handling-multiple-artists-and-collaborations
- Kodi: https://kodi.wiki/view/Music_tagging#albumartists
- MusicBrainz Picard: https://picard-docs.musicbrainz.org/en/variables/variables_basic.html (_albumartists tag)
* Add API support for ELRC word-based lyrics
Adds support for word-based timestamps from within ELRC files.
* Create TimeTags object
* redo TimeTag implementation
Change TimeTag to long, redo TimeTag implementation
Make timestamp not nullable
Update MediaBrowser.Model/Lyrics/LyricLine.cs
Make TimeTag list IReadOnlyList
Remove nullable Timestamp
Update TimeTag description
Co-Authored-By: Cody Robibero <cody@robibe.ro>
* Changes to LyricLineTimeTag
Moved TimeTag to LyricLineTimeTag
Change "timestamp" to "start" for consistency
Change plural "TimeTags" to "Cues"
Change comments
* Change LyricLineTimeTag to LyricLineCue, include info about end times
* Remove width
* Remove width tag
* Rewrite cue parser and add tests
---------
Co-authored-by: Cody Robibero <cody@robibe.ro>