diff options
author | Eric Wong <e@80x24.org> | 2023-12-29 18:05:14 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-12-30 06:44:02 +0000 |
commit | 5aab49f319679cf7912f1abf4914272e5112e247 (patch) | |
tree | feb93cd9b7062e61dd547b96fce91b5231bade88 /lib/PublicInbox/LeiImport.pm | |
parent | cf977e706b07e80f394570a393eb2169b9b9a1a7 (diff) | |
download | public-inbox-5aab49f319679cf7912f1abf4914272e5112e247.tar.gz |
The MH format is widely-supported and used by various MUAs such as mutt and sylpheed, and a MH-like format is used by mlmmj for archives, as well. Locking implementations for writes are inconsistent, so this commit doesn't support writes, yet. inotify|EVFILT_VNODE watches aren't supported, yet, but that'll have to come since MH allows packing unused integers and renaming files.
Diffstat (limited to 'lib/PublicInbox/LeiImport.pm')
-rw-r--r-- | lib/PublicInbox/LeiImport.pm | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/PublicInbox/LeiImport.pm b/lib/PublicInbox/LeiImport.pm index c2552bf0..5521188c 100644 --- a/lib/PublicInbox/LeiImport.pm +++ b/lib/PublicInbox/LeiImport.pm @@ -53,6 +53,29 @@ sub pmdir_cb { # called via wq_io_do from LeiPmdir->each_mdir_fn } } +sub input_mh_cb { + my ($mhdir, $n, $kw, $eml, $self) = @_; + substr($mhdir, 0, 0) = 'mh:'; # add prefix + my $lse = $self->{lse} //= $self->{lei}->{sto}->search; + my $lms = $self->{-lms_rw} //= $self->{lei}->lms; # may be 0 or undef + my @oidbin = $lms ? $lms->num_oidbin($mhdir, $n) : (); + @oidbin > 1 and warn("W: $mhdir/$n not unique:\n", + map { "\t".unpack('H*', $_)."\n" } @oidbin); + my @docids = sort { $a <=> $b } uniqstr + map { $lse->over->oidbin_exists($_) } @oidbin; + if (scalar @docids) { + $lse->kw_changed(undef, $kw, \@docids) or return; + } + if (defined $eml) { + my $vmd = $self->{-import_kw} ? { kw => $kw } : undef; + $vmd->{sync_info} = [ $mhdir, $n + 0 ] if $self->{-mail_sync}; + $self->input_eml_cb($eml, $vmd); + } + # TODO: + # elsif (my $ikw = $self->{lei}->{ikw}) { # old message, kw only + # $ikw->wq_io_do('ck_update_kw', [], "mh:$dir", $uid, $kw); +} + sub input_net_cb { # imap_each / nntp_each my ($uri, $uid, $kw, $eml, $self) = @_; if (defined $eml) { |