use vars qw($VERSION %IRSSI);
-$VERSION = "2.2.1beta";
-my ($REV) = '$Rev: 607 $' =~ /(\d+)/;
+$VERSION = "2.2.4beta";
+my ($REV) = '$Rev: 647 $' =~ /(\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-09 21:22:55 -0700 (Thu, 09 Apr 2009) $',
+ changed => '$Date: 2009-06-04 16:02:51 -0700 (Thu, 04 Jun 2009) $',
);
my $window;
my $defservice;
my $poll;
my $last_poll;
+my $last_friends_poll = 0;
my %nicks;
my %friends;
my %tweet_cache;
my %id_map;
-my $failwhale = 0;
+my $failwhale = 0;
+my $first_call = 1;
+
my %irssi_to_mirc_colors = (
'%k' => '01',
'%r' => '05',
$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]
}
)
)
return;
}
- if ( exists $id_map{__searches}{$user}{$data} ) {
+ if ( exists $id_map{__searches}{"$user\@$defservice"}{$data} ) {
¬ice("Already had a subscription for '$data'");
return;
}
- $id_map{__searches}{$user}{$data} = 1;
+ $id_map{__searches}{"$user\@$defservice"}{$data} = 1;
¬ice("Added subscription for '$data'");
}
return;
}
- unless ( exists $id_map{__searches}{$user}{$data} ) {
+ unless ( exists $id_map{__searches}{"$user\@$defservice"}{$data} ) {
¬ice("No subscription found for '$data'");
return;
}
- delete $id_map{__searches}{$user}{$data};
+ delete $id_map{__searches}{"$user\@$defservice"}{$data};
¬ice("Removed subscription for '$data'");
}
$error++ unless &do_updates( $fh, $_, $twits{$_}, \%context_cache );
}
- my ( $added, $removed ) = &load_friends($fh);
- if ( $added + $removed ) {
- print $fh "type:debug %R***%n Friends list updated: ",
- join( ", ",
- sprintf( "%d added", $added ),
- sprintf( "%d removed", $removed ) ),
- "\n";
- }
print $fh "__friends__\n";
+ if (
+ time - $last_friends_poll >
+ Irssi::settings_get_int('twitter_friends_poll') )
+ {
+ print $fh "__updated ", time, "\n";
+ my ( $added, $removed ) = &load_friends($fh);
+ if ( $added + $removed ) {
+ print $fh "type:debug %R***%n Friends list updated: ",
+ join( ", ",
+ sprintf( "%d added", $added ),
+ sprintf( "%d removed", $removed ) ),
+ "\n";
+ }
+ }
+
foreach ( sort keys %friends ) {
print $fh "$_ $friends{$_}\n";
}
}
close $fh;
exit;
+ } else {
+ &ccrap("Failed to fork for updating: $!");
}
print scalar localtime, " - get_updates ends" if &debug;
}
eval {
if ( $id_map{__last_id}{$username}{timeline} )
{
- $tweets = $obj->friends_timeline(
- { since_id => $id_map{__last_id}{$username}{timeline} } );
+ $tweets = $obj->friends_timeline( { count => 100 } );
} else {
$tweets = $obj->friends_timeline();
}
# first time we run we don't want to print out *everything*, so we just
# pretend
- my $suppress = 0;
- $suppress = 1 unless keys %tweet_cache;
if ( open FILE, $filename ) {
my @lines;
my %new_cache;
while (<FILE>) {
- chomp;
last if /^__friends__/;
+ unless (/\n$/) { # skip partial lines
+ # print "Skipping partial line: $_" if &debug;
+ next;
+ }
+ chomp;
my $hilight = 0;
my %meta;
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") )
{
} elsif ( $meta{type} eq 'searchid' ) {
print "Search '$meta{topic}' returned id $meta{id}" if &debug;
if (
+ not
exists $id_map{__searches}{ $meta{account} }{ $meta{topic} }
- and $meta{id} >=
+ or $meta{id} >=
$id_map{__searches}{ $meta{account} }{ $meta{topic} } )
{
$id_map{__searches}{ $meta{account} }{ $meta{topic} } =
%friends = ();
while (<FILE>) {
+ if (/^__updated (\d+)$/) {
+ $last_friends_poll = $1;
+ print "Friend list updated" if &debug;
+ next;
+ }
+
if (/^-- (\d+)$/) {
($new_last_poll) = ($1);
last;
if ($new_last_poll) {
print "new last_poll = $new_last_poll" if &debug;
print "new last_poll_id = ", Dumper( $id_map{__last_id} ) if &debug;
- if ($suppress) {
+ if ($first_call) {
print "First call, not printing updates" if &debug;
} else {
foreach my $line (@lines) {
&ccrap("Failed to write replies to $file: $!");
}
}
- $failwhale = 0;
+ $failwhale = 0;
+ $first_call = 0;
return;
}
}
}
$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");
+ }
}
}
keys %{ $id_map{__indexes} };
}
+ if ( $linestart =~ /^\/twitter_unfriend\s*$/ )
+ { # /twitter_unfriend gets a nick
+ $word =~ s/^@//;
+ push @$complist, grep /^\Q$word/i,
+ sort { $nicks{$b} <=> $nicks{$a} } keys %nicks;
+ }
+
# /tweet, /tweet_as, /dm, /dm_as - complete @nicks (and nicks as the first
# arg to dm)
if ( $linestart =~ /^\/(?:tweet|dm)/ ) {
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;
".irssi/scripts/twirssi.pl" );
Irssi::settings_add_str( "twirssi", "twirssi_replies_store",
".irssi/scripts/twirssi.json" );
+
+Irssi::settings_add_int( "twirssi", "twitter_friends_poll", 600 );
+
Irssi::settings_add_bool( "twirssi", "twirssi_upgrade_beta", 0 );
Irssi::settings_add_bool( "twirssi", "tweet_to_away", 0 );
Irssi::settings_add_bool( "twirssi", "show_reply_context", 0 );
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" );