aboutsummaryrefslogtreecommitdiff
path: root/ui/view-main.go
diff options
context:
space:
mode:
authorTulir Asokan <tulir@maunium.net>2018-03-20 19:14:39 +0200
committerTulir Asokan <tulir@maunium.net>2018-03-20 19:55:42 +0200
commit095b982603c26e250e61cf006157019e2b55be74 (patch)
tree080644e83572b0dff33e77fbad5e2301243fd5ab /ui/view-main.go
parent59cd9003013aa62495d2a73c28f22fd7e64f861a (diff)
Show messages in message view while sending
Diffstat (limited to 'ui/view-main.go')
-rw-r--r--ui/view-main.go54
1 files changed, 41 insertions, 13 deletions
diff --git a/ui/view-main.go b/ui/view-main.go
index 707fd95..01ea7a1 100644
--- a/ui/view-main.go
+++ b/ui/view-main.go
@@ -19,6 +19,7 @@ package ui
import (
"fmt"
"sort"
+ "strconv"
"strings"
"time"
"unicode"
@@ -122,7 +123,7 @@ func (view *MainView) InputTabComplete(text string, cursorOffset int) string {
word := findWordToTabComplete(str)
userCompletions := roomView.AutocompleteUser(word)
if len(userCompletions) == 1 {
- startIndex := len(str)-len(word)
+ startIndex := len(str) - len(word)
completion := userCompletions[0]
if startIndex == 0 {
completion = completion + ": "
@@ -136,20 +137,46 @@ func (view *MainView) InputTabComplete(text string, cursorOffset int) string {
}
func (view *MainView) InputDone(key tcell.Key) {
- if key == tcell.KeyEnter {
- room, text := view.CurrentRoomID(), view.input.GetText()
- if len(text) == 0 {
- return
- } else if text[0] == '/' {
- args := strings.SplitN(text, " ", 2)
- command := strings.ToLower(args[0])
- args = args[1:]
- go view.HandleCommand(room, command, args)
+ if key != tcell.KeyEnter {
+ return
+ }
+ room, text := view.CurrentRoomID(), view.input.GetText()
+ if len(text) == 0 {
+ return
+ } else if text[0] == '/' {
+ args := strings.SplitN(text, " ", 2)
+ command := strings.ToLower(args[0])
+ args = args[1:]
+ go view.HandleCommand(room, command, args)
+ } else {
+ view.SendMessage(room, text)
+ }
+ view.input.SetText("")
+}
+
+func (view *MainView) SendMessage(room, text string) {
+ now := time.Now()
+ roomView := view.GetRoom(room)
+ tempMessage := roomView.NewMessage(
+ strconv.FormatInt(now.UnixNano(), 10),
+ "Sending...", text, now)
+ tempMessage.TimestampColor = tcell.ColorGray
+ tempMessage.TextColor = tcell.ColorGray
+ tempMessage.SenderColor = tcell.ColorGray
+ roomView.AddMessage(tempMessage, widget.AppendMessage)
+ go func() {
+ defer view.gmx.Recover()
+ eventID, err := view.matrix.SendMessage(room, text)
+ if err != nil {
+ tempMessage.TextColor = tcell.ColorRed
+ tempMessage.TimestampColor = tcell.ColorRed
+ tempMessage.SenderColor = tcell.ColorRed
+ tempMessage.Sender = "Error"
+ roomView.SetStatus(fmt.Sprintf("Failed to send message: %s", err))
} else {
- go view.matrix.SendMessage(room, text)
+ roomView.MessageView().UpdateMessageID(tempMessage, eventID)
}
- view.input.SetText("")
- }
+ }()
}
func (view *MainView) HandleCommand(room, command string, args []string) {
@@ -418,6 +445,7 @@ func (view *MainView) ProcessMembershipEvent(evt *gomatrix.Event, new bool) (roo
return
}
message = room.NewMessage(evt.ID, sender, text, unixToTime(evt.Timestamp))
+ message.TextColor = tcell.ColorGreen
}
return
}