platypush/platypush/backend/http/webapp/dist/static/js/6013-legacy.b02eb716.js.map

1 line
22 KiB
Plaintext

{"version":3,"file":"static/js/6013-legacy.b02eb716.js","mappings":"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","sources":["webpack://platypush/./node_modules/core-js/modules/es.string.repeat.js","webpack://platypush/./src/components/widgets/Music/Index.vue","webpack://platypush/./src/components/widgets/Music/Index.vue?d0a3"],"sourcesContent":["var $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n","<template>\n <Loading v-if=\"loading\" />\n <div class=\"music\" v-else>\n <div class=\"track\">\n <div class=\"unknown\" v-if=\"!status\">[Unknown state]</div>\n <div class=\"no-track\" v-if=\"status && status.state === 'stop'\">No media is being played</div>\n <div class=\"artist\" v-if=\"status && status.state !== 'stop' && track && track.artist\" v-text=\"track.artist\"></div>\n <div class=\"title\" v-if=\"status && status.state !== 'stop' && track && track.title\" v-text=\"track.title\"></div>\n </div>\n\n <div class=\"time\" v-if=\"status && status.state === 'play'\">\n <div class=\"row\">\n <div class=\"progress-bar\">\n <div class=\"elapsed\" :style=\"{width: track.time ? 100*(status.elapsed/track.time) + '%' : '100%'}\"></div>\n <div class=\"total\"></div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-6 time-elapsed\" v-text=\"convertTime(status.elapsed)\"></div>\n <div class=\"col-6 time-total\" v-if=\"track.time\" v-text=\"convertTime(track.time)\"></div>\n </div>\n </div>\n\n <div class=\"controls\" v-if=\"_withControls && status\">\n <button @click=\"prev\">\n <i class=\"fa fa-step-backward\" />\n </button>\n <button class=\"play-pause\" @click=\"playPause\">\n <i class=\"fa fa-pause\" v-if=\"status.state === 'play'\" />\n <i class=\"fa fa-play\" v-else />\n </button>\n <button @click=\"stop\" v-if=\"status.state !== 'stop'\">\n <i class=\"fa fa-stop\" />\n </button>\n <button @click=\"next\">\n <i class=\"fa fa-step-forward\" />\n </button>\n </div>\n\n <div class=\"playback-status\" v-if=\"status\">\n <div class=\"status-property col-4\">\n <i class=\"fa fa-volume-up\"></i>&nbsp; <span v-text=\"status.volume + '%'\"></span>\n </div>\n\n <div class=\"status-property col-2\">\n <i class=\"fas fa-random\" :class=\"{active: status.random}\"></i>\n </div>\n <div class=\"status-property col-2\">\n <i class=\"fas fa-redo\" :class=\"{active: status.repeat}\"></i>\n </div>\n <div class=\"status-property col-2\">\n <i class=\"fa fa-bullseye\" :class=\"{active: status.single}\"></i>\n </div>\n <div class=\"status-property col-2\">\n <i class=\"fa fa-utensils\" :class=\"{active: status.consume}\"></i>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\nimport Loading from \"@/components/Loading\";\n\nexport default {\n name: \"Music\",\n components: {Loading},\n mixins: [Utils],\n props: {\n // Refresh interval in seconds.\n refreshSeconds: {\n type: Number,\n default: 60,\n },\n\n // Set to true if you also want to include music controls in the widget.\n withControls: {\n type: Boolean,\n default: true,\n }\n },\n\n data() {\n return {\n track: undefined,\n status: undefined,\n timer: undefined,\n loading: false,\n musicPlugin: 'music.mpd',\n\n syncTime: {\n timestamp: null,\n elapsed: null,\n },\n }\n },\n\n computed: {\n _withControls() {\n return this.parseBoolean(this.withControls)\n },\n },\n\n methods: {\n async refresh() {\n this.loading = true\n\n try {\n let status = await this.request(`${this.musicPlugin}.status`)\n let track = await this.request(`${this.musicPlugin}.current_track`)\n\n this._parseStatus(status)\n this._parseTrack(track)\n\n if (status.state === 'play' && !this.timer)\n this.startTimer()\n else if (status.state !== 'play' && this.timer)\n this.stopTimer()\n } finally {\n this.loading = false\n }\n },\n\n convertTime(time) {\n time = parseFloat(time) // Normalize strings\n const t = {}\n t.h = parseInt(time/3600)\n t.m = parseInt(time/60 - t.h*60)\n t.s = parseInt(time - (t.h*3600 + t.m*60))\n\n for (const attr of ['m','s']) {\n t[attr] = '' + t[attr]\n }\n\n for (const attr of ['m','s']) {\n if (parseInt(t[attr]) < 10) {\n t[attr] = '0' + t[attr]\n }\n }\n\n const ret = []\n if (parseInt(t.h)) {\n ret.push(t.h)\n }\n\n ret.push(t.m, t.s)\n return ret.join(':')\n },\n\n async _parseStatus(status) {\n if (!status || status.length === 0)\n status = await this.request(`${this.musicPlugin}.status`)\n if (status?.pluginName)\n this.musicPlugin = status.pluginName\n if (!this.status)\n this.status = {}\n\n for (const [attr, value] of Object.entries(status)) {\n if (['consume','random','repeat','single','bitrate'].indexOf(attr) >= 0) {\n this.status[attr] = !!parseInt(value)\n } else if (['nextsong','nextsongid','playlist','playlistlength',\n 'volume','xfade','song','songid'].indexOf(attr) >= 0) {\n this.status[attr] = parseInt(value)\n } else if (['elapsed'].indexOf(attr) >= 0) {\n this.status[attr] = parseFloat(value)\n } else {\n this.status[attr] = value\n }\n }\n },\n\n async _parseTrack(track) {\n if (!track || track.length === 0) {\n track = await this.request(`${this.musicPlugin}.current_track`)\n }\n\n if (!this.track)\n this.track = {}\n\n for (const [attr, value] of Object.entries(track)) {\n if (['id','pos','time','track','disc'].indexOf(attr) >= 0) {\n this.track[attr] = parseInt(value)\n } else {\n this.track[attr] = value\n }\n }\n },\n\n showNewTrackNotification() {\n this.notify({\n html: '<b>' + (this.track.artist || '[No Artist]') + '</b><br>' +\n (this.track.title || '[No Title]'),\n image: {\n icon: 'play',\n }\n })\n },\n\n async onNewPlayingTrack(event) {\n let previousTrack = undefined\n\n if (this.track) {\n previousTrack = {\n file: this.track.file,\n artist: this.track.artist,\n title: this.track.title,\n }\n }\n\n this.status.state = 'play'\n this.status.elapsed = 0\n this.track = {}\n this._parseTrack(event.track)\n\n let status = event.status ? event.status : await this.request(`${this.musicPlugin}.status`)\n this._parseStatus(status)\n this.startTimer()\n\n if (!previousTrack || (this.track.file !== previousTrack.file\n || this.track.artist !== previousTrack.artist\n || this.track.title !== previousTrack.title)) {\n this.showNewTrackNotification()\n }\n },\n\n onMusicStop(event) {\n this.status.state = 'stop'\n this.status.elapsed = 0\n this._parseStatus(event.status)\n this._parseTrack(event.track)\n this.stopTimer()\n },\n\n onMusicPlay(event) {\n this.status.state = 'play'\n this._parseStatus(event.status)\n this._parseTrack(event.track)\n this.startTimer()\n },\n\n onMusicPause(event) {\n this.status.state = 'pause'\n this._parseStatus(event.status)\n this._parseTrack(event.track)\n\n this.syncTime.timestamp = new Date()\n this.syncTime.elapsed = this.status.elapsed\n },\n\n onSeekChange(event) {\n if (event.position != null)\n this.status.elapsed = parseFloat(event.position)\n if (event.status)\n this._parseStatus(event.status)\n if (event.track)\n this._parseTrack(event.track)\n\n this.syncTime.timestamp = new Date()\n this.syncTime.elapsed = this.status.elapsed\n },\n\n onVolumeChange(event) {\n if (event.volume != null)\n this.status.volume = parseFloat(event.volume)\n if (event.status)\n this._parseStatus(event.status)\n if (event.track)\n this._parseTrack(event.track)\n },\n\n onRepeatChange(event) {\n this.status.repeat = event.state\n },\n\n onRandomChange(event) {\n this.status.random = event.state\n },\n\n onConsumeChange(event) {\n this.status.consume = event.state\n },\n\n onSingleChange(event) {\n this.status.single = event.state\n },\n\n startTimer() {\n if (this.timer != null) {\n this.stopTimer()\n }\n\n this.syncTime.timestamp = new Date()\n this.syncTime.elapsed = this.status.elapsed\n this.timer = setInterval(this.timerFunc, 1000)\n },\n\n stopTimer() {\n if (this.timer == null) {\n clearInterval(this.timer)\n this.timer = null\n }\n },\n\n timerFunc() {\n if (this.status.state !== 'play' || this.status.elapsed == null) {\n return\n }\n\n this.status.elapsed = this.syncTime.elapsed +\n ((new Date()).getTime()/1000) - (this.syncTime.timestamp.getTime()/1000)\n },\n\n async _run(action, args) {\n args = args || {}\n await this.request(`music.mpd.${action}`, args)\n await this.refresh()\n },\n\n async playPause() {\n return await this._run('pause')\n },\n\n async stop() {\n return await this._run('stop')\n },\n\n async prev() {\n return await this._run('previous')\n },\n\n async next() {\n return await this._run('next')\n },\n },\n\n mounted() {\n this.refresh()\n if (this.refreshSeconds) {\n setInterval(this.refresh, parseInt((this.refreshSeconds*1000).toFixed(0)))\n }\n\n this.subscribe(this.onNewPlayingTrack, 'widget-music-on-new-track', 'platypush.message.event.music.NewPlayingTrackEvent')\n this.subscribe(this.onMusicStop, 'widget-music-on-music-stop', 'platypush.message.event.music.MusicStopEvent')\n this.subscribe(this.onMusicPlay, 'widget-music-on-music-play', 'platypush.message.event.music.MusicPlayEvent')\n this.subscribe(this.onMusicPause, 'widget-music-on-music-pause', 'platypush.message.event.music.MusicPauseEvent')\n this.subscribe(this.onSeekChange, 'widget-music-on-music-seek', 'platypush.message.event.music.SeekChangeEvent')\n this.subscribe(this.onVolumeChange, 'widget-music-on-volume-change', 'platypush.message.event.music.VolumeChangeEvent')\n this.subscribe(this.onRepeatChange, 'widget-music-on-repeat-change', 'platypush.message.event.music.PlaybackRepeatModeChangeEvent')\n this.subscribe(this.onRandomChange, 'widget-music-on-random-change', 'platypush.message.event.music.PlaybackRandomModeChangeEvent')\n this.subscribe(this.onConsumeChange, 'widget-music-on-consume-change', 'platypush.message.event.music.PlaybackConsumeModeChangeEvent')\n this.subscribe(this.onSingleChange, 'widget-music-on-single-change', 'platypush.message.event.music.PlaybackSingleModeChangeEvent')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$progress-bar-bg: #ddd;\n$playback-status-color: #757f70;\n\n.music {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n position: relative;\n\n .track {\n text-align: center;\n\n .unknown,\n .no-track {\n font-size: 2em;\n }\n\n .artist {\n font-size: 1.9em;\n font-weight: bold;\n margin-bottom: .25em;\n }\n\n .title {\n font-size: 1.8em;\n font-weight: normal;\n }\n }\n\n .time {\n width: 100%;\n margin-top: 1em;\n font-size: 1.2em;\n\n .row {\n padding: 0 .5em;\n }\n\n .time-total {\n text-align: right;\n }\n\n .progress-bar {\n width: 100%;\n height: 1em;\n position: relative;\n margin-bottom: .75em;\n\n .total {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n background: $progress-bar-bg;\n border-radius: 0.5em;\n }\n\n .elapsed {\n position: absolute;\n width: 100%;\n height: 100%;\n top: 0;\n background: $selected-bg;\n border-radius: 0.5em;\n z-index: 1;\n }\n }\n }\n\n .playback-status {\n position: absolute;\n bottom: 0;\n border-top: $default-border-2;\n color: $playback-status-color;\n width: 100%;\n height: 2em;\n\n .status-property {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n }\n\n .active {\n color: $default-hover-fg;\n }\n }\n\n .controls {\n margin-top: .5em;\n font-size: 1.2em;\n\n button {\n background: none;\n border: none;\n\n &:hover {\n color: $default-hover-fg;\n }\n\n &.play-pause {\n color: $selected-fg;\n font-size: 1.5em;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Index.vue?vue&type=template&id=75982eb8&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=75982eb8&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-75982eb8\"]])\n\nexport default __exports__"],"names":["$","repeat","target","proto","class","loading","status","state","track","artist","title","style","time","elapsed","_withControls","prev","playPause","stop","next","volume","random","single","consume","name","components","Loading","mixins","Utils","props","refreshSeconds","type","Number","default","withControls","Boolean","data","undefined","timer","musicPlugin","syncTime","timestamp","computed","this","parseBoolean","methods","refresh","request","_parseStatus","_parseTrack","stopTimer","startTimer","convertTime","parseFloat","t","h","parseInt","m","s","attr","ret","push","join","length","pluginName","Object","entries","value","indexOf","showNewTrackNotification","notify","html","image","icon","onNewPlayingTrack","event","previousTrack","file","onMusicStop","onMusicPlay","onMusicPause","Date","onSeekChange","position","onVolumeChange","onRepeatChange","onRandomChange","onConsumeChange","onSingleChange","setInterval","timerFunc","clearInterval","getTime","_run","action","args","mounted","toFixed","subscribe","__exports__","render"],"sourceRoot":""}