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
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
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;
$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);
}
$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) };
$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;
}
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;
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}) {
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;
}
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]);
}