# Copyright (C) 2021 all contributors # License: AGPL-3.0+ # "lei edit-search" edit a saved search following "lei q --save" package PublicInbox::LeiEditSearch; use strict; use v5.10.1; use PublicInbox::LeiSavedSearch; use PublicInbox::LeiUp; use parent qw(PublicInbox::LeiConfig); sub cfg_edit_begin { my ($self) = @_; if (ref($self->{lss}->{-cfg}->{'lei.q.output'})) { delete $self->{lss}->{-cfg}->{'lei.q.output'}; # invalid $self->{lei}->pgr_err(<{lss}->{-f} has multiple values of lei.q.output please remove redundant ones EOM } } sub cfg_verify { my ($self, $cfg) = @_; my $new_out = $cfg->{'lei.q.output'} // ''; return $self->cfg_do_edit(<{-f} has multiple values of lei.q.output EOM return $self->cfg_do_edit(<{-f} needs lei.q.output EOM my $lss = $self->{lss}; my $old_out = $lss->{-cfg}->{'lei.q.output'} // return; return if $old_out eq $new_out; my $lei = $self->{lei}; my $old_path = $old_out; my $new_path = $new_out; s!$PublicInbox::LeiSavedSearch::LOCAL_PFX!! for ($old_path, $new_path); my $dir_old = $lss->can('lss_dir_for')->($lei, \$old_path, 1); my $dir_new = $lss->can('lss_dir_for')->($lei, \$new_path); return if $dir_new eq $dir_old; ($old_out =~ m!\Av2:!i || $new_out =~ m!\Av2:!) and return $self->cfg_do_edit(<cfg_do_edit(<puts("lei.q.output changed from $old_sq to $new_sq"); $lei->qerr("# lei convert $old_sq -o $new_sq"); my $v = !$lei->{opt}->{quiet}; $lei->{opt} = { output => $new_out, verbose => $v }; require PublicInbox::LeiConvert; PublicInbox::LeiConvert::lei_convert($lei, $old_out); $lei->fail(<up($lei, $out) or return; my $f = $lss->{-f}; my $self = bless { lei => $lei, lss => $lss, -f => $f }, __PACKAGE__; $self->cfg_do_edit; } *_complete_edit_search = \&PublicInbox::LeiUp::_complete_up; 1;