aboutsummaryrefslogtreecommitdiff
path: root/ui/room-view.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2019-04-10 01:04:39 +0300
committerTulir Asokan <tulir@maunium.net>2019-04-10 01:04:39 +0300
commitbbde1219479bb257c7bc1f9546bd67e8a151198c (patch)
tree01ae23d19ed4ff44fa218633ae94511778c17ffa /ui/room-view.go
parentdbee49476d47bb391dc6af0b774f9fd101b0c917 (diff)
It compiles. Ship it!
Diffstat (limited to 'ui/room-view.go')
-rw-r--r--ui/room-view.go72
1 files changed, 42 insertions, 30 deletions
diff --git a/ui/room-view.go b/ui/room-view.go
index 2711338..e37760e 100644
--- a/ui/room-view.go
+++ b/ui/room-view.go
@@ -20,7 +20,6 @@ import (
"fmt"
"path/filepath"
"sort"
- "strconv"
"strings"
"time"
@@ -251,7 +250,7 @@ func (view *RoomView) OnKeyEvent(event mauview.KeyEvent) bool {
msgView.AddScrollOffset(-msgView.Height() / 2)
return true
case tcell.KeyEnter:
- if event.Modifiers() & tcell.ModShift == 0 && event.Modifiers() & tcell.ModCtrl == 0 && view.inputSubmitFunc != nil {
+ if event.Modifiers()&tcell.ModShift == 0 && event.Modifiers()&tcell.ModCtrl == 0 && view.inputSubmitFunc != nil {
view.inputSubmitFunc(view, view.input.GetText())
return true
}
@@ -379,6 +378,44 @@ func (view *RoomView) InputTabComplete(text string, cursorOffset int) {
view.SetCompletions(strCompletions)
}
+func (view *RoomView) InputSubmit(text string) {
+ if len(text) == 0 {
+ return
+ } else if cmd := view.parent.cmdProcessor.ParseCommand(view, text); cmd != nil {
+ go view.parent.cmdProcessor.HandleCommand(cmd)
+ } else {
+ go view.SendMessage(mautrix.MsgText, text)
+ }
+ view.SetInputText("")
+}
+
+func (view *RoomView) SendMessage(msgtype mautrix.MessageType, text string) {
+ defer debug.Recover()
+ debug.Print("Sending message", msgtype, text, "to", view.Room.ID)
+ if !view.config.Preferences.DisableEmojis {
+ text = emoji.Sprint(text)
+ }
+ evt := view.parent.matrix.PrepareMarkdownMessage(view.Room.ID, msgtype, text)
+ msg := view.ParseEvent(evt)
+ view.AddMessage(msg)
+ eventID, err := view.parent.matrix.SendEvent(evt)
+ if err != nil {
+ msg.SetState(mautrix.EventStateSendFail)
+ // Show shorter version if available
+ if httpErr, ok := err.(mautrix.HTTPError); ok {
+ err = httpErr
+ if respErr := httpErr.RespError; respErr != nil {
+ err = respErr
+ }
+ }
+ view.AddServiceMessage(fmt.Sprintf("Failed to send message: %v", err))
+ view.parent.parent.Render()
+ } else {
+ debug.Print("Event ID received:", eventID)
+ //view.MessageView().UpdateMessageID(msg, eventID)
+ }
+}
+
func (view *RoomView) MessageView() *MessageView {
return view.content
}
@@ -406,37 +443,12 @@ func (view *RoomView) UpdateUserList() {
}
}
-func (view *RoomView) newUIMessage(id, sender string, msgtype mautrix.MessageType, text string, timestamp time.Time) messages.UIMessage {
- member := view.Room.GetMember(sender)
- displayname := sender
- if member != nil {
- displayname = member.Displayname
- }
- msg := messages.NewTextMessage(id, sender, displayname, msgtype, text, timestamp)
- return msg
-}
-
-func (view *RoomView) NewTempMessage(msgtype mautrix.MessageType, text string) ifc.Message {
- now := time.Now()
- id := strconv.FormatInt(now.UnixNano(), 10)
- sender := ""
- if ownerMember := view.Room.GetMember(view.Room.GetSessionOwner()); ownerMember != nil {
- sender = ownerMember.Displayname
- }
- message := view.newUIMessage(id, sender, msgtype, text, now)
- message.SetState(ifc.MessageStateSending)
- view.AddMessage(message, ifc.AppendMessage)
- return message
-}
-
func (view *RoomView) AddServiceMessage(text string) {
- message := view.newUIMessage(view.parent.matrix.Client().TxnID(), "*", "gomuks.service", text, time.Now())
- message.SetIsService(true)
- view.AddMessage(message, ifc.AppendMessage)
+ view.content.AddMessage(messages.NewServiceMessage(text), AppendMessage)
}
-func (view *RoomView) AddMessage(message ifc.Message, direction ifc.MessageDirection) {
- view.content.AddMessage(message, direction)
+func (view *RoomView) AddMessage(message ifc.Message) {
+ view.content.AddMessage(message, AppendMessage)
}
func (view *RoomView) ParseEvent(evt *mautrix.Event) ifc.Message {