use Gaim;
%PLUGIN_INFO = (
perl_api_version => 2,
name => "Rhythmbox Information",
version => "0.1",
summary => "Displays current information from Rhythmbox.",
description => "N/A",
author => "Emil Erlandsson <emil\@buglix.org",
url => "http://buglix.org/",
load => "plugin_load",
unload => "plugin_unload"
);
sub plugin_load {
my $plugin = shift;
Gaim::debug_info("plugin_load()", "Connecting signals for reciving send message events\n");
Gaim::signal_connect(Gaim::Conversations::handle, "sending-im-msg", $plugin, \&signal_sending_im_cb, \%data);
#Gaim::signal_connect(Gaim::Conversations::handle, "sending_chat_msg_cb", $plugin, \&signal_sending_chat_cb. \%data);
}
sub plugin_unload {
Gaim::debug_info("plugin_unload()", "Unloading plugin");
my $plugin = shift;
}
sub plugin_init {
Gaim::debug_info("plugin_init()", "Initializing plugin");
return %PLUGIN_INFO;
}
# Rhythmbox command
my $RB_CMD = "rhythmbox";
# Command definitions
my $SONG_CMD = "$RB_CMD --print-playing";
my $ARTIST_CMD = "$RB_CMD --print-playing-artist";
my $ALBUM_CMD = "$RB_CMD --print-playing-album";
my $TRACK_CMD = "$RB_CMD --print-playing-track";
my $SONG_TIME_CMD = "$RB_CMD --print-song-length";
my $PLAY_TIME_CMD = "$RB_CMD --print-play-time";
sub rtrim($) {
my $string = shift;
$string =~ s/\s+$//;
return $string;
}
sub rb_currently_playing() {
my %songinfo = (
song => rtrim(`$SONG_CMD`),
artist => rtrim(`$ARTIST_CMD`),
album => rtrim(`$ALBUM_CMD`),
track => rtrim(`$TRACK_CMD`),
song_time => rtrim(`$SONG_TIME_CMD`),
play_time => rtrim(`$PLAY_TIME_CMD`),
);
return %songinfo;
}
sub currently_playing() {
my %rb_data = rb_currently_playing();
my $ret_str = "";
if ( !($rb_data{"track"} eq -1) ) {
my $stime = sprintf("%.2f", $rb_data{"song_time"} / 60);
my $ptime = sprintf("%.2f", $rb_data{"play_time"} / 60);
$stime =~ s/\./:/g;
$ptime =~ s/\./:/g;
$ret_str = "\"" . $rb_data{"song"} . "\" by " .
$rb_data{"artist"} . " from " . $rb_data{"album"} . " at " .
$ptime . " (" . $stime . ").\n";
}
return $ret_str;
}
#(GaimAccount *account, char *recipient, char **buffer, void *data)
sub signal_sending_im_cb {
my ($account, $recipient, $buffer, $data) = @_;
if($buffer =~ m/\%rb/g) {
my $name = Gaim::Account::get_alias($account);
my $songinfo = ¤tly_playing();
if ($songinfo eq "") {
$songinfo = "$name is not playing anything in Rhythmbox at the moment.";
}
else {
$songinfo = "$name is playing " . $songinfo;
}
my $buff = $buffer;
$buff =~ s/\%rb/$songinfo/g;
$_[2] = $buff;
}
}