X-Git-Url: https://git.sommitrealweird.co.uk/twirssi-net-twitter-lite.git/blobdiff_plain/e3f196ec3b0278acf9601baeae997ab8218e7926..4bc15e5af014a4f1ad0b82cc59595ebbc7899d39:/twirssi.pl diff --git a/twirssi.pl b/twirssi.pl index a52823f..eb878bf 100644 --- a/twirssi.pl +++ b/twirssi.pl @@ -11,7 +11,7 @@ $Data::Dumper::Indent = 1; use vars qw($VERSION %IRSSI); -$VERSION = "2.2.5beta"; +$VERSION = "2.2.6beta"; my ($REV) = '$Rev: 687 $' =~ /(\d+)/; %IRSSI = ( authors => 'Dan Boger', @@ -38,6 +38,7 @@ my %tweet_cache; my %id_map; my $failwhale = 0; my $first_call = 1; +my $child_pid; my %irssi_to_mirc_colors = ( '%k' => '01', @@ -499,6 +500,17 @@ sub cmd_login { ssl => Irssi::settings_get_bool("twirssi_avoid_ssl") ? 0 : 1, ); + unless ($twit) { + ¬ice("Failed to create Net::$service object! Aborting."); + return; + } + + if ( my $timeout = Irssi::settings_get_int("twitter_timeout") + and $twit->can('ua') ) + { + $twit->ua->timeout($timeout); + } + unless ( $twit->verify_credentials() ) { ¬ice("Login as $user\@$service failed"); $twit = undef; @@ -765,13 +777,13 @@ sub get_updates { my ( $fh, $filename ) = File::Temp::tempfile(); binmode( $fh, ":utf8" ); - my $pid = fork(); + $child_pid = fork(); - if ($pid) { # parent + if ($child_pid) { # parent Irssi::timeout_add_once( 5000, 'monitor_child', [ "$filename.done", 0 ] ); - Irssi::pidwait_add($pid); - } elsif ( defined $pid ) { # child + Irssi::pidwait_add($child_pid); + } elsif ( defined $child_pid ) { # child close STDIN; close STDOUT; close STDERR; @@ -1211,6 +1223,9 @@ sub monitor_child { delete $tweet_cache{$_}; } $last_poll = $new_last_poll; + + # make sure the pid is removed from the waitpid list + Irssi::pidwait_remove($child_pid); # save id_map hash if ( keys %id_map @@ -1511,6 +1526,7 @@ Irssi::settings_add_str( "twirssi", "twirssi_replies_store", ".irssi/scripts/twirssi.json" ); Irssi::settings_add_int( "twirssi", "twitter_friends_poll", 600 ); +Irssi::settings_add_int( "twirssi", "twitter_timeout", 30 ); Irssi::settings_add_bool( "twirssi", "twirssi_upgrade_beta", 0 ); Irssi::settings_add_bool( "twirssi", "tweet_to_away", 0 ); @@ -1582,11 +1598,22 @@ if ($window) { Irssi::command_bind( "twirssi_version", sub { - ¬ice("Twirssi v$VERSION (r$REV); " - . "Net::Twitter v$Net::Twitter::VERSION. " + ¬ice( + "Twirssi v$VERSION (r$REV); " + . ( + $Net::Twitter::VERSION + ? "Net::Twitter v$Net::Twitter::VERSION. " + : "" + ) + . ( + $Net::Identica::VERSION + ? "Net::Identica v$Net::Identica::VERSION. " + : "" + ) . "JSON in use: " . JSON::Any::handler() - . ". See details at http://twirssi.com/" ); + . ". See details at http://twirssi.com/" + ); } ); Irssi::command_bind( @@ -1613,6 +1640,22 @@ if ($window) { sub { ¬ice("Device updated to $_[0]"); } ) ); + Irssi::command_bind( + "twitter_block", + &gen_cmd( + "/twitter_block ", + "create_block", + sub { ¬ice("Blocked $_[0]"); } + ) + ); + Irssi::command_bind( + "twitter_unblock", + &gen_cmd( + "/twitter_unblock ", + "destroy_block", + sub { ¬ice("Unblock $_[0]"); } + ) + ); Irssi::signal_add_last( 'complete word' => \&sig_complete ); ¬ice(" %Y<%C(%B^%C)%N TWIRSSI v%R$VERSION%N (r$REV)");