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;
48 $lei->wq1_start($self);
53 my $lei = $self->{lei};
54 for my $o (@{$self->{o_local} // []}) {
56 $lei->qerr("# pruning $o");
57 eval { do_forget_search($lei, $o) };
58 $lei->child_error(0, "E: $@") if $@;
60 for my $o (@{$self->{o_remote} // []}) {
61 my $uri = PublicInbox::URIimap->new($o);
62 next if $lei->{net}->mic_for_folder($uri);
63 $lei->qerr("# pruning $uri");
64 eval { do_forget_search($lei, $o) };
65 $lei->child_error(0, "E: $@") if $@;
69 # called in top-level lei-daemon when LeiAuth is done
70 sub net_merge_all_done {
72 $self->wq_do('do_prune');
76 *_wq_done_wait = \&PublicInbox::LEI::wq_done_wait;
77 *_complete_forget_search = \&PublicInbox::LeiUp::_complete_up;