The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use Irssi;
use Audio::XMMSClient;

our $VERSION = '0.03';
our %IRSSI   = (
        authors     => 'Florian Ragwitz',
        contact     => 'rafl@debian.org',
        name        => 'ixmms2',
        description => 'Irssi xmms2 client',
        license     => 'GPL',
        url         => 'http://perldition.org/',
        changes     => '2006-10-03',
);

our $xmms = Audio::XMMSClient->new( $IRSSI{name} );
$xmms->connect or die;

sub cmd_xmms2 {
    my ($data, $server, $witem) = @_;

    my $result = $xmms->playback_current_id;
    $result->wait;

    $result = $xmms->medialib_get_info( $result->value );
    $result->wait;

    my $artist = $result->value->{ artist };
    my $title  = $result->value->{ title  };

    if ($witem && ($witem->{type} eq 'CHANNEL' || $witem->{type} eq 'QUERY')) {
        $witem->command("say xmms2 is now playing: $artist - $title");
    }
    else {
        Irssi::print("xmms2 is now playing: $artist - $title");
    }
}

sub cmd_xmms2next {
    $xmms->playlist_set_next_rel( 1 )->wait;
    $xmms->playback_tickle->wait;
}

sub cmd_xmms2prev {
    $xmms->playlist_set_next_rel( -1 )->wait;
    $xmms->playback_tickle->wait;
}

sub cmd_xmms2stop {
    $xmms->playback_stop->wait;
}

sub cmd_xmms2pause {
    $xmms->playback_pause->wait;
}

sub cmd_xmms2play {
    $xmms->playback_start->wait;
}

sub cmd_xmms2shuffle {
    $xmms->playlist_shuffle->wait;
}

for my $cmd (qw(
            xmms2
            xmms2next
            xmms2prev
            xmms2stop
            xmms2pause
            xmms2play
            xmms2shuffle
)) {
    Irssi::command_bind( $cmd => "cmd_$cmd" );
}