- my %n2item = map { ($ids->[$i++], $_) } $mset->items;
- while ($over->expand_thread($ctx)) {
- for my $n (@{$ctx->{xids}}) {
+ if ($threads) {
+ # copy $ids if $lss since over->expand_thread
+ # shifts @{$ctx->{ids}}
+ $first_ids = [ @$ids ] if $lss;
+ my $ctx = { ids => $ids };
+ my %n2item = map { ($ids->[$i++], $_) } $mset->items;
+ while ($over->expand_thread($ctx)) {
+ for my $n (@{$ctx->{xids}}) {
+ my $smsg = $over->get_art($n) or next;
+ my $mitem = delete $n2item{$n};
+ next if $smsg->{bytes} == 0;
+ if ($mitem && $can_kw) {
+ mitem_kw($smsg, $mitem, $fl);
+ } elsif ($mitem && $fl) {
+ # call ->xsmsg_vmd, later
+ $smsg->{lei_q_tt_flagged} = 1;
+ }
+ $each_smsg->($smsg, $mitem);
+ }
+ @{$ctx->{xids}} = ();
+ }
+ } else {
+ $first_ids = $ids;
+ my @items = $mset->items;
+ for my $n (@$ids) {
+ my $mitem = $items[$i++];