Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Calviño Sánchez <danxuliu@gmail.com>2019-12-04 15:20:17 +0300
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2019-12-05 12:06:38 +0300
commit25f7d7cdf4718244f69b1452ba3782eed5023f00 (patch)
treee0f7e221f9c015cbfdca6c032cb175ddfd5582a2
parentf9b5d5bbfe4f3731cc3c33a82390c61f096405f1 (diff)
Handle screen Peer in CallParticipantmodel
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
-rw-r--r--js/models/callparticipantmodel.js40
-rw-r--r--js/views/videoview.js10
-rw-r--r--js/webrtc.js45
3 files changed, 53 insertions, 42 deletions
diff --git a/js/models/callparticipantmodel.js b/js/models/callparticipantmodel.js
index b37e9eec7..4e309db01 100644
--- a/js/models/callparticipantmodel.js
+++ b/js/models/callparticipantmodel.js
@@ -51,6 +51,7 @@
stream: null,
audioAvailable: undefined,
videoAvailable: undefined,
+ screen: null,
},
sync: function(method, model, options) {
@@ -75,26 +76,26 @@
},
_handlePeerStreamAdded: function(peer) {
- if (this._peer !== peer) {
- return;
- }
+ if (this._peer === peer) {
+ this.set('stream', this._peer.stream || null);
- this.set('stream', peer.stream || null);
-
- // "peer.nick" is set only for users and when the MCU is not used.
- if (this._peer.nick !== undefined) {
- this.set('name', this._peer.nick);
+ // "peer.nick" is set only for users and when the MCU is not used.
+ if (this._peer.nick !== undefined) {
+ this.set('name', this._peer.nick);
+ }
+ } else if (this._screenPeer === peer) {
+ this.set('screen', this._screenPeer.stream || null);
}
},
_handlePeerStreamRemoved: function(peer) {
- if (this._peer !== peer) {
- return;
+ if (this._peer === peer) {
+ this.set('stream', null);
+ this.set('audioAvailable', undefined);
+ this.set('videoAvailable', undefined);
+ } else if (this._screenPeer === peer) {
+ this.set('screen', null);
}
-
- this.set('stream', null);
- this.set('audioAvailable', undefined);
- this.set('videoAvailable', undefined);
},
_handleNick: function(data) {
@@ -206,6 +207,17 @@
}
},
+ setScreenPeer: function(screenPeer) {
+ if (this.get('peerId') !== screenPeer.id) {
+ console.warn('Mismatch between stored peer ID and ID of given screen peer: ', this.get('peerId'), screenPeer.id);
+ }
+
+ this._screenPeer = screenPeer;
+
+ // Reset state that depends on the screen Peer object.
+ this._handlePeerStreamAdded(this._screenPeer);
+ },
+
setUserId: function(userId) {
this.set('userId', userId);
},
diff --git a/js/views/videoview.js b/js/views/videoview.js
index 0118874d4..8e193a0b9 100644
--- a/js/views/videoview.js
+++ b/js/views/videoview.js
@@ -78,6 +78,9 @@
'change:stream': '_setStream',
'change:audioAvailable': '_setAudioAvailable',
'change:videoAvailable': '_setVideoAvailable',
+ 'change:screen': function(model, screen) {
+ this._setScreenAvailable(this.model.get('screen'));
+ },
},
initialize: function() {
@@ -100,6 +103,7 @@
this._setStream(this.model, this.model.get('stream'));
this._setAudioAvailable(this.model, this.model.get('audioAvailable'));
this._setVideoAvailable(this.model, this.model.get('videoAvailable'));
+ this._setScreenAvailable(this.model.get('screen'));
this.getUI('hideRemoteVideoButton').tooltip({
placement: 'top',
@@ -352,18 +356,22 @@
this.$el.toggleClass('promoted', promoted);
},
- setScreenAvailable: function(screenAvailable) {
+ _setScreenAvailable: function(screenAvailable) {
if (!screenAvailable) {
this.getUI('screenSharingIndicator')
.removeClass('screen-on')
.addClass('screen-off');
+ OCA.SpreedMe.speakers.updateVideoContainerDummyIfLatestSpeaker(this.model.get('peerId'));
+
return;
}
this.getUI('screenSharingIndicator')
.removeClass('screen-off')
.addClass('screen-on');
+
+ OCA.SpreedMe.speakers.updateVideoContainerDummyIfLatestSpeaker(this.model.get('peerId'));
},
setScreenVisible: function(screenVisible) {
diff --git a/js/webrtc.js b/js/webrtc.js
index 2c3a4ba69..cf5a11531 100644
--- a/js/webrtc.js
+++ b/js/webrtc.js
@@ -496,8 +496,6 @@ var spreedPeerConnectionTable = [];
callParticipantModel.setPeer(null);
}
- videoView.setScreenAvailable(!!spreedListofSharedScreens[id]);
-
OCA.SpreedMe.videos.videoViews[id] = videoView;
videoView.$el.prependTo($('#videos'));
@@ -840,14 +838,6 @@ var spreedPeerConnectionTable = [];
spreedListofSharedScreens[id] = (new Date()).getTime();
- var currentUser = OCA.SpreedMe.webrtc.connection.getSessionid();
- if (currentUser !== id) {
- var videoView = OCA.SpreedMe.videos.videoViews[id];
- if (videoView) {
- videoView.setScreenAvailable(true);
- }
- }
-
OCA.SpreedMe.sharedScreens.switchScreenToId(id);
},
remove: function(id) {
@@ -864,11 +854,6 @@ var spreedPeerConnectionTable = [];
delete spreedListofSharedScreens[id];
- var videoView = OCA.SpreedMe.videos.videoViews[id];
- if (videoView) {
- videoView.setScreenAvailable(false);
- }
-
var mostRecentTime = 0,
mostRecentId = null;
for (var currentId in spreedListofSharedScreens) {
@@ -897,21 +882,27 @@ var spreedPeerConnectionTable = [];
OCA.SpreedMe.webrtc.on('createdPeer', function (peer) {
console.log('PEER CREATED', peer);
- if (peer.type === 'video') {
- if (peer.id !== OCA.SpreedMe.webrtc.connection.getSessionid()) {
- // In some strange cases a Peer can be added before its
- // participant is found in the list of participants.
- var callParticipantModel = OCA.SpreedMe.callParticipantModels[peer.id];
- if (!callParticipantModel) {
- callParticipantModel = new OCA.Talk.Models.CallParticipantModel({
- peerId: peer.id,
- webRtc: OCA.SpreedMe.webrtc,
- });
- OCA.SpreedMe.callParticipantModels[peer.id] = callParticipantModel;
- }
+
+ if (peer.id !== OCA.SpreedMe.webrtc.connection.getSessionid() && !peer.sharemyscreen) {
+ // In some strange cases a Peer can be added before its
+ // participant is found in the list of participants.
+ var callParticipantModel = OCA.SpreedMe.callParticipantModels[peer.id];
+ if (!callParticipantModel) {
+ callParticipantModel = new OCA.Talk.Models.CallParticipantModel({
+ peerId: peer.id,
+ webRtc: OCA.SpreedMe.webrtc,
+ });
+ OCA.SpreedMe.callParticipantModels[peer.id] = callParticipantModel;
+ }
+
+ if (peer.type === 'video') {
callParticipantModel.setPeer(peer);
+ } else {
+ callParticipantModel.setScreenPeer(peer);
}
+ }
+ if (peer.type === 'video') {
OCA.SpreedMe.videos.addPeer(peer);
// Make sure required data channels exist for all peers. This
// is required for peers that get created by SimpleWebRTC from