npaw-plugin-adapters
Version:
NPAW's Plugin Adapters
288 lines (258 loc) • 8.07 kB
JavaScript
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());
}
}
}