html/xmmsinfo.pl
1 #!/usr/bin/perl
2
3 # $Id: xmmsinfo.pl,v 1.1.1.1 2002/03/24 21:00:55 tj Exp $
4 #
5 # Copyright (0) 2002 Tuomas Jormola <tjormola@cc.hut.fi
6 #
7 # This program is free software; you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 2 of the License, or
10 # (at your option) any later version.
11 #
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # The complete text of the GNU General Public License can be found
18 # on the World Wide Web: <URL:http://www.gnu.org/licenses/gpl.html>
19 #
20 # $Log: xmmsinfo.pl,v $
21 # Revision 1.1.1.1 2002/03/24 21:00:55 tj
22 # Initial import.
23 #
24 #
25 # TODO:
26 # * Configurable string to print (%t = title, %a = artist ...)
27
28 use strict;
29 use Irssi;
30 use Irssi::XMMSInfo;
31 use vars qw($VERSION %IRSSI);
32
33 # global variables
34 $VERSION = sprintf("%d.%02d", q$Revision: 1.1.1.2 $ =~ /^.+?(\d+)\.(\d+)/);
35 %IRSSI = (
36 authors => 'Tuomas Jormola',
37 contact => 'tjormola@cc.hut.fi',
38 name => 'XMMSInfo',
39 description => '/xmmsinfo to tell what you\'re currently playing',
40 license => 'GPLv2',
41 url => 'http://shakti.tky.hut.fi/stuff.xml#irssi',
42 changed => '2006-1027T18:00+0300',
43 );
44
45 if(runningUnderIrssi()) {
46 Irssi::settings_add_str('misc', 'xmms_info_pipe', '/tmp/xmms-info');
47 Irssi::command_bind('xmmsinfo', 'commandXmmsInfo');
48 Irssi::print("$IRSSI{name} $VERSION loaded, /xmmsinfo -help");
49 } else {
50 (my $s = $0) =~ s/.*\///;
51 $ARGV[0] || die("Usage: $s <file>\n");
52 commandXmmsInfo();
53 }
54
55 # command handler
56 sub commandXmmsInfo {
57 my($args, $server, $target) = @_;
58
59 if(lc($args) eq "-help") {
60 Irssi::print("XMMSInfo $VERSION by $IRSSI{authors} <$IRSSI{contact}>");
61 Irssi::print("");
62 Irssi::print("Displays what your XMMS is playing using information");
63 Irssi::print("provided by the XMMS InfoPipe plugin");
64 Irssi::print("<URL:www.iki.fi/wwwwolf/code/xmms/infopipe.html");
65 Irssi::print("");
66 Irssi::print("Usage: /xmmsinfo [TARGET]");
67 Irssi::print("If TARGET is given, the info is sent there, othwerwise to");
68 Irssi::print("the current active channel/query or Irssi status window");
69 Irssi::print("if you have no channel/query window active.");
70 Irssi::print("Target can be nick name or channel name");
71 Irssi::print("");
72 Irssi::print("Configuration: /set xmms_info_pipe <file>");
73 Irssi::print("Define filename of the pipe where from the InfoPipe output is read");
74 Irssi::print("Default is /tmp/xmms-info");
75 return;
76 }
77
78 my($p) = runningUnderIrssi() ? Irssi::settings_get_str('xmms_info_pipe') : $ARGV[0];
79 my($i) = XMMSInfo->new;
80 $i->getInfo(pipe => $p);
81
82 my($o) = "XMMS: " . $i->getStatusString;
83
84 if($i->isFatalError) {
85 $o .= ": " . $i->getError;
86 } elsif($i->isXmmsRunning) {
87 my($t) = $i->infoTitle || "(unknown song)";
88 my($a) = $i->infoArtist || "(unknown artist)";
89 my($g) = lc($i->infoGenre) || "(unknown genre)";
90 my($pos) = $i->infoMinutesNow . "m" . $i->infoSecondsNowLeftover."s";
91 my($tot) = $i->infoMinutesTotal . "m" . $i->infoSecondsTotalLeftover."s";
92 my($per) = $i->infoPercentage;
93 my($b) = $i->infoBitrate . "kbps";
94 my($f) = $i->infoFrequency . "kHz";
95 $o .= " $g tune $t by $a." if ($i->isPlaying || $i->isPaused);
96 $o .= " Played $pos of total $tot ($per%)." if $i->isPlaying;
97 $o .= " [$b/$f]" if ($i->isPlaying || $i->isPaused);
98 }
99
100 if(!runningUnderIrssi()) {
101 print "$o\n";
102 } elsif($i->isFatalError || !$server || !$server->{connected} || (!$args && !$target)) {
103 Irssi::print($o);
104 } else {
105 $o =~ s/[\r\n]/ /g; # remove newline characters
106 my($t) = $args || $target->{name};
107 $server->command("msg $t $o");
108 }
109
110 }
111
112 sub runningUnderIrssi {
113 $0 eq '-e';
114 }
115
116 # END OF SCRIPT