diff --git a/webclient/app-controller.js b/webclient/app-controller.js index f8a0d8d35c..55397ed216 100644 --- a/webclient/app-controller.js +++ b/webclient/app-controller.js @@ -134,6 +134,7 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even if ($rootScope.currentCall && $rootScope.currentCall.state != 'ended') { console.trace("rejecting call because we're already in a call"); call.hangup(); + return; } call.onError = $scope.onCallError; call.onHangup = $scope.onCallHangup; @@ -152,13 +153,15 @@ angular.module('MatrixWebClientController', ['matrixService', 'mPresence', 'even $scope.feedback = errStr; } - $rootScope.onCallHangup = function() { - $timeout(function() { - var icon = angular.element('#callEndedIcon'); - $animate.addClass(icon, 'callIconRotate'); - $timeout(function(){ - $rootScope.currentCall = undefined; - }, 4070); - }, 100); + $rootScope.onCallHangup = function(call) { + if (call == $rootScope.currentCall) { + $timeout(function() { + var icon = angular.element('#callEndedIcon'); + $animate.addClass(icon, 'callIconRotate'); + $timeout(function(){ + $rootScope.currentCall = undefined; + }, 4070); + }, 100); + } } }]); diff --git a/webclient/components/matrix/matrix-call.js b/webclient/components/matrix/matrix-call.js index feb113f60d..68bde78862 100644 --- a/webclient/components/matrix/matrix-call.js +++ b/webclient/components/matrix/matrix-call.js @@ -114,7 +114,7 @@ angular.module('MatrixCall', []) }; matrixService.sendEvent(this.room_id, 'm.call.hangup', undefined, content).then(this.messageSent, this.messageSendFailed); this.state = 'ended'; - self.onHangup(); + if (self.onHangup) self.onHangup(self); }; MatrixCall.prototype.gotUserMediaForInvite = function(stream) { @@ -178,6 +178,10 @@ angular.module('MatrixCall', []) MatrixCall.prototype.gotRemoteIceCandidate = function(cand) { console.trace("Got ICE candidate from remote: "+cand); + if (this.state == 'ended') { + console.trace("Ignoring remote ICE candidate because call has ended"); + return; + } var candidateObject = new RTCIceCandidate({ sdpMLineIndex: cand.label, candidate: cand.candidate @@ -294,10 +298,10 @@ angular.module('MatrixCall', []) self = this; $rootScope.$apply(function() { self.state = 'ended'; - this.hangupParty = 'remote'; + self.hangupParty = 'remote'; self.stopAllMedia(); - this.peerConn.close(); - self.onHangup(); + if (self.peerConn.signalingState != 'closed') self.peerConn.close(); + if (self.onHangup) self.onHangup(self); }); }; @@ -313,7 +317,7 @@ angular.module('MatrixCall', []) this.hangupParty = 'remote'; this.stopAllMedia(); this.peerConn.close(); - this.onHangup(); + if (this.onHangup) this.onHangup(self); }; return MatrixCall;