1 # Copyright (C) 2021 all contributors <meta@public-inbox.org>
2 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
4 # "lei forget-search" forget/remove a saved search "lei q --save"
5 package PublicInbox::LeiForgetSearch;
8 use parent qw(PublicInbox::LeiUp);
9 use PublicInbox::LeiSavedSearch;
13 sub do_forget_search {
14 my ($lei, @outs) = @_;
15 my @dirs; # paths in ~/.local/share/lei/saved-search/
18 my $d = PublicInbox::LeiSavedSearch::lss_dir_for($lei, \$o, 1);
21 } else { # keep going, like rm(1):
22 $cwd //= $lei->rel2abs('.');
23 warn "--save was not used with $o cwd=$cwd\n";
27 my $opt = { safe => 1 };
28 if ($lei->{opt}->{verbose}) {
30 $save = SelectSaver->new($lei->{2});
32 File::Path::remove_tree(@dirs, $opt);
33 $lei->child_error(0) if defined $cwd;
36 sub lei_forget_search {
37 my ($lei, @outs) = @_;
38 my $prune = $lei->{opt}->{prune};
39 $prune // return do_forget_search($lei, @outs);
40 return $lei->fail("--prune and @outs incompatible") if @outs;
41 my @tmp = PublicInbox::LeiSavedSearch::list($lei);
42 my $self = bless { -mail_sync => 1 }, __PACKAGE__;
43 $self->filter_lss($lei, $prune) // return
44 $lei->fail("only --prune=$prune not understood");
45 if ($self->{o_remote}) { # setup lei->{auth}
46 $self->prepare_inputs($lei, $self->{o_remote}) or return;
49 $lei->{auth}->op_merge($ops, $self, $lei) if $lei->{auth};
50 (my $op_c, $ops) = $lei->workers_start($self, 1, $ops);
52 net_merge_all_done($self) unless $lei->{auth};
53 $lei->wait_wq_events($op_c, $ops);
58 my $lei = $self->{lei};
59 for my $o (@{$self->{o_local} // []}) {
61 $lei->qerr("# pruning $o");
62 eval { do_forget_search($lei, $o) };
63 $lei->child_error(0, "E: $@") if $@;
65 for my $o (@{$self->{o_remote} // []}) {
66 my $uri = PublicInbox::URIimap->new($o);
67 next if $lei->{net}->mic_for_folder($uri);
68 $lei->qerr("# pruning $uri");
69 eval { do_forget_search($lei, $o) };
70 $lei->child_error(0, "E: $@") if $@;
74 # called in top-level lei-daemon when LeiAuth is done
75 sub net_merge_all_done {
77 $self->wq_do('do_prune');
81 *_wq_done_wait = \&PublicInbox::LEI::wq_done_wait;
82 *_complete_forget_search = \&PublicInbox::LeiUp::_complete_up;