-
-
Notifications
You must be signed in to change notification settings - Fork 799
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Multiple artist support #2524
base: master
Are you sure you want to change the base?
Multiple artist support #2524
Conversation
Sort by Artist = Album Artist first, so it shows an artist's own albums first, and appearances on other albums second.
Alias match_album_artist, allows for sorting by an artist's own albums first, then his appearances on compilations/etc.
forgot args in line 89
prettier
prettier
reformatted
removed comment about Subsonic, it's irrelevant since this query is never done through the Subsonic API.
merge upstream changes
updated with multi-artist tags
Add function to remove duplicate values but keep the order intact
Add test for RemoveDuplicateStr()
fix AlbumID()
tab screws up lint
Cleaned it all up, tests all clear, ready to merge I think. OpenSubsonic support is better done in a separate PR. |
Hey @certuna , thanks for your work. I'm getting this when using this PR:
What is missing? |
Ah yes I'll fix this, there have been new additions to the codebase so my migration is outdated. |
Thank you so much! Looking forward to trying it out :) |
…o 20231116000000_add_all_artist_ids_to_mediafile.go fix migration
Should work now. I don't know if this PR will be merged soon or if we wait until we can do it all together with OpenSubsonic API support. |
Yes it does! Looking good. Will keep happily testing and report if I find any incident. |
approve this and make 0.50.2 happen.. |
Hey, what's holding this PR back? Does it still need contributions? |
Perhaps it's the fact that the author did not prepare support for OpenSubSonic API. It works great otherwise. I'm also looking forward for this. |
From conversations on Discord it's that this PR kind of "hacks" around the existing DB schema, whereas Deluan now prefers to redesign the database schema "properly" for the many-to-many relationships between artists and albums. So this PR will likely get scrapped in favor of a larger-scale database redesign. But this is a good thing as doing it right at the database level will probably be more performant and enable future extensions more easily. |
Ah, I see, thanks for the info. Is there anywhere I can track this? |
Closes #238 and #277
Adds support for multiple artists. There are three commonly used methods to tag these, this PR support all three:
Jay-Z<null>Kanye West
), multiple ARTIST fields in FLAC/MP4 (ARTIST =Jay-Z
, ARTIST =Kanye West
)Jay-Z;Kanye West
Jay-Z<null>Kanye West
), singlevalued ARTIST (Jay-Z & Kanye West
) for backwards compatibilityHow this PR works in the Navidrome DB
mediafile
andalbum
tables:artist
andalbum_artist
are formed by concatenating multiple artists:Jay-Z · Kanye West
artist_id
is populated with the id of the first artist0e37575446e8659caa9f2a3e298afc86
, i.e. clicking onJay-Z · Kanye West
will take you to the artist page ofJay-Z
all_artist_ids
has the ids of all artists:0e37575446e8659caa9f2a3e298afc86 0b48849166b97b6b053a0e1e5e131231
, this makes the songs/albums show up in the artist discographyfull_text
, so available for searchThree new config options (we can drop some of them if we deem them good enough to stay enabled all the time):
Scanner.MultipleArtists
(defaulttrue
): iffalse
, only the first artist in the tags is used.Scanner.ArtistSeparators
(default;
): just likeScanner.GenreSeparators
Scanner.RemixerToArtist
(defaulttrue
): this does what Spotify does: reads the Remixer tag and treats it as an additional Artist.I've been testing this for over three months now, it's pretty solid. Open issues:
Dependencies/conflicts
Artist discography sorted own-albums-first #2580 is not strictly necessary but if we don't do it the discographies of artists with lots of compilation tracks and guest appearances/collabs will become a mess
Create artist objects for non-Album Artists #2583 is not strictly necessary but allows users to browse artists that have no albums but a lot of compilation tracks or guest appearances/collabs
Split albums by MusicBrainz Album ID #2538 is independent but conflicts with one line in
scanner/mapping.go
refactor GetFullText() #2587 is independent but has conflicts
Subsonic clients
Mainly around "Go to {track artist}" functionality, where you can navigate to the artist of a song. None of them are showstoppers in my opinion. I've been cross-referencing the behaviour with LMS, another Subsonic server that supports multiple artists.
Jay-Z · Kanye West
, it takes you to Jay-Z's discography, but still displays theJay-Z · Kanye West
artist name - probably only needs a small fix on the Substreamer side to refresh the artist name after the clickthrough. For comparison, LMS does not provide an ArtistID for tracks with multiple artists, so Go To Artist isn't possible at allJay-Z · Kanye West
, which fails in both casesWeb UI Cosmetics
Since the artistID of the track only links to the first artist, clicking on the
Jay-Z · Kanye West
link in the WebUI will always take you to the artist page ofJay-Z
, ideally the WebUI would make this clearer to the user by only hyperlinking Jay-Z, not the other artists. It's mainly cosmetic, but if we dislike it enough, someone with more JavaScript skills than me would have to take a look a this. At the moment this PR is 100% serverside.