aboutsummaryrefslogtreecommitdiff
path: root/matrix
diff options
context:
space:
mode:
Diffstat (limited to 'matrix')
-rw-r--r--matrix/matrix.go27
-rw-r--r--matrix/sync.go12
2 files changed, 24 insertions, 15 deletions
diff --git a/matrix/matrix.go b/matrix/matrix.go
index 5bd9d17..7391ca0 100644
--- a/matrix/matrix.go
+++ b/matrix/matrix.go
@@ -36,6 +36,7 @@ import (
// It is used for all Matrix calls from the UI and Matrix event handlers.
type Container struct {
client *gomatrix.Client
+ syncer *GomuksSyncer
gmx ifc.Gomuks
ui ifc.GomuksUI
config *config.Config
@@ -172,13 +173,13 @@ func (c *Container) OnLogout() {
func (c *Container) OnLogin() {
c.client.Store = c.config.Session
- syncer := NewGomuksSyncer(c.config.Session)
- syncer.OnEventType("m.room.message", c.HandleMessage)
- syncer.OnEventType("m.room.member", c.HandleMembership)
- syncer.OnEventType("m.typing", c.HandleTyping)
- syncer.OnEventType("m.push_rules", c.HandlePushRules)
- syncer.OnEventType("m.tag", c.HandleTag)
- c.client.Syncer = syncer
+ c.syncer = NewGomuksSyncer(c.config.Session)
+ c.syncer.OnEventType("m.room.message", c.HandleMessage)
+ c.syncer.OnEventType("m.room.member", c.HandleMembership)
+ c.syncer.OnEventType("m.typing", c.HandleTyping)
+ c.syncer.OnEventType("m.push_rules", c.HandlePushRules)
+ c.syncer.OnEventType("m.tag", c.HandleTag)
+ c.client.Syncer = c.syncer
c.UpdateRoomList()
}
@@ -222,8 +223,10 @@ func (c *Container) HandleMessage(evt *gomatrix.Event) {
message := mainView.ProcessMessageEvent(roomView, evt)
if message != nil {
- pushRules := c.PushRules().GetActions(roomView.Room, evt).Should()
- mainView.NotifyMessage(roomView.Room, message, pushRules)
+ if c.syncer.FirstSyncDone {
+ pushRules := c.PushRules().GetActions(roomView.Room, evt).Should()
+ mainView.NotifyMessage(roomView.Room, message, pushRules)
+ }
roomView.AddMessage(message, widget.AppendMessage)
c.ui.Render()
}
@@ -283,8 +286,10 @@ func (c *Container) HandleMembership(evt *gomatrix.Event) {
// TODO This should probably also be in a different place
roomView.UpdateUserList()
- pushRules := c.PushRules().GetActions(roomView.Room, evt).Should()
- mainView.NotifyMessage(roomView.Room, message, pushRules)
+ if c.syncer.FirstSyncDone {
+ pushRules := c.PushRules().GetActions(roomView.Room, evt).Should()
+ mainView.NotifyMessage(roomView.Room, message, pushRules)
+ }
roomView.AddMessage(message, widget.AppendMessage)
c.ui.Render()
}
diff --git a/matrix/sync.go b/matrix/sync.go
index 0169e8e..35a694a 100644
--- a/matrix/sync.go
+++ b/matrix/sync.go
@@ -33,15 +33,17 @@ import (
// replace parts of this default syncer (e.g. the ProcessResponse method). The default syncer uses the observer
// pattern to notify callers about incoming events. See GomuksSyncer.OnEventType for more information.
type GomuksSyncer struct {
- Session *config.Session
- listeners map[string][]gomatrix.OnEventListener // event type to listeners array
+ Session *config.Session
+ listeners map[string][]gomatrix.OnEventListener // event type to listeners array
+ FirstSyncDone bool
}
// NewGomuksSyncer returns an instantiated GomuksSyncer
func NewGomuksSyncer(session *config.Session) *GomuksSyncer {
return &GomuksSyncer{
- Session: session,
- listeners: make(map[string][]gomatrix.OnEventListener),
+ Session: session,
+ listeners: make(map[string][]gomatrix.OnEventListener),
+ FirstSyncDone: false,
}
}
@@ -87,6 +89,8 @@ func (s *GomuksSyncer) ProcessResponse(res *gomatrix.RespSync, since string) (er
}
}
+ s.FirstSyncDone = true
+
return
}