1# XMMS/InfoPipe script for the Irssi client. You need a few things
2# installed before this script will work...
3#    1) Irssi,          http://irssi.org/
4#    2) XMMS,           http://www.xmms.org/
5#    3) InfoPipe,       http://www.beastwithin.org
6#                       /users/wwwwolf/code/xmms/infopipe.html
7#
8# xmms2.pl is a version of xmms.pl slightly modified by Sir Robin,
9# sir@robsku.cjb.net / http://robsku.cjb.net/
10#
11# The script now outputs by default to the active window, instead of
12# status window. Also removed percentage meter as it didn't work. Only
13# two lines were modified and the original lines still exist, just
14# commented out.
15#
16# If you have trouble installing any of these, consult the READMEs that
17# come with the software, thank you.
18#
19# Fixed a few vital things adviced by kodgehopper at netscape dot net.
20# Very appreciated as I had no chance of testing a few of these things
21# myself. I hope everything works as it should now.
22#
23# Visit http://scripts.irssi.de/
24#
25# simon at blueshell dot dk
26use Irssi;
27use vars qw($VERSION %IRSSI);
28use strict;
29
30$VERSION = '1.1.3+1';
31%IRSSI = (
32  authors     => 'simon',
33  contact     => 'simon\@blueshell.dk',
34  name        => 'XMMS-InfoPipe Script',
35  description => 'Returns XMMS-InfoPipe data',
36  license     => 'Public Domain',
37  url         => 'http://irssi.dk/',
38  changed     => 'Mon Nov 27 18:00:00 CET 2006',
39  commands    => '/np',
40  note        => 'Make sure InfoPipe is configured!'
41);
42
43sub cmd_xmms {
44  my ($args, $server, $target) = @_;
45  $args =~ s/\s+$//; #fix unneeded whitespaces after output dest.
46
47  my (@t, $t, $ttotal, @pos, $pos, $postotal, $title);
48  open xmms, "<", '/tmp/xmms-info' || die; # if nothing happens, it probably
49                                      # failed here!
50
51  while(<xmms>) {
52    if(/^Time: (.*)$/) {
53      @t = split(/:/, $1);
54      $t = $1;
55      $t =~ s/^([0-9]*):([0-9]{2})$/\1m\2s/; # convert to nice format
56      $ttotal = $t[0] + $t[1]*60;
57    }
58    if(/^Position: (.*)$/) {
59      @pos = split(/:/, $1);
60      $postotal = $pos[0] + $pos[1]*60;
61    }
62    if(/^Title: (.*)$/) { $title = $1; }
63  }
64  close xmms;
65
66  if(!$ttotal || !$postotal) {
67    Irssi::print "An error occurred. Check if XMMS is running and your";
68    Irssi::print "InfoPipe module is running properly. If not, read how";
69    Irssi::print "to get these up and running by reading the script source";
70    die;
71  }
72
73  $pos = sprintf("%.0f", $postotal / $ttotal * 100); # calc. position
74# my $output = "np: $title ($pos% of $t)";
75  my $output = "np: $title ($t)";
76  $output =~ s/[\r\n]/ /g; # remove newline characters
77  if(!$server || !$server->{connected}) { # are we even connected?
78    Irssi::print $output;
79    return
80  }
81  if($args) { $server->command("msg $args $output"); }
82  else { Irssi::active_win()->command('say ' . $output); }
83# else { Irssi::print $output; }
84}
85
86Irssi::command_bind('np', 'cmd_xmms');
87