]> Sergey Matveev's repositories - public-inbox.git/blob - lib/PublicInbox/LeiAddWatch.pm
imap+nntp: share COMPRESS implementation
[public-inbox.git] / lib / PublicInbox / LeiAddWatch.pm
1 # Copyright all contributors <meta@public-inbox.org>
2 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
3
4 # "lei add-watch" command
5 package PublicInbox::LeiAddWatch;
6 use strict;
7 use v5.10.1;
8 use parent qw(PublicInbox::LeiInput);
9
10 sub lei_add_watch {
11         my ($lei, @argv) = @_;
12         my $cfg = $lei->_lei_cfg(1);
13         my $self = bless {}, __PACKAGE__;
14         $lei->{opt}->{'mail-sync'} = 1; # for prepare_inputs
15         my $state = $lei->{opt}->{'state'} // 'import-rw';
16         $lei->watch_state_ok($state) or
17                 return $lei->fail("invalid state: $state");
18         my $vmd_mod = $self->vmd_mod_extract(\@argv);
19         return $lei->fail(join("\n", @{$vmd_mod->{err}})) if $vmd_mod->{err};
20         $self->prepare_inputs($lei, \@argv) or return;
21         my @vmd;
22         while (my ($type, $vals) = each %$vmd_mod) {
23                 push @vmd, "$type:$_" for @$vals;
24         }
25         my $vmd0 = shift @vmd;
26         for my $w (@{$self->{inputs}}) {
27                 # clobber existing, allow multiple
28                 if (defined($vmd0)) {
29                         $lei->_config("watch.$w.vmd", '--replace-all', $vmd0);
30                         for my $v (@vmd) {
31                                 $lei->_config("watch.$w.vmd", $v);
32                         }
33                 }
34                 next if defined $cfg->{"watch.$w.state"};
35                 $lei->_config("watch.$w.state", $state);
36         }
37         $lei->_lei_store(1); # create
38         $lei->lms(1)->lms_write_prepare->add_folders(@{$self->{inputs}});
39         delete $lei->{cfg}; # force reload
40         $lei->refresh_watches;
41 }
42
43 1;