platypush/platypush/backend/http/webapp/dist/static/js/311.f32aa7b9.js.map

1 line
22 KiB
Plaintext

{"version":3,"file":"static/js/311.f32aa7b9.js","mappings":"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","sources":["webpack://platypush/./src/components/widgets/Music/Index.vue","webpack://platypush/./src/components/widgets/Music/Index.vue?d0a3"],"sourcesContent":["<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 \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-75982eb8\"]])\n\nexport default __exports__"],"names":["class","_createElementVNode","_hoisted_15","_hoisted_19","_hoisted_21","$data","loading","_createBlock","_component_Loading","key","_createElementBlock","_hoisted_1","_hoisted_2","status","_hoisted_3","state","_hoisted_4","track","artist","_toDisplayString","title","_hoisted_7","_hoisted_8","_hoisted_9","style","_normalizeStyle","width","time","elapsed","_hoisted_10","_hoisted_11","$options","convertTime","_withControls","_hoisted_14","onClick","_cache","args","prev","playPause","_hoisted_17","_hoisted_18","stop","next","_hoisted_23","_hoisted_24","_hoisted_25","volume","_hoisted_27","_normalizeClass","active","random","_hoisted_28","repeat","_hoisted_29","single","_hoisted_30","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","parseFloat","t","h","parseInt","m","s","attr","ret","push","join","length","pluginName","value","Object","entries","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","mounted","toFixed","subscribe","__exports__","render"],"sourceRoot":""}