fix(remote-sources): update only when neccessary

Updates the remoteVideoSources set only when neccessary when participant is leaving . This fixes an endless recursion when visitor is promoted or left and there is a screen sharing.
This commit is contained in:
Hristo Terezov
2024-01-08 16:19:10 -06:00
parent 269d1cf5e0
commit bd04f9b72b

View File

@@ -374,23 +374,6 @@ ReducerRegistry.register<IParticipantsState>('features/base/participants',
let oldParticipant = remote.get(id);
let isLocalScreenShare = false;
if (oldParticipant?.sources?.size) {
const videoSources: Map<string, ISourceInfo> | undefined = oldParticipant.sources.get(MEDIA_TYPE.VIDEO);
const newRemoteVideoSources = new Set(state.remoteVideoSources);
if (videoSources?.size) {
for (const source of videoSources.keys()) {
newRemoteVideoSources.delete(source);
}
}
state.remoteVideoSources = newRemoteVideoSources;
} else if (oldParticipant?.fakeParticipant === FakeParticipant.RemoteScreenShare) {
const newRemoteVideoSources = new Set(state.remoteVideoSources);
newRemoteVideoSources.delete(id);
state.remoteVideoSources = newRemoteVideoSources;
}
if (oldParticipant && oldParticipant.conference === conference) {
remote.delete(id);
} else if (local?.id === id) {
@@ -405,6 +388,26 @@ ReducerRegistry.register<IParticipantsState>('features/base/participants',
return state;
}
if (oldParticipant?.sources?.size) {
const videoSources: Map<string, ISourceInfo> | undefined = oldParticipant.sources.get(MEDIA_TYPE.VIDEO);
if (videoSources?.size) {
const newRemoteVideoSources = new Set(state.remoteVideoSources);
for (const source of videoSources.keys()) {
newRemoteVideoSources.delete(source);
}
state.remoteVideoSources = newRemoteVideoSources;
}
} else if (oldParticipant?.fakeParticipant === FakeParticipant.RemoteScreenShare) {
const newRemoteVideoSources = new Set(state.remoteVideoSources);
if (newRemoteVideoSources.delete(id)) {
state.remoteVideoSources = newRemoteVideoSources;
}
}
state.sortedRemoteParticipants.delete(id);
state.raisedHandsQueue = state.raisedHandsQueue.filter(pid => pid.id !== id);