Index: Slim/Music/Import.pm =================================================================== --- Slim/Music/Import.pm (revision 11061) +++ Slim/Music/Import.pm (working copy) @@ -311,6 +311,13 @@ Slim::Schema->mergeVariousArtistsAlbums; + # Add experimental album sortartist information + $::d_import && msg("Import: Starting addAlbumSortArtist().\n"); + + $importsRunning{'addAlbumSortArtist'} = Time::HiRes::time(); + + Slim::Schema->addAlbumSortArtist(); + # Post-process artwork, so we can use title formats, and use a generic # image to speed up artwork loading. $::d_import && msg("Import: Starting findArtwork().\n"); Index: Slim/Schema/Contributor.pm =================================================================== --- Slim/Schema/Contributor.pm (revision 11061) +++ Slim/Schema/Contributor.pm (working copy) @@ -15,6 +15,7 @@ 'BAND' => 4, 'ALBUMARTIST' => 5, 'TRACKARTIST' => 6, + '_SORTARTIST' =>10, # internal contributor role for album sorting ); { Index: Slim/Schema/ResultSet/Album.pm =================================================================== --- Slim/Schema/ResultSet/Album.pm (revision 11061) +++ Slim/Schema/ResultSet/Album.pm (working copy) @@ -95,6 +95,9 @@ if ($sort =~ /contributor/) { push @join, { 'contributorAlbums' => 'contributor' }; + + # experimental sortartist + $cond->{'contributorAlbums.role'} = { 'in' => [ Slim::Schema::Contributor->typeToRole('_SORTARTIST') ] }; } if ($sort =~ /genre/) { Index: Slim/Schema/Album.pm =================================================================== --- Slim/Schema/Album.pm (revision 11061) +++ Slim/Schema/Album.pm (working copy) @@ -126,7 +126,11 @@ if ($showContributor) { # override default field for anchors with contributor.namesort - $$anchortextRef = $contributor->namesort; + if (!$self->compilation) { + $$anchortextRef = $contributor->namesort; + } else { + $$anchortextRef = Slim::Utils::Text::ignoreCaseArticles(Slim::Music::Info::variousArtistString()); + } } } # } Index: Slim/Schema.pm =================================================================== --- Slim/Schema.pm (revision 11061) +++ Slim/Schema.pm (working copy) @@ -1222,6 +1222,39 @@ Slim::Music::Import->endImporter('mergeVariousAlbums'); } +# experimental album sort artist - force a single contributor for album sorting, always use VA for compilations + +sub addAlbumSortArtist { + my $self = shift; + + my $vaObjId = $self->variousArtistsObject->id; + my $sortRole = Slim::Schema::Contributor->typeToRole('_SORTARTIST'); + + my $cursor = $self->search('Album', { + + 'me.title' => { '!=' => string('NO_ALBUM') }, + + })->distinct; + + while (my $albumObj = $cursor->next) { + + if (my @artists = $albumObj->artists) { + + my $sortid = $albumObj->compilation ? $vaObjId : $artists[0]->id; + + $::d_info && msgf("add sortartist %s for album '%s'\n", $sortid == $vaObjId ? 'VA' : $sortid, $albumObj->name); + + $albumObj->contributorAlbums->find_or_create({ + 'album' => $albumObj->id, + 'contributor' => $sortid, + 'role' => $sortRole, + }); + } + } + + Slim::Music::Import->endImporter('addAlbumSortArtist'); +} + =head2 wipeCaches() Clears the lastTrack caches, and forces a database commit.