X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiStore.pm;h=92c29100a3ee7372b1cde27bab0013f4736d2c11;hb=fbc11e24a72f41b0ed7ead30d199288a4d674be4;hp=776018284b5562b8fb5af5ad0c1404e7186b8c73;hpb=6fd748af8d4792d8cb857c3d2ec132ec3cca9bb8;p=public-inbox.git diff --git a/lib/PublicInbox/LeiStore.pm b/lib/PublicInbox/LeiStore.pm index 77601828..92c29100 100644 --- a/lib/PublicInbox/LeiStore.pm +++ b/lib/PublicInbox/LeiStore.pm @@ -14,8 +14,8 @@ use PublicInbox::ExtSearchIdx; use PublicInbox::Import; use PublicInbox::InboxWritable qw(eml_from_path); use PublicInbox::V2Writable; -use PublicInbox::ContentHash qw(content_hash content_digest); -use PublicInbox::MID qw(mids mids_in); +use PublicInbox::ContentHash qw(content_hash); +use PublicInbox::MID qw(mids); use PublicInbox::LeiSearch; use PublicInbox::MDA; use List::Util qw(max); @@ -104,25 +104,13 @@ sub eidx_init { $eidx; } -# when a message has no Message-IDs at all, this is needed for -# unsent Draft messages, at least -sub _fake_mid_for ($$) { - my ($eml, $dig) = @_; - my $mids = mids_in($eml, qw(X-Alt-Message-ID Resent-Message-ID)); - $eml->{-lei_fake_mid} = - $mids->[0] // PublicInbox::Import::digest2mid($dig, $eml); -} - sub _docids_for ($$) { my ($self, $eml) = @_; my %docids; - my $dig = content_digest($eml); - my $chash = $dig->clone->digest; + my ($chash, $mids) = PublicInbox::LeiSearch::content_key($eml); my $eidx = eidx_init($self); my $oidx = $eidx->{oidx}; my $im = $self->{im}; - my $mids = mids($eml); - $mids->[0] //= _fake_mid_for($eml, $dig); for my $mid (@$mids) { my ($id, $prev); while (my $cur = $oidx->next_by_mid($mid, \$id, \$prev)) { @@ -183,6 +171,7 @@ sub mbox_keywords { sort(keys %kw); } +# TODO: move this to MdirReader, maybe... # cf: https://cr.yp.to/proto/maildir.html my %c2kw = ('D' => 'draft', F => 'flagged', R => 'answered', S => 'seen'); sub maildir_keywords { @@ -230,6 +219,14 @@ sub set_eml_from_maildir { set_eml($self, $eml, $set_kw ? maildir_keywords($f) : ()); } +sub checkpoint { + my ($self, $wait) = @_; + if (my $im = $self->{im}) { + $wait ? $im->barrier : $im->checkpoint; + } + $self->{priv_eidx}->checkpoint($wait); +} + sub done { my ($self) = @_; my $err = '';