From e90a603d57836f6b8962a661b4668fd81c9b72a4 Mon Sep 17 00:00:00 2001 From: Arthur Hulsman Date: Tue, 6 Mar 2018 17:27:59 +0100 Subject: [PATCH] Removed a double this.enabled variable and updated a comment in ads.js. Also made sure the adsmanager promise also can fail, so we can use it to wait for getting the advertisement ready when someone clicks the play button. Otherwise there it can look glitchy when the actual video starts playing and the video ad plays a few seconds later because the vast tag was slow to retrieve. Also fixed a typo. --- src/js/defaults.js | 2 +- src/js/plugins/ads.js | 13 +++++-------- src/js/plyr.js | 13 +++++++------ 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/js/defaults.js b/src/js/defaults.js index 2a438d13..f7738afc 100644 --- a/src/js/defaults.js +++ b/src/js/defaults.js @@ -259,7 +259,7 @@ const defaults = { // Ads 'adsloaded', 'adscontentpause', - 'adsconentresume', + 'adscontentresume', 'adstarted', 'adsmidpoint', 'adscomplete', diff --git a/src/js/plugins/ads.js b/src/js/plugins/ads.js index 0faf0f2f..9318e01d 100644 --- a/src/js/plugins/ads.js +++ b/src/js/plugins/ads.js @@ -36,9 +36,8 @@ class Ads { this.playing = false; this.initialized = false; this.blocked = false; - this.enabled = utils.is.url(player.config.ads.tag); - // Check if a tag URL is provided. + // Check if ads are enabled. if (!this.enabled) { return; } @@ -83,14 +82,12 @@ class Ads { // thing doesn't resolve within our set time; we bail this.startSafetyTimer(12000, 'ready()'); - // Setup a simple promise to resolve if the IMA loader is ready - this.loaderPromise = new Promise(resolve => { - this.on('ADS_LOADER_LOADED', () => resolve()); - }); - // Setup a promise to resolve if the IMA manager is ready - this.managerPromise = new Promise(resolve => { + this.managerPromise = new Promise((resolve, reject) => { + // The ad is pre-loaded and ready this.on('ADS_MANAGER_LOADED', () => resolve()); + // Ads failed + this.on('ERROR', () => reject()); }); // Clear the safety timer diff --git a/src/js/plyr.js b/src/js/plyr.js index 7f8ad18c..9b73423e 100644 --- a/src/js/plyr.js +++ b/src/js/plyr.js @@ -309,14 +309,15 @@ class Plyr { * Play the media, or play the advertisement (if they are not blocked) */ play() { - // TODO: Always return a promise? if (this.ads.enabled && !this.ads.initialized && !this.ads.blocked) { - this.ads.play(); - return null; + this.ads.managerPromise.then(() => { + this.ads.play(); + }).catch(() => { + this.media.play(); + }); + } else { + this.media.play(); } - - // Return the promise (for HTML5) - return this.media.play(); } /**