X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=lib%2FPublicInbox%2FLeiToMail.pm;h=0fa0bd9a6a2ef124724b085be5677b5395738ecb;hb=91ae332610370d2a5da2cfb0bd1dff09463e5438;hp=9411313bae891c29fa3eafae78567306fefd665a;hpb=c608b3422b2c17c6572966cfbc11b2e6ce4854e1;p=public-inbox.git diff --git a/lib/PublicInbox/LeiToMail.pm b/lib/PublicInbox/LeiToMail.pm index 9411313b..0fa0bd9a 100644 --- a/lib/PublicInbox/LeiToMail.pm +++ b/lib/PublicInbox/LeiToMail.pm @@ -9,7 +9,6 @@ use parent qw(PublicInbox::IPC); use PublicInbox::Eml; use PublicInbox::ProcessPipe; use PublicInbox::Spawn qw(spawn); -use PublicInbox::LeiDedupe; use PublicInbox::PktOp qw(pkt_do); use Symbol qw(gensym); use IO::Handle; # ->autoflush @@ -39,7 +38,7 @@ sub _mbox_hdr_buf ($$$) { if (my $ent = $kw2status{$k}) { push @{$hdr{$ent->[0]}}, $ent->[1]; } else { # X-Label? - warn "TODO: keyword `$k' not supported for mbox\n"; + warn "# keyword `$k' not supported for mbox\n"; } } # Messages are always 'O' (non-\Recent in IMAP), it saves @@ -194,7 +193,7 @@ sub _mbox_write_cb ($$) { sub { # for git_to_mail my ($buf, $smsg, $eml) = @_; $eml //= PublicInbox::Eml->new($buf); - return if $dedupe->is_dup($eml, $smsg->{blob}); + return if $dedupe->is_dup($eml, $smsg); $lse->xsmsg_vmd($smsg) if $lse; $buf = $eml2mbox->($eml, $smsg); return atomic_append($lei, $buf) if $atomic_append; @@ -280,7 +279,7 @@ sub _maildir_write_cb ($$) { $lse->xsmsg_vmd($smsg) if $lse; return _buf2maildir($dst, $buf, $smsg) if !$dedupe; $eml //= PublicInbox::Eml->new($$buf); # copy buf - return if $dedupe->is_dup($eml, $smsg->{blob}); + return if $dedupe->is_dup($eml, $smsg); undef $eml; _buf2maildir($dst, $buf, $smsg); } @@ -299,7 +298,7 @@ sub _imap_write_cb ($$) { $mic // return $lei->fail; # mic may be undef-ed in last run if ($dedupe) { $eml //= PublicInbox::Eml->new($$bref); # copy bref - return if $dedupe->is_dup($eml, $smsg->{blob}); + return if $dedupe->is_dup($eml, $smsg); } $lse->xsmsg_vmd($smsg) if $lse; eval { $imap_append->($mic, $folder, $bref, $smsg, $eml) }; @@ -336,21 +335,29 @@ sub new { $self->{base_type} = 'mbox'; } elsif ($fmt =~ /\Aimaps?\z/) { # TODO .onion support require PublicInbox::NetWriter; + require PublicInbox::URIimap; my $net = PublicInbox::NetWriter->new; - $net->add_url($dst); $net->{quiet} = $lei->{opt}->{quiet}; - my $err = $net->errors($dst); + my $uri = PublicInbox::URIimap->new($dst)->canonical; + $net->add_url($uri); + my $err = $net->errors; return $lei->fail($err) if $err; - require PublicInbox::URIimap; # TODO: URI cast early - $self->{uri} = PublicInbox::URIimap->new($dst); - $self->{uri}->mailbox or die "No mailbox: $dst"; + $uri->mailbox or return $lei->fail("No mailbox: $dst"); + $self->{uri} = $uri; + $dst = $lei->{ovv}->{dst} = $$uri; # canonicalized $lei->{net} = $net; $self->{base_type} = 'imap'; } else { die "bad mail --format=$fmt\n"; } $self->{dst} = $dst; - $lei->{dedupe} = PublicInbox::LeiDedupe->new($lei); + $lei->{dedupe} = $lei->{lss} // do { + my $dd_cls = 'PublicInbox::'. + ($lei->{opt}->{save} ? 'LeiSavedSearch' : 'LeiDedupe'); + eval "require $dd_cls"; + die "$dd_cls: $@" if $@; + $dd_cls->new($lei); + }; $self; } @@ -368,6 +375,7 @@ sub _pre_augment_maildir { sub _do_augment_maildir { my ($self, $lei) = @_; + return if ($lei->{opt}->{save} // 0) < 0; my $dst = $lei->{ovv}->{dst}; my $lse = $lei->{opt}->{'import-before'} ? $lei->{lse} : undef; my $mdr = PublicInbox::MdirReader->new; @@ -398,6 +406,7 @@ sub _imap_augment_or_delete { # PublicInbox::NetReader::imap_each cb sub _do_augment_imap { my ($self, $lei) = @_; + return if ($lei->{opt}->{save} // 0) < 0; my $net = $lei->{net}; my $lse = $lei->{opt}->{'import-before'} ? $lei->{lse} : undef; if ($lei->{opt}->{augment}) { @@ -468,6 +477,7 @@ sub _do_augment_mbox { my ($self, $lei) = @_; return unless $self->{seekable}; my $opt = $lei->{opt}; + return if ($opt->{save} // 0) < 0; my $out = $lei->{1}; my ($fmt, $dst) = @{$lei->{ovv}}{qw(fmt dst)}; return unless -s $out; @@ -583,7 +593,8 @@ sub poke_dst { } sub write_mail { # via ->wq_io_do - my ($self, $smsg) = @_; + my ($self, $smsg, $eml) = @_; + return $self->{wcb}->(undef, $smsg, $eml) if $eml; $self->{lei}->{ale}->git->cat_async($smsg->{blob}, \&git_to_mail, [$self->{wcb}, $smsg]); }