--- BrowseDB.pm 2005-08-02 14:55:55.125000000 -0700 +++ Slim/Buttons/BrowseDB.pm 2005-08-02 11:53:57.156250000 -0700 @@ -48,6 +48,12 @@ sub init { 'level' => 0, }, + 'BROWSE_BY_YEAR' => { + 'useMode' => 'browsedb', + 'hierarchy' => 'year,album,track', + 'level' => 0, + }, + 'BROWSE_BY_SONG' => { 'useMode' => 'browsedb', 'hierarchy' => 'track', @@ -290,17 +296,16 @@ sub browsedbExitCallback { my $descend = $client->param('descend'); my $currentItem = $items->[$listIndex]; - - my $all = !ref($currentItem); - + my $fieldInfo = Slim::DataStores::Base->fieldInfo(); my @levels = split(",", $hierarchy); + my $all = 1 if ($fieldInfo->{$levels[$level+1]}->{'allTitle'} eq $currentItem); + if (!defined($currentItem)) { $client->bumpRight(); } # If we're dealing with a container or an ALL list elsif ($descend || $all) { - my $fieldInfo = Slim::DataStores::Base->fieldInfo(); my $findCriteria = { %{$client->param('findCriteria')} }; my $field = $levels[$level]; @@ -348,10 +353,6 @@ sub browsedbItemName { my $client = shift; my $item = shift; - if (defined($item) && !ref($item)) { - return $client->string($item); - } - my $hierarchy = $client->param('hierarchy'); my $level = $client->param('level'); @@ -359,11 +360,19 @@ sub browsedbItemName { my $fieldInfo = Slim::DataStores::Base->fieldInfo(); my $levelInfo = $fieldInfo->{$levels[$level]} || $fieldInfo->{'default'}; - + + if ($fieldInfo->{$levels[$level+1]}->{'allTitle'} eq $item) { + return $client->string($item); + } + if ($levels[$level] eq 'track') { return Slim::Music::Info::standardTitle($client, $item); + } elsif ($levels[$level] eq 'album') { + + return $item; + } elsif (($levels[$level] eq 'album') && $level == 0) { my $name = &{$levelInfo->{'resultToName'}}($item); @@ -564,6 +573,7 @@ sub setMode { noWrap => (scalar(@$items) <= 1), callback => \&browsedbExitCallback, externRef => \&browsedbItemName, + stringExternRef => 0, overlayRef => \&browsedbOverlay, onChange => sub { $_[0]->lastID3Selection($selectionKey,$_[1]);