From c3d79e550b714df64cee11d87d1f89c26bef3dc7 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Tue, 29 Sep 2015 10:18:21 -0300 Subject: [PATCH] Join direct and group video code --- client/views/app/room.coffee | 19 +++--- client/views/app/tabBar/membersList.coffee | 4 +- client/views/app/tabBar/membersList.html | 24 ++++---- client/views/app/userInfo.coffee | 61 ++++++++----------- client/views/app/userInfo.html | 56 ++++++++--------- packages/rocketchat-webrtc/WebRTCClass.coffee | 34 ++++++----- 6 files changed, 95 insertions(+), 103 deletions(-) diff --git a/client/views/app/room.coffee b/client/views/app/room.coffee index e7ac473bb0a..5bbb3736320 100644 --- a/client/views/app/room.coffee +++ b/client/views/app/room.coffee @@ -161,10 +161,10 @@ Template.room.helpers } remoteVideoUrl: -> - return Session.get('remoteVideoUrl') + return WebRTC.getInstanceByRoomId(Session.get('openedRoom')).remoteUrls.get() selfVideoUrl: -> - return Session.get('selfVideoUrl') + return WebRTC.getInstanceByRoomId(Session.get('openedRoom')).localUrl.get() videoActive: -> return (Session.get('remoteVideoUrl') || Session.get('selfVideoUrl')) @@ -585,15 +585,14 @@ Template.room.onRendered -> FlowRouter.go 'direct', {username: fromUsername} - webrtc.onRemoteUrl = (url) -> - RocketChat.TabBar.setTemplate 'membersList' - RocketChat.TabBar.openFlex() - Session.set('remoteVideoUrl', url) + Tracker.autorun -> + if webrtc.remoteUrls.get()?.length > 0 + RocketChat.TabBar.setTemplate 'membersList' + RocketChat.TabBar.openFlex() - webrtc.onSelfUrl = (url) -> - RocketChat.TabBar.setTemplate 'membersList' - RocketChat.TabBar.openFlex() - Session.set('selfVideoUrl', url) + if webrtc.localUrl.get()? + RocketChat.TabBar.setTemplate 'membersList' + RocketChat.TabBar.openFlex() renameRoom = (rid, name) -> diff --git a/client/views/app/tabBar/membersList.coffee b/client/views/app/tabBar/membersList.coffee index 27530c260f8..d7dcb490bda 100644 --- a/client/views/app/tabBar/membersList.coffee +++ b/client/views/app/tabBar/membersList.coffee @@ -1,9 +1,9 @@ Template.membersList.helpers remoteVideoUrl: -> - return Session.get('remoteVideoUrl') + return WebRTC.getInstanceByRoomId(Session.get('openedRoom')).remoteUrls.get() selfVideoUrl: -> - return Session.get('selfVideoUrl') + return WebRTC.getInstanceByRoomId(Session.get('openedRoom')).localUrl.get() tAddUsers: -> return t('Add_users') diff --git a/client/views/app/tabBar/membersList.html b/client/views/app/tabBar/membersList.html index 8f2330ff6a4..2b697394198 100644 --- a/client/views/app/tabBar/membersList.html +++ b/client/views/app/tabBar/membersList.html @@ -1,17 +1,17 @@ diff --git a/packages/rocketchat-webrtc/WebRTCClass.coffee b/packages/rocketchat-webrtc/WebRTCClass.coffee index 49816607670..8df4d55c591 100644 --- a/packages/rocketchat-webrtc/WebRTCClass.coffee +++ b/packages/rocketchat-webrtc/WebRTCClass.coffee @@ -85,6 +85,10 @@ class WebRTCClass ### constructor: (@selfId, @room) -> @peerConnections = {} + + @remoteUrls = new ReactiveVar [] + @localUrl = new ReactiveVar + @transport = new @transportClass @ @transport.onRemoteCall @onRemoteCall.bind @ @@ -105,15 +109,13 @@ class WebRTCClass for remoteStream in peerConnection.getRemoteStreams() urls.push URL.createObjectURL(remoteStream) - @onRemoteUrl?(urls) + @remoteUrls.set urls ### @param id {String} ### getPeerConnection: (id) -> - self = @ - return @peerConnections[id] if @peerConnections[id]? peerConnection = new RTCPeerConnection @config @@ -134,14 +136,14 @@ class WebRTCClass ] for eventName in eventNames - peerConnection.addEventListener eventName, (e) -> - self.log id, e.type, e + peerConnection.addEventListener eventName, (e) => + @log id, e.type, e peerConnection.addEventListener 'icecandidate', (e) => if not e.candidate? return - self.transport.sendCandidate + @transport.sendCandidate to: id from: @selfId candidate: @@ -171,23 +173,22 @@ class WebRTCClass ### getLocalUserMedia: (callback) -> @log 'getLocalUserMedia', arguments - self = @ - if self.localStream? - return callback null, self.localStream + if @localStream? + return callback null, @localStream media = audio: true video: true - onSuccess = (stream) -> - self.localStream = stream - self.onSelfUrl?(URL.createObjectURL(stream)) + onSuccess = (stream) => + @localStream = stream + @localUrl.set URL.createObjectURL(stream) - for id, peerConnection of self.peerConnections + for id, peerConnection of @peerConnections peerConnection.addStream stream - callback null, self.localStream + callback null, @localStream navigator.getUserMedia media, onSuccess, @onError @@ -211,7 +212,10 @@ class WebRTCClass @updateRemoteUrls() stop: -> - @localStream.stop() + @localStream?.stop() + @localUrl.set undefined + delete @localStream + for id, peerConnection of @peerConnections @stopPeerConnection id