about summary refs log tree commit homepage
path: root/lib/PublicInbox/MiscSearch.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-06-23 07:14:21 -0400
committerEric Wong <e@80x24.org>2021-06-23 19:24:49 +0000
commit520be116e8a686cb223b48fad1de29201dee45be (patch)
treea20d7a81be01fd67c6346efe5e06f05be02f58d8 /lib/PublicInbox/MiscSearch.pm
parent4d594e98063aaad1ce9a90709af7edc5c44a0163 (diff)
downloadpublic-inbox-520be116e8a686cb223b48fad1de29201dee45be.tar.gz
When dealing with thousands of inboxes, displaying all of
them on a single page isn't going to work.  So steal some
pagination and search results code from the message search
to generate some basic HTML output that looks good in w3m.
Diffstat (limited to 'lib/PublicInbox/MiscSearch.pm')
-rw-r--r--lib/PublicInbox/MiscSearch.pm34
1 files changed, 19 insertions, 15 deletions
diff --git a/lib/PublicInbox/MiscSearch.pm b/lib/PublicInbox/MiscSearch.pm
index 4e010453..6b575b0d 100644
--- a/lib/PublicInbox/MiscSearch.pm
+++ b/lib/PublicInbox/MiscSearch.pm
@@ -59,7 +59,7 @@ sub misc_enquire_once { # retry_reopen callback
         $eq->set_query($qr);
         my $desc = !$opt->{asc};
         my $rel = $opt->{relevance} // 0;
-        if ($rel == -1) { # ORDER BY docid/UID
+        if ($rel == -1) { # ORDER BY docid
                 $eq->set_docid_order($PublicInbox::Search::ENQ_ASCENDING);
                 $eq->set_weighting_scheme($PublicInbox::Search::X{BoolWeight}->new);
         } elsif ($rel) {
@@ -132,6 +132,23 @@ sub ibx_data_once {
         }
 }
 
+sub doc2ibx_cache_ent { # @_ == ($self, $doc) OR ($doc)
+        my ($doc) = $_[-1];
+        my $d;
+        my $data = $json->decode($doc->get_data);
+        for (values %$data) {
+                $d = $_->{description} // next;
+                $d =~ s/ \[epoch [0-9]+\]\z// or next;
+                last;
+        }
+        {
+                uidvalidity => int_val($doc, $UIDVALIDITY),
+                -modified => int_val($doc, $MODIFIED),
+                # extract description from manifest.js.gz epoch description
+                description => $d
+        };
+}
+
 sub inbox_data {
         my ($self, $ibx) = @_;
         retry_reopen($self, \&ibx_data_once, $ibx);
@@ -141,20 +158,7 @@ sub ibx_cache_load {
         my ($doc, $cache) = @_;
         my ($eidx_key) = xap_terms('Q', $doc);
         return unless defined($eidx_key); # expired
-        my $ce = $cache->{$eidx_key} = {};
-        $ce->{uidvalidity} = int_val($doc, $UIDVALIDITY);
-        $ce->{-modified} = int_val($doc, $MODIFIED);
-        $ce->{description} = do {
-                # extract description from manifest.js.gz epoch description
-                my $d;
-                my $data = $json->decode($doc->get_data);
-                for (values %$data) {
-                        $d = $_->{description} // next;
-                        $d =~ s/ \[epoch [0-9]+\]\z// or next;
-                        last;
-                }
-                $d;
-        }
+        $cache->{$eidx_key} = doc2ibx_cache_ent($doc);
 }
 
 sub _nntpd_cache_load { # retry_reopen callback