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 = &currently_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;
  }
}