diff options
-rwxr-xr-x | bin/gtk-straw-viewer | 23 | ||||
-rwxr-xr-x | bin/straw-viewer | 23 | ||||
-rw-r--r-- | lib/WWW/StrawViewer.pm | 14 |
3 files changed, 37 insertions, 23 deletions
diff --git a/bin/gtk-straw-viewer b/bin/gtk-straw-viewer index bd21d26..4e181b5 100755 --- a/bin/gtk-straw-viewer +++ b/bin/gtk-straw-viewer @@ -3304,9 +3304,9 @@ sub comments_row_activated { if (defined($url) and $url =~ m{^https?://}) { # load more comments - #my $token = $feeds_liststore->get($iter, 2); + my $token = $feeds_liststore->get($iter, 2); $feeds_liststore->remove($iter); - my $results = $yv_obj->next_page($url); + my $results = $yv_obj->next_page_with_token($url, $token); if ($yv_utils->has_entries($results)) { display_comments($results); @@ -3382,6 +3382,7 @@ sub display_comments { my $url = $results->{url}; my $video_id = $results->{results}{videoId}; my $comments = $results->{results}{comments} // []; + my $continuation = $results->{results}{continuation} // []; foreach my $comment (@{$comments}) { @@ -3452,15 +3453,15 @@ sub display_comments { #~ } } - #~ if (exists $res->{nextPageToken}) { - #~ my $iter = $feeds_liststore->append; - #~ $feeds_liststore->set( - #~ $iter, - #~ 0 => "<big><b>LOAD MORE</b></big>", - #~ 1 => $url, - #~ 2 => $res->{nextPageToken}, - #~ ); - #~ } + if (defined $continuation) { + my $iter = $feeds_liststore->append; + $feeds_liststore->set( + $iter, + 0 => "<big><b>LOAD MORE</b></big>", + 1 => $url, + 2 => $continuation, + ); + } return 1; } diff --git a/bin/straw-viewer b/bin/straw-viewer index d31e9ed..f904e1d 100755 --- a/bin/straw-viewer +++ b/bin/straw-viewer @@ -2263,6 +2263,7 @@ sub general_options { my $callback = $args{sub}; my $results = $args{res}; my $info = $args{info}; + my $token = $args{token}; if (not defined($option)) { return; @@ -2272,26 +2273,22 @@ sub general_options { main_quit(0); } elsif ($option =~ /^(?:n|next)\z/ and defined $url) { - if (defined $info->{nextPageToken}) { - my $request = $yv_obj->next_page($url, $info->{nextPageToken}); + if (defined $token) { + my $request = $yv_obj->next_page_with_token($url, $token); $callback->($request); } else { - warn_last_page(); + my $request = $yv_obj->next_page($url); + $callback->($request); } } + elsif ($option =~ /^(?:b|back|p|prev|previous)\z/ and defined $url) { + my $request = $yv_obj->previous_page($url); + $callback->($request); + } elsif ($option =~ /^(?:R|refresh)\z/ and defined $url) { @{$results} = @{$yv_obj->_get_results($url)->{results}{items}}; } - elsif ($option =~ /^(?:b|back|p|prev|previous)\z/ and defined $url) { - if (defined $info->{prevPageToken}) { - my $request = $yv_obj->previous_page($url, $info->{prevPageToken}); - $callback->($request); - } - else { - warn_first_page(); - } - } elsif ($option eq 'login') { authenticate(); } @@ -2631,6 +2628,7 @@ sub print_comments { my $url = $results->{url}; my $comments = $results->{results}{comments} // []; + my $token = $results->{results}{continuation} // []; my $i = 0; foreach my $comment (@{$comments}) { @@ -2689,6 +2687,7 @@ sub print_comments { info => $results, mode => 'comments', args => [$videoID], + token => $token, ) ) { ## ok diff --git a/lib/WWW/StrawViewer.pm b/lib/WWW/StrawViewer.pm index 5f0ae02..934dfc9 100644 --- a/lib/WWW/StrawViewer.pm +++ b/lib/WWW/StrawViewer.pm @@ -998,6 +998,20 @@ sub post_as_json { $self->_save('POST', $url, $json_str); } +sub next_page_with_token { + my ($self, $url, $token) = @_; + + my $pt_url = ( + $url =~ s{[?&]continuation=\K([^&]+)}{$token} + ? $url + : $self->_append_url_args($url, continuation => $token) + ); + + my $res = $self->_get_results($pt_url); + $res->{url} = $pt_url; + return $res; +} + sub next_page { my ($self, $url) = @_; |