#!/usr/bin/perl use DCOP::Amarok::Player; Xchat::register('amaroK','0.0.1','Perl based X-Chat interface to amaroK'); # We only hook one /command, then run all our sub commands off that # It's just cleaner this way Xchat::hook_command('amarok',\&amarok_root,{help_text => 'amaroK command root, type /amarok help for more information'}); # We define our commands here my %cmds = ( 'help' => { desc => 'Display help', hook => \&help }, 'np' => { desc => 'Performs the now playing action on the current window', hook => \&now_playing } ); # The root sub, this is our router sub amarok_root { my $cmd = lc($_[0][1]); if (exists($cmds{$cmd})) { use Data::Dumper; return &{$cmds{$cmd}{hook}}($_); } else { Xchat::print("Huh?"); } } # Help target, list commands with their help message sub help { Xchat::printf('%-8s - %s','Command','Help'); foreach my $key (keys(%cmds)) { Xchat::printf('%-8s - %s',$key,$cmds{$key}{desc}); } } # Now playing target - Well guess what this does sub now_playing { my $player = DCOP::Amarok::Player->new(); my %info = (); foreach my $var (qw(album artist title status track totalTime currentTime isPlaying sampleRate bitrate status)) { $info{$var} = $player->$var(); } $info{sampleRate} = int ($info{sampleRate}/1000); if ($info{title} =~ /^(.+)\ \/\ (.+)$/) { $info{title} = $2; $info{artist} = $1; } my $command = 'action '; if ($info{status} >= 1) { if ($info{status} == 1) { $command .= "has paused while playing: \cC1,12 [%title%] by \cC1,8 [%artist%] "; } else { $command .= "\cB \cC1,12 Gentoo feat Amarok sound \cC1,8 : \cC1,12 [%title%] \cC1,13 by \cC1,12 [%artist%] \cC1,13"; } if ($info{album}) { $command .= "from \cC1,8 [%album%] "; } $command .= '[%currentTime%/%totalTime%]-'; $command .= '[%bitrate%kbps]-'; $command .= '[%sampleRate%Khz]'; } else { $command .= 'isn\'t playing anything...'; } $command =~ s/%([^%]+)%/$info{$1}/gie; Xchat::command($command); Xchat::EAT_ALL; }