recall: confirm deleting message when not sent

Ask for user confirmation when a recalled message is deleted after the
composer is closed but the message has not been sent yet. The message
will only be deleted automatically when the message is sent. This might
prevent data loss since the recalled message is currently deleted either
way.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
Koni Marti 2022-07-05 21:42:43 +02:00 committed by Robin Jarry
parent 99b74dbcc9
commit 4335eeceb3
1 changed files with 34 additions and 9 deletions

View File

@ -2,6 +2,7 @@ package msg
import (
"io"
"time"
"github.com/emersion/go-message"
_ "github.com/emersion/go-message/charset"
@ -99,15 +100,39 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
return
}
worker.PostAction(&types.DeleteMessages{
Uids: uids,
}, func(msg types.WorkerMessage) {
switch msg := msg.(type) {
case *types.Error:
aerc.PushError(msg.Error.Error())
composer.Close()
}
})
deleteMessage := func() {
worker.PostAction(&types.DeleteMessages{
Uids: uids,
}, func(msg types.WorkerMessage) {
switch msg := msg.(type) {
case *types.Done:
aerc.PushStatus("Recalled message deleted", 10*time.Second)
case *types.Error:
aerc.PushError(msg.Error.Error())
}
})
}
if composer.Sent() {
deleteMessage()
} else {
confirm := widgets.NewSelectorDialog(
"Delete recalled message?",
"If you proceed, the recalled message will be deleted.",
[]string{"Cancel", "Proceed"}, 0, aerc.SelectedAccountUiConfig(),
func(option string, err error) {
aerc.CloseDialog()
switch option {
case "Proceed":
deleteMessage()
default:
}
return
},
)
aerc.AddDialog(confirm)
}
})
}