Add better leave call behavior

This commit is contained in:
Robert Long 2021-07-27 15:49:00 -07:00
parent d040a7b733
commit 802a08987d
2 changed files with 30 additions and 0 deletions

View File

@ -406,6 +406,22 @@ export class ConferenceCallManager extends EventEmitter {
};
leaveCall() {
const userId = this.client.getUserId();
const currentMemberState = this.room.currentState.getStateEvents(
"m.room.member",
userId
);
this.client.sendStateEvent(
this.roomId,
"m.room.member",
{
...currentMemberState.getContent(),
[CONF_PARTICIPANT]: null,
},
userId
);
for (const participant of this.participants) {
if (!participant.local && participant.call) {
participant.call.hangup("user_hangup", false);
@ -416,6 +432,7 @@ export class ConferenceCallManager extends EventEmitter {
this.participants = [this.localParticipant];
this.localParticipant.feed = null;
this.localParticipant.call = null;
this.emit("participants_changed");
}
}

View File

@ -116,6 +116,18 @@ export function useVideoRoom(manager, roomId, timeout = 5000) {
error: undefined,
});
useEffect(() => {
function onBeforeUnload(event) {
manager.leaveCall();
}
window.addEventListener("beforeunload", onBeforeUnload);
return () => {
window.removeEventListener("beforeunload", onBeforeUnload);
};
}, [manager]);
useEffect(() => {
setState((prevState) => ({
...prevState,
@ -169,6 +181,7 @@ export function useVideoRoom(manager, roomId, timeout = 5000) {
return () => {
manager.client.removeListener("Room", roomCallback);
manager.leaveCall();
clearTimeout(timeoutId);
};
}, [roomId]);