mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-10 16:33:11 -06:00
Update all events instead of only memberships
This commit is contained in:
parent
37a9db5e6a
commit
f7ced6b3c8
|
|
@ -19,7 +19,6 @@ import (
|
|||
"fmt"
|
||||
|
||||
log "github.com/Sirupsen/logrus"
|
||||
"github.com/matrix-org/dendrite/clientapi/events"
|
||||
"github.com/matrix-org/dendrite/common"
|
||||
"github.com/matrix-org/dendrite/common/config"
|
||||
"github.com/matrix-org/dendrite/roomserver/api"
|
||||
|
|
@ -42,9 +41,9 @@ type OutputRoomEvent struct {
|
|||
}
|
||||
|
||||
type prevMembership struct {
|
||||
PrevContent events.MemberContent `json:"prev_content"`
|
||||
PrevID string `json:"replaces_state"`
|
||||
UserID string `json:"prev_sender"`
|
||||
PrevContent json.RawMessage `json:"prev_content"`
|
||||
PrevID string `json:"replaces_state"`
|
||||
UserID string `json:"prev_sender"`
|
||||
}
|
||||
|
||||
// NewOutputRoomEvent creates a new OutputRoomEvent consumer. Call Start() to begin consuming from room servers.
|
||||
|
|
@ -114,13 +113,13 @@ func (s *OutputRoomEvent) onMessage(msg *sarama.ConsumerMessage) error {
|
|||
}).Panicf("roomserver output log: state event lookup failure")
|
||||
}
|
||||
|
||||
ev, err = s.updateMemberEvent(ev, s.keyID, s.privateKey)
|
||||
ev, err = s.updateStateEvent(ev, s.keyID, s.privateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for i := range addsStateEvents {
|
||||
addsStateEvents[i], err = s.updateMemberEvent(addsStateEvents[i], s.keyID, s.privateKey)
|
||||
addsStateEvents[i], err = s.updateStateEvent(addsStateEvents[i], s.keyID, s.privateKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -202,22 +201,11 @@ func (s *OutputRoomEvent) lookupStateEvents(
|
|||
return result, nil
|
||||
}
|
||||
|
||||
func (s *OutputRoomEvent) updateMemberEvent(
|
||||
func (s *OutputRoomEvent) updateStateEvent(
|
||||
event gomatrixserverlib.Event, keyID gomatrixserverlib.KeyID,
|
||||
privateKey []byte,
|
||||
) (gomatrixserverlib.Event, error) {
|
||||
if event.Type() != "m.room.member" {
|
||||
return event, nil
|
||||
}
|
||||
membership, err := event.Membership()
|
||||
if err != nil {
|
||||
return event, err
|
||||
}
|
||||
if membership != "join" {
|
||||
return event, nil
|
||||
}
|
||||
|
||||
prevEvent, err := s.db.GetMembershipEvent(event.RoomID(), *event.StateKey())
|
||||
prevEvent, err := s.db.GetStateEvent(event.Type(), event.RoomID(), *event.StateKey())
|
||||
if err != nil {
|
||||
return event, err
|
||||
}
|
||||
|
|
@ -226,13 +214,8 @@ func (s *OutputRoomEvent) updateMemberEvent(
|
|||
return event, nil
|
||||
}
|
||||
|
||||
var content events.MemberContent
|
||||
if err := json.Unmarshal(prevEvent.Content(), &content); err != nil {
|
||||
return event, err
|
||||
}
|
||||
|
||||
prev := prevMembership{
|
||||
PrevContent: content,
|
||||
PrevContent: prevEvent.Content(),
|
||||
PrevID: prevEvent.EventID(),
|
||||
UserID: prevEvent.Sender(),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,8 +66,8 @@ const selectCurrentStateSQL = "" +
|
|||
const selectJoinedUsersSQL = "" +
|
||||
"SELECT room_id, state_key FROM current_room_state WHERE type = 'm.room.member' AND membership = 'join'"
|
||||
|
||||
const selectJoinEventForUserSQL = "" +
|
||||
"SELECT event_json FROM current_room_state WHERE type = 'm.room.member' AND membership = 'join' AND room_id = $1 AND state_key = $2"
|
||||
const selectStateEventSQL = "" +
|
||||
"SELECT event_json FROM current_room_state WHERE type = $1 AND room_id = $2 AND state_key = $3"
|
||||
|
||||
const selectEventsWithEventIDsSQL = "" +
|
||||
"SELECT added_at, event_json FROM current_room_state WHERE event_id = ANY($1)"
|
||||
|
|
@ -79,7 +79,7 @@ type currentRoomStateStatements struct {
|
|||
selectCurrentStateStmt *sql.Stmt
|
||||
selectJoinedUsersStmt *sql.Stmt
|
||||
selectEventsWithEventIDsStmt *sql.Stmt
|
||||
selectJoinEventForUserStmt *sql.Stmt
|
||||
selectStateEventStmt *sql.Stmt
|
||||
}
|
||||
|
||||
func (s *currentRoomStateStatements) prepare(db *sql.DB) (err error) {
|
||||
|
|
@ -105,7 +105,7 @@ func (s *currentRoomStateStatements) prepare(db *sql.DB) (err error) {
|
|||
if s.selectEventsWithEventIDsStmt, err = db.Prepare(selectEventsWithEventIDsSQL); err != nil {
|
||||
return
|
||||
}
|
||||
if s.selectJoinEventForUserStmt, err = db.Prepare(selectJoinEventForUserSQL); err != nil {
|
||||
if s.selectStateEventStmt, err = db.Prepare(selectStateEventSQL); err != nil {
|
||||
return
|
||||
}
|
||||
return
|
||||
|
|
@ -203,9 +203,9 @@ func rowsToEvents(rows *sql.Rows) ([]gomatrixserverlib.Event, error) {
|
|||
return result, nil
|
||||
}
|
||||
|
||||
func (s *currentRoomStateStatements) selectJoinEventForUser(roomID string, userID string) (*gomatrixserverlib.Event, error) {
|
||||
func (s *currentRoomStateStatements) selectStateEvent(evType string, roomID string, stateKey string) (*gomatrixserverlib.Event, error) {
|
||||
var res []byte
|
||||
if err := s.selectJoinEventForUserStmt.QueryRow(roomID, userID).Scan(&res); err == sql.ErrNoRows {
|
||||
if err := s.selectStateEventStmt.QueryRow(evType, roomID, stateKey).Scan(&res); err == sql.ErrNoRows {
|
||||
return nil, nil
|
||||
}
|
||||
ev, err := gomatrixserverlib.NewEventFromTrustedJSON(res, false)
|
||||
|
|
|
|||
|
|
@ -141,9 +141,11 @@ func (d *SyncServerDatabase) updateRoomState(
|
|||
return nil
|
||||
}
|
||||
|
||||
// GetMembershipEvent returns the Matrix join event for a given user into a given room
|
||||
func (d *SyncServerDatabase) GetMembershipEvent(roomID string, userID string) (*gomatrixserverlib.Event, error) {
|
||||
return d.roomstate.selectJoinEventForUser(roomID, userID)
|
||||
// GetStateEvent returns the Matrix state event of a given type for a given room with a given state key
|
||||
// If no event could be found, returns nil
|
||||
// If there was an issue during the retrieval, returns an error
|
||||
func (d *SyncServerDatabase) GetStateEvent(evType string, roomID string, stateKey string) (*gomatrixserverlib.Event, error) {
|
||||
return d.roomstate.selectStateEvent(evType, roomID, stateKey)
|
||||
}
|
||||
|
||||
// PartitionOffsets implements common.PartitionStorer
|
||||
|
|
|
|||
Loading…
Reference in a new issue