Skip to content

Commit

Permalink
fix(remote-sources): update only when neccessary
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
hristoterezov committed Jan 9, 2024
1 parent 269d1cf commit bd04f9b
Showing 1 changed file with 20 additions and 17 deletions.
37 changes: 20 additions & 17 deletions react/features/base/participants/reducer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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);

Expand Down

0 comments on commit bd04f9b

Please sign in to comment.