- my $cb = sub {
- do {
- while ((my $num = $ids->[$i++])) {
- my $smsg = $over->get_art($num) or next;
- return $smsg;
- }
- $ids = $ibx->mm->ids_after(\$prev);
- $i = 0;
- } while (@$ids);
- undef;
- };
- return PublicInbox::MboxGz->response($ctx, $cb, 'all');
+ $ctx->{ids} = $ids;
+ $ctx->{prev} = $prev;
+ require PublicInbox::MboxGz;
+ PublicInbox::MboxGz::mbox_gz($ctx, \&all_ids_cb, 'all');
+}
+
+sub gone ($$) {
+ my ($ctx, $what) = @_;
+ warn "W: `$ctx->{ibx}->{inboxdir}' $what went away unexpectedly\n";
+ undef;
+}
+
+sub results_cb {
+ my ($ctx) = @_;
+ my $over = $ctx->{ibx}->over or return gone($ctx, 'over');
+ while (1) {
+ while (defined(my $num = shift(@{$ctx->{ids}}))) {
+ my $smsg = $over->get_art($num) or next;
+ return $smsg;
+ }
+ # refill result set
+ my $srch = $ctx->{ibx}->isrch or return gone($ctx, 'search');
+ my $mset = $srch->mset($ctx->{query}, $ctx->{qopts});
+ my $size = $mset->size or return;
+ $ctx->{qopts}->{offset} += $size;
+ $ctx->{ids} = $srch->mset_to_artnums($mset, $ctx->{qopts});
+ }
+}
+
+sub results_thread_cb {
+ my ($ctx) = @_;
+
+ my $over = $ctx->{ibx}->over or return gone($ctx, 'over');
+ while (1) {
+ while (defined(my $num = shift(@{$ctx->{xids}}))) {
+ my $smsg = $over->get_art($num) or next;
+ return $smsg;
+ }
+
+ # refills ctx->{xids}
+ next if $over->expand_thread($ctx);
+
+ # refill result set
+ my $srch = $ctx->{ibx}->isrch or return gone($ctx, 'search');
+ my $mset = $srch->mset($ctx->{query}, $ctx->{qopts});
+ my $size = $mset->size or return;
+ $ctx->{qopts}->{offset} += $size;
+ $ctx->{ids} = $srch->mset_to_artnums($mset, $ctx->{qopts});
+ }
+