mirror of https://github.com/matrix-org/gomatrix
Check that event is a state event.
This commit is contained in:
parent
7e21d59dca
commit
06ec893403
14
events.go
14
events.go
|
@ -7,13 +7,13 @@ import (
|
||||||
|
|
||||||
// Event represents a single Matrix event.
|
// Event represents a single Matrix event.
|
||||||
type Event struct {
|
type Event struct {
|
||||||
StateKey string `json:"state_key"` // The state key for the event. Only present on State Events.
|
StateKey *string `json:"state_key,omitempty"` // The state key for the event. Only present on State Events.
|
||||||
Sender string `json:"sender"` // The user ID of the sender of the event
|
Sender string `json:"sender"` // The user ID of the sender of the event
|
||||||
Type string `json:"type"` // The event type
|
Type string `json:"type"` // The event type
|
||||||
Timestamp int `json:"origin_server_ts"` // The unix timestamp when this message was sent by the origin server
|
Timestamp int `json:"origin_server_ts"` // The unix timestamp when this message was sent by the origin server
|
||||||
ID string `json:"event_id"` // The unique ID of this event
|
ID string `json:"event_id"` // The unique ID of this event
|
||||||
RoomID string `json:"room_id"` // The room the event was sent to. May be nil (e.g. for presence)
|
RoomID string `json:"room_id"` // The room the event was sent to. May be nil (e.g. for presence)
|
||||||
Content map[string]interface{} `json:"content"` // The JSON content of the event.
|
Content map[string]interface{} `json:"content"` // The JSON content of the event.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Body returns the value of the "body" key in the event content if it is
|
// Body returns the value of the "body" key in the event content if it is
|
||||||
|
|
2
room.go
2
room.go
|
@ -13,7 +13,7 @@ func (room Room) UpdateState(event *Event) {
|
||||||
if !exists {
|
if !exists {
|
||||||
room.State[event.Type] = make(map[string]*Event)
|
room.State[event.Type] = make(map[string]*Event)
|
||||||
}
|
}
|
||||||
room.State[event.Type][event.StateKey] = event
|
room.State[event.Type][*event.StateKey] = event
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetStateEvent returns the state event for the given type/state_key combo, or nil.
|
// GetStateEvent returns the state event for the given type/state_key combo, or nil.
|
||||||
|
|
10
sync.go
10
sync.go
|
@ -76,9 +76,11 @@ func (s *DefaultSyncer) ProcessResponse(res *RespSync, since string) (err error)
|
||||||
for roomID, roomData := range res.Rooms.Leave {
|
for roomID, roomData := range res.Rooms.Leave {
|
||||||
room := s.getOrCreateRoom(roomID)
|
room := s.getOrCreateRoom(roomID)
|
||||||
for _, event := range roomData.Timeline.Events {
|
for _, event := range roomData.Timeline.Events {
|
||||||
event.RoomID = roomID
|
if event.StateKey != nil {
|
||||||
room.UpdateState(&event)
|
event.RoomID = roomID
|
||||||
s.notifyListeners(&event)
|
room.UpdateState(&event)
|
||||||
|
s.notifyListeners(&event)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
@ -110,7 +112,7 @@ func (s *DefaultSyncer) shouldProcessResponse(resp *RespSync, since string) bool
|
||||||
for roomID, roomData := range resp.Rooms.Join {
|
for roomID, roomData := range resp.Rooms.Join {
|
||||||
for i := len(roomData.Timeline.Events) - 1; i >= 0; i-- {
|
for i := len(roomData.Timeline.Events) - 1; i >= 0; i-- {
|
||||||
e := roomData.Timeline.Events[i]
|
e := roomData.Timeline.Events[i]
|
||||||
if e.Type == "m.room.member" && e.StateKey == s.UserID {
|
if e.Type == "m.room.member" && *e.StateKey == s.UserID {
|
||||||
m := e.Content["membership"]
|
m := e.Content["membership"]
|
||||||
mship, ok := m.(string)
|
mship, ok := m.(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
|
|
Loading…
Reference in New Issue