X-Git-Url: https://git.sommitrealweird.co.uk/twirssi-net-twitter-lite.git/blobdiff_plain/6788ac4739865440cf868a4640460e64bfb00dd3..a11bce7573871ae3c11f08bd5d77567b3bfa7267:/twirssi.pl diff --git a/twirssi.pl b/twirssi.pl index 7147981..2a1965e 100644 --- a/twirssi.pl +++ b/twirssi.pl @@ -13,7 +13,7 @@ $Data::Dumper::Indent = 1; use vars qw($VERSION %IRSSI); -$VERSION = "2.4.1beta"; +$VERSION = "2.4.2beta"; %IRSSI = ( authors => 'Dan Boger', contact => 'zigdon@gmail.com', @@ -131,11 +131,6 @@ sub cmd_retweet { sub cmd_retweet_as { my ( $data, $server, $win ) = @_; - unless ( Irssi::settings_get_bool("twirssi_track_replies") ) { - ¬ice("twirssi_track_replies is required in order to reteet."); - return; - } - return unless &logged_in($twit); $data =~ s/^\s+|\s+$//; @@ -296,13 +291,6 @@ sub cmd_reply { sub cmd_reply_as { my ( $data, $server, $win ) = @_; - unless ( Irssi::settings_get_bool("twirssi_track_replies") ) { - ¬ice("twirssi_track_replies is required in order to reply to " - . "specific tweets. Either enable it, or just use /tweet " - . "\@username ." ); - return; - } - return unless &logged_in($twit); $data =~ s/^\s+|\s+$//; @@ -991,7 +979,7 @@ sub get_updates { return unless &logged_in($twit); my ( $fh, $filename ) = File::Temp::tempfile(); - binmode( $fh, ":utf8" ); + binmode( $fh, ":" . &get_charset ); $child_pid = fork(); if ($child_pid) { # parent @@ -1228,6 +1216,7 @@ sub do_updates { } $id_map{__searches}{$username}{$topic} = $search->{max_id}; + $topic =~ s/ /\\ /g; printf $fh "id:%s account:%s type:searchid topic:%s\n", $search->{max_id}, $username, $topic; @@ -1330,7 +1319,7 @@ sub monitor_child { # pretend if ( open FILE, $filename ) { - binmode FILE, ":utf8"; + binmode FILE, ":" . &get_charset; my @lines; my %new_cache; while () { @@ -1344,8 +1333,9 @@ sub monitor_child { my %meta; foreach my $key (qw/id account nick type topic/) { - if (s/^$key:(\S+)\s*//) { + if (s/^$key:((?:\S|\\ )+)\s*//) { $meta{$key} = $1; + $meta{$key} =~ s/\\ / /g; } } @@ -1383,10 +1373,7 @@ sub monitor_child { } my $marker = ""; - if ( $meta{type} ne 'dm' - and Irssi::settings_get_bool("twirssi_track_replies") - and $meta{nick} - and $meta{id} ) + if ($meta{type} ne 'dm' and $meta{nick} and $meta{id} ) { $marker = ( $id_map{__indexes}{ $meta{nick} } + 1 ) % 100; $id_map{ lc $meta{nick} }[$marker] = $meta{id}; @@ -1524,7 +1511,7 @@ sub monitor_child { Irssi::pidwait_remove($child_pid); # and that we don't leave any zombies behind, somehow - wait(); + waitpid( -1, WNOHANG ); # save id_map hash if ( keys %id_map @@ -1552,7 +1539,7 @@ sub monitor_child { } else { print "Giving up on polling $filename" if &debug; Irssi::pidwait_remove($child_pid); - wait(); + waitpid( -1, WNOHANG ); unlink $filename unless &debug; return unless Irssi::settings_get_bool("twirssi_notify_timeouts"); @@ -1714,6 +1701,12 @@ sub get_poll_time { return 60; } +sub get_charset { + my $charset = Irssi::settings_get_str("twirssi_charset"); + return "utf8" if $charset =~ /^\s*$/; + return $charset; +} + sub hilight { my $text = shift; @@ -1754,7 +1747,7 @@ sub shorten { "Set short_url_args to username,API_key or change your", "short_url_provider." ); - return decode "utf8", $data; + return decode &get_charset, $data; } } @@ -1771,7 +1764,7 @@ sub shorten { } } - return decode "utf8", $data; + return decode &get_charset, $data; } sub normalize_username { @@ -1832,6 +1825,7 @@ Irssi::theme_register( ); Irssi::settings_add_int( "twirssi", "twitter_poll_interval", 300 ); +Irssi::settings_add_str( "twirssi", "twirssi_charset", "utf8" ); Irssi::settings_add_str( "twirssi", "twitter_window", "twitter" ); Irssi::settings_add_str( "twirssi", "bitlbee_server", "bitlbee" ); Irssi::settings_add_str( "twirssi", "short_url_provider", "TinyURL" ); @@ -1859,7 +1853,6 @@ Irssi::settings_add_bool( "twirssi", "show_reply_context", 0 ); Irssi::settings_add_bool( "twirssi", "show_own_tweets", 1 ); Irssi::settings_add_bool( "twirssi", "twirssi_debug", 0 ); Irssi::settings_add_bool( "twirssi", "twirssi_first_run", 1 ); -Irssi::settings_add_bool( "twirssi", "twirssi_track_replies", 1 ); Irssi::settings_add_bool( "twirssi", "twirssi_replies_autonick", 1 ); Irssi::settings_add_bool( "twirssi", "twirssi_use_reply_aliases", 0 ); Irssi::settings_add_bool( "twirssi", "twirssi_notify_timeouts", 1 );