UNPKG

npaw-plugin-adapters

Version:
198 lines (174 loc) 5.31 kB
export default class ChromecastCafAdsAdapter { getVersion() { return '7.0.1-chromecast-caf-ads-js'; } getPlayerName() { return 'Chromecast CAF Ads'; } getPlayhead() { return this.player.getBreakClipCurrentTimeSec(); } getDuration() { return this.player.getBreakClipDurationSec(); } getPosition() { let ret = this.getNpawReference().Constants.AdPosition.Midroll; const adapter = this.plugin.getAdapter(); if (adapter) { if (!adapter.flags.isJoined || adapter.getPlayhead() < 1) { ret = this.getNpawReference().Constants.AdPosition.Preroll; } else if (adapter.getPlayhead() + 1 >= adapter.getDuration()) { ret = this.getNpawReference().Constants.AdPosition.Postroll; } } return ret; } getTitle() { return 'unknown'; } getResource() { return 'unknown'; } getCreativeId() { return this.clipId; } getIsVisible() { return true; } getIsFullscreen() { return true; } getIsSkippable() { return this.isSkippable; } getGivenAds() { return this.adsInBreak; } getBreaksTime() { const breaks = this.player.getBreaks(); const cuePoints = []; for (let breakN in breaks) { let position = breaks[breakN].position; const adapter = this.plugin ? this.plugin.getAdapter() : undefined; if (position === -1 && adapter) { position = adapter.getDuration(); }; if (cuePoints.indexOf(position) === -1) { cuePoints.push(position); } } return cuePoints; } getGivenBreaks() { const breaks = this.player.getBreaks(); const cuePoints = []; for (let breakN in breaks) { let position = breaks[breakN].position; const adapter = this.plugin ? this.plugin.getAdapter() : undefined; if (position === -1 && adapter) { position = adapter.getDuration(); } if (cuePoints.indexOf(position) === -1) { cuePoints.push(position); } } return cuePoints.length; } registerListeners() { const Events = cast.framework.events; this.monitorPlayhead(true, false, 1200); this.references = {}; this.references[Events.EventType.BREAK_ENDED] = this.endListener.bind(this); this.references[Events.EventType.BREAK_CLIP_LOADING] = this.playListener.bind(this); this.references[Events.EventType.BREAK_CLIP_STARTED] = this.joinListener.bind(this); this.references[Events.EventType.BREAK_CLIP_ENDED] = this.stopListener.bind(this); this.references[Events.EventType.BREAK_STARTED] = this.breakStartListener.bind(this); this.references[Events.EventType.BREAK_ENDED] = this.breakEndListener.bind(this); this.references[Events.EventType.PAUSE] = this.pauseListener.bind(this); this.references[Events.EventType.PLAYING] = this.playingListener.bind(this); for (let key in this.references) { this.player.addEventListener(key, this.references[key]); } } unregisterListeners() { if (this.monitor) this.monitor.stop(); if (this.player && this.references) { for (let key in this.references) { this.player.removeEventListener(key, this.references[key]); } this.references = {}; } } playListener(e) { const adapter = this.plugin.getAdapter(); if (adapter) { adapter.fireStart({}, 'playListener-ads'); adapter.firePause({}, 'playListener-ads'); } if (typeof e !== 'undefined') { this.isSkippable = e.whenSkippable !== undefined; this.clipId = e.breakClipId; } else { this.isSkippable = false; this.clipId = undefined; } } joinListener(e) { if (!this._quartileTimer) { this._quartileTimer = setInterval(this.sendQuartile.bind(this), 1000); } const adapter = this.plugin ? this.plugin.getAdapter() : undefined; if (adapter) adapter.firePause({}, 'joinListener-ads'); if (this.plugin && this.plugin.isBreakStarted) { this.fireStart({}, 'joinListener'); this.fireJoin({}, 'joinListener'); } } breakStartListener(e) { this.adsInBreak = e.total; this.fireBreakStart(); if (!this._quartileTimer) { this._quartileTimer = setInterval(this.sendQuartile.bind(this), 1000); } this.fireStart({}, 'breakStartListener'); this.fireJoin({}, 'breakStartListener'); } breakEndListener(e) { this.adsInBreak = undefined; } stopListener(e) { this.fireStop({}, 'stopListener'); } endListener(e) { this.fireBreakStop(); const adapter = this.plugin ? this.plugin.getAdapter() : null; if (adapter) { adapter.fireResume({}, 'endListener-ads'); } } sendQuartile(e) { const playhead = this.getPlayhead(); const duration = this.getDuration(); if (playhead > duration / 4) { this.fireQuartile(1); if (playhead > duration / 2) { this.fireQuartile(2); if (playhead > duration * 0.75) { this.fireQuartile(3); if (this._quartileTimer) { clearInterval(this._quartileTimer); this._quartileTimer = undefined; } } } } } pauseListener(e) { if (!this.flags.isBuffering) { this.firePause({}, 'pauseListener'); } } playingListener(e) { this.fireResume({}, 'playingListener'); } }