aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbin/gtk-straw-viewer23
-rwxr-xr-xbin/straw-viewer23
-rw-r--r--lib/WWW/StrawViewer.pm14
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) = @_;