* fix deafen not working * apply deafen state when call member changes * remove unnecessary condition
64 lines
2.2 KiB
TypeScript
64 lines
2.2 KiB
TypeScript
import { Room } from 'matrix-js-sdk';
|
|
import {
|
|
MatrixRTCSession,
|
|
MatrixRTCSessionEvent,
|
|
} from 'matrix-js-sdk/lib/matrixrtc/MatrixRTCSession';
|
|
import { CallMembership } from 'matrix-js-sdk/lib/matrixrtc/CallMembership';
|
|
import { useEffect, useState } from 'react';
|
|
import { MatrixRTCSessionManagerEvents } from 'matrix-js-sdk/lib/matrixrtc/MatrixRTCSessionManager';
|
|
import { useMatrixClient } from './useMatrixClient';
|
|
|
|
export const useCallSession = (room: Room): MatrixRTCSession => {
|
|
const mx = useMatrixClient();
|
|
|
|
const [session, setSession] = useState(mx.matrixRTC.getRoomSession(room));
|
|
|
|
useEffect(() => {
|
|
const start = (roomId: string) => {
|
|
if (roomId !== room.roomId) return;
|
|
setSession(mx.matrixRTC.getRoomSession(room));
|
|
};
|
|
const end = (roomId: string) => {
|
|
if (roomId !== room.roomId) return;
|
|
setSession(mx.matrixRTC.getRoomSession(room));
|
|
};
|
|
mx.matrixRTC.on(MatrixRTCSessionManagerEvents.SessionStarted, start);
|
|
mx.matrixRTC.on(MatrixRTCSessionManagerEvents.SessionEnded, end);
|
|
return () => {
|
|
mx.matrixRTC.off(MatrixRTCSessionManagerEvents.SessionStarted, start);
|
|
mx.matrixRTC.off(MatrixRTCSessionManagerEvents.SessionEnded, end);
|
|
};
|
|
}, [mx, room]);
|
|
|
|
return session;
|
|
};
|
|
|
|
export const useCallMembers = (room: Room, session: MatrixRTCSession): CallMembership[] => {
|
|
const [memberships, setMemberships] = useState<CallMembership[]>(
|
|
MatrixRTCSession.sessionMembershipsForRoom(room, session.sessionDescription)
|
|
);
|
|
|
|
useEffect(() => {
|
|
const updateMemberships = () => {
|
|
setMemberships(MatrixRTCSession.sessionMembershipsForRoom(room, session.sessionDescription));
|
|
};
|
|
|
|
updateMemberships();
|
|
|
|
session.on(MatrixRTCSessionEvent.MembershipsChanged, updateMemberships);
|
|
return () => {
|
|
session.removeListener(MatrixRTCSessionEvent.MembershipsChanged, updateMemberships);
|
|
};
|
|
}, [session, room]);
|
|
|
|
return memberships;
|
|
};
|
|
|
|
export const useCallMembersChange = (session: MatrixRTCSession, callback: () => void): void => {
|
|
useEffect(() => {
|
|
session.on(MatrixRTCSessionEvent.MembershipsChanged, callback);
|
|
return () => {
|
|
session.removeListener(MatrixRTCSessionEvent.MembershipsChanged, callback);
|
|
};
|
|
}, [session, callback]);
|
|
};
|