UNPKG

npaw-plugin-adapters

Version:
288 lines (258 loc) 8.07 kB
export default class BcoveImaAdsAdapter { isUsed() { return typeof google !== 'undefined' && this.player.ima3 && this.player.ads; } getVersion() { let ret = null; if (typeof google !== 'undefined' && google.ima) { ret = 'bcove-ima-jsclass ' + google.ima.VERSION; } return ret; } getPlayhead() { let player = this.getVideo().getAdapter().player; if (this.player.ima3) { if (this.player.ima3 && this.player.ima3.adPlayer) { player = this.player.ima3.adPlayer; } } return player.currentTime(); } getDuration() { let ret = null; if (this.player.ads && this.player.ads.ad && this.player.ads.ad.duration) { ret = this.player.ads.ad.duration; } else { let player = this.getVideo().getAdapter().player; if (this.player.ima3) { player = this.player.ima3.adPlayer; } ret = (player && player.duration) ? player.duration() : null; } return ret; } getPosition() { let ret = this.getNpawReference().Constants.AdPosition.Midroll; if (this.player.ads && this.player.ads.ad) { switch (this.player.ads.ad.type) { case 'PREROLL': ret = this.getNpawReference().Constants.AdPosition.Preroll; break; case 'MIDROLL': ret = this.getNpawReference().Constants.AdPosition.Midroll; break; case 'POSTROLL': ret = this.getNpawReference().Constants.AdPosition.Postroll; break; } } else if (this.getVideo().getAdapter().getPlayhead() >= this.getVideo().getAdapter().getDuration()) { ret = this.getNpawReference().Constants.AdPosition.Postroll; } if (!this.getVideo().getAdapter().flags.isJoined) { ret = this.getNpawReference().Constants.AdPosition.Preroll; } return ret; } getResource() { let ret = 'unknown'; if (this.player.ima3) { ret = this.player.ima3.currentAd.getMediaUrl(); } return ret; } getTitle() { let ret = null; if (this.player.ima3 && this.player.ima3.currentAd) { ret = this.player.ima3.currentAd.getTitle(); } return ret; } getPlayerVersion() { let ret = null; if (this.player.ima3) { ret = this.player.ima3.VERSION; } return ret; } getGivenBreaks() { let ret = null; if (this.player.ima3) { ret = this.player.ima3.adsManager.getCuePoints().length; } return ret; } getBreaksTime() { let ret = null; if (this.player.ima3) { const cuelist = this.player.ima3.adsManager.getCuePoints(); for (let index in cuelist) { if ((!cuelist[index] && cuelist[index] !== 0) || cuelist[index] === -1) { cuelist[index] = this.getVideo().getAdapter().getDuration(); } } ret = cuelist; } return ret; } getGivenAds() { let ret = null; if (this.player.ima3 && this.player.ima3.currentAd && this.player.ima3.currentAd.getAdPodInfo()) { ret = this.player.ima3.currentAd.getAdPodInfo().getTotalAds(); } return ret; } getAudioEnabled() { let ret = null; if (this.player.muted()) { ret = false; } else { ret = !!this.player.volume(); } return ret; } getIsSkippable() { let ret = false; if (this.player.ima3) { ret = this.player.ima3.currentAd && this.player.ima3.currentAd.isSkippable(); } return ret; } getIsFullscreen() { let ret = null; if (this.getPlugin().deviceDetector.isIphone()) { ret = !this.getPlugin().deviceDetector.isInBackground; } else { let container = null; if (this.player.ima3) { container = this.player.ima3.el; } ret = container ? (window.innerHeight <= container.clientHeight + 30 && window.innerWidth <= container.clientWidth + 30) : false; } return ret; } getIsVisible() { let ret = null; if (this.getPlugin().deviceDetector.isIphone()) { ret = !this.getPlugin().deviceDetector.isInBackground } else if (this.player.ima3) { ret = this.getNpawUtils().calculateAdViewability(this.player.ima3.el); } return ret; } getBitrate() { let bitrate = -1; if (this.player.ima3 && this.player.ima3.currentAd && this.player.ima3.currentAd.getVastMediaBitrate()) { bitrate = this.player.ima3.currentAd.getVastMediaBitrate(); } return bitrate; } getCreativeId() { let ret = null; if (this.player.ima3 && this.player.ima3.currentAd) { ret = this.player.ima3.currentAd.getCreativeAdId() || this.player.ima3.currentAd.getCreativeId(); } else if (this.titles) { ret = this.titles[(this.getVideo().requestBuilder.lastSent.adNumber || 1) - 1]._creativeId; } return ret; } registerListeners() { this.monitorPlayhead(true, false); this.references = { 'ima3-started': this.startJoinListener.bind(this), 'ima3-paused': this.pausedListener.bind(this), 'ima3-resumed': this.resumedListener.bind(this), 'ima3-complete': this.adEndedListener.bind(this), 'ima3-skipped': this.skippedListener.bind(this), 'ima3-ad-error': this.errorListener.bind(this), 'ads-pod-ended': this.podEndListener.bind(this), 'ads-click': this.clickListener.bind(this), 'ads-first-quartile': this.firstQuartileListener.bind(this), 'ads-midpoint': this.secondQuartileListener.bind(this), 'ads-third-quartile': this.thirdQuartileListener.bind(this) }; if (this.player) { for (let key in this.references) { this.player.on(key, this.references[key]); } } } startJoinListener(e) { if (this.getVideo().getAdapter()) { this.getVideo().getAdapter().firePause(); }; this.fireStart(); this.fireJoin(); } pausedListener(e) { this.firePause(); } resumedListener(e) { this.fireResume(); } skippedListener(e) { this.fireSkip(); if (this.getVideo().getAdapter()) this.getVideo().getAdapter().fireResume(); } adEndedListener(e) { const playheadVal = this.getVideo().requestBuilder.lastSent.adPosition === this.getNpawReference().Constants.AdPosition.Preroll ? 0 : this.getVideo().getAdapter().lastPlayhead; this.fireStop({ playhead: playheadVal, adPlayhead: this.getDuration() }) } errorListener(e) { if (this.player.ima3) { if (e.getError && e.getError()) { const error = e.getError(); this.fireError(error.getCode(), error.getMessage()) } else { this.fireError(); } } } clickListener(e) { if (this.player.ima3) { let clickurl = null; if (this.player.ima3.currentAd && this.player.ima3.currentAd.g) { clickurl = this.player.ima3.currentAd.g.clickThroughUrl; }; this.fireClick(clickurl); } } firstQuartileListener(e) { this.fireQuartile(1); } secondQuartileListener(e) { this.fireQuartile(2); } thirdQuartileListener(e) { this.fireQuartile(3); } podEndListener(e) { this.fireBreakStop(); } unregisterListeners() { if (this.monitor) this.monitor.stop(); if (this.player && this.references) { for (let key in this.references) { this.player.off(key, this.references[key]); } delete this.references; } } adPlayerErrorListener(e) { const error = e.data.AdError; const noResponseErrors = [1012, 1005, 301, 402, 302]; const emptyResponse = [1007, 1009, 303]; const wrongResponse = [403, 100, 503, 101, 102]; if (noResponseErrors.indexOf(error.getErrorCode()) >= 0) { this.fireManifest(youbora.Constants.ManifestError.NO_RESPONSE, error.getMessage()); } else if (emptyResponse.indexOf(error.getErrorCode()) >= 0) { this.fireManifest(youbora.Constants.ManifestError.EMPTY, error.getMessage()); } else if (wrongResponse.indexOf(error.getErrorCode()) >= 0) { this.fireManifest(youbora.Constants.ManifestError.WRONG, error.getMessage()); } else { this.fireError(error.getErrorCode(), error.getMessage()); } } }