r673 - don't allow monitor_child to process partial files. This is how it should...
[twirssi-net-twitter-lite.git] / twirssi.pl
index 4ba6417450d25ba46f4de1ef035e09e0f9f4a093..daa01af72705b08ef33cbb0801158c176aa49000 100644 (file)
@@ -10,8 +10,8 @@ $Data::Dumper::Indent = 1;
 
 use vars qw($VERSION %IRSSI);
 
-$VERSION = "2.2.3beta";
-my ($REV) = '$Rev: 636 $' =~ /(\d+)/;
+$VERSION = "2.2.5beta";
+my ($REV) = '$Rev: 673 $' =~ /(\d+)/;
 %IRSSI = (
     authors     => 'Dan Boger',
     contact     => 'zigdon@gmail.com',
@@ -20,7 +20,7 @@ my ($REV) = '$Rev: 636 $' =~ /(\d+)/;
       . 'Can optionally set your bitlbee /away message to same',
     license => 'GNU GPL v2',
     url     => 'http://twirssi.com',
-    changed => '$Date: 2009-05-13 15:34:34 -0700 (Wed, 13 May 2009) $',
+    changed => '$Date: 2009-07-16 16:50:30 -0700 (Thu, 16 Jul 2009) $',
 );
 
 my $window;
@@ -183,7 +183,7 @@ sub cmd_retweet_as {
             $twits{$username}->update(
                 {
                     status                => $data,
-                    in_reply_to_status_id => $id_map{ lc $nick }[$id]
+                    in_reply_to_status_id => $id_map{ lc $nick }[$id]
                 }
             )
           )
@@ -527,7 +527,7 @@ sub cmd_login {
                 &notice("Welcome to twirssi!"
                       . "  Perhaps you should add \@twirssi to your friends list,"
                       . " so you can be notified when a new version is release?"
-                      . "  Just type /twitter_friend twirssi." );
+                      . "  Just type /twitter_follow twirssi." );
             }
         }
         %nicks = %friends;
@@ -758,7 +758,7 @@ sub get_updates {
     my $pid = fork();
 
     if ($pid) {    # parent
-        Irssi::timeout_add_once( 5000, 'monitor_child', [ $filename, 0 ] );
+        Irssi::timeout_add_once( 5000, 'monitor_child', [ "$filename.done", 0 ] );
         Irssi::pidwait_add($pid);
     } elsif ( defined $pid ) {    # child
         close STDIN;
@@ -800,6 +800,7 @@ sub get_updates {
             print $fh "-- $new_poll";
         }
         close $fh;
+        rename $filename, "$filename.done";
         exit;
     } else {
         &ccrap("Failed to fork for updating: $!");
@@ -852,7 +853,7 @@ sub do_updates {
 
     foreach my $t ( reverse @$tweets ) {
         my $text = decode_entities( $t->{text} );
-        $text = &hilight($text);
+        $text =~ s/[\n\r]/ /g;
         my $reply = "tweet";
         if (    Irssi::settings_get_bool("show_reply_context")
             and $t->{in_reply_to_screen_name} ne $username
@@ -872,13 +873,13 @@ sub do_updates {
 
             if ($context) {
                 my $ctext = decode_entities( $context->{text} );
-                $ctext = &hilight($ctext);
+                $ctext =~ s/[\n\r]/ /g;
                 if ( $context->{truncated} and ref($obj) ne 'Net::Identica' ) {
                     $ctext .=
                         " -- http://twitter.com/$context->{user}{screen_name}"
                       . "/status/$context->{id}";
                 }
-                printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
+                printf $fh "id:%u account:%s nick:%s type:tweet %s\n",
                   $context->{id}, $username,
                   $context->{user}{screen_name}, $ctext;
                 $reply = "reply";
@@ -891,11 +892,11 @@ sub do_updates {
             $text .= " -- http://twitter.com/$t->{user}{screen_name}"
               . "/status/$t->{id}";
         }
-        printf $fh "id:%d account:%s nick:%s type:%s %s\n",
+        printf $fh "id:%u account:%s nick:%s type:%s %s\n",
           $t->{id}, $username, $t->{user}{screen_name}, $reply, $text;
         $new_poll_id = $t->{id} if $new_poll_id < $t->{id};
     }
-    printf $fh "id:%d account:%s type:last_id timeline\n",
+    printf $fh "id:%u account:%s type:last_id timeline\n",
       $new_poll_id, $username;
 
     print scalar localtime, " - Polling for replies" if &debug;
@@ -921,16 +922,16 @@ sub do_updates {
           if exists $friends{ $t->{user}{screen_name} };
 
         my $text = decode_entities( $t->{text} );
-        $text = &hilight($text);
+        $text =~ s/[\n\r]/ /g;
         if ( $t->{truncated} ) {
             $text .= " -- http://twitter.com/$t->{user}{screen_name}"
               . "/status/$t->{id}";
         }
-        printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
+        printf $fh "id:%u account:%s nick:%s type:tweet %s\n",
           $t->{id}, $username, $t->{user}{screen_name}, $text;
         $new_poll_id = $t->{id} if $new_poll_id < $t->{id};
     }
-    printf $fh "id:%d account:%s type:last_id reply\n", $new_poll_id, $username;
+    printf $fh "id:%u account:%s type:last_id reply\n", $new_poll_id, $username;
 
     print scalar localtime, " - Polling for DMs" if &debug;
     $new_poll_id = 0;
@@ -952,12 +953,12 @@ sub do_updates {
 
     foreach my $t ( reverse @$tweets ) {
         my $text = decode_entities( $t->{text} );
-        $text = &hilight($text);
-        printf $fh "id:%d account:%s nick:%s type:dm %s\n",
+        $text =~ s/[\n\r]/ /g;
+        printf $fh "id:%u account:%s nick:%s type:dm %s\n",
           $t->{id}, $username, $t->{sender_screen_name}, $text;
         $new_poll_id = $t->{id} if $new_poll_id < $t->{id};
     }
-    printf $fh "id:%d account:%s type:last_id dm\n", $new_poll_id, $username;
+    printf $fh "id:%u account:%s type:last_id dm\n", $new_poll_id, $username;
 
     print scalar localtime, " - Polling for subscriptions" if &debug;
     if ( $obj->can('search') and $id_map{__searches}{$username} ) {
@@ -987,13 +988,13 @@ sub do_updates {
             }
 
             $id_map{__searches}{$username}{$topic} = $search->{max_id};
-            printf $fh "id:%d account:%s type:searchid topic:%s\n",
+            printf $fh "id:%u account:%s type:searchid topic:%s\n",
               $search->{max_id}, $username, $topic;
 
             foreach my $t ( reverse @{ $search->{results} } ) {
                 my $text = decode_entities( $t->{text} );
-                $text = &hilight($text);
-                printf $fh "id:%d account:%s nick:%s type:search topic:%s %s\n",
+                $text =~ s/[\n\r]/ /g;
+                printf $fh "id:%u account:%s nick:%s type:search topic:%s %s\n",
                   $t->{id}, $username, $t->{from_user}, $topic, $text;
                 $new_poll_id = $t->{id}
                   if not $new_poll_id
@@ -1167,7 +1168,8 @@ sub monitor_child {
                     $window->printformat(
                         $line->[0],
                         "twirssi_" . $line->[1],
-                        @$line[ 2 .. $#$line ]
+                        @$line[ 2 .. $#$line-1 ],
+                        &hilight($line->[-1])
                     );
                 }
             }
@@ -1241,7 +1243,10 @@ sub monitor_child {
             }
             $failwhale = 1;
         }
-        &ccrap("Haven't been able to get updated tweets since $since");
+
+        if ( time - $last_poll < 600 ) {
+            &ccrap("Haven't been able to get updated tweets since $since");
+        }
     }
 }
 
@@ -1379,7 +1384,7 @@ sub hilight {
     if ( Irssi::settings_get_str("twirssi_topic_color") ) {
         my $c = Irssi::settings_get_str("twirssi_topic_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$3\cO/g if $c;
     }
     $text =~ s/[\n\r]/ /g;
 
@@ -1529,6 +1534,7 @@ if ($window) {
     Irssi::command_bind( "twitter_list_subscriptions", "cmd_list_search" );
     Irssi::command_bind( "twirssi_upgrade",            "cmd_upgrade" );
     Irssi::command_bind( "twitter_updates",            "get_updates" );
+    Irssi::command_bind( "bitlbee_away",               "update_away" );
     if ( Irssi::settings_get_bool("twirssi_use_reply_aliases") ) {
         Irssi::command_bind( "reply",    "cmd_reply" );
         Irssi::command_bind( "reply_as", "cmd_reply_as" );
@@ -1561,15 +1567,15 @@ if ($window) {
         }
     );
     Irssi::command_bind(
-        "twitter_friend",
+        "twitter_follow",
         &gen_cmd(
-            "/twitter_friend <username>",
+            "/twitter_follow <username>",
             "create_friend",
             sub { &notice("Following $_[0]"); $nicks{ $_[0] } = time; }
         )
     );
     Irssi::command_bind(
-        "twitter_unfriend",
+        "twitter_unfollow",
         &gen_cmd(
             "/twitter_unfriend <username>",
             "destroy_friend",