recall: allow recalling messages from any folder
Recall fails when called outside of the "postpone" folder (usually "Drafts"). This makes sense for postponed messages. However, sometimes the user would like to re-edit and re-send an old, possibly sent, message, which would serve as a basis for the new one. This patch allows recall to work outside the postpone folder, thus allowing for re-edition of any message. In the original recall function, if the recalled message is found in the "postpone" folder, once the message has been recalled, re-edited and sent, the original draft is deleted. With this patch, when the message is not in the "postpone" folder, the original message is not deleted. Signed-off-by: inwit <inwit@sindominio.net>
This commit is contained in:
parent
bc087d9b30
commit
bc593ac7cd
2 changed files with 27 additions and 7 deletions
|
@ -12,6 +12,7 @@ import (
|
|||
"git.sr.ht/~rjarry/aerc/models"
|
||||
"git.sr.ht/~rjarry/aerc/widgets"
|
||||
"git.sr.ht/~rjarry/aerc/worker/types"
|
||||
"git.sr.ht/~sircmpwn/getopt"
|
||||
)
|
||||
|
||||
type Recall struct{}
|
||||
|
@ -29,8 +30,21 @@ func (Recall) Complete(aerc *widgets.Aerc, args []string) []string {
|
|||
}
|
||||
|
||||
func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
|
||||
if len(args) != 1 {
|
||||
return errors.New("Usage: recall")
|
||||
force := false
|
||||
|
||||
opts, optind, err := getopt.Getopts(args, "f")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, opt := range opts {
|
||||
switch opt.Option {
|
||||
case 'f':
|
||||
force = true
|
||||
}
|
||||
}
|
||||
|
||||
if len(args) != optind {
|
||||
return errors.New("Usage: recall [-f]")
|
||||
}
|
||||
|
||||
widget := aerc.SelectedTab().(widgets.ProvidesMessage)
|
||||
|
@ -38,7 +52,7 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
if acct == nil {
|
||||
return errors.New("No account selected")
|
||||
}
|
||||
if acct.SelectedDirectory() != acct.AccountConfig().Postpone {
|
||||
if acct.SelectedDirectory() != acct.AccountConfig().Postpone && !force {
|
||||
return errors.New("Can only recall from the postpone directory: " +
|
||||
acct.AccountConfig().Postpone)
|
||||
}
|
||||
|
@ -81,6 +95,10 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
worker := composer.Worker()
|
||||
uids := []uint32{msgInfo.Uid}
|
||||
|
||||
if acct.SelectedDirectory() != acct.AccountConfig().Postpone {
|
||||
return
|
||||
}
|
||||
|
||||
worker.PostAction(&types.DeleteMessages{
|
||||
Uids: uids,
|
||||
}, func(msg types.WorkerMessage) {
|
||||
|
@ -90,8 +108,6 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
composer.Close()
|
||||
}
|
||||
})
|
||||
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -118,9 +118,13 @@ message list, the message in the message viewer, etc).
|
|||
*delete*
|
||||
Deletes the selected message.
|
||||
|
||||
*recall*
|
||||
*recall* [-f]
|
||||
Opens the selected message for re-editing. Messages can only be
|
||||
recalled from the postpone directory.
|
||||
recalled from the postpone directory. The original message is deleted.
|
||||
|
||||
*-f*: Open the message for re-editing even if it is not in the postpone
|
||||
directory. The original message will be deleted only if it is in the
|
||||
postpone directory.
|
||||
|
||||
*forward* [-A] [address...]
|
||||
Opens the composer to forward the selected message to another recipient.
|
||||
|
|
Loading…
Reference in a new issue