aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--interface/matrix.go1
-rw-r--r--matrix/matrix.go8
-rw-r--r--ui/commands.go5
-rw-r--r--ui/room-view.go17
4 files changed, 25 insertions, 6 deletions
diff --git a/interface/matrix.go b/interface/matrix.go
index 34e8dda..6814f07 100644
--- a/interface/matrix.go
+++ b/interface/matrix.go
@@ -42,6 +42,7 @@ type MatrixContainer interface {
SendPreferencesToMatrix()
PrepareMarkdownMessage(roomID string, msgtype mautrix.MessageType, message string, relation *Relation) *event.Event
SendEvent(evt *event.Event) (string, error)
+ Redact(roomID, eventID, reason string) error
SendTyping(roomID string, typing bool)
MarkRead(roomID, eventID string)
JoinRoom(roomID, server string) (*rooms.Room, error)
diff --git a/matrix/matrix.go b/matrix/matrix.go
index 8cf2e96..4408ac5 100644
--- a/matrix/matrix.go
+++ b/matrix/matrix.go
@@ -768,7 +768,13 @@ func (c *Container) PrepareMarkdownMessage(roomID string, msgtype mautrix.Messag
return localEcho
}
-// SendMarkdownMessage sends a message with the given markdown text to the given room.
+func (c *Container) Redact(roomID, eventID, reason string) error {
+ defer debug.Recover()
+ _, err := c.client.RedactEvent(roomID, eventID, mautrix.ReqRedact{Reason: reason})
+ return err
+}
+
+// SendMessage sends the given event.
func (c *Container) SendEvent(event *event.Event) (string, error) {
defer debug.Recover()
diff --git a/ui/commands.go b/ui/commands.go
index 9ef0577..879aca7 100644
--- a/ui/commands.go
+++ b/ui/commands.go
@@ -151,10 +151,7 @@ func cmdReply(cmd *Command) {
}
func cmdRedact(cmd *Command) {
- cmd.Reply("Not yet implemented 3:")
-
- // This needs to be implemented in RoomView's OnSelect method
- //cmd.Room.StartSelecting(SelectRedact, "")
+ cmd.Room.StartSelecting(SelectRedact, strings.Join(cmd.Args, " "))
}
func cmdReact(cmd *Command) {
diff --git a/ui/room-view.go b/ui/room-view.go
index 0e728a3..11b4508 100644
--- a/ui/room-view.go
+++ b/ui/room-view.go
@@ -190,7 +190,7 @@ func (view *RoomView) OnSelect(message *messages.UIMessage) {
case SelectReact:
go view.SendReaction(message.EventID, view.selectContent)
case SelectRedact:
- // TODO redact
+ go view.Redact(message.EventID, view.selectContent)
}
view.selecting = false
view.selectContent = ""
@@ -580,6 +580,21 @@ func (view *RoomView) InputSubmit(text string) {
view.SetInputText("")
}
+func (view *RoomView) Redact(eventID, reason string) {
+ defer debug.Recover()
+ err := view.parent.matrix.Redact(view.Room.ID, eventID, reason)
+ if err != nil {
+ if httpErr, ok := err.(mautrix.HTTPError); ok {
+ err = httpErr
+ if respErr := httpErr.RespError; respErr != nil {
+ err = respErr
+ }
+ }
+ view.AddServiceMessage(fmt.Sprintf("Failed to redact message: %v", err))
+ view.parent.parent.Render()
+ }
+}
+
func (view *RoomView) SendReaction(eventID string, reaction string) {
defer debug.Recover()
debug.Print("Reacting to", eventID, "in", view.Room.ID, "with", reaction)