Index: server/Slim/Control/Request.pm =================================================================== --- server/Slim/Control/Request.pm (revision 16692) +++ server/Slim/Control/Request.pm (working copy) @@ -1506,8 +1506,13 @@ } if (defined ${$self->{'_results'}}{$loop}) { + my @data; - my @data = sort { $a->{$field} cmp $b->{$field} } @{${$self->{'_results'}}{$loop}}; + if ($field == 'weight') { + @data = sort { $a->{$field} <=> $b->{$field} } @{${$self->{'_results'}}{$loop}}; + } else { + @data = sort { $a->{$field} cmp $b->{$field} } @{${$self->{'_results'}}{$loop}}; + } ${$self->{'_results'}}{$loop} = \@data; } } Index: server/Slim/Control/Queries.pm =================================================================== --- server/Slim/Control/Queries.pm (revision 16692) +++ server/Slim/Control/Queries.pm (working copy) @@ -4067,6 +4070,7 @@ my $cnt = $request->getResultLoopCount($loop) || 0; if ( ref $data eq 'HASH' && scalar keys %{$data} ) { + $data->{weight} = $data->{weight} || 100; $request->setResultLoopHash($loop, $cnt, $data); } Index: server/Slim/Plugin/ShoutcastBrowser/Plugin.pm =================================================================== --- server/Slim/Plugin/ShoutcastBrowser/Plugin.pm (revision 16692) +++ server/Slim/Plugin/ShoutcastBrowser/Plugin.pm (working copy) @@ -92,6 +92,7 @@ $data = { 'text' => string(getDisplayName()), # nice name 'icon-id' => Slim::Plugin::ShoutcastBrowser::Plugin->_pluginDataFor('icon'), + 'weight' => 50, 'actions' => { 'go' => { 'cmd' => ['shoutcast', 'items'], Index: server/Slim/Plugin/OPMLBased.pm =================================================================== --- server/Slim/Plugin/OPMLBased.pm (revision 16692) +++ server/Slim/Plugin/OPMLBased.pm (working copy) @@ -90,18 +90,22 @@ my ( $class, $args, $cli_menu ) = @_; my $tag = $args->{tag}; - my $icon = $class->_pluginDataFor('icon') ? $class->_pluginDataFor('icon') : 'html/images/radio.png'; + my $icon = $class->_pluginDataFor('icon') ? $class->_pluginDataFor('icon') : 'html/images/radio.png'; + my $weight = $args->{weight} || 100; return sub { my $request = shift; my $menu = $request->getParam('menu'); + $request->addParam('sort','weight'); + my $data; # what we want the query to report about ourself if (defined $menu) { $data = { text => Slim::Utils::Strings::string( $args->{display_name} || $class->getDisplayName() ), # nice name + weight => $weight, 'icon-id' => $icon, actions => { go => { Index: server/Slim/Plugin/RhapsodyDirect/Plugin.pm =================================================================== --- server/Slim/Plugin/RhapsodyDirect/Plugin.pm (revision 16692) +++ server/Slim/Plugin/RhapsodyDirect/Plugin.pm (working copy) @@ -29,9 +29,10 @@ ); $class->SUPER::initPlugin( - feed => Slim::Networking::SqueezeNetwork->url('/api/rhapsody/v1/opml'), - tag => 'rhapsodydirect', - menu => 'music_services', + feed => Slim::Networking::SqueezeNetwork->url('/api/rhapsody/v1/opml'), + tag => 'rhapsodydirect', + menu => 'music_services', + weight => 20, ); if ( !$ENV{SLIM_SERVICE} ) { Index: server/Slim/Plugin/Slacker/Plugin.pm =================================================================== --- server/Slim/Plugin/Slacker/Plugin.pm (revision 16692) +++ server/Slim/Plugin/Slacker/Plugin.pm (working copy) @@ -35,9 +35,10 @@ [0, 1, 1, \&deleteStation]); $class->SUPER::initPlugin( - feed => Slim::Networking::SqueezeNetwork->url('/api/slacker/v1/opml'), - tag => 'slacker', - menu => 'music_services', + feed => Slim::Networking::SqueezeNetwork->url('/api/slacker/v1/opml'), + tag => 'slacker', + menu => 'music_services', + weight => 30, ); if ( !$ENV{SLIM_SERVICE} ) { Index: server/Slim/Plugin/RadioTime/Plugin.pm =================================================================== --- server/Slim/Plugin/RadioTime/Plugin.pm (revision 16692) +++ server/Slim/Plugin/RadioTime/Plugin.pm (working copy) @@ -147,6 +147,7 @@ if (defined $menu) { $data = { 'text' => Slim::Utils::Strings::string(getDisplayName()), # nice name + weight => 30, 'icon-id' => Slim::Plugin::RadioTime::Plugin->_pluginDataFor('icon'), 'actions' => { 'go' => { Index: server/Slim/Plugin/Pandora/Plugin.pm =================================================================== --- server/Slim/Plugin/Pandora/Plugin.pm (revision 16692) +++ server/Slim/Plugin/Pandora/Plugin.pm (working copy) @@ -35,6 +35,7 @@ feed => Slim::Networking::SqueezeNetwork->url('/api/pandora/v1/opml'), tag => 'pandora', menu => 'music_services', + weight => 10, ); if ( !$ENV{SLIM_SERVICE} ) { Index: server/Slim/Plugin/RadioIO/Plugin.pm =================================================================== --- server/Slim/Plugin/RadioIO/Plugin.pm (revision 16692) +++ server/Slim/Plugin/RadioIO/Plugin.pm (working copy) @@ -24,6 +24,7 @@ feed => Slim::Networking::SqueezeNetwork->url('/api/radioio/v1/opml'), tag => 'radioio', menu => 'radios', + weight => 20, ); } Index: server/Slim/Plugin/Live365/Plugin.pm =================================================================== --- server/Slim/Plugin/Live365/Plugin.pm (revision 16692) +++ server/Slim/Plugin/Live365/Plugin.pm (working copy) @@ -19,9 +19,10 @@ ); $class->SUPER::initPlugin( - feed => Slim::Networking::SqueezeNetwork->url('/api/live365/v1/opml'), - tag => 'live365', - menu => 'radios', + feed => Slim::Networking::SqueezeNetwork->url('/api/live365/v1/opml'), + tag => 'live365', + menu => 'radios', + weight => 40, ); } Index: server/Slim/Plugin/Podcast/Plugin.pm =================================================================== --- server/Slim/Plugin/Podcast/Plugin.pm (revision 16692) +++ server/Slim/Plugin/Podcast/Plugin.pm (working copy) @@ -53,7 +53,7 @@ [0, 1, 1, \&cliQuery]); Slim::Control::Request::addDispatch(['podcast', 'playlist', '_method' ], [1, 1, 1, \&cliQuery]); - $cli_next=Slim::Control::Request::addDispatch(['radios', '_index', '_quantity' ], + $cli_next=Slim::Control::Request::addDispatch(['extras', '_index', '_quantity' ], [0, 1, 1, \&cliRadiosQuery]); if ($log->is_debug) { @@ -193,7 +193,7 @@ } # let our super duper function do all the hard work - Slim::Control::Queries::dynamicAutoQuery($request, 'radios', $cli_next, $data); + Slim::Control::Queries::dynamicAutoQuery($request, 'extras', $cli_next, $data); } # Update the hashref of podcast feeds for use with the web UI Index: server/Slim/Plugin/LMA/Plugin.pm =================================================================== --- server/Slim/Plugin/LMA/Plugin.pm (revision 16692) +++ server/Slim/Plugin/LMA/Plugin.pm (working copy) @@ -17,6 +17,7 @@ tag => 'lma', menu => 'music_services', style => 'albumcurrent', + weight => 50, ); } Index: server/Slim/Plugin/Picks/Plugin.pm =================================================================== --- server/Slim/Plugin/Picks/Plugin.pm (revision 16692) +++ server/Slim/Plugin/Picks/Plugin.pm (working copy) @@ -11,9 +11,10 @@ my $class = shift; $class->SUPER::initPlugin( - feed => 'http://www.slimdevices.com/picks/split/picks.opml', - tag => 'picks', - menu => 'radios', + feed => 'http://www.slimdevices.com/picks/split/picks.opml', + tag => 'picks', + menu => 'radios', + weight => 10, ); } Index: server/Slim/Plugin/Sounds/Plugin.pm =================================================================== --- server/Slim/Plugin/Sounds/Plugin.pm (revision 16692) +++ server/Slim/Plugin/Sounds/Plugin.pm (working copy) @@ -21,7 +21,7 @@ $class->SUPER::initPlugin( feed => Slim::Networking::SqueezeNetwork->url( '/api/sounds/v1/opml' ), tag => 'sounds', - menu => 'plugins', + menu => 'extras', ); } Index: server/Slim/Plugin/MP3tunes/Plugin.pm =================================================================== --- server/Slim/Plugin/MP3tunes/Plugin.pm (revision 16692) +++ server/Slim/Plugin/MP3tunes/Plugin.pm (working copy) @@ -16,6 +16,7 @@ feed => Slim::Networking::SqueezeNetwork->url('/api/mp3tunes/v1/opml'), tag => 'mp3tunes', menu => 'music_services', + weight => 40, ); }