diff options
author | Eric Wong <e@80x24.org> | 2021-06-23 07:14:21 -0400 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-06-23 19:24:49 +0000 |
commit | 520be116e8a686cb223b48fad1de29201dee45be (patch) | |
tree | a20d7a81be01fd67c6346efe5e06f05be02f58d8 /lib/PublicInbox/MiscSearch.pm | |
parent | 4d594e98063aaad1ce9a90709af7edc5c44a0163 (diff) | |
download | public-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.pm | 34 |
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 |