diff options
author | Eric Wong <e@80x24.org> | 2021-06-09 07:47:50 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2021-06-09 10:03:45 +0000 |
commit | 9048ddfeb4df5cd3a4a8373de48c7137aed55b29 (patch) | |
tree | 55c7cd5c139979328ff1345f036f930782fb5990 /lib/PublicInbox/LeiMailSync.pm | |
parent | ac2cbae7af54527299dbfe927716ebc3c7ec89de (diff) | |
download | public-inbox-9048ddfeb4df5cd3a4a8373de48c7137aed55b29.tar.gz |
We'll be reusing it in other commands, too.
Diffstat (limited to 'lib/PublicInbox/LeiMailSync.pm')
-rw-r--r-- | lib/PublicInbox/LeiMailSync.pm | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/lib/PublicInbox/LeiMailSync.pm b/lib/PublicInbox/LeiMailSync.pm index 558988f3..49e521da 100644 --- a/lib/PublicInbox/LeiMailSync.pm +++ b/lib/PublicInbox/LeiMailSync.pm @@ -315,6 +315,42 @@ sub match_imap_url { "E: `$url' is ambiguous:\n\t".join("\n\t", @match)."\n"; } +# returns undef on failure, number on success +sub group2folders { + my ($self, $lei, $all, $folders) = @_; + return $lei->fail(<<EOM) if @$folders; +--all= not compatible with @$folders on command-line +EOM + my %x = map { $_ => $_ } split(/,/, $all); + my @ok = grep(defined, delete(@x{qw(local remote), ''})); + my @no = keys %x; + if (@no) { + @no = (join(',', @no)); + return $lei->fail(<<EOM); +--all=@no not accepted (must be `local' and/or `remote') +EOM + } + my (%seen, @inc); + my @all = $self->folders; + for my $ok (@ok) { + if ($ok eq 'local') { + @inc = grep(!m!\A[a-z0-9\+]+://!i, @all); + } elsif ($ok eq 'remote') { + @inc = grep(m!\A[a-z0-9\+]+://!i, @all); + } elsif ($ok ne '') { + return $lei->fail("--all=$all not understood"); + } else { + @inc = @all; + } + for (@inc) { + push(@$folders, $_) unless $seen{$_}++; + } + } + scalar(@$folders) || $lei->fail(<<EOM); +no --mail-sync folders known to lei +EOM +} + # map CLI args to folder table entries, returns undef on failure sub arg2folder { my ($self, $lei, $folders) = @_; |