aboutsummaryrefslogtreecommitdiff
path: root/room-view.go
diff options
context:
space:
mode:
Diffstat (limited to 'room-view.go')
-rw-r--r--room-view.go64
1 files changed, 50 insertions, 14 deletions
diff --git a/room-view.go b/room-view.go
index 6764e85..4b6feac 100644
--- a/room-view.go
+++ b/room-view.go
@@ -21,6 +21,7 @@ import (
"hash/fnv"
"sort"
"strings"
+ "time"
"github.com/gdamore/tcell"
"maunium.net/go/gomatrix"
@@ -36,7 +37,7 @@ type RoomView struct {
userList *tview.TextView
room *gomatrix.Room
- debug DebugPrinter
+ parent *MainView
}
var colorNames []string
@@ -51,15 +52,15 @@ func init() {
sort.Sort(sort.StringSlice(colorNames))
}
-func NewRoomView(debug DebugPrinter, room *gomatrix.Room) *RoomView {
+func NewRoomView(parent *MainView, room *gomatrix.Room) *RoomView {
view := &RoomView{
Box: tview.NewBox(),
topic: tview.NewTextView(),
- content: NewMessageView(debug),
+ content: NewMessageView(),
status: tview.NewTextView(),
userList: tview.NewTextView(),
room: room,
- debug: debug,
+ parent: parent,
}
view.topic.
SetText(strings.Replace(room.GetTopic(), "\n", " ", -1)).
@@ -108,20 +109,38 @@ func (view *RoomView) SetTyping(users []string) {
}
}
+func (view *RoomView) AutocompleteUser(existingText string) (completions []string) {
+ for _, user := range view.room.GetMembers() {
+ if strings.HasPrefix(user.DisplayName, existingText) {
+ completions = append(completions, user.DisplayName)
+ } else if strings.HasPrefix(user.UserID, existingText) {
+ completions = append(completions, user.UserID)
+ }
+ }
+ return
+}
+
func (view *RoomView) MessageView() *MessageView {
return view.content
}
func getColorName(s string) string {
- h := fnv.New32a()
- h.Write([]byte(s))
- return colorNames[int(h.Sum32())%len(colorNames)]
+ switch s {
+ case "-->":
+ return "green"
+ case "<--":
+ return "red"
+ case "---":
+ return "yellow"
+ default:
+ h := fnv.New32a()
+ h.Write([]byte(s))
+ return colorNames[int(h.Sum32())%len(colorNames)]
+ }
}
func getColor(s string) tcell.Color {
- h := fnv.New32a()
- h.Write([]byte(s))
- return tcell.ColorNames[colorNames[int(h.Sum32())%len(colorNames)]]
+ return tcell.ColorNames[getColorName(s)]
}
func color(s string) string {
@@ -129,12 +148,29 @@ func color(s string) string {
}
func (view *RoomView) UpdateUserList() {
- var buf strings.Builder
+ var joined strings.Builder
+ var invited strings.Builder
for _, user := range view.room.GetMembers() {
if user.Membership == "join" {
- buf.WriteString(color(user.DisplayName))
- buf.WriteRune('\n')
+ joined.WriteString(color(user.DisplayName))
+ joined.WriteRune('\n')
+ } else if user.Membership == "invite" {
+ invited.WriteString(color(user.DisplayName))
+ invited.WriteRune('\n')
}
}
- view.userList.SetText(buf.String())
+ view.userList.Clear()
+ fmt.Fprintf(view.userList, "%s\n", joined.String())
+ if invited.Len() > 0 {
+ fmt.Fprintf(view.userList, "\nInvited:\n%s", invited.String())
+ }
+}
+
+func (view *RoomView) AddMessage(id, sender, message string, timestamp time.Time) {
+ member := view.room.GetMember(sender)
+ if member != nil {
+ sender = member.DisplayName
+ }
+ view.content.AddMessage(id, sender, message, timestamp)
+ view.parent.Render()
}