--- Slim/Buttons/BrowseDB.pm.old 2006-07-23 22:03:00.000000000 -0700 +++ Slim/Buttons/BrowseDB.pm 2006-07-25 13:01:33.929687500 -0700 @@ -256,20 +256,24 @@ sub init { 'create_mix' => sub { my $client = shift; + my $items = $client->param('listRef'); + my $listIndex = $client->param('listIndex'); + my $currentItem = $items->[$listIndex] || return; + my $Imports = Slim::Music::Import->importers; my @mixers = (); for my $import (keys %{$Imports}) { - if (defined $Imports->{$import}->{'mixer'} && $Imports->{$import}->{'use'}) { + if (defined $Imports->{$import}->{'mixer'} && $Imports->{$import}->{'use'} && $import->mixable($currentItem)) { push @mixers, $import; } } if (scalar @mixers == 1) { - $::d_plugins && msg("Running Mixer $mixers[0]\n"); + $::d_plugins && msgf("Running Mixer %s\n",$client->string($mixers[0]->title)); &{$Imports->{$mixers[0]}->{'mixer'}}($client); } elsif (@mixers) { @@ -279,7 +283,10 @@ sub init { 'parentParams' => $client->modeParameterStack(-1), 'listRef' => \@mixers, - 'stringExternRef' => 1, + 'externRef' => sub { + return $_[0]->string($_[1]->title()); + }, + 'externRefArgs' => 'CV', 'header' => 'CREATE_MIX', 'headerAddCount' => 1, 'stringHeader' => 1, @@ -315,7 +322,7 @@ sub mixerExitHandler { if (defined $Imports->{$mixer}->{'mixer'}) { - $::d_plugins && msg("Running Mixer $mixer\n"); + $::d_plugins && msgf("Running Mixer %s\n",$client->string($mixer->title)); &{$Imports->{$mixer}->{'mixer'}}($client); } else { @@ -587,8 +594,14 @@ sub browsedbOverlay { return (undef, Slim::Display::Display::symbol('rightarrow')); } # Music Magic is everywhere, MoodLogic doesn't exist on albums - elsif (($item->can('moodlogic_mixable') && $item->moodlogic_mixable()) || $item->musicmagic_mixable()) { - $overlay1 = Slim::Display::Display::symbol('mixable'); + else { + my $Imports = Slim::Music::Import->importers; + + for my $import (keys %{$Imports}) { + if ($import->can('mixable') && $import->mixable($item)) { + $overlay1 = Slim::Display::Display::symbol('mixable'); + } + } } if ($client->param('descend')) { --- Plugins/MoodLogic/Plugin.pm.old 2006-07-25 12:02:41.914062500 -0700 +++ Plugins/MoodLogic/Plugin.pm 2006-07-25 12:02:36.023437500 -0700 @@ -68,7 +68,28 @@ sub shutdownPlugin { # set importer to not use #Slim::Utils::Prefs::set('moodlogic', 0); - Slim::Music::Import->useImporter('MOODLOGIC',0); + Slim::Music::Import->useImporter('Plugins::MoodLogic::Plugin',0); +} + +sub prefName { + my $class = shift; + return lc($class->title()); +} + +sub title { + my $class = shift; + return 'MOODLOGIC'; +} + +sub mixable { + my $class = shift; + my $item = shift; + + if (ref $item && $item->can('moodlogic_mixable')) { + return $item->moodlogic_mixable(); + } else { + return; + } } sub initPlugin { @@ -135,16 +156,18 @@ sub initPlugin { #Slim::Utils::Strings::addStrings($strings); Slim::Player::ProtocolHandlers->registerHandler("moodlogicplaylist", "0"); + + my $class = 'Plugins::MoodLogic::Plugin'; # addImporter for Plugins, may include mixer function, setup function, mixerlink reference and use on/off. - Slim::Music::Import->addImporter('MOODLOGIC', { + Slim::Music::Import->addImporter($class, { 'mixer' => \&mixerFunction, 'setup' => \&addGroups, 'mixerlink' => \&mixerlink, 'use' => 1, }); - Slim::Music::Import->useImporter('MOODLOGIC',Slim::Utils::Prefs::get('moodlogic')); + Slim::Music::Import->useImporter($class,Slim::Utils::Prefs::get($class->prefName)); addGroups(); Plugins::MoodLogic::InstantMix::init(); @@ -266,7 +289,7 @@ sub mixerlink { if (canUseMoodLogic() && Slim::Utils::Prefs::get('moodlogic') && $form->{'levelName'} ne 'album') { #set up a moodlogic link - $form->{'mixerlinks'}{'MOODLOGIC'} = "plugins/MoodLogic/mixerlink.html"; + $form->{'mixerlinks'}{Plugins::MoodLogic::Plugin->title()} = "plugins/MoodLogic/mixerlink.html"; #flag if mixable if ($item->can('moodlogic_mixable') && $item->moodlogic_mixable) { --- Plugins/MusicMagic/Plugin.pm.old 2006-07-25 12:03:00.976562500 -0700 +++ Plugins/MusicMagic/Plugin.pm 2006-07-25 12:02:54.539062500 -0700 @@ -100,7 +100,7 @@ sub shutdownPlugin { # set importer to not use, but only for this session. # leave server pref as is to support reenabling the features, # without needing a forced rescan - #Slim::Music::Import->useImporter('MUSICMAGIC',0); + #Slim::Music::Import->useImporter('Plugins::MusicMagic::Plugin',0); } sub initPlugin { @@ -152,15 +152,16 @@ sub initPlugin { #checker($initialized); + my $class = 'Plugins::MusicMagic::Plugin'; # addImporter for Plugins, may include mixer function, setup function, mixerlink reference and use on/off. - Slim::Music::Import->addImporter('MUSICMAGIC', { + Slim::Music::Import->addImporter($class, { 'mixer' => \&mixerFunction, 'setup' => \&addGroups, 'mixerlink' => \&mixerlink, 'use' => 1, }); - Slim::Music::Import->useImporter('MUSICMAGIC', Slim::Utils::Prefs::get('musicmagic')); + Slim::Music::Import->useImporter($class, Slim::Utils::Prefs::get($class->prefName)); Slim::Player::ProtocolHandlers->registerHandler('musicmagicplaylist', 0); @@ -369,6 +370,27 @@ sub grabFilters { return %filterHash; } +sub prefName { + my $class = shift; + return lc($class->title()); +} + +sub title { + my $class = shift; + return 'MUSICMAGIC'; +} + +sub mixable { + my $class = shift; + my $item = shift; + + if (ref $item) { + return $item->musicmagic_mixable(); + } else { + return; + } +} + sub grabMoods { my @moods; my %moodHash; @@ -563,7 +585,7 @@ sub mixerlink { if (canUseMusicMagic() && Slim::Utils::Prefs::get('musicmagic')) { # set up a musicmagic link - $form->{'mixerlinks'}{'MUSICMAGIC'} = "plugins/MusicMagic/mixerlink.html"; + $form->{'mixerlinks'}{Plugins::MusicMagic::Plugin->title()} = "plugins/MusicMagic/mixerlink.html"; # flag if mixable if (($item->can('musicmagic_mixable') && $item->musicmagic_mixable) || @@ -946,7 +968,7 @@ sub setupUse { Slim::Buttons::Home::updateMenu($client); } - Slim::Music::Import->useImporter('MUSICMAGIC',$changeref->{'musicmagic'}{'new'}); + Slim::Music::Import->useImporter('Plugins::MusicMagic::Plugin',$changeref->{'musicmagic'}{'new'}); }, 'optionSort' => 'KR',