diff options
author | Tulir Asokan <tulir@maunium.net> | 2018-03-18 21:24:03 +0200 |
---|---|---|
committer | Tulir Asokan <tulir@maunium.net> | 2018-03-18 21:24:03 +0200 |
commit | 72945c9a284b6858594f1e8a43743c397e90c380 (patch) | |
tree | c4dc096f97c546dcc546d50385e2909e2e10b82d /room-view.go | |
parent | 0509b195625c959a7b5556e3baae4f869c4d62f6 (diff) |
Organize files
Diffstat (limited to 'room-view.go')
-rw-r--r-- | room-view.go | 179 |
1 files changed, 0 insertions, 179 deletions
diff --git a/room-view.go b/room-view.go deleted file mode 100644 index 5710788..0000000 --- a/room-view.go +++ /dev/null @@ -1,179 +0,0 @@ -// gomuks - A terminal Matrix client written in Go. -// Copyright (C) 2018 Tulir Asokan -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -package main - -import ( - "fmt" - "hash/fnv" - "sort" - "strings" - "time" - - "github.com/gdamore/tcell" - "maunium.net/go/tview" -) - -type RoomView struct { - *tview.Box - - topic *tview.TextView - content *MessageView - status *tview.TextView - userList *tview.TextView - room *Room - - parent *MainView -} - -var colorNames []string - -func init() { - colorNames = make([]string, len(tcell.ColorNames)) - i := 0 - for name, _ := range tcell.ColorNames { - colorNames[i] = name - i++ - } - sort.Sort(sort.StringSlice(colorNames)) -} - -func NewRoomView(parent *MainView, room *Room) *RoomView { - view := &RoomView{ - Box: tview.NewBox(), - topic: tview.NewTextView(), - content: NewMessageView(), - status: tview.NewTextView(), - userList: tview.NewTextView(), - room: room, - parent: parent, - } - view.topic. - SetText(strings.Replace(room.GetTopic(), "\n", " ", -1)). - SetBackgroundColor(tcell.ColorDarkGreen) - view.status.SetBackgroundColor(tcell.ColorDimGray) - view.userList.SetDynamicColors(true) - return view -} - -func (view *RoomView) Draw(screen tcell.Screen) { - view.Box.Draw(screen) - - x, y, width, height := view.GetRect() - view.topic.SetRect(x, y, width, 1) - view.content.SetRect(x, y+1, width-30, height-2) - view.status.SetRect(x, y+height-1, width, 1) - view.userList.SetRect(x+width-29, y+1, 29, height-2) - - view.topic.Draw(screen) - view.content.Draw(screen) - view.status.Draw(screen) - - borderX := x + width - 30 - background := tcell.StyleDefault.Background(view.GetBackgroundColor()).Foreground(view.GetBorderColor()) - for borderY := y + 1; borderY < y+height-1; borderY++ { - screen.SetContent(borderX, borderY, tview.GraphicsVertBar, nil, background) - } - view.userList.Draw(screen) -} - -func (view *RoomView) SetTyping(users []string) { - for index, user := range users { - member := view.room.GetMember(user) - if member != nil { - users[index] = member.DisplayName - } - } - if len(users) == 0 { - view.status.SetText("") - } else if len(users) < 2 { - view.status.SetText("Typing: " + strings.Join(users, " and ")) - } else { - view.status.SetText(fmt.Sprintf( - "Typing: %s and %s", - strings.Join(users[:len(users)-1], ", "), users[len(users)-1])) - } -} - -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 { - 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 { - return tcell.ColorNames[getColorName(s)] -} - -func color(s string) string { - return fmt.Sprintf("[%s]%s[white]", getColorName(s), s) -} - -func (view *RoomView) UpdateUserList() { - var joined strings.Builder - var invited strings.Builder - for _, user := range view.room.GetMembers() { - if user.Membership == "join" { - joined.WriteString(color(user.DisplayName)) - joined.WriteRune('\n') - } else if user.Membership == "invite" { - invited.WriteString(color(user.DisplayName)) - invited.WriteRune('\n') - } - } - 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) NewMessage(id, sender, text string, timestamp time.Time) *Message { - member := view.room.GetMember(sender) - if member != nil { - sender = member.DisplayName - } - return view.content.NewMessage(id, sender, text, timestamp) -} - -func (view *RoomView) AddMessage(message *Message, direction int) { - view.content.AddMessage(message, direction) - view.parent.Render() -} |