| # Copyright all contributors <meta@public-inbox.org> |
| # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt> |
| |
| # "lei add-watch" command |
| package PublicInbox::LeiAddWatch; |
| use strict; |
| use v5.10.1; |
| use parent qw(PublicInbox::LeiInput); |
| |
| sub lei_add_watch { |
| my ($lei, @argv) = @_; |
| my $cfg = $lei->_lei_cfg(1); |
| my $self = bless {}, __PACKAGE__; |
| $lei->{opt}->{'mail-sync'} = 1; # for prepare_inputs |
| my $state = $lei->{opt}->{'state'} // 'import-rw'; |
| $lei->watch_state_ok($state) or |
| return $lei->fail("invalid state: $state"); |
| $self->prepare_inputs($lei, \@argv) or return; |
| my @vmd; |
| while (my ($type, $vals) = each %{$lei->{vmd_mod}}) { |
| push @vmd, "$type:$_" for @$vals; |
| } |
| my $vmd0 = shift @vmd; |
| for my $w (@{$self->{inputs}}) { |
| # clobber existing, allow multiple |
| if (defined($vmd0)) { |
| $lei->_config("watch.$w.vmd", '--replace-all', $vmd0) |
| or return; |
| for my $v (@vmd) { |
| $lei->_config("watch.$w.vmd", $v) or return; |
| } |
| } |
| next if defined $cfg->{"watch.$w.state"}; |
| $lei->_config("watch.$w.state", $state) or return; |
| } |
| $lei->_lei_store(1); # create |
| $lei->lms(1)->lms_write_prepare->add_folders(@{$self->{inputs}}); |
| delete $lei->{cfg}; # force reload |
| $lei->refresh_watches; |
| } |
| |
| 1; |