Add support for m.emote. Fixes #6

This commit is contained in:
Tulir Asokan
2018-03-22 21:44:46 +02:00
parent 702a75a8c0
commit 152b89ed5e
9 changed files with 102 additions and 53 deletions

View File

@ -17,6 +17,7 @@
package types
import (
"fmt"
"regexp"
"strings"
@ -26,13 +27,15 @@ import (
type Message struct {
BasicMeta
Type string
ID string
Text string
sending bool
buffer []string
prevBufferWidth int
}
func NewMessage(id, sender, text, timestamp, date string, senderColor tcell.Color) *Message {
func NewMessage(id, sender, msgtype, text, timestamp, date string, senderColor tcell.Color) *Message {
return &Message{
BasicMeta: BasicMeta{
Sender: sender,
@ -42,9 +45,11 @@ func NewMessage(id, sender, text, timestamp, date string, senderColor tcell.Colo
TextColor: tcell.ColorDefault,
TimestampColor: tcell.ColorDefault,
},
Type: msgtype,
Text: text,
ID: id,
prevBufferWidth: 0,
sending: false,
}
}
@ -65,7 +70,11 @@ func (message *Message) CalculateBuffer(width int) {
return
}
message.buffer = []string{}
forcedLinebreaks := strings.Split(message.Text, "\n")
text := message.Text
if message.Type == "m.emote" {
text = fmt.Sprintf("* %s %s", message.Sender, message.Text)
}
forcedLinebreaks := strings.Split(text, "\n")
newlines := 0
for _, str := range forcedLinebreaks {
if len(str) == 0 && newlines < 1 {
@ -94,6 +103,22 @@ func (message *Message) CalculateBuffer(width int) {
message.prevBufferWidth = width
}
func (message *Message) GetDisplaySender() string {
if message.sending {
return "Sending..."
}
switch message.Type {
case "m.emote":
return ""
default:
return message.Sender
}
}
func (message *Message) SetIsSending(sending bool) {
message.sending = sending
}
func (message *Message) RecalculateBuffer() {
message.CalculateBuffer(message.prevBufferWidth)
}

View File

@ -22,6 +22,7 @@ import (
type MessageMeta interface {
GetSender() string
GetDisplaySender() string
GetSenderColor() tcell.Color
GetTextColor() tcell.Color
GetTimestampColor() tcell.Color
@ -34,6 +35,10 @@ type BasicMeta struct {
SenderColor, TextColor, TimestampColor tcell.Color
}
func (meta *BasicMeta) GetDisplaySender() string {
return meta.Sender
}
func (meta *BasicMeta) GetSender() string {
return meta.Sender
}