about summary refs log tree commit homepage
path: root/lib/PublicInbox/Feed.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-07-20 21:53:14 +0000
committerEric Wong <e@80x24.org>2015-07-20 21:53:26 +0000
commitc6e9b82e6c95e1798103e901b6adbebf001929c8 (patch)
tree8dc8a64da46a02ead8f9a1de23913bcabfda5311 /lib/PublicInbox/Feed.pm
parentd011e18253f6c5b9876ee770d58b0f46e781bd06 (diff)
downloadpublic-inbox-c6e9b82e6c95e1798103e901b6adbebf001929c8.tar.gz
We'll be using this in the future for displaying per-thread
views.
Diffstat (limited to 'lib/PublicInbox/Feed.pm')
-rw-r--r--lib/PublicInbox/Feed.pm49
1 files changed, 31 insertions, 18 deletions
diff --git a/lib/PublicInbox/Feed.pm b/lib/PublicInbox/Feed.pm
index 3c0ec86d..f7c2f329 100644
--- a/lib/PublicInbox/Feed.pm
+++ b/lib/PublicInbox/Feed.pm
@@ -61,13 +61,7 @@ sub generate_html_index {
         my $git_dir = $args->{git_dir};
         my $git = PublicInbox::GitCatFile->new($git_dir);
         my ($first, $last) = each_recent_blob($args, sub {
-                my $mime = do_cat_mail($git, $_[0]) or return 0;
-
-                my $t = eval { str2time($mime->header('Date')) };
-                defined($t) or $t = 0;
-                $mime->header_set('X-PI-Date', $t);
-                push @messages, $mime;
-                1;
+                mime_load_for_sort($git, $_[0], \@messages);
         });
         $git = undef; # destroy pipes.
 
@@ -79,20 +73,11 @@ sub generate_html_index {
                 '</head><body>' . PRE_WRAP;
 
         # sort child messages in chronological order
-        $th->order(sub {
-                sort {
-                        $a->topmost->message->header('X-PI-Date') <=>
-                        $b->topmost->message->header('X-PI-Date')
-                } @_;
-        });
+        $th->order(sub { mime_sort_children(@_) });
 
         # except we sort top-level messages reverse chronologically
         my $state = [ time, {}, $first, 0 ];
-        for (sort { (eval { $b->message->header('X-PI-Date') } || 0) <=>
-                    (eval { $a->message->header('X-PI-Date') } || 0)
-                  } $th->rootset) {
-                dump_msg($_, 0, \$html, $state);
-        }
+        for (mime_sort_roots($th)) { dump_msg($_, 0, \$html, $state) }
         Email::Address->purge_cache;
 
         my $footer = nav_footer($args->{cgi}, $last, $feed_opts, $state);
@@ -308,4 +293,32 @@ sub do_cat_mail {
         $@ ? undef : $mime;
 }
 
+sub mime_load_for_sort {
+        my ($git, $path, $messages) = @_;
+        my $mime = do_cat_mail($git, $path) or return 0;
+
+        my $t = eval { str2time($mime->header('Date')) };
+        defined($t) or $t = 0;
+        $mime->header_set('X-PI-Date', $t);
+        push @$messages, $mime;
+        1;
+}
+
+# children are chronological
+sub mime_sort_children {
+        sort {
+                $a->topmost->message->header('X-PI-Date') <=>
+                $b->topmost->message->header('X-PI-Date')
+        } @_;
+}
+
+# parents are reverse chronological
+sub mime_sort_roots {
+        my ($th) = @_;
+        sort {
+                (eval { $b->message->header('X-PI-Date') } || 0) <=>
+                (eval { $a->message->header('X-PI-Date') } || 0)
+        } $th->rootset;
+}
+
 1;