From 4335eeceb39184165eef7b0fc608b5c563e62a72 Mon Sep 17 00:00:00 2001 From: Koni Marti Date: Tue, 5 Jul 2022 21:42:43 +0200 Subject: [PATCH] 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 Acked-by: Robin Jarry --- commands/msg/recall.go | 43 +++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/commands/msg/recall.go b/commands/msg/recall.go index 443f8e4..8f21868 100644 --- a/commands/msg/recall.go +++ b/commands/msg/recall.go @@ -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) + } + }) }