You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-26 17:03:12 +03:00
don't break the promise chain if a play() fails
This commit is contained in:
@@ -157,11 +157,21 @@ MatrixCall.prototype.placeScreenSharingCall =
|
|||||||
* @param {string} queueId Arbitrary ID to track the chain of promises to be used
|
* @param {string} queueId Arbitrary ID to track the chain of promises to be used
|
||||||
*/
|
*/
|
||||||
MatrixCall.prototype.playElement = function(element, queueId) {
|
MatrixCall.prototype.playElement = function(element, queueId) {
|
||||||
|
console.log("queuing play on " + queueId + " and element " + element);
|
||||||
// XXX: FIXME: Does this leak elements, given the old promises
|
// XXX: FIXME: Does this leak elements, given the old promises
|
||||||
// may hang around and retain a reference to them?
|
// may hang around and retain a reference to them?
|
||||||
if (this.mediaPromises[queueId]) {
|
if (this.mediaPromises[queueId]) {
|
||||||
|
// XXX: these promises can fail (e.g. by <video/> being unmounted whilst
|
||||||
|
// pending receiving media to play - e.g. whilst switching between
|
||||||
|
// rooms before answering an inbound call), and throw unhandled exceptions.
|
||||||
|
// However, we should soldier on as best we can even if they fail, given
|
||||||
|
// these failures may be non-fatal (as in the case of unmounts)
|
||||||
this.mediaPromises[queueId] =
|
this.mediaPromises[queueId] =
|
||||||
this.mediaPromises[queueId].then(function() {
|
this.mediaPromises[queueId].then(function() {
|
||||||
|
console.log("previous promise completed for " + queueId);
|
||||||
|
return element.play();
|
||||||
|
}, function() {
|
||||||
|
console.log("previous promise failed for " + queueId);
|
||||||
return element.play();
|
return element.play();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -177,9 +187,14 @@ MatrixCall.prototype.playElement = function(element, queueId) {
|
|||||||
* @param {string} queueId Arbitrary ID to track the chain of promises to be used
|
* @param {string} queueId Arbitrary ID to track the chain of promises to be used
|
||||||
*/
|
*/
|
||||||
MatrixCall.prototype.pauseElement = function(element, queueId) {
|
MatrixCall.prototype.pauseElement = function(element, queueId) {
|
||||||
|
console.log("queuing pause on " + queueId + " and element " + element);
|
||||||
if (this.mediaPromises[queueId]) {
|
if (this.mediaPromises[queueId]) {
|
||||||
this.mediaPromises[queueId] =
|
this.mediaPromises[queueId] =
|
||||||
this.mediaPromises[queueId].then(function() {
|
this.mediaPromises[queueId].then(function() {
|
||||||
|
console.log("previous promise completed for " + queueId);
|
||||||
|
return element.pause();
|
||||||
|
}, function() {
|
||||||
|
console.log("previous promise failed for " + queueId);
|
||||||
return element.pause();
|
return element.pause();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -199,9 +214,14 @@ MatrixCall.prototype.pauseElement = function(element, queueId) {
|
|||||||
* @param {string} queueId Arbitrary ID to track the chain of promises to be used
|
* @param {string} queueId Arbitrary ID to track the chain of promises to be used
|
||||||
*/
|
*/
|
||||||
MatrixCall.prototype.assignElement = function(element, src, queueId) {
|
MatrixCall.prototype.assignElement = function(element, src, queueId) {
|
||||||
|
console.log("queuing assign on " + queueId + " and element " + element + " for " + src);
|
||||||
if (this.mediaPromises[queueId]) {
|
if (this.mediaPromises[queueId]) {
|
||||||
this.mediaPromises[queueId] =
|
this.mediaPromises[queueId] =
|
||||||
this.mediaPromises[queueId].then(function() {
|
this.mediaPromises[queueId].then(function() {
|
||||||
|
console.log("previous promise completed for " + queueId);
|
||||||
|
element.src = src;
|
||||||
|
}, function() {
|
||||||
|
console.log("previous promise failed for " + queueId);
|
||||||
element.src = src;
|
element.src = src;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user