platypush/platypush/backend/http/dist/static/js/chunk-a3d822ca.ac168508.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:///./src/components/panels/MediaMpv/Index.vue","webpack:///./src/components/panels/MediaMpv/Index.vue?ac2c","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/Media/Players.vue?ef7a"],"names":["plugin-name","name","components","Media","render","__scopeId","$","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","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","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","$root","config","host","Loading","DropdownItem","Dropdown","Chromecast","Kodi","Mplayer","Mpv","Omxplayer","Vlc","required","plugins","loadPlugins","entries","filter","p","endsWith","push","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"],"mappings":"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","file":"static/js/chunk-a3d822ca.ac168508.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\"","<template>\n <Media plugin-name=\"media.mpv\" />\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=52effd7c&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-52effd7c\"\n\nexport default script","'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\"","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":""}