From a55ea42d7f5900bd5fc8fad047040c7865824f33 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 15 Jun 2019 01:11:51 +0300 Subject: Unbreak things --- ui/room-view.go | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) (limited to 'ui/room-view.go') diff --git a/ui/room-view.go b/ui/room-view.go index a2e1bc1..b37ebff 100644 --- a/ui/room-view.go +++ b/ui/room-view.go @@ -57,6 +57,8 @@ type RoomView struct { ulBorderScreen *mauview.ProxyScreen ulScreen *mauview.ProxyScreen + userListLoaded bool + prevScreen mauview.Screen parent *MainView @@ -99,7 +101,6 @@ func NewRoomView(parent *MainView, room *rooms.Room) *RoomView { SetTabCompleteFunc(view.InputTabComplete) view.topic. - SetText(strings.Replace(room.GetTopic(), "\n", " ", -1)). SetTextColor(tcell.ColorWhite). SetBackgroundColor(tcell.ColorDarkGreen) @@ -385,11 +386,11 @@ func (view *RoomView) SendMessage(msgtype mautrix.MessageType, text string) { text = emoji.Sprint(text) } evt := view.parent.matrix.PrepareMarkdownMessage(view.Room.ID, msgtype, text) - msg := view.ParseEvent(evt) + msg := view.parseEvent(evt) view.AddMessage(msg) eventID, err := view.parent.matrix.SendEvent(evt) if err != nil { - msg.SetState(mautrix.EventStateSendFail) + msg.State = mautrix.EventStateSendFail // Show shorter version if available if httpErr, ok := err.(mautrix.HTTPError); ok { err = httpErr @@ -401,7 +402,10 @@ func (view *RoomView) SendMessage(msgtype mautrix.MessageType, text string) { view.parent.parent.Render() } else { debug.Print("Event ID received:", eventID) - //view.MessageView().UpdateMessageID(msg, eventID) + msg.EventID = eventID + msg.State = mautrix.EventStateDefault + view.MessageView().setMessageID(msg) + view.parent.parent.Render() } } @@ -413,12 +417,20 @@ func (view *RoomView) MxRoom() *rooms.Room { return view.Room } +func (view *RoomView) Update() { + view.topic.SetText(strings.Replace(view.Room.GetTopic(), "\n", " ", -1)) + if !view.userListLoaded { + view.UpdateUserList() + } +} + func (view *RoomView) UpdateUserList() { pls := &mautrix.PowerLevels{} if plEvent := view.Room.GetStateEvent(mautrix.StatePowerLevels, ""); plEvent != nil { pls = plEvent.Content.GetPowerLevels() } view.userList.Update(view.Room.GetMembers(), pls) + view.userListLoaded = true } func (view *RoomView) AddServiceMessage(text string) { @@ -429,10 +441,18 @@ func (view *RoomView) AddMessage(message ifc.Message) { view.content.AddMessage(message, AppendMessage) } -func (view *RoomView) ParseEvent(evt *mautrix.Event) ifc.Message { +func (view *RoomView) parseEvent(evt *mautrix.Event) *messages.UIMessage { return messages.ParseEvent(view.parent.matrix, view.parent, view.Room, evt) } +func (view *RoomView) ParseEvent(evt *mautrix.Event) ifc.Message { + msg := view.parseEvent(evt) + if msg == nil { + return nil + } + return msg +} + func (view *RoomView) GetEvent(eventID string) ifc.Message { message, ok := view.content.messageIDs[eventID] if !ok { -- cgit v1.2.3 From 160b035c4d5b88516cb4d1f4e26ec2e2e0262bcc Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 15 Jun 2019 17:04:08 +0300 Subject: Unbreak more things --- ui/room-view.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'ui/room-view.go') diff --git a/ui/room-view.go b/ui/room-view.go index b37ebff..48943a7 100644 --- a/ui/room-view.go +++ b/ui/room-view.go @@ -93,6 +93,17 @@ func NewRoomView(parent *MainView, room *rooms.Room) *RoomView { config: parent.config, } view.content = NewMessageView(view) + view.Room.SetOnUnload(func() bool { + if view.parent.currentRoom == view { + return false + } + view.content.Unload() + return true + }) + view.Room.SetOnLoad(func() bool { + view.loadTyping() + return true + }) view.input. SetBackgroundColor(tcell.ColorDefault). @@ -270,14 +281,20 @@ func (view *RoomView) SetCompletions(completions []string) { view.completions.time = time.Now() } -func (view *RoomView) SetTyping(users []string) { - for index, user := range users { +func (view *RoomView) loadTyping() { + for index, user := range view.typing { member := view.Room.GetMember(user) if member != nil { - users[index] = member.Displayname + view.typing[index] = member.Displayname } } +} + +func (view *RoomView) SetTyping(users []string) { view.typing = users + if view.Room.Loaded() { + view.loadTyping() + } } type completion struct { -- cgit v1.2.3 From ef509eb3082e4017284345b195ce0489c90a993d Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 15 Jun 2019 18:03:28 +0300 Subject: Fix infinite recursion --- ui/room-view.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'ui/room-view.go') diff --git a/ui/room-view.go b/ui/room-view.go index 48943a7..00aa09a 100644 --- a/ui/room-view.go +++ b/ui/room-view.go @@ -93,17 +93,14 @@ func NewRoomView(parent *MainView, room *rooms.Room) *RoomView { config: parent.config, } view.content = NewMessageView(view) - view.Room.SetOnUnload(func() bool { + view.Room.SetPreUnload(func() bool { if view.parent.currentRoom == view { return false } view.content.Unload() return true }) - view.Room.SetOnLoad(func() bool { - view.loadTyping() - return true - }) + view.Room.SetPostLoad(view.loadTyping) view.input. SetBackgroundColor(tcell.ColorDefault). -- cgit v1.2.3