Notice when a retweet command failed. Hack around longer retweets.
[twirssi-net-twitter-lite.git] / twirssi.pl
index 5ab53c1bc2f5ba2681dd5ef517c2f4adf4fcc72e..ee06ff6d7fe2c5f57a610b4d9d103323a42d7e12 100644 (file)
@@ -11,7 +11,7 @@ $Data::Dumper::Indent = 1;
 
 use vars qw($VERSION %IRSSI);
 
-$VERSION = "2.3.1beta";
+$VERSION = "2.3.4beta";
 %IRSSI   = (
     authors     => 'Dan Boger',
     contact     => 'zigdon@gmail.com',
@@ -175,25 +175,28 @@ sub cmd_retweet_as {
     }
     $text =~ s/\$t/$id_map{__tweets}{ lc $nick }[$id]/;
 
+    my $modified = $data;
     $data = &shorten($text);
 
-    return if &too_long($data);
+    return if $modified and &too_long($data);
 
     my $success = 1;
     eval {
-        unless (
-            $twits{$username}->update(
+        if ($modified)
+        {
+            $success = $twits{$username}->update(
                 {
                     status => $data,
 
                     # in_reply_to_status_id => $id_map{ lc $nick }[$id]
                 }
-            )
-          )
-        {
-            &notice("Update failed");
-            $success = 0;
+            );
+        } else {
+            $success =
+              $twits{$username}->retweet( { id => $id_map{ lc $nick }[$id] } );
+            $success = $success->{id} if ref $success;
         }
+        &notice("Update failed") unless $success;
     };
     return unless $success;
 
@@ -490,7 +493,7 @@ sub cmd_login {
     }
     $defservice = $service = ucfirst lc $service;
 
-    eval "use Net::$service 3.0";
+    eval "use Net::$service 3.05";
     if ($@) {
         &notice(
             "Failed to load Net::$service when trying to log in as $user: $@");
@@ -513,6 +516,7 @@ sub cmd_login {
         and $twit->can('ua') )
     {
         $twit->ua->timeout($timeout);
+        &notice("Twitter timeout set to $timeout");
     }
 
     unless ( $twit->verify_credentials() ) {
@@ -935,14 +939,14 @@ sub do_updates {
     eval {
         if ( $id_map{__last_id}{$username}{timeline} )
         {
-            $tweets = $obj->friends_timeline( { count => 100 } );
+            $tweets = $obj->home_timeline( { count => 100 } );
         } else {
-            $tweets = $obj->friends_timeline();
+            $tweets = $obj->home_timeline();
         }
     };
 
     if ($@) {
-        print $fh "type:debug Error during friends_timeline call: Aborted.\n";
+        print $fh "type:debug Error during home_timeline call: Aborted.\n";
         print $fh "type:debug : $_\n" foreach split /\n/, Dumper($@);
         return undef;
     }
@@ -953,18 +957,19 @@ sub do_updates {
             eval { $error = JSON::Any->jsonToObj( $obj->get_error() ) };
             unless ($@) { $error = $obj->get_error() }
             print $fh
-              "type:debug API Error during friends_timeline call: Aborted\n";
+              "type:debug API Error during home_timeline call: Aborted\n";
             print $fh "type:debug : $_\n" foreach split /\n/, Dumper($error);
 
         } else {
             print $fh
-              "type:debug API Error during friends_timeline call. Aborted.\n";
+              "type:debug API Error during home_timeline call. Aborted.\n";
         }
         return undef;
     }
 
     foreach my $t ( reverse @$tweets ) {
-        my $text = decode_entities( $t->{text} );
+        my $text =
+          decode_entities( $t->{retweeted_status}{text} || $t->{text} );
         $text =~ s/[\n\r]/ /g;
         my $reply = "tweet";
         if (    Irssi::settings_get_bool("show_reply_context")
@@ -984,7 +989,9 @@ sub do_updates {
             $context = $cache->{ $t->{in_reply_to_status_id} };
 
             if ($context) {
-                my $ctext = decode_entities( $context->{text} );
+                my $ctext =
+                  decode_entities( $context->{retweeted_status}{text}
+                      || $context->{text} );
                 $ctext =~ s/[\n\r]/ /g;
                 if ( $context->{truncated} and ref($obj) ne 'Net::Identica' ) {
                     $ctext .=
@@ -1035,7 +1042,8 @@ sub do_updates {
         next
           if exists $friends{ $t->{user}{screen_name} };
 
-        my $text = decode_entities( $t->{text} );
+        my $text =
+          decode_entities( $t->{retweeted_status}{text} || $t->{text} );
         $text =~ s/[\n\r]/ /g;
         if ( $t->{truncated} ) {
             $text .= " -- http://twitter.com/$t->{user}{screen_name}"
@@ -1106,7 +1114,8 @@ sub do_updates {
               $search->{max_id}, $username, $topic;
 
             foreach my $t ( reverse @{ $search->{results} } ) {
-                my $text = decode_entities( $t->{text} );
+                my $text =
+                  decode_entities( $t->{retweeted_status}{text} || $t->{text} );
                 $text =~ s/[\n\r]/ /g;
                 printf $fh "id:%s account:%s nick:%s type:search topic:%s %s\n",
                   $t->{id}, $username, $t->{from_user}, $topic, $text;
@@ -1153,7 +1162,8 @@ sub get_timeline {
     }
 
     foreach my $t ( reverse @$tweets ) {
-        my $text = decode_entities( $t->{text} );
+        my $text =
+          decode_entities( $t->{retweeted_status}{text} || $t->{text} );
         $text =~ s/[\n\r]/ /g;
         my $reply = "tweet";
         if (    Irssi::settings_get_bool("show_reply_context")
@@ -1173,7 +1183,9 @@ sub get_timeline {
             $context = $cache->{ $t->{in_reply_to_status_id} };
 
             if ($context) {
-                my $ctext = decode_entities( $context->{text} );
+                my $ctext =
+                  decode_entities( $context->{retweeted_status}{text}
+                      || $context->{text} );
                 $ctext =~ s/[\n\r]/ /g;
                 if ( $context->{truncated} and ref($obj) ne 'Net::Identica' ) {
                     $ctext .=
@@ -1602,7 +1614,7 @@ sub hilight {
     if ( Irssi::settings_get_str("twirssi_nick_color") ) {
         my $c = Irssi::settings_get_str("twirssi_nick_color");
         $c = $irssi_to_mirc_colors{$c};
-        $text =~ s/(^|\W)\@([-\w]+)/$1\cC$c\@$2\cO/g if $c;
+        $text =~ s/(^|\W)\@(\w+)/$1\cC$c\@$2\cO/g if $c;
     }
     if ( Irssi::settings_get_str("twirssi_topic_color") ) {
         my $c = Irssi::settings_get_str("twirssi_topic_color");