Index: /home/mh/eclipse/SVN/Slim/Web/Pages.pm =================================================================== --- /home/mh/eclipse/SVN/Slim/Web/Pages.pm (revision 2880) +++ /home/mh/eclipse/SVN/Slim/Web/Pages.pm (working copy) @@ -520,7 +520,7 @@ } sub addLinks { - my ($category, $links,$noquery) = @_; + my ($category, $links, $noquery) = @_; return if (ref($links) ne 'HASH'); @@ -532,6 +532,10 @@ delete($additionalLinks{$category}->{$title}); } } + + if (not keys %{$additionalLinks{$category}}) { + delete($additionalLinks{$category}); + } } # Check to make sure the ref is valid, and not a wildcard. Index: /home/mh/eclipse/SVN/Slim/Web/Setup.pm =================================================================== --- /home/mh/eclipse/SVN/Slim/Web/Setup.pm (revision 2880) +++ /home/mh/eclipse/SVN/Slim/Web/Setup.pm (working copy) @@ -1269,11 +1269,6 @@ my $i = 0; my %plugins = map {$_ => 1} Slim::Utils::Prefs::getArray('disabledplugins'); - Slim::Buttons::Plugins::addSetupGroups(); - Slim::Buttons::Plugins::addWebPages(); - Slim::Buttons::Plugins::addMenus(); - Slim::Buttons::Plugins::addScreensavers(); - Slim::Utils::Prefs::delete('disabledplugins'); my $pluginlistref = Slim::Buttons::Plugins::installedPlugins(); @@ -1315,11 +1310,15 @@ for my $group (Slim::Utils::Prefs::getArray('disabledplugins')) { delGroup('plugins',$group,1); + delGroup('player_plugins',$group,1); if (exists &{"Plugins::" . $group . "::disablePlugin"}) { &{"Plugins::" . $group . "::disablePlugin"}; } } + + # call addSetupGroups last, since it sets a flag to say we're done refreshing plugins. + Slim::Buttons::Plugins::read_plugins(); } ,'GroupOrder' => ['Default'] # if more than one ir map exists the undef will be replaced by 'Default' Index: /home/mh/eclipse/SVN/Slim/Buttons/Plugins.pm =================================================================== --- /home/mh/eclipse/SVN/Slim/Buttons/Plugins.pm (revision 2880) +++ /home/mh/eclipse/SVN/Slim/Buttons/Plugins.pm (working copy) @@ -135,6 +135,8 @@ sub read_plugins { no strict 'refs'; + return if $plugins_read; + for my $plugin (keys %{installedPlugins()}) { my $fullname = "Plugins::$plugin"; @@ -217,15 +219,33 @@ sub addMenus { no strict 'refs'; + + return if $addGroups; + my %disabledplugins = map { $_ => 1 } Slim::Utils::Prefs::getArray('disabledplugins'); for my $plugin (keys %{installedPlugins()}) { + # don't bother if name isn't defined (corrupt/invalid plugin) + next unless defined $plugins{$plugin}->{'name'}; + + if (exists $disabledplugins{$plugin}) { + Slim::Buttons::Home::delSubMenu("PLUGINS", $plugins{$plugin}->{'name'}); + $::d_plugins && msg("Removing $plugin from menu.\n"); + } + + # don't bother going further if there is no addMenu next unless UNIVERSAL::can("Plugins::${plugin}","addMenu"); - next if exists $disabledplugins{$plugin}; my $menu = eval { &{"Plugins::${plugin}::addMenu"}() }; + if (exists $disabledplugins{$plugin}) { + $::d_plugins && msg("Removing $plugin from menu: $menu\n"); + Slim::Buttons::Home::delSubMenu($menu, $plugins{$plugin}->{'name'}); + next; + } + + if (!$@ && defined $menu) { my %params = ( @@ -247,14 +267,21 @@ sub addScreensavers { no strict 'refs'; + + return if $addGroups; + my %disabledplugins = map { $_ => 1 } Slim::Utils::Prefs::getArray('disabledplugins'); for my $plugin (keys %{installedPlugins()}) { # load screensaver, if one exists. next unless UNIVERSAL::can("Plugins::${plugin}","screenSaver"); - next if exists $disabledplugins{$plugin}; + if (exists $disabledplugins{$plugin}) { + Slim::Buttons::Home::delSubMenu("SCREENSAVERS", $plugins{$plugin}->{'name'}); + next; + } + eval { &{"Plugins::${plugin}::screenSaver"}() }; if ($@) { @@ -292,12 +319,17 @@ sub addWebPages { no strict 'refs'; + + return if $addGroups && !Slim::Utils::Prefs::get('plugins-onthefly'); + my %disabledplugins = map { $_ => 1 } Slim::Utils::Prefs::getArray('disabledplugins'); for my $plugin (keys %{installedPlugins()}) { + if (exists $disabledplugins{$plugin}) { + Slim::Web::Pages::addLinks("plugins", {$plugins{$plugin}->{'name'} => undef}) if $plugins{$plugin}->{'name'}; + next; + } - next if exists $disabledplugins{$plugin}; - if (exists($plugins{$plugin}) && UNIVERSAL::can("Plugins::${plugin}","webPages")) { # Get the page function map and index URL from the plugin @@ -338,11 +370,14 @@ } sub clearGroups { + $::d_plugins && msg("Resetting plugins\n"); $addGroups = 0; + $plugins_read = 0; } sub addSetupGroups { no strict 'refs'; + my %disabledplugins = map { $_ => 1 } Slim::Utils::Prefs::getArray('disabledplugins'); return if $addGroups && !Slim::Utils::Prefs::get('plugins-onthefly');