- return mbox_all_ids($ctx) if $query eq '';
- my $qopts = $ctx->{qopts} = { mset => 2 };
- my $srch = $ctx->{-inbox}->search or
+ 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});
+ }
+
+}
+
+sub mbox_all {
+ my ($ctx, $q) = @_;
+ my $q_string = $q->{'q'};
+ return mbox_all_ids($ctx) if $q_string !~ /\S/;
+ my $srch = $ctx->{ibx}->isrch or