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 "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; } }