#!/usr/bin/perl -w
use strict;
use Win32::OLE;
my $version = "0.1.1";
my $info_string = "init";
chdir("$ENV{'APPDATA'}\\X-Chat 2\\");
sub main() {
open(my $fh, "./i2x.conf") or Xchat::print "Couldn't find i2x.conf in your "
. "X-Chat 2 folder: $ENV{'APPDATA'}\\X-Chat 2\\ "
. "so I'll fall back on a default info_string.";
my @lines = <$fh>;
close($fh);
foreach(@lines) {
if($_ =~ m/^info_string (.+)$/) {
$info_string = $1;
}
}
if($info_string eq "init") {
$info_string = "I'm listening to \"%b\" by %a";
}
}
sub xcnowplaying {
my $iTunes = Win32::OLE->new("iTunes.Application")
or die "Failed to connect to iTunes\n";
my $track = $iTunes->CurrentTrack;
my $channel = Xchat::get_info("channel");
my $server = Xchat::get_info("server");
# Set each variable that will replace a % value below.
my $a = $track->{'Artist'};
my $b = $track->{'Name'};
my $c = $track->{'TrackNumber'};
my $d = $track->{'Album'};
my $e = $iTunes->{'PlayerPosition'};
my $f = $track->{'Time'};
my $g = $track->{'Genre'};
my $h = $track->{'Bitrate'};
my $i = $track->{'PlayedCount'};
my $j = $track->{'BPM'};
my $k = $track->{'Comments'};
my $l = $track->{'Composer'};
my $m = $track->{'Duration'}; # This is only a temp value.
my $n = $track->{'KindAsString'};
my $o = $track->{'Rating'};
my $p = $track->{'Size'};
# Fix the values that need sorting.
my $percent = 100/$m*$e;
$m = "["; # Open the progress bar.
while($percent > 9) { # Start the progress bar with played #.
$m .= "#";
$percent = $percent - 10;
}
while(length($m) != 11) { # Finish up the progress bar with unplayed -.
$m .= "-";
}
$m .= "]"; # Don't forget to close the progress bar.
my $minutes = 0;
while($e > 59) {
$minutes++;
$e = $e-60;
if(length($e) == 1) {
$e = "0" . $e;
} elsif (length($e) == 0) {
$e = "00";
}
}
$e = $minutes . ":" . $e;
$p = $p/1024/1024;
$p =~ s/^([\d]{1,2}.[\d]{2})\d*$/$1/; # Make the size a 2dp value.
# Sort out the message replacing all the % values.
my $msg = $info_string;
$msg =~ s/%a/$a/;
$msg =~ s/%b/$b/;
$msg =~ s/%c/$c/;
$msg =~ s/%d/$d/;
$msg =~ s/%e/$e/;
$msg =~ s/%f/$f/;
$msg =~ s/%g/$g/;
$msg =~ s/%h/$h/;
$msg =~ s/%i/$i/;
$msg =~ s/%j/$j/;
$msg =~ s/%k/$k/;
$msg =~ s/%l/$l/;
$msg =~ s/%m/$m/;
$msg =~ s/%n/$n/;
$msg =~ s/%o/$o/;
$msg =~ s/%p/$p/;
if($msg =~ s/^\/me //i) {
Xchat::command("ME $msg", $channel, $server);
} else {
Xchat::command("MSG $channel $msg", $channel, $server);
}
return Xchat::EAT_ALL;
}
sub xcplay {
my $iTunes = Win32::OLE->new("iTunes.Application")
or die "Failed to connect to iTunes\n";
$iTunes->Play();
return Xchat::EAT_ALL;
}
sub xcpause {
my $iTunes = Win32::OLE->new("iTunes.Application")
or die "Failed to connect to iTunes\n";
$iTunes->Pause();
return Xchat::EAT_ALL;
}
sub xcnext {
my $iTunes = Win32::OLE->new("iTunes.Application")
or die "Failed to connect to iTunes\n";
$iTunes->NextTrack();
return Xchat::EAT_ALL;
}
sub xcprev {
my $iTunes = Win32::OLE->new("iTunes.Application")
or die "Failed to connect to iTunes\n";
$iTunes->PreviousTrack();
return Xchat::EAT_ALL;
}
Xchat::register("i2x", "$version",
"An XChat interface for iTunes.");
Xchat::print("Plugin i2x-$version loaded.");
Xchat::hook_command("np", "xcnowplaying");
Xchat::hook_command("itunes", "xcnowplaying");
Xchat::hook_command("song", "xcnowplaying");
Xchat::hook_command("play", "xcplay");
Xchat::hook_command("pause", "xcpause");
Xchat::hook_command("next", "xcnext");
Xchat::hook_command("prev", "xcprev");
&main;