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;
|