QueryMembershipsForRoom implements api.RoomserverInternalAPI
( ctx context.Context, request *api.QueryMembershipsForRoomRequest, response *api.QueryMembershipsForRoomResponse, )
| 206 | |
| 207 | // QueryMembershipsForRoom implements api.RoomserverInternalAPI |
| 208 | func (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) |
nothing calls this directly
no test coverage detected