]> Sergey Matveev's repositories - public-inbox.git/blobdiff - lib/PublicInbox/Search.pm
www: allow including links to NNTP sites in HTML footer
[public-inbox.git] / lib / PublicInbox / Search.pm
index bf50365a04603d86d9722a923e4a36f0b8287c77..018fcb5537676ba6d9548f2c238451d317f8c1cd 100644 (file)
@@ -79,10 +79,10 @@ sub xdir {
 }
 
 sub new {
-       my ($class, $git_dir) = @_;
+       my ($class, $git_dir, $altid) = @_;
        my $dir = $class->xdir($git_dir);
        my $db = Search::Xapian::Database->new($dir);
-       bless { xdb => $db, git_dir => $git_dir }, $class;
+       bless { xdb => $db, git_dir => $git_dir, altid => $altid }, $class;
 }
 
 sub reopen { $_[0]->{xdb}->reopen }
@@ -107,12 +107,15 @@ sub get_thread {
 
        return { total => 0, msgs => [] } unless $smsg;
        my $qtid = Search::Xapian::Query->new(xpfx('thread').$smsg->thread_id);
-       my $path = id_compress($smsg->path);
-       my $qsub = Search::Xapian::Query->new(xpfx('path').$path);
-       my $query = Search::Xapian::Query->new(OP_OR, $qtid, $qsub);
+       my $path = $smsg->path;
+       if (defined $path && $path ne '') {
+               my $path = id_compress($smsg->path);
+               my $qsub = Search::Xapian::Query->new(xpfx('path').$path);
+               $qtid = Search::Xapian::Query->new(OP_OR, $qtid, $qsub);
+       }
        $opts ||= {};
        $opts->{limit} ||= 1000;
-       _do_enquire($self, $query, $opts);
+       _do_enquire($self, $qtid, $opts);
 }
 
 sub _do_enquire {
@@ -183,6 +186,18 @@ sub qp {
                $qp->add_boolean_prefix($name, $prefix);
        }
 
+       # we do not actually create AltId objects,
+       # just parse the spec to avoid the extra DB handles for now.
+       if (my $altid = $self->{altid}) {
+               for (@$altid) {
+                       # $_ = 'serial:gmane:/path/to/gmane.msgmap.sqlite3'
+                       /\Aserial:(\w+):/ or next;
+                       my $pfx = $1;
+                       # gmane => XGMANE
+                       $qp->add_boolean_prefix($pfx, 'X'.uc($pfx));
+               }
+       }
+
        while (my ($name, $prefix) = each %prob_prefix) {
                $qp->add_prefix($name, $prefix);
        }