MCPcopy Create free account
hub / github.com/daodst/chat / QueryMembershipsForRoom

Method QueryMembershipsForRoom

roomserver/internal/query/query.go:208–293  ·  view source on GitHub ↗

QueryMembershipsForRoom implements api.RoomserverInternalAPI

(
	ctx context.Context,
	request *api.QueryMembershipsForRoomRequest,
	response *api.QueryMembershipsForRoomResponse,
)

Source from the content-addressed store, hash-verified

206
207// QueryMembershipsForRoom implements api.RoomserverInternalAPI
208func (r *Queryer) QueryMembershipsForRoom(
209 ctx context.Context,
210 request *api.QueryMembershipsForRoomRequest,
211 response *api.QueryMembershipsForRoomResponse,
212) error {
213 info, err := r.DB.RoomInfo(ctx, request.RoomID)
214 if err != nil {
215 return err
216 }
217 if info == nil {
218 return nil
219 }
220
221 // If no sender is specified then we will just return the entire
222 // set of memberships for the room, regardless of whether a specific
223 // user is allowed to see them or not.
224 if request.Sender == "" {
225 var events []types.Event
226 var eventNIDs []types.EventNID
227 eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, request.JoinedOnly, request.LocalOnly)
228 if err != nil {
229 if err == sql.ErrNoRows {
230 return nil
231 }
232 return fmt.Errorf("r.DB.GetMembershipEventNIDsForRoom: %w", err)
233 }
234 events, err = r.DB.Events(ctx, eventNIDs)
235 if err != nil {
236 return fmt.Errorf("r.DB.Events: %w", err)
237 }
238 for _, event := range events {
239 clientEvent := gomatrixserverlib.ToClientEvent(event.Event, gomatrixserverlib.FormatAll)
240 response.JoinEvents = append(response.JoinEvents, clientEvent)
241 }
242 return nil
243 }
244
245 membershipEventNID, stillInRoom, isRoomforgotten, err := r.DB.GetMembership(ctx, info.RoomNID, request.Sender)
246 if err != nil {
247 return err
248 }
249
250 response.IsRoomForgotten = isRoomforgotten
251
252 if membershipEventNID == 0 {
253 response.HasBeenInRoom = false
254 response.JoinEvents = nil
255 return nil
256 }
257
258 response.HasBeenInRoom = true
259 response.JoinEvents = []gomatrixserverlib.ClientEvent{}
260
261 var events []types.Event
262 var stateEntries []types.StateEntry
263 if stillInRoom {
264 var eventNIDs []types.EventNID
265 eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, request.JoinedOnly, false)

Callers

nothing calls this directly

Calls 6

StateBeforeEventMethod · 0.80
RoomInfoMethod · 0.65
EventsMethod · 0.65
GetMembershipMethod · 0.65
ErrorMethod · 0.45

Tested by

no test coverage detected