From 16635dcde7b3402e7eff44864b4dba5a2ddd8a37 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Fri, 23 Mar 2018 01:00:13 +0200 Subject: Refactor PushRuleset#GetActions() and ViewMain event processing --- matrix/matrix.go | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) (limited to 'matrix/matrix.go') diff --git a/matrix/matrix.go b/matrix/matrix.go index 9423f63..b062057 100644 --- a/matrix/matrix.go +++ b/matrix/matrix.go @@ -222,11 +222,16 @@ func (c *Container) NotifyMessage(room *rooms.Room, sender, text string, critica // HandleMessage is the event handler for the m.room.message timeline event. func (c *Container) HandleMessage(evt *gomatrix.Event) { - room, message := c.ui.MainView().ProcessMessageEvent(evt) - if room != nil { - pushRules := c.PushRules().GetActions(room.Room, evt).Should() + roomView := c.ui.MainView().GetRoom(evt.RoomID) + if roomView == nil { + return + } + + message := c.ui.MainView().ProcessMessageEvent(roomView, evt) + if message != nil { + pushRules := c.PushRules().GetActions(roomView.Room, evt).Should() if (pushRules.Notify || !pushRules.NotifySpecified) && evt.Sender != c.config.Session.UserID { - c.NotifyMessage(room.Room, message.Sender, message.Text, pushRules.Highlight) + c.NotifyMessage(roomView.Room, message.Sender, message.Text, pushRules.Highlight) } if pushRules.Highlight { message.TextColor = tcell.ColorYellow @@ -234,7 +239,7 @@ func (c *Container) HandleMessage(evt *gomatrix.Event) { if pushRules.PlaySound { // TODO play sound } - room.AddMessage(message, widget.AppendMessage) + roomView.AddMessage(message, widget.AppendMessage) c.ui.Render() } } @@ -249,6 +254,22 @@ func (c *Container) HandlePushRules(evt *gomatrix.Event) { } } +func (c *Container) processOwnMembershipChange(evt *gomatrix.Event) { + membership, _ := evt.Content["membership"].(string) + prevMembership := "leave" + if evt.Unsigned.PrevContent != nil { + prevMembership, _ = evt.Unsigned.PrevContent["membership"].(string) + } + if membership == prevMembership { + return + } + if membership == "join" { + c.ui.MainView().AddRoom(evt.RoomID) + } else if membership == "leave" { + c.ui.MainView().RemoveRoom(evt.RoomID) + } +} + // HandleMembership is the event handler for the m.room.membership state event. func (c *Container) HandleMembership(evt *gomatrix.Event) { const Hour = 1 * 60 * 60 * 1000 @@ -256,14 +277,23 @@ func (c *Container) HandleMembership(evt *gomatrix.Event) { return } - room, message := c.ui.MainView().ProcessMembershipEvent(evt, true) - if room != nil { + if evt.StateKey != nil && *evt.StateKey == c.config.Session.UserID { + c.processOwnMembershipChange(evt) + } + + roomView := c.ui.MainView().GetRoom(evt.RoomID) + if roomView == nil { + return + } + + message := c.ui.MainView().ProcessMembershipEvent(roomView, evt) + if message != nil { // TODO this shouldn't be necessary - room.Room.UpdateState(evt) + roomView.Room.UpdateState(evt) // TODO This should probably also be in a different place - room.UpdateUserList() + roomView.UpdateUserList() - room.AddMessage(message, widget.AppendMessage) + roomView.AddMessage(message, widget.AppendMessage) c.ui.Render() } } -- cgit v1.2.3