.irssi/scripts/xmms.pl


use strict;
use Xmms::Remote ();                                                          
use Irssi qw(command_bind signal_add);

my $remote = Xmms::Remote->new;                                               

sub cmd_xmms {
    my ($data, $server, $window) = @_;
    my $title = $remote->get_playlist_title();
    my $fileid = $remote->get_playlist_pos;
    $window->command("/ME Playing \002$title\002. One tit? \002!fetch $fileid\002");
}

sub cmd_a {
    $remote->playlist_next();
}

sub cmd_xmmssend {
    my ($data, $server, $window) = @_;
    my $file = $remote->get_playlist_file();
    $window->command("/dcc send $data \"$file\"");
}

sub cmd_dig {
    my ($data, $server, $window) = @_;
    my $pattern = $data;
    $pattern =~ s/([^.]|^)\*/$1 . ".*"/eg;
    my (@results, $c);
    foreach (@{$remote->get_playlist_titles}) {
	if (m/$pattern/i) {
	    push @results, $c;
	}
	$c++;
    }
    $remote->set_playlist_pos($results[0]);
}
    
sub sig_msg {
    my ($server, $msg, $nick, $address, $target) = @_;
    my @words = split(/ /,$msg);
    if (lc($words[0]) eq "!fetch") {
	$_ = $words[1];
	if (m/-/) {
	    my ($first, $last) = split(/-/,$words[1]);
	    my $sum = $last - $first;
	    if ($sum <= 20 && $sum > 3) {
		my $tar = "~/tmp/" . $words[1] . ".tar";
		my $gzip = $tar . ".gz";
		if (-e $gzip) {
		    $server-command("/DCC send $nick $gzip");
		}
		else {
		    `tar -cf $tar`;
		    my $playlist_file = $first;
		    while ($playlist_file <= $last) {
			my $file = $remote->get_playlist_file($playlist_file);
			`tar -rf $tar "$file"`;
			$playlist_file++;
		    }
		    `gzip -9 $tar`;
		    $server->command("/DCC send $nick $gzip");
		}
	    }
	    else {
		$server->command("/SAY ERROROR TOO ANY PHILEZ");
	    }
	}
	else {
	    my $file = $remote->get_playlist_file($words[1]);
	    $server->command("/DCC send $nick \"$file\"");
	}
    }
    elsif (lc($words[0]) eq "!random") {
	my $length = $remote->get_playlist_length();
	my $file = $remote->get_playlist_file(int(rand($length)));
	$server->command("/DCC send $nick \"$file\"");
    }
}

Irssi::command_bind("xmms", "cmd_xmms");
Irssi::command_bind("xmmssend", "cmd_xmmssend");
Irssi::command_bind("a", "cmd_a");
Irssi::command_bind("dig", "cmd_dig");
signal_add("message public", "sig_msg");