Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Fix misunderstanding of functional members #11918

Merged
merged 2 commits into from
Nov 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/models/Call.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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 = {
Expand Down
4 changes: 3 additions & 1 deletion src/utils/room/getJoinedNonFunctionalMembers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
27 changes: 5 additions & 22 deletions test/models/Call-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down Expand Up @@ -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");
Expand All @@ -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);
Expand Down
Loading