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