use File::Temp;
use LWP::Simple;
use Data::Dumper;
+use Encode;
$Data::Dumper::Indent = 1;
use vars qw($VERSION %IRSSI);
-$VERSION = "2.2.3beta";
-my ($REV) = '$Rev: 618 $' =~ /(\d+)/;
+$VERSION = "2.2.5beta";
+my ($REV) = '$Rev: 676 $' =~ /(\d+)/;
%IRSSI = (
authors => 'Dan Boger',
contact => 'zigdon@gmail.com',
. 'Can optionally set your bitlbee /away message to same',
license => 'GNU GPL v2',
url => 'http://twirssi.com',
- changed => '$Date: 2009-04-22 16:03:14 -0700 (Wed, 22 Apr 2009) $',
+ changed => '$Date: 2009-07-22 11:05:52 -0700 (Wed, 22 Jul 2009) $',
);
my $window;
unless (
$twits{$username}->update(
{
- status => $data,
- in_reply_to_status_id => $id_map{ lc $nick }[$id]
+ status => $data,
+
+ # in_reply_to_status_id => $id_map{ lc $nick }[$id]
}
)
)
¬ice("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;
¬ice("Downloading twirssi from $URL");
LWP::Simple::getstore( $URL, "$loc.upgrade" );
+ unless ( -s "$loc.upgrade" ) {
+ ¬ice("Failed to save $loc.upgrade."
+ . " Check that /set twirssi_location is set to the correct location."
+ );
+ return;
+ }
+
unless ( $data or Irssi::settings_get_bool("twirssi_upgrade_beta") ) {
unless ( open( NEW, "$loc.upgrade" ) ) {
- ¬ice(
-"Failed to read $loc.upgrade. Check that /set twirssi_location is set to the correct location."
+ ¬ice("Failed to read $loc.upgrade."
+ . " Check that /set twirssi_location is set to the correct location."
);
return;
}
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;
print $fh "-- $new_poll";
}
close $fh;
+ rename $filename, "$filename.done";
exit;
+ } else {
+ &ccrap("Failed to fork for updating: $!");
}
print scalar localtime, " - get_updates ends" if &debug;
}
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
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";
$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;
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;
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} ) {
}
$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
my $hilight_color =
$irssi_to_mirc_colors{ Irssi::settings_get_str("hilight_color") };
- my $nick =
- '@' . substr( $meta{account}, 0, index( $meta{account}, "@" ) );
+ my $nick = "\@$meta{account}";
if ( $_ =~ /\Q$nick\E(?:\W|$)/i
and Irssi::settings_get_bool("twirssi_hilights") )
{
$window->printformat(
$line->[0],
"twirssi_" . $line->[1],
- @$line[ 2 .. $#$line ]
+ @$line[ 2 .. $#$line - 1 ],
+ &hilight( $line->[-1] )
);
}
}
}
$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");
+ }
}
}
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;
}
}
- return $data;
+ return decode "utf8", $data;
}
sub normalize_username {
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" );
}
);
Irssi::command_bind(
- "twitter_friend",
+ "twitter_follow",
&gen_cmd(
- "/twitter_friend <username>",
+ "/twitter_follow <username>",
"create_friend",
sub { ¬ice("Following $_[0]"); $nicks{ $_[0] } = time; }
)
);
Irssi::command_bind(
- "twitter_unfriend",
+ "twitter_unfollow",
&gen_cmd(
"/twitter_unfriend <username>",
"destroy_friend",