diff --git a/src/models/Call.ts b/src/models/Call.ts index 9f41787c46..24de62334c 100644 --- a/src/models/Call.ts +++ b/src/models/Call.ts @@ -53,7 +53,7 @@ import { getCurrentLanguage } from "../languageHandler"; import { FontWatcher } from "../settings/watchers/FontWatcher"; import { PosthogAnalytics } from "../PosthogAnalytics"; import { UPDATE_EVENT } from "../stores/AsyncStore"; -import { getFunctionalMembers } from "../utils/room/getFunctionalMembers"; +import { getJoinedNonFunctionalMembers } from "../utils/room/getJoinedNonFunctionalMembers"; const TIMEOUT_MS = 16000; @@ -773,7 +773,7 @@ export class ElementCall extends Call { // We only want to ring in rooms that have less or equal to NOTIFY_MEMBER_LIMIT participants. For really large rooms we don't want to ring. const NOTIFY_MEMBER_LIMIT = 15; - const memberCount = getFunctionalMembers(room).length; + const memberCount = getJoinedNonFunctionalMembers(room).length; if (!isVideoRoom && existingRoomCallMembers.length == 0 && memberCount <= NOTIFY_MEMBER_LIMIT) { // send ringing event const content: ICallNotifyContent = { diff --git a/src/utils/room/getJoinedNonFunctionalMembers.ts b/src/utils/room/getJoinedNonFunctionalMembers.ts index 20a1b37eb8..a12284e726 100644 --- a/src/utils/room/getJoinedNonFunctionalMembers.ts +++ b/src/utils/room/getJoinedNonFunctionalMembers.ts @@ -19,7 +19,9 @@ import { Room, RoomMember } from "matrix-js-sdk/src/matrix"; import { getFunctionalMembers } from "./getFunctionalMembers"; /** - * Returns all room members that are non-functional (bots etc.). + * Returns all room members that are non-functional (all actual room members). + * + * A functional user is a user that is not a real user, but a bot, assistant, etc. */ export const getJoinedNonFunctionalMembers = (room: Room): RoomMember[] => { const functionalMembers = getFunctionalMembers(room); diff --git a/test/models/Call-test.ts b/test/models/Call-test.ts index 78d0ad37fd..3b00e1cdd7 100644 --- a/test/models/Call-test.ts +++ b/test/models/Call-test.ts @@ -17,15 +17,7 @@ limitations under the License. import EventEmitter from "events"; import { mocked } from "jest-mock"; import { waitFor } from "@testing-library/react"; -import { - RoomType, - Room, - RoomEvent, - MatrixEvent, - RoomStateEvent, - PendingEventOrdering, - UNSTABLE_ELEMENT_FUNCTIONAL_USERS, -} from "matrix-js-sdk/src/matrix"; +import { RoomType, Room, RoomEvent, MatrixEvent, RoomStateEvent, PendingEventOrdering } from "matrix-js-sdk/src/matrix"; import { Widget } from "matrix-widget-api"; // eslint-disable-next-line no-restricted-imports import { MatrixRTCSessionManagerEvents } from "matrix-js-sdk/src/matrixrtc/MatrixRTCSessionManager"; @@ -991,20 +983,11 @@ describe("ElementCall", () => { }); }); describe("create call", () => { - function setFunctionalMembers(members: string[]) { - room.currentState.setStateEvents([ - mkEvent({ - event: true, - type: UNSTABLE_ELEMENT_FUNCTIONAL_USERS.name, - user: "@user:example.com", - room: room.roomId, - skey: "", - content: { service_members: members }, - }), - ]); + function setRoomMembers(memberIds: string[]) { + jest.spyOn(room, "getJoinedMembers").mockReturnValue(memberIds.map((id) => ({ userId: id } as RoomMember))); } beforeEach(async () => { - setFunctionalMembers(["@user:example.com", "@user2:example.com", "@user4:example.com"]); + setRoomMembers(["@user:example.com", "@user2:example.com", "@user4:example.com"]); }); it("sends notify event on create in a room with more than two members", async () => { const sendEventSpy = jest.spyOn(room.client, "sendEvent"); @@ -1017,7 +1000,7 @@ describe("ElementCall", () => { }); }); it("sends ring on create in a DM (two participants) room", async () => { - setFunctionalMembers(["@user:example.com", "@user2:example.com"]); + setRoomMembers(["@user:example.com", "@user2:example.com"]); const sendEventSpy = jest.spyOn(room.client, "sendEvent"); await ElementCall.create(room);