Index: Plugins/Visualizer.pm =================================================================== --- Plugins/Visualizer.pm (revision 4240) +++ Plugins/Visualizer.pm (working copy) @@ -14,6 +14,8 @@ package Plugins::Visualizer; use Slim::Player::Squeezebox2; +use Slim::Utils::Strings qw(string); +use Slim::Utils::Misc qw(msg); use vars qw($VERSION); $VERSION = substr(q$Revision: 1.0 $,10); @@ -24,8 +26,10 @@ my $VISUALIZER_WAVEFORM = 3; my $textontime = 5; -my $textofftime = 30; +my $defaulttextofftime = 30; my $initialtextofftime = 5; +my %textofftime; +my %initialtextofftime; my %client_context = (); my @visualizer_screensavers = ( 'SCREENSAVER.visualizer_spectrum', @@ -102,6 +106,27 @@ EN Default screenaver ES Salvapantallas por defecto +PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_PLAYBACK + EN Show text during playback + +PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_TRANSITION + EN Show text on transitions + +PLUGIN_SCREENSAVER_VISUALIZER_NOTEXT_PLAYBACK + EN No text during playback + +PLUGIN_SCREENSAVER_VISUALIZER_NOTEXT_TRANSITION + EN No text on transitions + +PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT + EN Visualizer Screensaver Show Text + +PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_CHANGED + EN Visualizer settings changed: + +PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_DESC + EN You may choose to show or hide the now playing information that is displayed periodicly during playback, or the next song info that is displayed in teh transition between songs. + '}; ################################################## @@ -266,16 +291,37 @@ Slim::Buttons::Common::popMode($client); return; } - + my $mode = Slim::Buttons::Common::mode($client); + + #check preferences + my $i = 0; + for my $vis (@visualizer_screensavers) { + + next unless $vis eq $mode; + + if (!$client->prefIsDefined('plugin_screensaver_visualizer_showtext_playback',$i)) { + $client->prefSet('plugin_screensaver_visualizer_showtext_playback',$screensaver_info{$visualizer_screensavers[$i]}{showtext},$i); + } + $textofftime{$client} = $client->prefGet('plugin_screensaver_visualizer_showtext_playback',$i) ? $defaulttextofftime : 0; + + if (!$client->prefIsDefined('plugin_screensaver_visualizer_showtext_transition',$i)) { + $client->prefSet('plugin_screensaver_visualizer_showtext_transition',$screensaver_info{$visualizer_screensavers[$i]}{showtext},$i); + } + $initialtextofftime{$client} = $client->prefGet('plugin_screensaver_visualizer_showtext_transition',$i) ? $initialtextofftime : $textofftime{$client}; + use Data::Dumper; + print Dumper($initialtextofftime{$client}, $textofftime{$client}); + $i++; + } + $client->modeParam('visu', $screensaver_info{$mode}->{params}); - + $client->lines(\&screensaverLines); # do it again at the next period - if ($screensaver_info{$mode}->{showtext}) { + if ($initialtextofftime{$client}) { Slim::Control::Command::setExecuteCallback(\&_showsongtransition); - Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $initialtextofftime, + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $initialtextofftime{$client}, \&_pushon, $client); } @@ -286,11 +332,16 @@ my $paramsRef = shift; return if ($paramsRef->[0] ne 'newsong'); - + my $mode = Slim::Buttons::Common::mode($client); return if (!$mode || $mode !~ /^SCREENSAVER.visualizer_/); - return if (!$screensaver_info{$mode}->{showtext}); - + if (!$initialtextofftime{$client}) { + Slim::Utils::Timers::killTimers($client, \&_pushon); + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $initialtextofftime{$client}, + \&_pushon, + $client); + return; + } _pushon($client); } @@ -325,12 +376,98 @@ 'line2' => '' }; $client->pushRight(undef,$screen); - # do it again at the next period - Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $textofftime, + + # do it again at the next period unless offtime is set to zero (no playback text) + Slim::Utils::Timers::setTimer($client, Time::HiRes::time() + $textofftime{$client}, \&_pushon, - $client); + $client) + if $textofftime{$client}; } +sub setupGroup { + my $client = shift; + my %setupGroup = ( + 'PrefOrder' => + ['plugin_screensaver_visualizer_showtext_playback','plugin_screensaver_visualizer_showtext_transition'] + ,'PrefsInTable' => 1 + ,'Suppress_PrefHead' => 1 + ,'Suppress_PrefDesc' => 1 + ,'Suppress_PrefLine' => 1 + ,'Suppress_PrefSub' => 1 + ,'GroupHead' => string('PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT') + ,'GroupDesc' => string('PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_DESC') + ,'GroupLine' => 1 + ,'GroupSub' => 1 + ); + my %setupPrefs = ( + 'plugin_screensaver_visualizer_showtext_playback' => { + 'isArray' => 1 + ,'validate' => \&Slim::Web::Setup::validateTrueFalse + ,'inputTemplate' => 'setup_input_array_chk.html' + ,'currentValue' => sub { + my ($client, $key, $ind) = @_; + if (!$client->prefIsDefined($key,$ind)) { + $client->prefSet($key,$screensaver_info{$visualizer_screensavers[$ind]}{showtext},$ind); + } + return $client->prefGet($key,$ind); + } + ,'onChange' => sub { + my ($client,$changeref,$paramref,$pageref) = @_; + for my $key (keys %{$changeref}) { + if ($key =~ /plugin_screensaver_visualizer_showtext_playback(\d+)$/) { + $client->prefSet($key,$changeref->{$key}{'new'},$ind); + #$screensaver_info{$visualizer_screensavers[$ind]}{showtext} = $changeref->{$key}{'new'}; + } + } + } + ,'changeIntro' => string('PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_CHANGED') + ,'arrayMax' => 2 #set in preEval + ,'externalValue' => sub { + my ($client,$value,$key,$ind) = @_; + if (ref $value && !$value->{'new'}) { + return string($screensaver_info{$visualizer_screensavers[$1]}{name}).string('COLON')." ".string('PLUGIN_SCREENSAVER_VISUALIZER_NOTEXT_PLAYBACK'); + } + if ($key =~ /\D+(\d+)$/) { + return string($screensaver_info{$visualizer_screensavers[$1]}{name}).string('COLON')." ".string('PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_PLAYBACK'); + } + } + }, + 'plugin_screensaver_visualizer_showtext_transition' => { + 'isArray' => 1 + ,'validate' => \&Slim::Web::Setup::validateTrueFalse + ,'inputTemplate' => 'setup_input_array_chk.html' + ,'currentValue' => sub { + my ($client, $key, $ind) = @_; + if (!$client->prefIsDefined($key,$ind)) { + $client->prefSet($key,$screensaver_info{$visualizer_screensavers[$ind]}{showtext},$ind); + } + return $client->prefGet($key,$ind); + } + ,'onChange' => sub { + my ($client,$changeref,$paramref,$pageref) = @_; + for my $key (keys %{$changeref}) { + if ($key =~ /plugin_screensaver_visualizer_showtext_transition(\d+)$/) { + $client->prefSet($key,$changeref->{$key}{'new'},$ind); + #$screensaver_info{$visualizer_screensavers[$ind]}{showtext} = $changeref->{$key}{'new'}; + } + } + } + ,'changeIntro' => string('PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_CHANGED') + ,'arrayMax' => 2 #set in preEval + ,'externalValue' => sub { + my ($client,$value,$key,$ind) = @_; + if (ref $value && !$value->{'new'}) { + return string($screensaver_info{$visualizer_screensavers[$1]}{name}).string('COLON')." ".string('PLUGIN_SCREENSAVER_VISUALIZER_NOTEXT_TRANSITION'); + } + if ($key =~ /\D+(\d+)$/) { + return string($screensaver_info{$visualizer_screensavers[$1]}{name}).string('COLON')." ".string('PLUGIN_SCREENSAVER_VISUALIZER_SHOWTEXT_TRANSITION'); + } + } + }, + ); + return (\%setupGroup,\%setupPrefs,1); +} + 1; __END__