about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2021-03-16 07:43:44 +0600
committerEric Wong <e@80x24.org>2021-03-16 06:32:06 -0400
commit327a4c0a44ab301922a2b2829d423d2e9fc18faf (patch)
tree1f59a48cac66b5bbb71191bc533eb3e701825b0d
parent1b19e689f0b76290a437dd614da8685574e72b73 (diff)
downloadpublic-inbox-327a4c0a44ab301922a2b2829d423d2e9fc18faf.tar.gz
MboxReader is a more appropriate place for it than LeiStore.
-rw-r--r--lib/PublicInbox/LEI.pm2
-rw-r--r--lib/PublicInbox/LeiConvert.pm4
-rw-r--r--lib/PublicInbox/LeiImport.pm3
-rw-r--r--lib/PublicInbox/LeiStore.pm12
-rw-r--r--lib/PublicInbox/LeiToMail.pm4
-rw-r--r--lib/PublicInbox/MboxReader.pm12
-rw-r--r--t/lei_store.t8
-rw-r--r--t/mbox_reader.t10
8 files changed, 29 insertions, 26 deletions
diff --git a/lib/PublicInbox/LEI.pm b/lib/PublicInbox/LEI.pm
index 31d5b838..a0986f38 100644
--- a/lib/PublicInbox/LEI.pm
+++ b/lib/PublicInbox/LEI.pm
@@ -412,9 +412,9 @@ sub check_input_format ($;$) {
                 return fail($self, "--$opt_key unset for $err");
         }
         require PublicInbox::MboxLock if $files;
+        require PublicInbox::MboxReader;
         return 1 if $fmt eq 'eml';
         # XXX: should this handle {gz,bz2,xz}? that's currently in LeiToMail
-        require PublicInbox::MboxReader;
         PublicInbox::MboxReader->can($fmt) or
                 return fail($self, "--$opt_key=$fmt unrecognized");
         1;
diff --git a/lib/PublicInbox/LeiConvert.pm b/lib/PublicInbox/LeiConvert.pm
index 0c705ba4..fcc67f0b 100644
--- a/lib/PublicInbox/LeiConvert.pm
+++ b/lib/PublicInbox/LeiConvert.pm
@@ -12,9 +12,9 @@ use PublicInbox::LeiOverview;
 
 sub mbox_cb {
         my ($eml, $self) = @_;
-        my @kw = PublicInbox::LeiStore::mbox_keywords($eml);
+        my $kw = PublicInbox::MboxReader::mbox_keywords($eml);
         $eml->header_set($_) for qw(Status X-Status);
-        $self->{wcb}->(undef, { kw => \@kw }, $eml);
+        $self->{wcb}->(undef, { kw => $kw }, $eml);
 }
 
 sub net_cb { # callback for ->imap_each, ->nntp_each
diff --git a/lib/PublicInbox/LeiImport.pm b/lib/PublicInbox/LeiImport.pm
index 815788b3..65e37371 100644
--- a/lib/PublicInbox/LeiImport.pm
+++ b/lib/PublicInbox/LeiImport.pm
@@ -11,7 +11,8 @@ use PublicInbox::PktOp qw(pkt_do);
 
 sub _import_eml { # MboxReader callback
         my ($eml, $sto, $set_kw) = @_;
-        $sto->ipc_do('set_eml', $eml, $set_kw ? $sto->mbox_keywords($eml) : ());
+        $sto->ipc_do('set_eml', $eml, $set_kw ?
+                @{PublicInbox::MboxReader::mbox_keywords($eml)} : ());
 }
 
 sub import_done_wait { # dwaitpid callback
diff --git a/lib/PublicInbox/LeiStore.pm b/lib/PublicInbox/LeiStore.pm
index aaee5874..10fa9c54 100644
--- a/lib/PublicInbox/LeiStore.pm
+++ b/lib/PublicInbox/LeiStore.pm
@@ -159,18 +159,6 @@ sub remove_eml_keywords {
         \@docids;
 }
 
-# cf: https://doc.dovecot.org/configuration_manual/mail_location/mbox/
-my %status2kw = (F => 'flagged', A => 'answered', R => 'seen', T => 'draft');
-# O (old/non-recent), and D (deleted) aren't in JMAP,
-# so probably won't be supported by us.
-sub mbox_keywords {
-        my $eml = $_[-1];
-        my $s = "@{[$eml->header_raw('X-Status'),$eml->header_raw('Status')]}";
-        my %kw;
-        $s =~ s/([FART])/$kw{$status2kw{$1}} = 1/sge;
-        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');
diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm
index 587804bb..27e1338f 100644
--- a/lib/PublicInbox/LeiToMail.pm
+++ b/lib/PublicInbox/LeiToMail.pm
@@ -246,8 +246,8 @@ sub _augment { # MboxReader eml_cb
 
 sub _mbox_augment_kw_maybe {
         my ($eml, $lei, $lse, $augment) = @_;
-        my @kw = PublicInbox::LeiStore::mbox_keywords($eml);
-        update_kw_maybe($lei, $lse, $eml, \@kw);
+        my $kw = PublicInbox::MboxReader::mbox_keywords($eml);
+        update_kw_maybe($lei, $lse, $eml, $kw);
         _augment($eml, $lei) if $augment;
 }
 
diff --git a/lib/PublicInbox/MboxReader.pm b/lib/PublicInbox/MboxReader.pm
index df7c78fa..f93c2ec6 100644
--- a/lib/PublicInbox/MboxReader.pm
+++ b/lib/PublicInbox/MboxReader.pm
@@ -11,6 +11,18 @@ $Data::Dumper::Useqq = 1; # should've been the default, for bad data
 my $from_strict =
         qr/^From \S+ +\S+ \S+ +\S+ [^\n:]+:[^\n:]+:[^\n:]+ [^\n:]+\n/sm;
 
+# cf: https://doc.dovecot.org/configuration_manual/mail_location/mbox/
+my %status2kw = (F => 'flagged', A => 'answered', R => 'seen', T => 'draft');
+# O (old/non-recent), and D (deleted) aren't in JMAP,
+# so probably won't be supported by us.
+sub mbox_keywords {
+        my $eml = $_[-1];
+        my $s = "@{[$eml->header_raw('X-Status'),$eml->header_raw('Status')]}";
+        my %kw;
+        $s =~ s/([FART])/$kw{$status2kw{$1}} = 1/sge;
+        [ sort(keys %kw) ];
+}
+
 sub _mbox_from {
         my ($mbfh, $from_re, $eml_cb, @arg) = @_;
         my $buf = '';
diff --git a/t/lei_store.t b/t/lei_store.t
index 1c3f7841..258db25a 100644
--- a/t/lei_store.t
+++ b/t/lei_store.t
@@ -21,14 +21,6 @@ like($smsg->{blob}, qr/\A[0-9a-f]+\z/, 'add returned OID');
 my $eml = eml_load('t/data/0001.patch');
 is($sto->add_eml($eml), undef, 'idempotent');
 $sto->done;
-is_deeply([$sto->mbox_keywords($eml)], [], 'no keywords');
-$eml->header_set('Status', 'RO');
-is_deeply([$sto->mbox_keywords($eml)], ['seen'], 'seen extracted');
-$eml->header_set('X-Status', 'A');
-is_deeply([$sto->mbox_keywords($eml)], [qw(answered seen)],
-        'seen+answered extracted');
-$eml->header_set($_) for qw(Status X-Status);
-
 is_deeply([$sto->maildir_keywords('/foo:2,')], [], 'Maildir no keywords');
 is_deeply([$sto->maildir_keywords('/foo:2,S')], ['seen'], 'Maildir seen');
 is_deeply([$sto->maildir_keywords('/foo:2,RS')], ['answered', 'seen'],
diff --git a/t/mbox_reader.t b/t/mbox_reader.t
index 18d0fd68..da0ce7f1 100644
--- a/t/mbox_reader.t
+++ b/t/mbox_reader.t
@@ -24,6 +24,16 @@ my %raw = (
                 (("b: ".('b' x 72)."\n") x 1000) .
                 "From hell\n",
 );
+{
+        my $eml = PublicInbox::Eml->new($raw{small});
+        my $mbox_keywords = PublicInbox::MboxReader->can('mbox_keywords');
+        is_deeply($mbox_keywords->($eml), [], 'no keywords');
+        $eml->header_set('Status', 'RO');
+        is_deeply($mbox_keywords->($eml), ['seen'], 'seen extracted');
+        $eml->header_set('X-Status', 'A');
+        is_deeply($mbox_keywords->($eml), [qw(answered seen)],
+                'seen+answered extracted');
+}
 
 if ($ENV{TEST_EXTRA}) {
         for my $fn (glob('t/*.eml'), glob('t/*/*.{patch,eml}')) {