projects
/
twirssi-net-twitter-lite.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
r519 - Add a first shot at supporting truncated statuses -> urls
[twirssi-net-twitter-lite.git]
/
twirssi.pl
diff --git
a/twirssi.pl
b/twirssi.pl
index bd11993e3368798f470168d68fbf55dab3b026fa..8d5b813bd2a1689a44d7610ea4c103c679cb0d0a 100644
(file)
--- a/
twirssi.pl
+++ b/
twirssi.pl
@@
-11,8
+11,8
@@
$Data::Dumper::Indent = 1;
use vars qw($VERSION %IRSSI);
use vars qw($VERSION %IRSSI);
-$VERSION = "2.
0.6
";
-my ($REV) = '$Rev:
485
$' =~ /(\d+)/;
+$VERSION = "2.
1.2beta
";
+my ($REV) = '$Rev:
519
$' =~ /(\d+)/;
%IRSSI = (
authors => 'Dan Boger',
contact => 'zigdon@gmail.com',
%IRSSI = (
authors => 'Dan Boger',
contact => 'zigdon@gmail.com',
@@
-21,7
+21,7
@@
my ($REV) = '$Rev: 485 $' =~ /(\d+)/;
. 'Can optionally set your bitlbee /away message to same',
license => 'GNU GPL v2',
url => 'http://twirssi.com',
. 'Can optionally set your bitlbee /away message to same',
license => 'GNU GPL v2',
url => 'http://twirssi.com',
- changed => '$Date: 2009-0
2-23 14:17:26 -0800 (Mon, 23 Feb
2009) $',
+ changed => '$Date: 2009-0
3-07 13:30:43 -0800 (Sat, 07 Mar
2009) $',
);
my $window;
);
my $window;
@@
-34,7
+34,7
@@
my %nicks;
my %friends;
my %tweet_cache;
my %id_map;
my %friends;
my %tweet_cache;
my %id_map;
-my $failwhale = 0;
+my $failwhale
= 0;
my %irssi_to_mirc_colors = (
'%k' => '01',
'%r' => '05',
my %irssi_to_mirc_colors = (
'%k' => '01',
'%r' => '05',
@@
-416,7
+416,7
@@
sub cmd_login {
}
%nicks = %friends;
$nicks{$user} = 0;
}
%nicks = %friends;
$nicks{$user} = 0;
-
&get_updates
;
+
return 1
;
} else {
¬ice("Login failed");
}
} else {
¬ice("Login failed");
}
@@
-505,7
+505,7
@@
sub cmd_upgrade {
}
my $md5;
}
my $md5;
- unless (
$data
) {
+ unless (
$data or Irssi::settings_get_bool("twirssi_upgrade_beta")
) {
eval { use Digest::MD5; };
if ($@) {
eval { use Digest::MD5; };
if ($@) {
@@
-539,11
+539,14
@@
sub cmd_upgrade {
}
}
}
}
- my $URL = "http://twirssi.com/twirssi.pl";
+ my $URL =
+ Irssi::settings_get_bool("twirssi_upgrade_beta")
+ ? "http://github.com/zigdon/twirssi/raw/master/twirssi.pl"
+ : "http://twirssi.com/twirssi.pl";
¬ice("Downloading twirssi from $URL");
LWP::Simple::getstore( $URL, "$loc.upgrade" );
¬ice("Downloading twirssi from $URL");
LWP::Simple::getstore( $URL, "$loc.upgrade" );
- unless (
$data
) {
+ 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."
unless ( open( NEW, "$loc.upgrade" ) ) {
¬ice(
"Failed to read $loc.upgrade. Check that /set twirssi_location is set to the correct location."
@@
-635,7
+638,7
@@
sub get_updates {
return unless &logged_in($twit);
my ( $fh, $filename ) = File::Temp::tempfile();
return unless &logged_in($twit);
my ( $fh, $filename ) = File::Temp::tempfile();
- binmode(
$fh, ":utf8"
);
+ binmode(
$fh, ":utf8"
);
my $pid = fork();
if ($pid) { # parent
my $pid = fork();
if ($pid) { # parent
@@
-691,10
+694,7
@@
sub do_updates {
print scalar localtime, " - Polling for updates for $username" if &debug;
my $tweets;
print scalar localtime, " - Polling for updates for $username" if &debug;
my $tweets;
- eval {
- $tweets = $obj->friends_timeline(
- { since => HTTP::Date::time2str($last_poll) } );
- };
+ eval { $tweets = $obj->friends_timeline(); };
if ($@) {
print $fh
if ($@) {
print $fh
@@
-737,6
+737,12
@@
sub do_updates {
printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
$context->{id}, $username,
$context->{user}{screen_name}, $ctext;
printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
$context->{id}, $username,
$context->{user}{screen_name}, $ctext;
+ if ($context->{truncated}) {
+ printf $fh "id:%d account:%s nick:%s type:ellispis %s\n",
+ $context->{id}."-url", $username,
+ $context->{user}{screen_name},
+ "http://twitter.com/$context->{user}{screen_name}/status/$context->{id}";
+ }
$reply = "reply";
} elsif ($@) {
print $fh "type:debug request to get context failed: $@";
$reply = "reply";
} elsif ($@) {
print $fh "type:debug request to get context failed: $@";
@@
-751,6
+757,12
@@
sub do_updates {
and not Irssi::settings_get_bool("show_own_tweets");
printf $fh "id:%d account:%s nick:%s type:%s %s\n",
$t->{id}, $username, $t->{user}{screen_name}, $reply, $text;
and not Irssi::settings_get_bool("show_own_tweets");
printf $fh "id:%d account:%s nick:%s type:%s %s\n",
$t->{id}, $username, $t->{user}{screen_name}, $reply, $text;
+ if ($t->{truncated}) {
+ printf $fh "id:%d account:%s nick:%s type:ellispis %s\n",
+ $t->{id}."-url", $username,
+ $t->{user}{screen_name},
+ "http://twitter.com/$t->{user}{screen_name}/status/$t->{id}";
+ }
}
print scalar localtime, " - Polling for replies" if &debug;
}
print scalar localtime, " - Polling for replies" if &debug;
@@
-772,6
+784,12
@@
sub do_updates {
$text = &hilight($text);
printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
$t->{id}, $username, $t->{user}{screen_name}, $text;
$text = &hilight($text);
printf $fh "id:%d account:%s nick:%s type:tweet %s\n",
$t->{id}, $username, $t->{user}{screen_name}, $text;
+ if ($t->{truncated}) {
+ printf $fh "id:%d account:%s nick:%s type:ellispis %s\n",
+ $t->{id}."-url", $username,
+ $t->{user}{screen_name},
+ "http://twitter.com/$t->{user}{screen_name}/status/$t->{id}";
+ }
}
print scalar localtime, " - Polling for DMs" if &debug;
}
print scalar localtime, " - Polling for DMs" if &debug;
@@
-847,8
+865,15
@@
sub monitor_child {
print scalar localtime, " - checking child log at $filename ($attempt)"
if &debug;
my $new_last_poll;
print scalar localtime, " - checking child log at $filename ($attempt)"
if &debug;
my $new_last_poll;
+
+ # 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;
if ( open FILE, $filename ) {
my @lines;
+ my %new_cache;
while (<FILE>) {
chomp;
last if /^__friends__/;
while (<FILE>) {
chomp;
last if /^__friends__/;
@@
-861,8
+886,15
@@
sub monitor_child {
}
if ( not $meta{type} or $meta{type} ne 'searchid' ) {
}
if ( not $meta{type} or $meta{type} ne 'searchid' ) {
- next if exists $meta{id} and exists $tweet_cache{ $meta{id} };
- $tweet_cache{ $meta{id} } = time;
+ if ( exists $meta{id} and exists $new_cache{ $meta{id} } ) {
+ next;
+ }
+
+ $new_cache{ $meta{id} } = time;
+
+ if ( exists $meta{id} and exists $tweet_cache{ $meta{id} } ) {
+ next;
+ }
}
my $account = "";
}
my $account = "";
@@
-904,7
+936,9
@@
sub monitor_child {
$meta{type}, $account, $meta{topic},
$meta{nick}, $marker, $_
];
$meta{type}, $account, $meta{topic},
$meta{nick}, $marker, $_
];
- if ( $meta{id} >
+ if (
+ exists $id_map{__searches}{ $meta{account} }{ $meta{topic} }
+ and $meta{id} >
$id_map{__searches}{ $meta{account} }{ $meta{topic} } )
{
$id_map{__searches}{ $meta{account} }{ $meta{topic} } =
$id_map{__searches}{ $meta{account} }{ $meta{topic} } )
{
$id_map{__searches}{ $meta{account} }{ $meta{topic} } =
@@
-918,7
+952,9
@@
sub monitor_child {
];
} elsif ( $meta{type} eq 'searchid' ) {
print "Search '$meta{topic}' returned id $meta{id}" if &debug;
];
} elsif ( $meta{type} eq 'searchid' ) {
print "Search '$meta{topic}' returned id $meta{id}" if &debug;
- if ( $meta{id} >=
+ if (
+ exists $id_map{__searches}{ $meta{account} }{ $meta{topic} }
+ and $meta{id} >=
$id_map{__searches}{ $meta{account} }{ $meta{topic} } )
{
$id_map{__searches}{ $meta{account} }{ $meta{topic} } =
$id_map{__searches}{ $meta{account} }{ $meta{topic} } )
{
$id_map{__searches}{ $meta{account} }{ $meta{topic} } =
@@
-947,12
+983,16
@@
sub monitor_child {
if ($new_last_poll) {
print "new last_poll = $new_last_poll" if &debug;
if ($new_last_poll) {
print "new last_poll = $new_last_poll" if &debug;
- for my $line (@lines) {
- $window->printformat(
- $line->[0],
- "twirssi_" . $line->[1],
- @$line[ 2 .. $#$line ]
- );
+ if ($suppress) {
+ print "First call, not printing updates" if &debug;
+ } else {
+ foreach my $line (@lines) {
+ $window->printformat(
+ $line->[0],
+ "twirssi_" . $line->[1],
+ @$line[ 2 .. $#$line ]
+ );
+ }
}
close FILE;
}
close FILE;
@@
-960,9
+1000,13
@@
sub monitor_child {
or warn "Failed to remove $filename: $!"
unless &debug;
or warn "Failed to remove $filename: $!"
unless &debug;
+ # commit the pending cache lines to the actual cache, now that
+ # we've printed our output
+ %tweet_cache = ( %tweet_cache, %new_cache );
+
# keep enough cached tweets, to make sure we don't show duplicates.
foreach ( keys %tweet_cache ) {
# keep enough cached tweets, to make sure we don't show duplicates.
foreach ( keys %tweet_cache ) {
- next if $tweet_cache{$_} >= $last_poll;
+ next if $tweet_cache{$_} >= $last_poll
- 3600
;
delete $tweet_cache{$_};
}
$last_poll = $new_last_poll;
delete $tweet_cache{$_};
}
$last_poll = $new_last_poll;
@@
-976,7
+1020,7
@@
sub monitor_child {
print JSON JSON::Any->objToJson( \%id_map );
close JSON;
} else {
print JSON JSON::Any->objToJson( \%id_map );
close JSON;
} else {
- &
notice
("Failed to write replies to $file: $!");
+ &
ccrap
("Failed to write replies to $file: $!");
}
}
$failwhale = 0;
}
}
$failwhale = 0;
@@
-1003,7
+1047,7
@@
sub monitor_child {
$since = scalar localtime($last_poll);
}
$since = scalar localtime($last_poll);
}
- if (
not $failwhale and time - $last_poll > 60*60
) {
+ if (
not $failwhale and time - $last_poll > 60 * 60
) {
foreach my $whale (
q{ v v v},
q{ | | v | v},
foreach my $whale (
q{ v v v},
q{ | | v | v},
@@
-1012,12
+1056,14
@@
sub monitor_child {
q{ '-. (__..-" \\},
q{ \\ a |},
q{ ',.__. ,__.-'/},
q{ '-. (__..-" \\},
q{ \\ a |},
q{ ',.__. ,__.-'/},
- q{ '--/_.'----'`}) {
- ¬ice($whale);
+ q{ '--/_.'----'`}
+ )
+ {
+ &ccrap($whale);
}
$failwhale = 1;
}
}
$failwhale = 1;
}
- &
notice
("Haven't been able to get updated tweets since $since");
+ &
ccrap
("Haven't been able to get updated tweets since $since");
}
}
}
}
@@
-1029,6
+1075,10
@@
sub notice {
$window->print( "%R***%n @_", MSGLEVEL_PUBLIC );
}
$window->print( "%R***%n @_", MSGLEVEL_PUBLIC );
}
+sub ccrap {
+ $window->print( "%R***%n @_", MSGLEVEL_CLIENTCRAP );
+}
+
sub update_away {
my $data = shift;
sub update_away {
my $data = shift;
@@
-1042,7
+1092,7
@@
sub update_away {
$server->send_raw("away :$data");
return 1;
} else {
$server->send_raw("away :$data");
return 1;
} else {
- &
notice
( "Can't find bitlbee server.",
+ &
ccrap
( "Can't find bitlbee server.",
"Update bitlbee_server or disable tweet_to_away" );
return 0;
}
"Update bitlbee_server or disable tweet_to_away" );
return 0;
}
@@
-1171,6
+1221,7
@@
Irssi::settings_add_str( "twirssi", "twirssi_replies_store",
".irssi/scripts/twirssi.json" );
Irssi::settings_add_str( "twirssi", "twirssi_nick_color", "%B" );
Irssi::settings_add_str( "twirssi", "twirssi_topic_color", "%r" );
".irssi/scripts/twirssi.json" );
Irssi::settings_add_str( "twirssi", "twirssi_nick_color", "%B" );
Irssi::settings_add_str( "twirssi", "twirssi_topic_color", "%r" );
+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::settings_add_bool( "twirssi", "show_own_tweets", 1 );
Irssi::settings_add_bool( "twirssi", "tweet_to_away", 0 );
Irssi::settings_add_bool( "twirssi", "show_reply_context", 0 );
Irssi::settings_add_bool( "twirssi", "show_own_tweets", 1 );
@@
-1186,6
+1237,10
@@
Irssi::settings_add_bool( "twirssi", "tweet_window_input", 0 );
$last_poll = time - &get_poll_time;
$window = Irssi::window_find_name( Irssi::settings_get_str('twitter_window') );
if ( !$window ) {
$last_poll = time - &get_poll_time;
$window = Irssi::window_find_name( Irssi::settings_get_str('twitter_window') );
if ( !$window ) {
+ Irssi::active_win()
+ ->print( "Couldn't find a window named '"
+ . Irssi::settings_get_str('twitter_window')
+ . "', trying to create it." );
$window =
Irssi::Windowitem::window_create(
Irssi::settings_get_str('twitter_window'), 1 );
$window =
Irssi::Windowitem::window_create(
Irssi::settings_get_str('twitter_window'), 1 );
@@
-1219,6
+1274,11
@@
if ($window) {
print "nicks: ", join ", ", sort keys %nicks;
print "searches: ", Dumper \%{ $id_map{__searches} };
print "last poll: $last_poll";
print "nicks: ", join ", ", sort keys %nicks;
print "searches: ", Dumper \%{ $id_map{__searches} };
print "last poll: $last_poll";
+ if ( open DUMP, ">/tmp/twirssi.cache.txt" ) {
+ print DUMP Dumper \%tweet_cache;
+ close DUMP;
+ print "cache written out to /tmp/twirssi.cache.txt";
+ }
}
);
Irssi::command_bind(
}
);
Irssi::command_bind(
@@
-1267,6
+1327,7
@@
if ($window) {
my $num = keys %{ $id_map{__indexes} };
¬ice( sprintf "Loaded old replies from %d contact%s.",
$num, ( $num == 1 ? "" : "s" ) );
my $num = keys %{ $id_map{__indexes} };
¬ice( sprintf "Loaded old replies from %d contact%s.",
$num, ( $num == 1 ? "" : "s" ) );
+ &cmd_list_search;
};
} else {
¬ice("Failed to load old replies from $file: $!");
};
} else {
¬ice("Failed to load old replies from $file: $!");
@@
-1287,6
+1348,7
@@
if ($window) {
and my $autopass = Irssi::settings_get_str("twitter_passwords") )
{
&cmd_login();
and my $autopass = Irssi::settings_get_str("twitter_passwords") )
{
&cmd_login();
+ &get_updates;
}
} else {
}
} else {