{"version":3,"file":"Stats.js","sources":["../../../../src/Locales.js","../../../../src/Stats.js","../../../../src/main.js"],"sourcesContent":["export default {\n headers:{\n currentlySegment:\"Playing Fragment\",\n nextFragment:\"Loading Fragment\",\n mae:\"Media Acceleration\",\n currentBitrate:\"Current Bitrate\",\n bitrates:\"Available Bitrates\",\n source:\"Source\",\n adaptiveBitrate:\"Adaptive Bitrate\"\n },\n playback:{\n src:\"Content URL\",\n type:\"Content Type\",\n version:\"Playback\"\n },\n mae:{\n cdnDownloadBytes: \"CDN Download\",\n cdnDownloadQUICMediaBytes:\"QUIC Download\",\n cdnDownloadTCPMediaBytes:\"TCP Download\",\n peerCount:\"Connected Peers\",\n peerDownloadBytes:\"Total Peer Download\",\n peerUploadBytes:\"Total Peer Upload\",\n sessionUri:\"Session URI\",\n keyNotFound:\"Key not found\",\n sessionNotFound:\"Session not found\" \n }\n}\n","import locales from './Locales.js';\n\nexport default class Stats extends akamai.amp.Plugin {\n constructor(player, config) {\n super(player, config);\n\n this.player = player;\n this.config = config;\n this.item = {};\n this.hasMae = false;\n this.playback = {};\n this.player.addEventListener(\"ready\", this.readyHandler.bind(this));\n }\n\n /**\n * Player events\n * @param {*} event \n */\n readyHandler(event) {\n let playerCore;\n\n if (!this.player.react) {\n throw Error(\"React is not available\");\n }\n else {\n this.player.once(\"canplaythrough\", function () {\n playerCore = this.getPlaybackCore();\n this.hasMae = typeof (this.player.mae) != 'undefined';\n this.init(this, playerCore);\n\n switch (playerCore) {\n case 'hls':\n this.player.hls.addEventListener(Hls.Events.FRAG_CHANGED, this.hlsNotificationHandler.bind(this));\n this.player.hls.addEventListener(Hls.Events.FRAG_PARSED, this.hlsNotificationHandler.bind(this));\n this.player.hls.addEventListener(Hls.Events.LEVEL_SWITCHED, this.hlsNotificationHandler.bind(this));\n this.player.addEventListener(\"mediachange\", this.reset.bind(this));\n break;\n case 'dash':\n let instance = amp.dash.getInstance();\n instance.on(dashjs.MediaPlayer.events.FRAGMENT_LOADING_STARTED, this.dashNotificationHandler.bind(this));\n instance.on(dashjs.MediaPlayer.events.FRAGMENT_LOADING_COMPLETED, this.dashNotificationHandler.bind(this));\n instance.on(dashjs.MediaPlayer.events.QUALITY_CHANGE_RENDERED, this.dashNotificationHandler.bind(this));\n this.player.addEventListener(\"mediachange\", this.reset.bind(this));\n break;\n default:\n break;\n }\n }.bind(this));\n }\n }\n\n dashNotificationHandler(event) {\n let fragment, _ref;\n switch (event.type) {\n case 'fragmentLoadingCompleted':\n fragment = ((_ref = event.request) !== null ? _ref.url : \"Not found\");\n this.item.setState({ \"currentFragment\": fragment });\n break;\n case 'fragmentLoadingStarted':\n fragment = ((_ref = event.request) !== null ? _ref.url : \"Not found\");\n this.item.setState({ \"nextFragment\": fragment });\n break;\n case 'qualityChangeRendered':\n ((_ref = event).mediaType != 'audio' ? this.item.setState({ \"currentBitrate\": (this.player.getQualityLevels()[_ref.newQuality].bitrate / 1E3).toFixed(0) }) : void 0);\n break;\n\n default:\n break;\n }\n }\n\n hlsNotificationHandler(event) {\n let fragment, level, _ref;\n switch (event.type) {\n case \"hlsFragChanged\":\n fragment = ((_ref = event.data) !== null ? _ref.frag : event.details.frag);\n this.item.setState({ \"currentFragment\": fragment.relurl });\n break;\n case \"hlsFragParsed\":\n fragment = ((_ref = event.data) !== null ? _ref.frag : event.details.frag);\n this.item.setState({ \"nextFragment\": fragment.relurl });\n break;\n case \"qualitychanging\":\n level = ((_ref = event.data) !== null ? _ref : event.details);\n this.item.setState({ \"currentBitrate\": (level.bitrate / 1E3).toFixed(0) });\n break;\n case \"hlsLevelSwitched\":\n level = ((_ref = event.data) !== null ? typeof(_ref.level) == \"undefined\" ? _ref.data.level : _ref.level : event.details.level);\n this.item.setState({ \"currentBitrate\": (this.player.getQualityLevels()[level].bitrate / 1E3).toFixed(0) });\n break;\n case \"canplaythrough\":\n this.item.setState({ \"levels\": this.player.getQualityLevels() });\n break;\n default:\n break;\n }\n }\n\n reset(_this) {\n this.player.once(\"canplaythrough\", function () {\n let playback = {\n version: `${_this.player.getVersion()} - ${_this.player.getPlayerType()}`,\n src: _this.player.getSrc(),\n type: _this.player.getMedia().type\n };\n\n let levels = _this.player.getQualityLevels(),\n quality = levels[_this.player.getQuality()].bitrate;\n\n if (this.hasMae) {\n this.item.setState({ 'mae': _this.player.mae });\n }\n this.item.setState({ \"playback\": playback });\n this.item.setState({ \"currentBitrate\": (quality / 1E3).toFixed(0) });\n this.item.setState({ \"levels\": levels });\n }.bind(this));\n }\n\n getPlaybackCore() {\n let playbackCore = \"default\";\n\n try {\n if (this.player.playerCore !== null && typeof (this.player.playerCore.activePlaybackCore.getPlaybackCoreName) == 'function');\n playbackCore = this.player.playerCore.activePlaybackCore.getPlaybackCoreName();\n } catch (error) {\n throw Error(\"PlayerCore is not defined\");\n }\n\n return playbackCore;\n }\n\n init(_this, _playerCore) {\n let statsBtn, overlay, component, quality = 0, levels = _this.player.getQualityLevels();\n\n let playback = {\n version: `${_this.player.getVersion()} - ${_this.player.getPlayerType()}`,\n src: _this.player.getSrc(),\n type: _this.player.getMedia().type\n };\n\n quality = 'default' === _playerCore ? levels[_this.player.getQuality()].bitrate : 0;\n\n let StatsItem = React.createClass({\n getInitialState: function () {\n return { levels: levels, playback: playback, hasMae: _this.hasMae, mae: _this.player.mae };\n },\n componentDidMount: function () {\n this.setState({\n chkbox: true,\n message: \"
Paragrahp
Paragraph 2
\",\n currentBitrate: (quality / 1E3).toFixed(0),\n currentFragment: \"Not available\",\n nextFragment: \"Not available\"\n });\n },\n createRenditions: function (levels) {\n return levels.map(function (level) {\n return