mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 18:43:10 -06:00
PR comments; Add more comments
This commit is contained in:
parent
3a08948e15
commit
8ca2f0a793
|
|
@ -433,7 +433,7 @@ func (r *QueryCurrentStateResponse) UnmarshalJSON(data []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// QueryMembershipAtEventRequest requests the membership events for a user
|
||||
// QueryMembershipAtEventRequest requests the membership event for a user
|
||||
// for a list of eventIDs.
|
||||
type QueryMembershipAtEventRequest struct {
|
||||
RoomID string
|
||||
|
|
@ -443,9 +443,10 @@ type QueryMembershipAtEventRequest struct {
|
|||
|
||||
// QueryMembershipAtEventResponse is the response to QueryMembershipAtEventRequest.
|
||||
type QueryMembershipAtEventResponse struct {
|
||||
// Memberships is a map from eventID to a list of events (if any). Events that
|
||||
// do not have known state will return an empty array here.
|
||||
Memberships map[string]*gomatrixserverlib.HeaderedEvent `json:"memberships"`
|
||||
// Membership is a map from eventID to membership event. Events that
|
||||
// do not have known state will return a nil event, resulting in a "leave" membership
|
||||
// when calculating history visibility.
|
||||
Membership map[string]*gomatrixserverlib.HeaderedEvent `json:"membership"`
|
||||
}
|
||||
|
||||
// QueryLeftUsersRequest is a request to calculate users that we (the server) don't share a
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ func (r *Queryer) QueryMembershipAtEvent(
|
|||
request *api.QueryMembershipAtEventRequest,
|
||||
response *api.QueryMembershipAtEventResponse,
|
||||
) error {
|
||||
response.Memberships = make(map[string]*gomatrixserverlib.HeaderedEvent)
|
||||
response.Membership = make(map[string]*gomatrixserverlib.HeaderedEvent)
|
||||
|
||||
info, err := r.DB.RoomInfo(ctx, request.RoomID)
|
||||
if err != nil {
|
||||
|
|
@ -236,16 +236,16 @@ func (r *Queryer) QueryMembershipAtEvent(
|
|||
return fmt.Errorf("requested stateKeyNID for %s was not found", request.UserID)
|
||||
}
|
||||
|
||||
response.Memberships, err = r.DB.GetMembershipForHistoryVisibility(ctx, stateKeyNIDs[request.UserID], info, request.EventIDs...)
|
||||
response.Membership, err = r.DB.GetMembershipForHistoryVisibility(ctx, stateKeyNIDs[request.UserID], info, request.EventIDs...)
|
||||
switch err {
|
||||
case nil:
|
||||
return nil
|
||||
case tables.OptimisationNotSupportedError: // fallthrough
|
||||
case tables.OptimisationNotSupportedError: // fallthrough, slow way of getting the membership events for each event
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
response.Memberships = make(map[string]*gomatrixserverlib.HeaderedEvent)
|
||||
response.Membership = make(map[string]*gomatrixserverlib.HeaderedEvent)
|
||||
stateEntries, err := helpers.MembershipAtEvent(ctx, r.DB, nil, request.EventIDs, stateKeyNIDs[request.UserID])
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to get state before event: %w", err)
|
||||
|
|
@ -270,7 +270,7 @@ func (r *Queryer) QueryMembershipAtEvent(
|
|||
for _, eventID := range request.EventIDs {
|
||||
stateEntry, ok := stateEntries[eventID]
|
||||
if !ok || len(stateEntry) == 0 {
|
||||
response.Memberships[eventID] = nil
|
||||
response.Membership[eventID] = nil
|
||||
continue
|
||||
}
|
||||
|
||||
|
|
@ -287,10 +287,13 @@ func (r *Queryer) QueryMembershipAtEvent(
|
|||
return fmt.Errorf("unable to get memberships at state: %w", err)
|
||||
}
|
||||
|
||||
// Iterate over all membership events we got. Given we only query the membership for
|
||||
// one user and assuming this user only ever has one membership event associated to
|
||||
// a given event, overwrite any other existing membership events.
|
||||
for i := range memberships {
|
||||
ev := memberships[i]
|
||||
if ev.Type() == gomatrixserverlib.MRoomMember && ev.StateKeyEquals(request.UserID) {
|
||||
response.Memberships[eventID] = ev.Event.Headered(info.RoomVersion)
|
||||
response.Membership[eventID] = ev.Event.Headered(info.RoomVersion)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -176,6 +176,9 @@ type Database interface {
|
|||
PurgeRoom(ctx context.Context, roomID string) error
|
||||
UpgradeRoom(ctx context.Context, oldRoomID, newRoomID, eventSender string) error
|
||||
|
||||
// GetMembershipForHistoryVisibility queries the membership events for the given eventIDs.
|
||||
// Returns a map from (input) eventID -> membership event. If no membership event is found, returns an empty event, resulting in
|
||||
// a membership of "leave" when calculating history visibility.
|
||||
GetMembershipForHistoryVisibility(
|
||||
ctx context.Context, userNID types.EventStateKeyNID, info *types.RoomInfo, eventIDs ...string,
|
||||
) (map[string]*gomatrixserverlib.HeaderedEvent, error)
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ CREATE TABLE IF NOT EXISTS roomserver_events (
|
|||
);
|
||||
|
||||
-- Create an index which helps in resolving membership events (event_type_nid = 5) - (used for history visibility)
|
||||
CREATE INDEX IF NOT EXISTS roomserver_events_history_visibility_idx ON roomserver_events (room_nid, event_state_key_nid) where (event_type_nid = 5);
|
||||
CREATE INDEX IF NOT EXISTS roomserver_events_memberships_idx ON roomserver_events (room_nid, event_state_key_nid) WHERE (event_type_nid = 5);
|
||||
`
|
||||
|
||||
const insertEventSQL = "" +
|
||||
|
|
|
|||
|
|
@ -199,7 +199,7 @@ func visibilityForEvents(
|
|||
membershipAtEvent: gomatrixserverlib.Leave, // default to leave, to not expose events by accident
|
||||
visibility: event.Visibility,
|
||||
}
|
||||
ev, ok := membershipResp.Memberships[eventID]
|
||||
ev, ok := membershipResp.Membership[eventID]
|
||||
if !ok || ev == nil {
|
||||
result[eventID] = vis
|
||||
continue
|
||||
|
|
|
|||
Loading…
Reference in a new issue