]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Search.pm
search: remove subject_summary
[public-inbox.git] / lib / PublicInbox / Search.pm
index 5e6bfc68bdb3d20985ffc177660b270c6ed3cd09..a1bae4197e65d5093c6d938d40da474c94a9ad09 100644 (file)
@@ -108,12 +108,6 @@ my %all_pfx = (%bool_pfx_internal, %bool_pfx_external, %prob_prefix);
 
 sub xpfx { $all_pfx{$_[0]} }
 
-our %PFX2TERM_RMAP;
-my %meta_pfx = (mid => 1, thread => 1, path => 1);
-while (my ($k, $v) = each %all_pfx) {
-       $PFX2TERM_RMAP{$v} = $k if $meta_pfx{$k};
-}
-
 my $mail_query = Search::Xapian::Query->new(xpfx('type') . 'mail');
 
 sub xdir {
@@ -166,22 +160,27 @@ sub get_thread {
        _do_enquire($self, $qtid, $opts);
 }
 
-sub _do_enquire {
-       my ($self, $query, $opts) = @_;
+sub retry_reopen {
+       my ($self, $cb) = @_;
        my $ret;
        for (1..10) {
-               eval { $ret = _enquire_once($self, $query, $opts) };
+               eval { $ret = $cb->() };
                return $ret unless $@;
                # Exception: The revision being read has been discarded -
                # you should call Xapian::Database::reopen()
-               if (index($@, 'Xapian::Database::reopen') >= 0) {
+               if (ref($@) eq 'Search::Xapian::DatabaseModifiedError') {
                        reopen($self);
                } else {
-                       die $@;
+                       die;
                }
        }
 }
 
+sub _do_enquire {
+       my ($self, $query, $opts) = @_;
+       retry_reopen($self, sub { _enquire_once($self, $query, $opts) });
+}
+
 sub _enquire_once {
        my ($self, $query, $opts) = @_;
        my $enquire = $self->enquire;
@@ -283,15 +282,17 @@ sub lookup_message {
                # raises on error:
                my $doc = $self->{xdb}->get_document($doc_id);
                $smsg = PublicInbox::SearchMsg->wrap($doc, $mid);
-               $smsg->doc_id($doc_id);
+               $smsg->{doc_id} = $doc_id;
        }
        $smsg;
 }
 
 sub lookup_mail { # no ghosts!
        my ($self, $mid) = @_;
-       my $smsg = lookup_message($self, $mid) or return;
-       PublicInbox::SearchMsg->load_doc($smsg->{doc});
+       retry_reopen($self, sub {
+               my $smsg = lookup_message($self, $mid) or return;
+               PublicInbox::SearchMsg->load_doc($smsg->{doc});
+       });
 }
 
 sub find_unique_doc_id {
@@ -325,6 +326,7 @@ sub find_doc_ids_for_term {
 }
 
 # normalize subjects so they are suitable as pathnames for URLs
+# XXX: consider for removal
 sub subject_path {
        my $subj = pop;
        $subj = subject_normalized($subj);
@@ -342,32 +344,6 @@ sub subject_normalized {
        $subj;
 }
 
-# for doc data
-sub subject_summary {
-       my $subj = pop;
-       my $max = 68;
-       if (length($subj) > $max) {
-               my @subj = split(/\s+/, $subj);
-               $subj = '';
-               my $l;
-
-               while ($l = shift @subj) {
-                       my $new = $subj . $l . ' ';
-                       last if length($new) >= $max;
-                       $subj = $new;
-               }
-               if ($subj ne '') {
-                       my $r = scalar @subj ? ' ...' : '';
-                       $subj =~ s/ \z/$r/s;
-               } else {
-                       # subject has one REALLY long word, and NOT spam? wtf
-                       @subj = ($l =~ /\A(.{1,72})/);
-                       $subj = $subj[0] . ' ...';
-               }
-       }
-       $subj;
-}
-
 sub enquire {
        my ($self) = @_;
        $self->{enquire} ||= Search::Xapian::Enquire->new($self->{xdb});