Fixes returning to dominant speaker after closing shared video. Renames a method and fix its behaviour was handling both case when removing just video element in small videos (local or remote) and when we are removingParticipantContainer, now just handles the second one and uses focusedID if any or dominantSpeakerID if any, otherwise elects new video.

This commit is contained in:
damencho 2016-03-23 17:45:27 -05:00
parent e330dbf5d1
commit 94d98ec0ab
4 changed files with 19 additions and 15 deletions

View File

@ -383,7 +383,7 @@ SharedVideoThumb.prototype.remove = function () {
// Make sure that the large video is updated if are removing its
// corresponding small video.
this.VideoLayout.updateRemovedVideo(this.id);
this.VideoLayout.updateAfterThumbRemoved(this.id);
// Remove whole container
if (this.container.parentNode) {

View File

@ -191,7 +191,10 @@ LocalVideo.prototype.changeVideo = function (stream) {
let endedHandler = () => {
localVideoContainer.removeChild(localVideo);
this.VideoLayout.updateRemovedVideo(this.id);
// when removing only the video element and we are on stage
// update the stage
if(this.VideoLayout.isCurrentlyOnLarge(this.id))
this.VideoLayout.updateLargeVideo(this.id);
stream.off(TrackEvents.LOCAL_TRACK_STOPPED, endedHandler);
};
stream.on(TrackEvents.LOCAL_TRACK_STOPPED, endedHandler);

View File

@ -156,8 +156,10 @@ RemoteVideo.prototype.removeRemoteStreamElement = function (stream) {
console.info((isVideo ? "Video" : "Audio") +
" removed " + this.id, select);
if (isVideo)
this.VideoLayout.updateRemovedVideo(this.id);
// when removing only the video element and we are on stage
// update the stage
if (isVideo && this.VideoLayout.isCurrentlyOnLarge(this.id))
this.VideoLayout.updateLargeVideo(this.id);
};
/**
@ -168,7 +170,7 @@ RemoteVideo.prototype.remove = function () {
this.removeConnectionIndicator();
// Make sure that the large video is updated if are removing its
// corresponding small video.
this.VideoLayout.updateRemovedVideo(this.id);
this.VideoLayout.updateAfterThumbRemoved(this.id);
// Remove whole container
if (this.container.parentNode) {
this.container.parentNode.removeChild(this.container);

View File

@ -199,21 +199,21 @@ var VideoLayout = {
/**
* Checks if removed video is currently displayed and tries to display
* another one instead.
* Uses focusedID if any or dominantSpeakerID if any,
* otherwise elects new video, in this order.
*/
updateRemovedVideo (id) {
updateAfterThumbRemoved (id) {
if (!this.isCurrentlyOnLarge(id)) {
return;
}
let newId;
// We'll show user's avatar if he is the dominant speaker or if
// his video thumbnail is pinned
if (remoteVideos[id] && (id === pinnedId
|| id === currentDominantSpeaker)) {
newId = id;
} else {
// Otherwise select last visible video
if (pinnedId)
newId = pinnedId;
else if (currentDominantSpeaker)
newId = currentDominantSpeaker;
else // Otherwise select last visible video
newId = this.electLastVisibleVideo();
}
@ -304,8 +304,7 @@ var VideoLayout = {
*/
handleVideoThumbClicked (id) {
if(pinnedId) {
var oldSmallVideo
= VideoLayout.getSmallVideo(pinnedId);
var oldSmallVideo = VideoLayout.getSmallVideo(pinnedId);
if (oldSmallVideo && !interfaceConfig.filmStripOnly)
oldSmallVideo.focus(false);
}