X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FMdirReader.pm;h=db5f4545125f051510ae3b6df2a0db923b014602;hb=e6aa13bccb7ea5d5b3246b3a944621515905e360;hp=7a0641fb07f287fe8a9ff17127c3041b5428b3fe;hpb=2f720902ed702b64d918165ba21a96dabbeeca26;p=public-inbox.git diff --git a/lib/PublicInbox/MdirReader.pm b/lib/PublicInbox/MdirReader.pm index 7a0641fb..db5f4545 100644 --- a/lib/PublicInbox/MdirReader.pm +++ b/lib/PublicInbox/MdirReader.pm @@ -1,4 +1,4 @@ -# Copyright (C) 2020-2021 all contributors +# Copyright (C) all contributors # License: AGPL-3.0+ # Maildirs for now, MH eventually @@ -8,7 +8,7 @@ package PublicInbox::MdirReader; use strict; use v5.10.1; use PublicInbox::InboxWritable qw(eml_from_path); -use Digest::SHA qw(sha256_hex); +use PublicInbox::SHA qw(sha256_hex); # returns Maildir flags from a basename ('' for no flags, undef for invalid) sub maildir_basename_flags { @@ -42,9 +42,10 @@ sub maildir_each_file { my $pfx = $dir.$d; opendir my $dh, $pfx or next; while (defined(my $bn = readdir($dh))) { - maildir_basename_flags($bn) // next; + my $fl = maildir_basename_flags($bn) // next; next if defined($mod) && !shard_ok($bn, $mod, $shard); - $cb->($pfx.$bn, @arg); + next if index($fl, 'T') >= 0; # no Trashed messages + $cb->($pfx.$bn, $fl, @arg); } } } @@ -86,4 +87,22 @@ sub maildir_each_eml { sub new { bless {}, __PACKAGE__ } +sub flags2kw ($) { + if (wantarray) { + my @unknown; + my %kw; + for (split(//, $_[0])) { + my $k = $c2kw{$_}; + if (defined($k)) { + $kw{$k} = 1; + } else { + push @unknown, $_; + } + } + (\%kw, \@unknown); + } else { + [ sort(map { $c2kw{$_} // () } split(//, $_[0])) ]; + } +} + 1;