Skip to content

Commit a36db6a

Browse files
committed
Ask for confirmation before deleting message
Fixes #188.
1 parent 1605890 commit a36db6a

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

internal/message/prefs.go

+6
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ import (
1414
"github.com/pkg/errors"
1515
)
1616

17+
var askBeforeDelete = prefs.NewBool(true, prefs.PropMeta{
18+
Name: "Ask Before Deleting",
19+
Section: "Messages",
20+
Description: "Ask before deleting a message.",
21+
})
22+
1723
var showBlockedMessages = prefs.NewBool(false, prefs.PropMeta{
1824
Name: "Show Blocked Messages",
1925
Section: "Messages",

internal/message/view.go

+39-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/diamondburned/arikawa/v3/discord"
1313
"github.com/diamondburned/arikawa/v3/gateway"
1414
"github.com/diamondburned/arikawa/v3/utils/sendpart"
15+
"github.com/diamondburned/chatkit/components/author"
1516
"github.com/diamondburned/gotk4-adwaita/pkg/adw"
1617
"github.com/diamondburned/gotk4/pkg/glib/v2"
1718
"github.com/diamondburned/gotk4/pkg/gtk/v4"
@@ -902,8 +903,45 @@ func (v *View) EditLastMessage() bool {
902903
return true
903904
}
904905

905-
// Delete deletes the message with the given ID.
906+
// Delete deletes the message with the given ID. It may prompt the user to
907+
// confirm the deletion.
906908
func (v *View) Delete(id discord.MessageID) {
909+
if !askBeforeDelete.Value() {
910+
v.delete(id)
911+
return
912+
}
913+
914+
user := "?" // juuust in case
915+
916+
row, ok := v.msgs[messageKeyID(id)]
917+
if ok {
918+
message := row.message.Message()
919+
state := gtkcord.FromContext(v.ctx)
920+
user = state.AuthorMarkup(&gateway.MessageCreateEvent{Message: *message},
921+
author.WithMinimal())
922+
user = "<b>" + user + "</b>"
923+
}
924+
925+
window := app.GTKWindowFromContext(v.ctx)
926+
dialog := adw.NewMessageDialog(window,
927+
locale.Get("Delete Message"),
928+
locale.Sprintf("Are you sure you want to delete %s's message?", user))
929+
dialog.SetBodyUseMarkup(true)
930+
dialog.AddResponse("cancel", locale.Get("_Cancel"))
931+
dialog.AddResponse("delete", locale.Get("_Delete"))
932+
dialog.SetResponseAppearance("delete", adw.ResponseDestructive)
933+
dialog.SetDefaultResponse("cancel")
934+
dialog.SetCloseResponse("cancel")
935+
dialog.ConnectResponse(func(response string) {
936+
switch response {
937+
case "delete":
938+
v.delete(id)
939+
}
940+
})
941+
dialog.Show()
942+
}
943+
944+
func (v *View) delete(id discord.MessageID) {
907945
if msg, ok := v.msgs[messageKeyID(id)]; ok {
908946
// Visual indicator.
909947
msg.SetSensitive(false)

0 commit comments

Comments
 (0)