PluginBuilder
From SqueezeboxWiki
Revision as of 07:12, 23 June 2010 by Soulkeeper (Talk | contribs)
package Plugins::WaveInput::Plugin; # # use strict; use vars qw($VERSION); use File::Spec::Functions qw(catdir); use FindBin qw($Bin); use Slim::Utils::Misc; use Plugins::WaveInput::WAVIN; $VERSION = "1.00"; my %wavsource; # per-client friendly wavin device name sub getDisplayName { return 'PLUGIN_WAVE_INPUT'; } sub setMode { my $client = shift; my $method = shift; $::d_plugins && msg("WavIn, in setMode\n"); if ($method eq 'pop') { Slim::Buttons::Common::popMode($client); return; } $client->lines(\&lines); $client->update(); } sub leaveMode { my $client = shift; } sub play { my $client = shift; my $wavsource = $wavsource{$client}; my $name = "Audio Input $wavsource"; my $wavinurl = "wavin:$wavsource"; $::d_plugins && msg( "WavIn Playing : $name\n"); Slim::Music::Info::setTitle($wavinurl, $name); Slim::Control::Command::execute($client, ['playlist', 'play', $wavinurl]); Slim::Control::Command::execute($client, ['play']); } my %functions = ( 'left' => sub { my $client = shift; Slim::Buttons::Common::popModeRight($client); }, 'play' => sub { my $client = shift; play($client); } ); sub lines { my $client = shift; my($line1, $line2, $overlay); # for now, always use the wave mapper $wavsource{$client} = 0; my $wavsource = $wavsource{$client}; my $name = "Audio Input $wavsource"; $line1 = "Wave Input"; # get current song and play mode my $playmode = Slim::Player::Source::playmode($client); my $stream = Slim::Player::Playlist::song($client); if ($stream eq undef) { $::d_plugins && msg("WavIn, in lines playmode=$playmode stream=undef\n"); $line2 = "$name (press PLAY)"; return($line1, $line2, undef, $overlay); } else { $::d_plugins && msg("WavIn, in lines playmode=$playmode stream=$stream\n"); } if ($::VERSION ge '6.5') { $stream = $stream->path; } if ($playmode eq 'play' && $stream =~ /^wavin:/) { $line2 = "$name playing"; $overlay = $client->symbols('notesymbol'); } else { $line2 = "$name (press PLAY)"; } return($line1, $line2, undef, $overlay); } sub getFunctions() { return \%functions; } sub addMenu { return "PLUGINS"; } sub initPlugin { $::d_plugins && msg("WavIn - initPlugin begin...\n"); # Check for wavin2cmd - Windows only for now if (Slim::Utils::OSDetect::OS() ne "win") { $::d_plugins && msg("WavIn - non-Windows OS not yet supported\n"); return 0; } my $path = Slim::Utils::Misc::findbin('wavin2cmd'); if (!$path) { $::d_plugins && msg("WavIn - wavin2cmd not found\n"); return 0; } $::d_plugins && msg("WavIn - initPlugin ...end\n"); return 1; } 1;