}, $_[0];
}
+sub topmost {
+ my ($self) = @_;
+ my @q = ($self);
+ while (my $cont = shift @q) {
+ return $cont if $cont->{smsg};
+ push @q, values %{$cont->{children}};
+ }
+ undef;
+}
+
sub add_child {
my ($self, $child) = @_;
croak "Cowardly refusing to become my own parent: $self"
$th->thread;
if ($q->{r}) { # order by relevance
$th->order(sub {
- [ sort { ( $pct{$b->{id}} || 0) <=>
- ( $pct{$a->{id}} || 0)
+ [ sort { (eval { $pct{$b->topmost->{id}} } || 0)
+ <=>
+ (eval { $pct{$a->topmost->{id}} } || 0)
} @{$_[0]} ];
});
} else { # order by time (default for threaded view)
sub sort_ts {
[ sort {
- (eval { $a->{smsg}->ts } || 0) <=>
- (eval { $b->{smsg}->ts } || 0)
+ (eval { $a->topmost->{smsg}->ts } || 0) <=>
+ (eval { $b->topmost->{smsg}->ts } || 0)
} @{$_[0]} ];
}