diff --git a/webclient/app-controller.js b/webclient/app-controller.js index 20b507672..4a57f66ef 100644 --- a/webclient/app-controller.js +++ b/webclient/app-controller.js @@ -118,7 +118,7 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even angular.element('#ringAudio')[0].pause(); angular.element('#ringbackAudio')[0].pause(); angular.element('#callendAudio')[0].play(); - } else if (newVal == 'ended' && oldVal == 'invite_sent') { + } else if (newVal == 'ended' && oldVal == 'invite_sent' && $rootScope.currentCall.hangupParty == 'remote') { angular.element('#ringAudio')[0].pause(); angular.element('#ringbackAudio')[0].pause(); angular.element('#busyAudio')[0].play(); diff --git a/webclient/components/matrix/matrix-call.js b/webclient/components/matrix/matrix-call.js index ae20b7650..aae00a3f7 100644 --- a/webclient/components/matrix/matrix-call.js +++ b/webclient/components/matrix/matrix-call.js @@ -58,12 +58,13 @@ angular.module('MatrixCall', []) this.didConnect = false; } - MatrixCall.prototype.placeCall = function() { + MatrixCall.prototype.placeCall = function(config) { self = this; matrixPhoneService.callPlaced(this); - navigator.getUserMedia({audio: true, video: false}, function(s) { self.gotUserMediaForInvite(s); }, function(e) { self.getUserMediaFailed(e); }); - self.state = 'wait_local_media'; + navigator.getUserMedia({audio: config.audio, video: config.video}, function(s) { self.gotUserMediaForInvite(s); }, function(e) { self.getUserMediaFailed(e); }); + this.state = 'wait_local_media'; this.direction = 'outbound'; + this.config = config; }; MatrixCall.prototype.initWithInvite = function(msg) { @@ -105,6 +106,8 @@ angular.module('MatrixCall', []) this.stopAllMedia(); this.peerConn.close(); + this.hangupParty = 'local'; + var content = { version: 0, call_id: this.call_id, @@ -285,6 +288,7 @@ angular.module('MatrixCall', []) self = this; $rootScope.$apply(function() { self.state = 'ended'; + this.hangupParty = 'remote'; self.stopAllMedia(); this.peerConn.close(); self.onHangup(); @@ -300,6 +304,7 @@ angular.module('MatrixCall', []) MatrixCall.prototype.onHangupReceived = function() { this.state = 'ended'; + this.hangupParty = 'remote'; this.stopAllMedia(); this.peerConn.close(); this.onHangup(); diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js index 59f64061c..3d75ef549 100644 --- a/webclient/room/room-controller.js +++ b/webclient/room/room-controller.js @@ -756,7 +756,15 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) var call = new MatrixCall($scope.room_id); call.onError = $rootScope.onCallError; call.onHangup = $rootScope.onCallHangup; - call.placeCall(); + call.placeCall({audio: true, video: false}); + $rootScope.currentCall = call; + }; + + $scope.startVideoCall = function() { + var call = new MatrixCall($scope.room_id); + call.onError = $rootScope.onCallError; + call.onHangup = $rootScope.onCallHangup; + call.placeCall({audio: true, video: true}); $rootScope.currentCall = call; };