[twirssi] Upgrade to 2.6.3 (bz#1054485)

Julian C. Dunn jdunn at fedoraproject.org
Sat Jan 18 04:38:04 UTC 2014


commit 4111084bc2d13dc47f0033006030ffe272509e5e
Author: Julian C. Dunn <jdunn at aquezada.com>
Date:   Fri Jan 17 23:37:35 2014 -0500

    Upgrade to 2.6.3 (bz#1054485)

 twirssi-2.6.2.pl => twirssi-2.6.3.pl |  104 +++++++++++++++-------------------
 twirssi.spec                         |    5 +-
 2 files changed, 49 insertions(+), 60 deletions(-)
---
diff --git a/twirssi-2.6.2.pl b/twirssi-2.6.3.pl
similarity index 98%
rename from twirssi-2.6.2.pl
rename to twirssi-2.6.3.pl
index c09dcf1..fd138fd 100644
--- a/twirssi-2.6.2.pl
+++ b/twirssi-2.6.3.pl
@@ -17,7 +17,7 @@ $Data::Dumper::Indent = 1;
 
 use vars qw($VERSION %IRSSI);
 
-$VERSION = sprintf '%s', q$Version: v2.6.2$ =~ /^\w+:\s+v(\S+)/;
+$VERSION = sprintf '%s', q$Version: v2.6.3$ =~ /^\w+:\s+v(\S+)/;
 %IRSSI   = (
     authors     => '@zigdon, @gedge',
     contact     => 'zigdon at gmail.com',
@@ -26,7 +26,7 @@ $VERSION = sprintf '%s', q$Version: v2.6.2$ =~ /^\w+:\s+v(\S+)/;
       . 'Can optionally set your bitlbee /away message to same',
     license => 'GNU GPL v2',
     url     => 'http://twirssi.com',
-    changed => '$Date: 2013-09-13 19:49:11 +0000$',
+    changed => '$Date: 2014-01-16 21:59:02 +0000$',
 );
 
 my $twit;	# $twit is current logged-in Net::Twitter object (usually one of %twits)
@@ -1006,7 +1006,8 @@ sub rate_limited {
             for my $uri (keys %{ $rate_limit->{resources}->{$resource} }) {
                 if ( $rate_limit->{resources}->{$resource}->{$uri}->{remaining} < 1 ) {
                     &notice( [ 'error', $username, $fh ],
-                        "Rate limit exceeded for $resource ($uri), try again after $rate_limit->{resources}->{$resource}->{$uri}->{reset}" );
+                        "Rate limit exceeded for $resource ($uri), try again after " .
+			localtime $rate_limit->{resources}->{$resource}->{$uri}->{reset} );
                     $res = 1;
                 }
             }
@@ -1024,7 +1025,10 @@ sub verify_twitter_object {
                  "Twitter timeout for $user\@$service set to $timeout" );
     }
 
-    unless ( $twit->verify_credentials() ) {
+    my $verified = 0;
+    eval { $verified = $twit->verify_credentials(); };
+
+    if ( $@ or not $verified ) {
         &notice(
             [ "tweet", "$user\@$service" ],
             "Login as $user\@$service failed"
@@ -1525,39 +1529,48 @@ sub scan_cursor {
     my $fn_info   = shift;
 
     my $whole_set = {};
-    my $paging_broken = 0;
     my $fn_args = { (defined $fn_info->{args} ? %{ $fn_info->{args} } : ()) };
     my $fn_name = $fn_info->{fn};
+    my $pg_type = index($fn_info->{cp}, 'c') >= 0 ? 'cursor' : ($fn_info->{cp} =~ /p(\d*)/ ? 'page' : '');
+    my $max_page = 10;
+    $max_page = $1 if $pg_type eq 'page' and length($1) > 0;
     eval {
-        for (my $cursor = -1, my $page = 1; $cursor and $page <= 10 and not $paging_broken; $page++) {
-            if (-1 != index($fn_info->{cp}, 'c')) {
+        for (my($cursor, $page) = (-1, 1); $cursor and $page <= $max_page; $page++) {
+            if ($pg_type eq 'cursor') {
                 $fn_args->{cursor} = $cursor;
-            }
-            if ($fn_info->{cp} =~ /p(\d*)/) {
-                my $max_page = $1;
+            } elsif ($pg_type eq 'page') {
                 $fn_args->{page} = $page;
-                last if length($max_page) > 0 and $page > $max_page;
             }
-            &debug($fh, "%G$username%n Loading $type_str page $page...");
+            &debug($fh, "%G$username%n Loading $type_str $pg_type " . ($pg_type eq 'cursor' ? $cursor : $page));
             my $collection = $u_twit->$fn_name($fn_args);
-            last unless $collection;
-            if (-1 != index($fn_info->{cp}, 'c')) {
+            last if not $collection;
+            if ($pg_type eq 'cursor') {
                 $cursor = $collection->{next_cursor};
-                $collection = $collection->{$fn_info->{set_key}};
+                $collection = $collection->{$fn_info->{set_key}} if defined $fn_info->{set_key};
             }
+            last if 0 == @$collection;
             foreach my $coll_item (@$collection) {
-                if (-1 != index($fn_info->{cp}, 'p')
+                if ($pg_type eq 'page'
                        and defined $whole_set->{$coll_item->{$fn_info->{item_key}}}) {
-                    # fix broken paging, as we've seen this $coll_item before
-                    $paging_broken = 1;
-                    last;
+                    &debug($fh, "%G$username%n repeated page $page key " . $fn_info->{item_key} .
+                       ' val ' . $coll_item->{$fn_info->{item_key}} .
+                       ''); #' pre ' . Dumper($whole_set->{$coll_item->{$fn_info->{item_key}}}));
+                    next;
                 }
-                $whole_set->{$coll_item->{$fn_info->{item_key}}} = (defined $fn_info->{item_val}
-								? $coll_item->{$fn_info->{item_val}} : time);
+                $whole_set->{$coll_item->{$fn_info->{item_key}}} = (
+                    defined $fn_info->{item_val}
+                        ? $coll_item->{$fn_info->{item_val}}
+                        : (defined $fn_info->{item_keys}
+                              ? (ref($fn_info->{item_keys}) eq 'ARRAY'
+                                    ? { map { $_ => $coll_item->{$_} } @{ $fn_info->{item_keys} } }
+                                    : { %$coll_item })
+                              : time)
+                );
+                $fn_args->{max_id} = $coll_item->{id_str} if defined $fn_args->{since_id};
             }
         }
     };
-foreach my $item (split "\n", Dumper($whole_set)) { &debug($fh, "crsr: $item"); }
+foreach my $item (split "\n", Dumper($whole_set)) { &debug($fh, "$pg_type: $item"); }
 
     if ($@) {
         &notice(['error', $username, $fh], "$username: Error updating $type_str.  Aborted.");
@@ -1588,7 +1601,7 @@ sub get_lists {
     # ensure $new_lists->{$list_name} = $id
     my %more_args = ();
     my $new_lists = &scan_cursor('lists', $u_twit, $username, $fh,
-				{ fn=>'get_lists', cp=>'', set_key=>'lists',
+				{ fn=>'list_ownerships', cp=>'c', set_key=>'lists',
 					args=>{ user=>$userid, %more_args }, item_key=>'name', item_val=>'id', });
     return if not defined $new_lists;
 
@@ -2084,47 +2097,20 @@ sub get_tweets {
 
     return if &rate_limited($obj, $username, $fh);
 
-    &debug($fh, "%G$username%n Polling for tweets");
-    my $tweets = [];
-    eval {
-        my %call_attribs = ( page => 1 );
-        $call_attribs{count} = $settings{track_replies} if $settings{track_replies};
-        $call_attribs{since_id} = $state{__last_id}{$username}{timeline}
+    my %call_attribs = ();
+    $call_attribs{count} = 200;
+    $call_attribs{since_id} = $state{__last_id}{$username}{timeline}
                            if defined $state{__last_id}{$username}{timeline};
-        for ( ; $call_attribs{page} < 2 ; $call_attribs{page}++) {
-            &debug($fh, "%G$username%n timeline " . join(' ', map { $_ . '=' . $call_attribs{$_} } sort keys %call_attribs));
-            my $page_tweets = $obj->home_timeline( \%call_attribs );
-            last if not defined $page_tweets or @$page_tweets == 0;
-            unshift @$tweets, @$page_tweets;
-        }
-    };
-
-    if ($@) {
-        print $fh "t:error $username Error during home_timeline call: Aborted.\n";
-        print $fh "t:debug : $_\n" foreach split /\n/, Dumper($@);
-        return;
-    }
-
 
-=pod
+    my $tweets = &scan_cursor('home_timeline', $obj, $username, $fh,
+				{ fn=>'home_timeline', cp=>'p', args => \%call_attribs,
+					item_key=>'id_str', item_keys=>1 });
 
-    unless ( ref $tweets ) {
-        if ( $obj->can("get_error") ) {
-            my $error = "Unknown error";
-            eval { $error = JSON::Any->jsonToObj( $obj->get_error() ) };
-            unless ($@) { $error = $obj->get_error() }
-            &notice([ 'error', $username, $fh],
-                "$username: API Error during home_timeline call: Aborted");
-            print $fh "t:debug : $_\n" foreach split /\n/, Dumper($error);
-
-        } else {
-            &notice([ 'error', $username, $fh],
-                "$username: API Error in home_timeline call. Aborted.");
-        }
+    if (not defined $tweets) {
+        print $fh "t:error $username Error during home_timeline call: Aborted.\n";
         return;
     }
-
-=cut
+    $tweets = [ map { $tweets->{$_} } sort { cmp_id($b, $a) } keys %$tweets ];
 
     print $fh "t:debug %G$username%n got ", scalar(@$tweets), ' tweets',
 		(@$tweets	? ', first/last: ' . join('/',
diff --git a/twirssi.spec b/twirssi.spec
index 7413e78..b347389 100644
--- a/twirssi.spec
+++ b/twirssi.spec
@@ -1,5 +1,5 @@
 Name:           twirssi
-Version:        2.6.2
+Version:        2.6.3
 Release:        1%{?dist}
 Summary:        An Irssi script to interact with Twitter
 License:        GPLv2
@@ -51,6 +51,9 @@ install -m 644 -p %{SOURCE2} $RPM_BUILD_ROOT%{_pkgdocdir}
 %doc %{_pkgdocdir}
 
 %changelog
+* Thu Jan 16 2014 Julian C. Dunn <jdunn at aquezada.com> 2.6.3-1
+- Update to 2.6.3 (bz#1054485)
+
 * Sun Sep 15 2013 Julian C. Dunn <jdunn at aquezada.com> 2.6.2-1
 - Update to 2.6.2 (bz#1008269)
 


More information about the scm-commits mailing list