my $ifmt = lc($lei->{opt}->{'in-format'} // '');
# TODO auto-detect?
if ($input =~ m!\Aimaps?://!i) {
- $lei->{net}->imap_each($input, $self->can('input_net_cb'),
+ $lei->{net}->imap_each($input, $self->can('input_imap_cb') //
+ $self->can('input_net_cb'),
$self, @args);
return;
} elsif ($input =~ m!\A(?:nntps?|s?news)://!i) {
- $lei->{net}->nntp_each($input, $self->can('input_net_cb'),
+ $lei->{net}->nntp_each($input, $self->can('input_nntp_cb') //
+ $self->can('input_net_cb'),
$self, @args);
return;
}
sub prepare_inputs { # returns undef on error
my ($self, $lei, $inputs) = @_;
my $in_fmt = $lei->{opt}->{'in-format'};
+ my $sync = $lei->{opt}->{sync} ? {} : undef; # using LeiMailSync
if ($lei->{opt}->{stdin}) {
@$inputs and return
$lei->fail("--stdin and @$inputs do not mix");
check_input_format($lei) or return;
push @$inputs, '/dev/stdin';
+ push @{$sync->{no}}, '/dev/stdin' if $sync;
}
my $net = $lei->{net}; # NetWriter may be created by l2m
my (@f, @d);
require PublicInbox::NetReader;
$net //= PublicInbox::NetReader->new;
$net->add_url($input);
+ if ($sync) {
+ if ($input =~ m!\Aimaps?://!) {
+ push @{$sync->{ok}}, $input;
+ } else {
+ push @{$sync->{no}}, $input;
+ }
+ }
} elsif ($input_path =~ s/\A([a-z0-9]+)://is) {
my $ifmt = lc $1;
if (($in_fmt // $ifmt) ne $ifmt) {
--in-format=$in_fmt and `$ifmt:' conflict
}
+ if ($sync) {
+ if ($ifmt =~ /\A(?:maildir|mh)\z/i) {
+ push @{$sync->{ok}}, $input;
+ } else {
+ push @{$sync->{no}}, $input;
+ }
+ }
my $devfd = $lei->path_to_fd($input_path) // return;
if ($devfd >= 0 || (-f $input_path || -p _)) {
require PublicInbox::MboxLock;
require PublicInbox::MdirReader;
$ifmt eq 'maildir' or return
$lei->fail("$ifmt not supported");
+ $input = $lei->abs_path($input) if $sync;
} else {
return $lei->fail("Unable to handle $input");
}
$input is `eml', not --in-format=$in_fmt
require PublicInbox::Eml;
+ push @{$sync->{no}}, $input if $sync;
} else {
my $devfd = $lei->path_to_fd($input) // return;
if ($devfd >= 0 || -f $input || -p _) {
- push @f, $input
+ push @{$sync->{no}}, $input if $sync;
+ push @f, $input;
} elsif (-d $input) {
- push @d, $input
+ if ($sync) {
+ $input = $lei->abs_path($input);
+ push @{$sync->{ok}}, $input;
+ }
+ push @d, $input;
} else {
return $lei->fail("Unable to handle $input")
}
if (@d) { # TODO: check for MH vs Maildir, here
require PublicInbox::MdirReader;
}
+ if ($sync && $sync->{no}) {
+ return $lei->fail(<<"") if !$sync->{ok};
+--sync specified but no inputs support it
+
+ # non-fatal if some inputs support support sync
+ $lei->err("# --sync will only be used for @{$sync->{ok}}");
+ $lei->err("# --sync is not supported for: @{$sync->{no}}");
+ }
if ($net) {
if (my $err = $net->errors) {
return $lei->fail($err);