platypush/platypush/backend/http/dist/static/js/chunk-18cd0234.21a689a3.js.map

1 line
78 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/components/panels/Media/Subtitles.vue?9ad1","webpack:///./src/components/panels/Media/Index.vue?7cb9","webpack:///./node_modules/core-js/modules/es.string.starts-with.js","webpack:///./src/components/panels/Media/Index.vue","webpack:///./src/components/panels/Media/Header.vue","webpack:///./src/components/panels/Media/Players.vue","webpack:///./src/components/panels/Media/Players/Chromecast.vue","webpack:///./src/components/panels/Media/Players/Mixin.vue","webpack:///./src/components/panels/Media/Players/Mixin.vue?3ecc","webpack:///./src/components/panels/Media/Players/Chromecast.vue?4f3f","webpack:///./src/components/panels/Media/Players/Kodi.vue","webpack:///./src/components/panels/Media/Players/Kodi.vue?07b0","webpack:///./src/components/panels/Media/Players/Mplayer.vue","webpack:///./src/components/panels/Media/Players/Mplayer.vue?e52b","webpack:///./src/components/panels/Media/Players/Mpv.vue","webpack:///./src/components/panels/Media/Players/Mpv.vue?a581","webpack:///./src/components/panels/Media/Players/Omxplayer.vue","webpack:///./src/components/panels/Media/Players/Omxplayer.vue?8d01","webpack:///./src/components/panels/Media/Players/Vlc.vue","webpack:///./src/components/panels/Media/Players/Vlc.vue?2a35","webpack:///./src/components/panels/Media/Players.vue?d14c","webpack:///./src/components/panels/Media/Header.vue?c95a","webpack:///./src/components/panels/Media/Info.vue","webpack:///./src/components/panels/Media/Info.vue?3933","webpack:///./src/components/panels/Media/Nav.vue","webpack:///./src/components/panels/Media/Nav.vue?4c42","webpack:///./src/components/panels/Media/Results.vue","webpack:///./src/components/panels/Media/Results.vue?38a7","webpack:///./src/components/panels/Media/Subtitles.vue","webpack:///./src/components/panels/Media/Subtitles.vue?47f4","webpack:///./src/components/panels/Media/Index.vue?a0a3","webpack:///./node_modules/core-js/internals/not-a-regexp.js","webpack:///./src/components/panels/Media/Nav.vue?b509","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack:///./src/components/panels/Media/Results.vue?f247","webpack:///./src/components/panels/Media/Info.vue?f863","webpack:///./src/components/panels/Media/Header.vue?c461","webpack:///./src/components/panels/MediaOmxplayer/Index.vue","webpack:///./src/components/panels/MediaOmxplayer/Index.vue?207d","webpack:///./src/components/panels/Media/Players.vue?ef7a"],"names":["$","getOwnPropertyDescriptor","f","toLength","notARegExp","requireObjectCoercible","correctIsRegExpLogic","IS_PURE","nativeStartsWith","startsWith","min","Math","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","String","prototype","writable","target","proto","forced","searchString","that","this","index","arguments","length","undefined","search","call","slice","class","loading","plugin-name","pluginName","status","selectedPlayer","track","buttons","mediaButtons","pause","stop","setVolume","seek","selected-view","selectedView","$event","has-subtitles-plugin","hasSubtitlesPlugin","selected-item","selected-subtitles","selectedSubtitles","onStatusUpdate","downloadTorrent","showSubtitlesModal","results","selected-result","selectedResult","onResultSelect","play","$refs","mediaInfo","isVisible","view","download","torrentPlugin","is-media","title","ref","item","visible","selectSubtitles","filterVisible","type","placeholder","query","$emit","torrentURL","selectedItem","icon-class","text","Object","keys","sources","source","key","player","name","iconClass","refresh","players","i","select","mixins","Utils","emits","props","data","methods","getPlayers","component","request","resource","subs","url","subtitles","volume","position","onNewMedia","event","onMediaEvent","isMine","notify","device","image","plugin","addSubtitles","filename","removeSubtitles","supports","mounted","subscribe","destroy","unsubscribe","Mixin","devices","Promise","all","map","chromecast","getPlayerName","render","$root","config","host","components","Loading","DropdownItem","Dropdown","Chromecast","Kodi","Mplayer","Mpv","Omxplayer","Vlc","required","plugins","loadPlugins","entries","filter","p","endsWith","push","__scopeId","Players","Boolean","default","types","imdb_id","href","synopsis","description","channelId","channelTitle","year","publishedAt","file","trailer","size","quality","seeds","peers","language","views","displayName","collapsed","browse","torrents","result","typeIcons","Array","Number","items","sub","IsLocal","ISO639","SubFileName","MediaView","Header","Results","Modal","Info","Nav","TorrentView","Subtitles","previous","next","awaitingPlayTorrent","torrentPlugins","computed","startStreaming","ret","window","open","onTorrentQueued","onTorrentMetadata","onTorrentDownloadStart","onTorrentDownloadCompleted","getTorrentPlugin","pluginConf","torrent_plugin","error","torrent","subtitlesSelector","close","link","SubDownloadLink","$watch","Set","has","state","isRegExp","module","exports","it","TypeError","nativeEndsWith","endPosition","len","end","wellKnownSymbol","MATCH","METHOD_NAME","regexp","error1","error2","Media"],"mappings":"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","file":"static/js/chunk-18cd0234.21a689a3.js","sourcesContent":["export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Subtitles.vue?vue&type=style&index=0&id=77ae3705&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Index.vue?vue&type=style&index=0&id=fea02376&lang=scss&scoped=true\"","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeStartsWith = ''.startsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.startsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.startswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return nativeStartsWith\n ? nativeStartsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","<template>\n <keep-alive>\n <div class=\"media-plugin fade-in\">\n <Loading v-if=\"loading\" />\n\n <MediaView :plugin-name=\"pluginName\" :status=\"selectedPlayer?.status || {}\" :track=\"selectedPlayer?.status || {}\"\n :buttons=\"mediaButtons\" @play=\"pause\" @pause=\"pause\" @stop=\"stop\" @set-volume=\"setVolume\"\n @seek=\"seek\" @search=\"search\">\n <main>\n <div class=\"nav-container\">\n <Nav :selected-view=\"selectedView\" @input=\"selectedView = $event\" />\n </div>\n\n <div class=\"view-container\">\n <Header :plugin-name=\"pluginName\" :selected-view=\"selectedView\" :has-subtitles-plugin=\"hasSubtitlesPlugin\"\n :selected-item=\"selectedPlayer && selectedPlayer.status &&\n (selectedPlayer.status.state === 'play' || selectedPlayer.status.state === 'pause')\n ? selectedPlayer.status : results[selectedResult]\" :selected-subtitles=\"selectedSubtitles\"\n @search=\"search\" @select-player=\"selectedPlayer = $event\" @player-status=\"onStatusUpdate\"\n @torrent-add=\"downloadTorrent($event)\" @show-subtitles=\"showSubtitlesModal = !showSubtitlesModal\" />\n\n <div class=\"body-container\">\n <Results :results=\"results\" :selected-result=\"selectedResult\" @select=\"onResultSelect($event)\"\n @play=\"play\" @info=\"$refs.mediaInfo.isVisible = true\" @view=\"view\" @download=\"download\"\n v-if=\"selectedView === 'search'\" />\n\n <TorrentView :plugin-name=\"torrentPlugin\" :is-media=\"true\" @play=\"play\"\n v-else-if=\"selectedView === 'torrents'\" />\n </div>\n </div>\n </main>\n </MediaView>\n\n <div class=\"media-info-container\">\n <Modal title=\"Media info\" ref=\"mediaInfo\">\n <Info :item=\"results[selectedResult]\" v-if=\"selectedResult != null\" />\n </Modal>\n </div>\n\n <div class=\"subtitles-container\">\n <Modal title=\"Available subtitles\" :visible=\"showSubtitlesModal\" ref=\"subtitlesSelector\"\n @close=\"showSubtitlesModal = false\">\n <div class=\"subtitles-content\" v-if=\"showSubtitlesModal && selectedResult != null\" >\n <Subtitles :item=\"selectedPlayer && selectedPlayer.status &&\n (selectedPlayer.status.state === 'play' || selectedPlayer.status.state === 'pause')\n ? selectedPlayer.status : results[selectedResult]\" @select-subs=\"selectSubtitles($event)\" />\n </div>\n </Modal>\n </div>\n </div>\n </keep-alive>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Modal from \"@/components/Modal\";\nimport Utils from \"@/Utils\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport MediaView from \"@/components/Media/View\";\nimport Header from \"@/components/panels/Media/Header\";\nimport Info from \"@/components/panels/Media/Info\";\nimport Nav from \"@/components/panels/Media/Nav\";\nimport Results from \"@/components/panels/Media/Results\";\nimport Subtitles from \"@/components/panels/Media/Subtitles\";\nimport TorrentView from \"@/components/panels/Torrent/View\";\n\nexport default {\n name: \"Media\",\n mixins: [Utils, MediaUtils],\n components: {Loading, MediaView, Header, Results, Modal, Info, Nav, TorrentView, Subtitles},\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n\n mediaButtons: {\n type: Object,\n default: () => {\n return {\n previous: false,\n next: false,\n stop: true,\n }\n }\n }\n },\n\n data() {\n return {\n loading: false,\n results: [],\n selectedResult: null,\n selectedPlayer: null,\n selectedView: 'search',\n selectedSubtitles: null,\n showSubtitlesModal: false,\n awaitingPlayTorrent: null,\n torrentPlugin: null,\n torrentPlugins: [\n 'torrent',\n 'rtorrent',\n ],\n }\n },\n\n computed: {\n hasSubtitlesPlugin() {\n return 'media.subtitles' in this.$root.config\n },\n },\n\n methods: {\n async search(event) {\n this.loading = true\n\n try {\n this.results = await this.request(`${this.pluginName}.search`, event)\n } finally {\n this.loading = false\n }\n },\n\n async play(item) {\n if (item?.type === 'torrent') {\n this.awaitingPlayTorrent = item.url\n await this.download(item)\n return\n }\n\n if (!this.selectedPlayer.component.supports(item))\n item = await this.startStreaming(item)\n\n await this.selectedPlayer.component.play(item, this.selectedSubtitles, this.selectedPlayer)\n await this.refresh()\n },\n\n async pause() {\n await this.selectedPlayer.component.pause(this.selectedPlayer)\n await this.refresh()\n },\n\n async stop() {\n await this.selectedPlayer.component.stop(this.selectedPlayer)\n await this.refresh()\n },\n\n async setVolume(volume) {\n await this.selectedPlayer.component.setVolume(volume, this.selectedPlayer)\n await this.refresh()\n },\n\n async seek(position) {\n await this.selectedPlayer.component.seek(position, this.selectedPlayer)\n await this.refresh()\n },\n\n async view(item) {\n const ret = await this.startStreaming(item, true)\n window.open(ret.url, '_blank')\n },\n\n async download(item) {\n if (item?.type === 'torrent') {\n await this.downloadTorrent(item)\n }\n },\n\n async refresh() {\n this.selectedPlayer.status = await this.selectedPlayer.component.status(this.selectedPlayer)\n },\n\n onStatusUpdate(status) {\n if (!this.selectedPlayer)\n return\n\n this.selectedPlayer.status = status\n },\n\n onTorrentQueued(event) {\n this.notify({\n title: 'Torrent queued for download',\n text: event.name,\n image: {\n iconClass: 'fa fa-magnet',\n }\n })\n },\n\n onTorrentMetadata(event) {\n this.notify({\n title: 'Torrent metadata downloaded',\n text: event.name,\n image: {\n iconClass: 'fa fa-info',\n }\n })\n },\n\n onTorrentDownloadStart(event) {\n this.notify({\n title: 'Torrent download started',\n text: event.name,\n image: {\n iconClass: 'fa fa-download',\n }\n })\n },\n\n onTorrentDownloadCompleted(event) {\n this.notify({\n title: 'Torrent download completed',\n text: event.name,\n image: {\n iconClass: 'fa fa-check',\n }\n })\n },\n\n getTorrentPlugin() {\n const pluginConf = this.$root.config[this.pluginName] || {}\n let torrentPlugin = pluginConf.torrent_plugin\n if (!torrentPlugin) {\n for (let plugin of this.torrentPlugins) {\n if (plugin in this.$root.config) {\n torrentPlugin = plugin\n break\n }\n }\n }\n\n return torrentPlugin\n },\n\n async downloadTorrent(item) {\n const torrentPlugin = this.getTorrentPlugin()\n if (!torrentPlugin) {\n this.notify({\n text: 'No torrent plugins configured',\n error: true,\n })\n\n return\n }\n\n return await this.request(`${torrentPlugin}.download`, {torrent: item?.url || item})\n },\n\n async selectSubtitles(item) {\n this.$refs.subtitlesSelector.close()\n if (!item) {\n this.selectedSubtitles = null\n return\n }\n\n this.notify({\n text: 'Downloading subtitles track',\n image: {\n iconClass: 'fa fa-download',\n }\n })\n\n const subs = await this.request('media.subtitles.download', {link: item.SubDownloadLink})\n this.selectedSubtitles = subs.filename\n\n this.notify({\n text: 'Subtitles track downloaded',\n image: {\n iconClass: 'fa fa-check',\n }\n })\n },\n\n onResultSelect(result) {\n if (this.selectedResult == null || this.selectedResult !== result) {\n this.selectedResult = result\n this.selectedSubtitles = null\n }\n },\n },\n\n mounted() {\n this.$watch(() => this.selectedPlayer, (player) => {\n if (player)\n this.refresh()\n })\n\n this.$watch(() => this.selectedSubtitles, (subs) => {\n if (new Set(['play', 'pause']).has(this.selectedPlayer?.status?.state)) {\n if (subs)\n this.selectedPlayer.component.addSubtitles(subs)\n else\n this.selectedPlayer.component.removeSubtitles()\n }\n })\n\n this.torrentPlugin = this.getTorrentPlugin()\n this.subscribe(this.onTorrentQueued,'notify-on-torrent-queued',\n 'platypush.message.event.torrent.TorrentQueuedEvent')\n this.subscribe(this.onTorrentMetadata,'on-torrent-metadata',\n 'platypush.message.event.torrent.TorrentDownloadedMetadataEvent')\n this.subscribe(this.onTorrentDownloadStart,'notify-on-torrent-download-start',\n 'platypush.message.event.torrent.TorrentDownloadStartEvent')\n this.subscribe(this.onTorrentDownloadCompleted,'notify-on-torrent-download-completed',\n 'platypush.message.event.torrent.TorrentDownloadCompletedEvent')\n },\n\n destroy() {\n this.unsubscribe('notify-on-torrent-queued')\n this.unsubscribe('on-torrent-metadata')\n this.unsubscribe('notify-on-torrent-download-start')\n this.unsubscribe('notify-on-torrent-download-completed')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n\n.media-plugin {\n width: 100%;\n\n main {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: row-reverse;\n\n .view-container {\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n overflow: auto;\n background: $background-color;\n }\n\n .body-container {\n height: calc(100% - #{$media-header-height});\n margin-top: .2em;\n }\n }\n}\n\n::v-deep(.loading) {\n z-index: 10;\n}\n\n::v-deep(.media-info-container) {\n .modal-container {\n .content {\n max-width: 75%;\n }\n\n .body {\n padding: 1em .5em;\n overflow: auto;\n }\n }\n}\n\n::v-deep(.subtitles-container) {\n .body {\n padding: 0 !important;\n\n .item {\n padding: 1em;\n }\n }\n}\n</style>\n","<template>\n <div class=\"header\" :class=\"{'with-filter': filterVisible}\">\n <div class=\"row\">\n <div class=\"col-7 left side\" v-if=\"selectedView === 'search'\">\n <button title=\"Filter\" @click=\"filterVisible = !filterVisible\">\n <i class=\"fa fa-filter\" />\n </button>\n\n <form @submit.prevent=\"search\">\n <label class=\"search-box\">\n <input type=\"search\" placeholder=\"Search\" v-model=\"query\">\n </label>\n </form>\n </div>\n\n <div class=\"col-7 left side\" v-else-if=\"selectedView === 'torrents'\">\n <form @submit.prevent=\"$emit('torrent-add', torrentURL)\">\n <label class=\"search-box\">\n <input type=\"search\" placeholder=\"Add torrent URL\" v-model=\"torrentURL\">\n </label>\n </form>\n </div>\n\n <div class=\"col-5 right side\">\n <button title=\"Select subtitles\" class=\"captions-btn\" :class=\"{selected: selectedSubtitles != null}\"\n @click=\"$emit('show-subtitles')\" v-if=\"hasSubtitlesPlugin && selectedItem &&\n (selectedItem.type === 'file' || (selectedItem.url || '').startsWith('file://'))\">\n <i class=\"fas fa-closed-captioning\" />\n </button>\n\n <Players :plugin-name=\"pluginName\" @select=\"$emit('select-player', $event)\"\n @status=\"$emit('player-status', $event)\" />\n <Dropdown title=\"Actions\" icon-class=\"fa fa-ellipsis-h\">\n <DropdownItem text=\"Play URL\" icon-class=\"fa fa-play-circle\" />\n </Dropdown>\n </div>\n </div>\n\n <div class=\"row filter fade-in\" :class=\"{hidden: !filterVisible}\">\n <label v-for=\"source in Object.keys(sources)\" :key=\"source\">\n <input type=\"checkbox\" v-model=\"sources[source]\" />\n {{ source }}\n </label>\n </div>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport Players from \"@/components/panels/Media/Players\";\nexport default {\n name: \"Header\",\n components: {Players, DropdownItem, Dropdown},\n emits: ['search', 'select-player', 'player-status', 'torrent-add', 'show-subtitles'],\n\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n\n selectedView: {\n type: String,\n required: true,\n },\n\n selectedSubtitles: {\n type: String,\n },\n\n selectedItem: {\n type: Object,\n },\n\n hasSubtitlesPlugin: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n filterVisible: false,\n query: '',\n torrentURL: '',\n sources: {\n 'file': true,\n 'youtube': true,\n 'torrent': true,\n },\n }\n },\n\n methods: {\n search() {\n const types = Object.keys(this.sources).filter((source) => this.sources[source])\n if (!this.query?.length || !types?.length)\n return\n\n this.$emit('search', {\n query: this.query,\n types: types,\n })\n },\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n\n.header {\n width: 100%;\n height: $media-header-height;\n position: relative;\n background: $menu-panel-bg;\n padding: .5em;\n box-shadow: $border-shadow-bottom;\n\n .row {\n display: flex;\n align-items: center;\n }\n\n &.with-filter {\n height: calc(#{$media-header-height} + #{$filter-header-height});\n }\n\n .side {\n display: inline-flex;\n align-items: center;\n\n &.right {\n justify-content: right;\n }\n }\n\n ::v-deep(button) {\n background: none;\n padding: 0 .25em;\n border: 0;\n margin-right: .25em;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n\n form {\n width: 100%;\n padding: 0;\n border: 0;\n border-radius: 0;\n box-shadow: none;\n background: initial;\n }\n\n .search-box {\n width: 100%;\n margin-left: .5em;\n\n input[type=search] {\n width: 100%;\n }\n }\n\n .filter {\n position: absolute;\n top: $media-header-height;\n height: $filter-header-height;\n padding-bottom: 1em;\n\n label {\n display: inline-flex;\n flex-direction: row;\n margin-right: 1em;\n\n input {\n margin-right: .5em;\n }\n }\n }\n\n .captions-btn {\n margin-right: .5em;\n\n &.selected {\n color: $selected-fg;\n }\n }\n}\n</style>\n","<template>\n <div class=\"plugins\">\n <Chromecast :player=\"selectedPlayer?.pluginName === 'media.chromecast' ? selectedPlayer : null\"\n ref=\"chromecastPlugin\" @status=\"$emit('status', $event)\" />\n <Kodi :player=\"selectedPlayer?.pluginName === 'media.kodi' ? selectedPlayer : null\" ref=\"kodiPlugin\"\n @status=\"$emit('status', $event)\" />\n <Mplayer :player=\"selectedPlayer?.pluginName === 'media.mplayer' ? selectedPlayer : null\" ref=\"mplayerPlugin\"\n @status=\"$emit('status', $event)\" />\n <Mpv :player=\"selectedPlayer?.pluginName === 'media.mpv' ? selectedPlayer : null\" ref=\"mpvPlugin\"\n @status=\"$emit('status', $event)\" />\n <Omxplayer :player=\"selectedPlayer?.pluginName === 'media.omxplayer' ? selectedPlayer : null\" ref=\"omxplayerPlugin\"\n @status=\"$emit('status', $event)\" />\n <Vlc :player=\"selectedPlayer?.pluginName === 'media.vlc' ? selectedPlayer : null\" ref=\"vlcPlugin\"\n @status=\"$emit('status', $event)\" />\n </div>\n\n <div class=\"players\">\n <Dropdown :title=\"selectedPlayer?.name || 'Players'\"\n :icon-class=\"selectedPlayer ? selectedPlayer.iconClass : 'fab fa-chromecast'\">\n <Loading v-if=\"loading\" />\n\n <div class=\"refresh\">\n <DropdownItem text=\"Refresh\" icon-class=\"fa fa-sync-alt\" @click=\"refresh\" />\n </div>\n\n <div class=\"no-results\" v-if=\"!players?.length\">No players found</div>\n\n <div class=\"player\" v-for=\"(player, i) in players\" :key=\"i\"\n :class=\"{selected: selectedPlayer != null && selectedPlayer.pluginName === player.pluginName\n && selectedPlayer.name === player.name}\">\n <DropdownItem :text=\"player.name\" :icon-class=\"player.iconClass\" @click=\"select(player)\" />\n </div>\n </Dropdown>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport Loading from \"@/components/Loading\";\n\nimport Chromecast from \"@/components/panels/Media/Players/Chromecast\"\nimport Kodi from \"@/components/panels/Media/Players/Kodi\";\nimport Mplayer from \"@/components/panels/Media/Players/Mplayer\";\nimport Mpv from \"@/components/panels/Media/Players/Mpv\";\nimport Omxplayer from \"@/components/panels/Media/Players/Omxplayer\";\nimport Vlc from \"@/components/panels/Media/Players/Vlc\";\n\nexport default {\n name: \"Players\",\n components: {Loading, DropdownItem, Dropdown, Chromecast, Kodi, Mplayer, Mpv, Omxplayer, Vlc},\n emits: ['select', 'status'],\n\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n },\n\n data() {\n return {\n loading: false,\n players: [],\n selectedPlayer: null,\n config: {},\n plugins: [],\n }\n },\n\n methods: {\n loadPlugins() {\n this.plugins = Object.entries(this.$refs).filter((p) => p[0].endsWith('Plugin')).map((p) => p[1])\n },\n\n async refresh() {\n this.players = []\n this.loading = true\n const config = this.$root.config\n\n try {\n await Promise.all(this.plugins.map(async (plugin) => {\n if (!(plugin.pluginName in config))\n return\n\n const players = await plugin.getPlayers()\n this.players.push(...players)\n\n if (this.selectedPlayer == null && plugin.pluginName === this.pluginName && players.length > 0) {\n this.select(players[0])\n }\n }))\n } finally {\n this.loading = false\n }\n },\n\n select(player) {\n this.selectedPlayer = player\n this.$emit('select', player)\n },\n },\n\n async mounted() {\n await this.loadPlugins()\n await this.refresh()\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.plugins {\n display: none;\n}\n\n.no-results {\n padding: 1em;\n}\n\n.players {\n ::v-deep(.dropdown) {\n .item {\n padding: .5em;\n }\n\n .icon {\n margin-right: 1em !important;\n }\n }\n\n ::v-deep(.refresh) {\n font-weight: bold;\n font-size: .8em;\n opacity: .7;\n }\n\n ::v-deep(.player.selected) {\n color: $selected-fg;\n }\n}\n</style>\n","<template>\n <div />\n</template>\n\n<script>\nimport Mixin from \"@/components/panels/Media/Players/Mixin\";\n\nexport default {\n name: \"Chromecast\",\n mixins: [Mixin],\n data() {\n return {\n name: 'Chromecast',\n pluginName: 'media.chromecast',\n iconClass: 'fab fa-chromecast',\n }\n },\n\n methods: {\n async getPlayers() {\n const devices = await this.request(`${this.pluginName}.get_chromecasts`)\n return Promise.all(devices.map(async (device) => {\n return {\n ...device,\n iconClass: device.type === 'audio' ? 'fa fa-volume-up' : 'fab fa-chromecast',\n pluginName: this.pluginName,\n status: this.request(`${this.pluginName}.status`, {chromecast: device.name}),\n component: this,\n }\n }))\n },\n\n getPlayerName(player) {\n if (typeof player === 'string')\n return player\n\n if (!player)\n return this.player?.name\n\n return player?.name\n },\n\n async status(player) {\n return await this.request(`${this.pluginName}.status`, {chromecast: this.getPlayerName(player)})\n },\n\n async play(resource, player) {\n if (!resource) {\n return await this.pause(player)\n }\n\n return await this.request(`${this.pluginName}.play`, {resource: resource.url, chromecast: this.getPlayerName(player)})\n },\n\n async pause(player) {\n return await this.request(`${this.pluginName}.pause`, {chromecast: this.getPlayerName(player)})\n },\n\n async stop(player) {\n return await this.request(`${this.pluginName}.quit`, {chromecast: this.getPlayerName(player)})\n },\n\n async setVolume(volume, player) {\n return await this.request(`${this.pluginName}.set_volume`, {volume: volume, chromecast: this.getPlayerName(player)})\n },\n\n async seek(position, player) {\n return await this.request(`${this.pluginName}.seek`, {position: position, chromecast: this.getPlayerName(player)})\n },\n\n async onMediaEvent(event) {\n if (event.plugin !== this.pluginName)\n return false\n\n this.$emit('status', await this.status(event.player))\n return true\n },\n\n supports(resource) {\n return resource?.type === 'youtube' ||\n (resource.url || resource).startsWith('http://') || (resource.url || resource).startsWith('https://')\n },\n },\n}\n</script>\n","<script>\nimport Utils from \"@/Utils\";\nimport MediaUtils from \"@/components/Media/Utils\";\n\nexport default {\n name: \"Mixin\",\n mixins: [Utils, MediaUtils],\n emits: ['status'],\n\n props: {\n player: {\n type: Object,\n },\n },\n\n data() {\n return {\n iconClass: null,\n name: null,\n pluginName: null,\n }\n },\n\n methods: {\n async getPlayers() {\n return [{\n iconClass: this.iconClass,\n name: this.name,\n pluginName: this.pluginName,\n component: this,\n status: await this.status(),\n }]\n },\n\n async status() {\n return await this.request(`${this.pluginName}.status`)\n },\n\n async play(resource, subs) {\n if (!resource) {\n return await this.pause()\n }\n\n return await this.request(`${this.pluginName}.play`, {resource: resource.url, subtitles: subs})\n },\n\n async pause() {\n return await this.request(`${this.pluginName}.pause`)\n },\n\n async stop() {\n return await this.request(`${this.pluginName}.stop`)\n },\n\n async setVolume(volume) {\n return await this.request(`${this.pluginName}.set_volume`, {volume: volume})\n },\n\n async seek(position) {\n return await this.request(`${this.pluginName}.seek`, {position: position})\n },\n\n async onNewMedia(event) {\n const isMine = await this.onMediaEvent(event)\n\n if (isMine && event.title) {\n this.notify({\n title: event.player || event.device || this.player?.name || this.name || this.pluginName,\n text: event.title,\n image: {\n iconClass: this.iconClass || 'fa fa-play',\n }\n })\n }\n },\n\n async onMediaEvent(event) {\n if (event.plugin !== this.pluginName)\n return false\n\n this.$emit('status', await this.status())\n return true\n },\n\n async addSubtitles(subs) {\n await this.request(`${this.pluginName}.add_subtitles`, {filename: subs})\n await this.request(`${this.pluginName}.toggle_subtitles`, {visible: true})\n },\n\n async removeSubtitles() {\n await this.request(`${this.pluginName}.toggle_subtitles`, {visible: false})\n },\n\n supports(resource) {\n return resource?.type === 'file' || resource?.type === 'youtube' ||\n (resource.url || resource).startsWith('http://') || (resource.url || resource).startsWith('https://')\n },\n },\n\n mounted() {\n this.subscribe(this.onNewMedia, `on-new-media-${this.pluginName}`,\n 'platypush.message.event.media.NewPlayingMediaEvent')\n\n this.subscribe(this.onMediaEvent, `on-media-event-${this.pluginName}`,\n 'platypush.message.event.media.MediaPlayEvent',\n 'platypush.message.event.media.MediaStopEvent',\n 'platypush.message.event.media.MediaPauseEvent',\n 'platypush.message.event.media.MediaSeekEvent',\n 'platypush.message.event.media.MediaVolumeChangedEvent',\n 'platypush.message.event.media.MediaMuteChangedEvent')\n },\n\n destroy() {\n this.unsubscribe(`on-media-event-${this.pluginName}`)\n },\n}\n</script>\n","import script from \"./Mixin.vue?vue&type=script&lang=js\"\nexport * from \"./Mixin.vue?vue&type=script&lang=js\"\n\nexport default script","import { render } from \"./Chromecast.vue?vue&type=template&id=55476f3a&bindings={\\\"name\\\":\\\"data\\\",\\\"pluginName\\\":\\\"data\\\",\\\"iconClass\\\":\\\"data\\\",\\\"getPlayers\\\":\\\"options\\\",\\\"getPlayerName\\\":\\\"options\\\",\\\"status\\\":\\\"options\\\",\\\"play\\\":\\\"options\\\",\\\"pause\\\":\\\"options\\\",\\\"stop\\\":\\\"options\\\",\\\"setVolume\\\":\\\"options\\\",\\\"seek\\\":\\\"options\\\",\\\"onMediaEvent\\\":\\\"options\\\",\\\"supports\\\":\\\"options\\\"}\"\nimport script from \"./Chromecast.vue?vue&type=script&lang=js\"\nexport * from \"./Chromecast.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<template>\n <div />\n</template>\n\n<script>\nimport Mixin from \"@/components/panels/Media/Players/Mixin\";\n\nexport default {\n name: \"Kodi\",\n mixins: [Mixin],\n data() {\n return {\n iconClass: 'fa fa-kodi',\n name: 'Kodi',\n pluginName: 'media.kodi',\n }\n },\n\n methods: {\n async getPlayers() {\n return [{\n iconClass: this.iconClass,\n pluginName: this.pluginName,\n name: this.$root.config['media.kodi']?.host || this.name,\n component: this,\n status: await this.request(`${this.pluginName}.status`)\n }]\n },\n\n supports(resource) {\n return resource?.type === 'youtube' || (resource.url || resource).startsWith('http://') ||\n (resource.url || resource).startsWith('https://')\n },\n },\n}\n</script>\n","import { render } from \"./Kodi.vue?vue&type=template&id=25a1a1cf&bindings={\\\"iconClass\\\":\\\"data\\\",\\\"name\\\":\\\"data\\\",\\\"pluginName\\\":\\\"data\\\",\\\"getPlayers\\\":\\\"options\\\",\\\"supports\\\":\\\"options\\\"}\"\nimport script from \"./Kodi.vue?vue&type=script&lang=js\"\nexport * from \"./Kodi.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<template>\n <div />\n</template>\n\n<script>\nimport Mixin from \"@/components/panels/Media/Players/Mixin\";\n\nexport default {\n name: \"Mplayer\",\n mixins: [Mixin],\n data() {\n return {\n iconClass: 'fa fa-tv',\n name: 'MPlayer',\n pluginName: 'media.mplayer',\n }\n },\n}\n</script>\n","import { render } from \"./Mplayer.vue?vue&type=template&id=0caf2d73&bindings={\\\"iconClass\\\":\\\"data\\\",\\\"name\\\":\\\"data\\\",\\\"pluginName\\\":\\\"data\\\"}\"\nimport script from \"./Mplayer.vue?vue&type=script&lang=js\"\nexport * from \"./Mplayer.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<template>\n <div />\n</template>\n\n<script>\nimport Mixin from \"@/components/panels/Media/Players/Mixin\";\n\nexport default {\n name: \"Mpv\",\n mixins: [Mixin],\n data() {\n return {\n iconClass: 'fa fa-tv',\n name: 'mpv',\n pluginName: 'media.mpv',\n }\n },\n}\n</script>\n","import { render } from \"./Mpv.vue?vue&type=template&id=3b3bb533&bindings={\\\"iconClass\\\":\\\"data\\\",\\\"name\\\":\\\"data\\\",\\\"pluginName\\\":\\\"data\\\"}\"\nimport script from \"./Mpv.vue?vue&type=script&lang=js\"\nexport * from \"./Mpv.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<template>\n <div />\n</template>\n\n<script>\nimport Mixin from \"@/components/panels/Media/Players/Mixin\";\n\nexport default {\n name: \"Omxplayer\",\n mixins: [Mixin],\n data() {\n return {\n iconClass: 'fa fa-tv',\n name: 'OMXPlayer',\n pluginName: 'media.omxplayer',\n }\n },\n}\n</script>\n","import { render } from \"./Omxplayer.vue?vue&type=template&id=0f086473&bindings={\\\"iconClass\\\":\\\"data\\\",\\\"name\\\":\\\"data\\\",\\\"pluginName\\\":\\\"data\\\"}\"\nimport script from \"./Omxplayer.vue?vue&type=script&lang=js\"\nexport * from \"./Omxplayer.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","<template>\n <div />\n</template>\n\n<script>\nimport Mixin from \"@/components/panels/Media/Players/Mixin\";\n\nexport default {\n name: \"Vlc\",\n mixins: [Mixin],\n data() {\n return {\n iconClass: 'fa fa-tv',\n name: 'VLC',\n pluginName: 'media.vlc',\n }\n },\n}\n</script>\n","import { render } from \"./Vlc.vue?vue&type=template&id=5b5bcdd3&bindings={\\\"iconClass\\\":\\\"data\\\",\\\"name\\\":\\\"data\\\",\\\"pluginName\\\":\\\"data\\\"}\"\nimport script from \"./Vlc.vue?vue&type=script&lang=js\"\nexport * from \"./Vlc.vue?vue&type=script&lang=js\"\nscript.render = render\n\nexport default script","import { render } from \"./Players.vue?vue&type=template&id=37304dfd&scoped=true&bindings={\\\"pluginName\\\":\\\"props\\\",\\\"loading\\\":\\\"data\\\",\\\"players\\\":\\\"data\\\",\\\"selectedPlayer\\\":\\\"data\\\",\\\"config\\\":\\\"data\\\",\\\"plugins\\\":\\\"data\\\",\\\"loadPlugins\\\":\\\"options\\\",\\\"refresh\\\":\\\"options\\\",\\\"select\\\":\\\"options\\\"}\"\nimport script from \"./Players.vue?vue&type=script&lang=js\"\nexport * from \"./Players.vue?vue&type=script&lang=js\"\n\nimport \"./Players.vue?vue&type=style&index=0&id=37304dfd&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-37304dfd\"\n\nexport default script","import { render } from \"./Header.vue?vue&type=template&id=dde55b0a&scoped=true&bindings={\\\"pluginName\\\":\\\"props\\\",\\\"selectedView\\\":\\\"props\\\",\\\"selectedSubtitles\\\":\\\"props\\\",\\\"selectedItem\\\":\\\"props\\\",\\\"hasSubtitlesPlugin\\\":\\\"props\\\",\\\"filterVisible\\\":\\\"data\\\",\\\"query\\\":\\\"data\\\",\\\"torrentURL\\\":\\\"data\\\",\\\"sources\\\":\\\"data\\\",\\\"search\\\":\\\"options\\\"}\"\nimport script from \"./Header.vue?vue&type=script&lang=js\"\nexport * from \"./Header.vue?vue&type=script&lang=js\"\n\nimport \"./Header.vue?vue&type=style&index=0&id=dde55b0a&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-dde55b0a\"\n\nexport default script","<template>\n <div class=\"row\" v-if=\"item?.title\">\n <div class=\"left side\">Title</div>\n <div class=\"right side\">\n <a :href=\"`https://www.imdb.com/title/${item.imdb_id}`\" target=\"_blank\" v-if=\"item.imdb_id\"\n v-text=\"item.title\" />\n <span v-else v-text=\"item.title\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"item?.synopsis\">\n <div class=\"left side\">Synopsis</div>\n <div class=\"right side\" v-text=\"item.synopsis\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.description\">\n <div class=\"left side\">Description</div>\n <div class=\"right side\" v-text=\"item.description\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.channelId\">\n <div class=\"left side\">Channel</div>\n <div class=\"right side\">\n <a :href=\"`https://www.youtube.com/channel/${item.channelId}`\" target=\"_blank\"\n v-text=\"item.channelTitle || `https://www.youtube.com/channel/${item.channelId}`\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"item?.year\">\n <div class=\"left side\">Year</div>\n <div class=\"right side\" v-text=\"item.year\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.publishedAt\">\n <div class=\"left side\">Published at</div>\n <div class=\"right side\" v-text=\"formatDate(item.publishedAt, true)\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.file\">\n <div class=\"left side\">File</div>\n <div class=\"right side\" v-text=\"item.file\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.url\">\n <div class=\"left side\">URL</div>\n <div class=\"right side url\">\n <a :href=\"item.url\" target=\"_blank\" v-text=\"item.url\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"item?.trailer\">\n <div class=\"left side\">Trailer</div>\n <div class=\"right side url\">\n <a :href=\"item.trailer\" target=\"_blank\" v-text=\"item.trailer\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"item?.size\">\n <div class=\"left side\">Size</div>\n <div class=\"right side\" v-text=\"convertSize(item.size)\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.quality\">\n <div class=\"left side\">Quality</div>\n <div class=\"right side\" v-text=\"item.quality\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.seeds\">\n <div class=\"left side\">Seeds</div>\n <div class=\"right side\" v-text=\"item.seeds\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.peers\">\n <div class=\"left side\">Peers</div>\n <div class=\"right side\" v-text=\"item.peers\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.language\">\n <div class=\"left side\">Language</div>\n <div class=\"right side\" v-text=\"item.language\" />\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Info\",\n mixins: [Utils],\n props: {\n item: {\n type: Object,\n default: () => {},\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.row {\n display: flex;\n min-height: 3em;\n padding: .5em 1em;\n\n @include until ($tablet) {\n flex-direction: column;\n }\n\n @include from ($tablet) {\n align-items: center;\n }\n\n &:not(:last-child) {\n border-bottom: $default-border-2;\n }\n\n &:hover {\n background: $hover-bg;\n border-radius: .5em;\n }\n\n .side {\n align-items: center;\n display: inline-flex;\n\n &.url {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n @include until ($tablet) {\n display: flex;\n\n &.left {\n font-weight: bold;\n }\n\n &.right {\n justify-content: left;\n }\n }\n\n @include from ($tablet) {\n display: inline-flex;\n\n &.left {\n width: 22%;\n margin-right: 3%;\n }\n\n &.right {\n width: 75%;\n justify-content: right;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Info.vue?vue&type=template&id=7ef655c2&scoped=true&bindings={\\\"item\\\":\\\"props\\\"}\"\nimport script from \"./Info.vue?vue&type=script&lang=js\"\nexport * from \"./Info.vue?vue&type=script&lang=js\"\n\nimport \"./Info.vue?vue&type=style&index=0&id=7ef655c2&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7ef655c2\"\n\nexport default script","<template>\n <nav>\n <li v-for=\"(view, name) in views\" :key=\"name\" :title=\"view.displayName\"\n :class=\"{selected: name === selectedView}\" @click=\"$emit('input', name)\">\n <i :class=\"view.iconClass\" />\n </li>\n </nav>\n</template>\n\n<script>\nexport default {\n name: \"Nav\",\n emits: ['input'],\n props: {\n selectedView: {\n type: String,\n },\n\n collapsed: {\n type: Boolean,\n default: false,\n },\n\n views: {\n type: Object,\n default: () => {\n return {\n search: {\n iconClass: 'fa fa-search',\n displayName: 'Search',\n },\n\n browse: {\n iconClass: 'fa fa-folder',\n displayName: 'Browse',\n },\n\n torrents: {\n iconClass: 'fa fa-magnet',\n displayName: 'Torrents',\n },\n }\n }\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import 'vars.scss';\n\nnav {\n width: $media-nav-width;\n height: 100%;\n background: $nav-collapsed-bg;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n box-shadow: 2.5px 0 4.5px 2px $nav-collapsed-fg;\n margin-left: 2.5px;\n overflow: hidden;\n\n li {\n display: flex;\n align-items: center;\n font-size: 1.2em;\n cursor: pointer;\n list-style: none;\n padding: .6em;\n opacity: 0.7;\n\n &.selected,\n &:hover {\n border-radius: 1.2em;\n margin: 0 0.2em;\n }\n\n &:hover {\n background: $nav-entry-collapsed-hover-bg;\n }\n\n &.selected {\n background: $nav-entry-collapsed-selected-bg;\n }\n\n }\n}\n</style>\n","import { render } from \"./Nav.vue?vue&type=template&id=618c94aa&scoped=true&bindings={\\\"selectedView\\\":\\\"props\\\",\\\"collapsed\\\":\\\"props\\\",\\\"views\\\":\\\"props\\\"}\"\nimport script from \"./Nav.vue?vue&type=script&lang=js\"\nexport * from \"./Nav.vue?vue&type=script&lang=js\"\n\nimport \"./Nav.vue?vue&type=style&index=0&id=618c94aa&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-618c94aa\"\n\nexport default script","<template>\n <div class=\"media-results\">\n <div class=\"row item\" :class=\"{selected: selectedResult === i}\" v-for=\"(result, i) in results\" :key=\"i\"\n @click=\"$emit('select', i)\">\n <div class=\"col-10 left side\">\n <div class=\"icon\">\n <i :class=\"typeIcons[result.type]\" />\n </div>\n <div class=\"title\" v-text=\"result.title\" />\n </div>\n\n <div class=\"col-2 right side\">\n <Dropdown title=\"Actions\" icon-class=\"fa fa-ellipsis-h\" @click=\"$emit('select', i)\">\n <DropdownItem icon-class=\"fa fa-play\" text=\"Play\" @click=\"$emit('play', result)\"\n v-if=\"result?.type !== 'torrent'\" />\n <DropdownItem icon-class=\"fa fa-download\" text=\"Download\" @click=\"$emit('download', result)\"\n v-if=\"result?.type === 'torrent'\" />\n <DropdownItem icon-class=\"fa fa-window-maximize\" text=\"View in browser\" @click=\"$emit('view', result)\"\n v-if=\"result?.type === 'file'\" />\n <DropdownItem icon-class=\"fa fa-info\" text=\"Info\" @click=\"$emit('info', result)\" />\n </Dropdown>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\n\nexport default {\n name: \"Results\",\n components: {Dropdown, DropdownItem},\n emits: ['select', 'info', 'play', 'view', 'download'],\n props: {\n results: {\n type: Array,\n default: () => [],\n },\n\n selectedResult: {\n type: Number,\n },\n },\n\n data() {\n return {\n typeIcons: {\n 'file': 'fa fa-hdd',\n 'torrent': 'fa fa-magnet',\n 'youtube': 'fab fa-youtube',\n },\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"src/style/items\";\n\n.media-results {\n width: 100%;\n height: 100%;\n background: $background-color;\n overflow: auto;\n\n .item {\n display: flex;\n align-items: center;\n\n &.selected {\n background: $selected-bg;\n }\n\n .side {\n display: inline-flex;\n align-items: center;\n\n &.right {\n justify-content: right;\n }\n\n ::v-deep(.dropdown-container) {\n .item {\n box-shadow: none;\n }\n\n button {\n border: 0;\n padding: 0;\n background: none;\n opacity: .7;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n }\n }\n }\n}\n</style>\n","import { render } from \"./Results.vue?vue&type=template&id=591fa840&scoped=true&bindings={\\\"results\\\":\\\"props\\\",\\\"selectedResult\\\":\\\"props\\\",\\\"typeIcons\\\":\\\"data\\\"}\"\nimport script from \"./Results.vue?vue&type=script&lang=js\"\nexport * from \"./Results.vue?vue&type=script&lang=js\"\n\nimport \"./Results.vue?vue&type=style&index=0&id=591fa840&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-591fa840\"\n\nexport default script","<template>\n <div class=\"subtitles-container\">\n <div class=\"items\">\n <Loading v-if=\"loading\" />\n <div class=\"row item\" :class=\"{selected: selectedItem == null}\" @click=\"selectedItem = null\">\n <div class=\"col-1 icon\">\n <i class=\"fa fa-ban\" />\n </div>\n\n <div class=\"col-11 title\">None</div>\n </div>\n\n <div class=\"row item\" :class=\"{selected: selectedItem === i}\" v-for=\"(sub, i) in items\" :key=\"i\"\n @click=\"selectedItem = i\">\n <div class=\"col-1 icon\">\n <i class=\"fa fa-file\" v-if=\"sub.IsLocal\" />\n <i class=\"flag-icon\" :class=\"`flag-icon-${sub.ISO639}`\" v-else-if=\"sub.ISO639\" />\n <i class=\"fa fa-closed-captioning\" v-else />\n </div>\n {{ sub.SubFileName }}\n </div>\n </div>\n\n <div class=\"footer\">\n <button @click=\"$emit('select-subs', selectedItem == null ? null : items[selectedItem])\">Select</button>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\"\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Subtitles\",\n mixins: [Utils],\n components: {Loading},\n emits: ['select-subs'],\n props: {\n item: {\n type: Object,\n default: () => {},\n },\n },\n\n data() {\n return {\n loading: false,\n items: [],\n selectedItem: null,\n }\n },\n\n methods: {\n async refresh() {\n this.loading = true\n\n try {\n this.items = await this.request('media.subtitles.search', {resource: this.item.url, language: 'all'})\n } finally {\n this.loading = false\n }\n }\n },\n\n mounted() {\n this.refresh()\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"src/style/items\";\n@import \"~@/style/flag-icons.css\";\n\n.subtitles-container {\n .items {\n overflow: auto;\n }\n\n .footer {\n display: flex;\n justify-content: right;\n padding: 1em;\n background: $default-bg-6;\n box-shadow: $border-shadow-top;\n }\n}\n</style>\n","import { render } from \"./Subtitles.vue?vue&type=template&id=77ae3705&scoped=true&bindings={\\\"item\\\":\\\"props\\\",\\\"loading\\\":\\\"data\\\",\\\"items\\\":\\\"data\\\",\\\"selectedItem\\\":\\\"data\\\",\\\"refresh\\\":\\\"options\\\"}\"\nimport script from \"./Subtitles.vue?vue&type=script&lang=js\"\nexport * from \"./Subtitles.vue?vue&type=script&lang=js\"\n\nimport \"./Subtitles.vue?vue&type=style&index=0&id=77ae3705&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-77ae3705\"\n\nexport default script","import { render } from \"./Index.vue?vue&type=template&id=fea02376&scoped=true&bindings={\\\"pluginName\\\":\\\"props\\\",\\\"mediaButtons\\\":\\\"props\\\",\\\"loading\\\":\\\"data\\\",\\\"results\\\":\\\"data\\\",\\\"selectedResult\\\":\\\"data\\\",\\\"selectedPlayer\\\":\\\"data\\\",\\\"selectedView\\\":\\\"data\\\",\\\"selectedSubtitles\\\":\\\"data\\\",\\\"showSubtitlesModal\\\":\\\"data\\\",\\\"awaitingPlayTorrent\\\":\\\"data\\\",\\\"torrentPlugin\\\":\\\"data\\\",\\\"torrentPlugins\\\":\\\"data\\\",\\\"hasSubtitlesPlugin\\\":\\\"options\\\",\\\"search\\\":\\\"options\\\",\\\"play\\\":\\\"options\\\",\\\"pause\\\":\\\"options\\\",\\\"stop\\\":\\\"options\\\",\\\"setVolume\\\":\\\"options\\\",\\\"seek\\\":\\\"options\\\",\\\"view\\\":\\\"options\\\",\\\"download\\\":\\\"options\\\",\\\"refresh\\\":\\\"options\\\",\\\"onStatusUpdate\\\":\\\"options\\\",\\\"onTorrentQueued\\\":\\\"options\\\",\\\"onTorrentMetadata\\\":\\\"options\\\",\\\"onTorrentDownloadStart\\\":\\\"options\\\",\\\"onTorrentDownloadCompleted\\\":\\\"options\\\",\\\"getTorrentPlugin\\\":\\\"options\\\",\\\"downloadTorrent\\\":\\\"options\\\",\\\"selectSubtitles\\\":\\\"options\\\",\\\"onResultSelect\\\":\\\"options\\\"}\"\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=fea02376&lang=scss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-fea02376\"\n\nexport default script","var isRegExp = require('../internals/is-regexp');\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Nav.vue?vue&type=style&index=0&id=618c94aa&lang=scss&scoped=true\"","'use strict';\nvar $ = require('../internals/export');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\nvar nativeEndsWith = ''.endsWith;\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.github.io/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = String(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = String(searchString);\n return nativeEndsWith\n ? nativeEndsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Results.vue?vue&type=style&index=0&id=591fa840&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Info.vue?vue&type=style&index=0&id=7ef655c2&lang=scss&scoped=true\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Header.vue?vue&type=style&index=0&id=dde55b0a&lang=scss&scoped=true\"","<template>\n <Media plugin-name=\"media.omxplayer\" />\n</template>\n\n<script>\nimport Media from '@/components/panels/Media/Index'\n\nexport default {\n name: \"MediaMpv\",\n components: {Media},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import { render } from \"./Index.vue?vue&type=template&id=7264d7fc&scoped=true&bindings={}\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\nscript.render = render\nscript.__scopeId = \"data-v-7264d7fc\"\n\nexport default script","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--0-1!./Players.vue?vue&type=style&index=0&id=37304dfd&lang=scss&scoped=true\""],"sourceRoot":""}