platypush/platypush/backend/http/webapp/dist/static/js/1256.4f0bd868.js.map

1 line
139 KiB
Plaintext

{"version":3,"file":"static/js/1256.4f0bd868.js","mappings":"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,CAAC,SAASC,IAAQ,CAAC,YAAY,qBAEzF,S,uBCTA,IAAIwJ,EAAM,CACT,SAAU,CACT,KACA,EACA,MAED,aAAc,CACb,KACA,EACA,MAED,UAAW,CACV,KACA,EACA,MAED,cAAe,CACd,KACA,EACA,MAED,QAAS,CACR,KACA,EACA,KACA,MAED,YAAa,CACZ,KACA,EACA,KACA,MAED,YAAa,CACZ,KACA,EACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAED,gBAAiB,CAChB,KACA,EACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,wBAAyB,CACxB,KACA,EACA,KACA,MAED,iBAAkB,CACjB,IACA,EACA,KACA,KACA,KAED,qBAAsB,CACrB,IACA,EACA,KACA,KACA,KAED,kBAAmB,CAClB,KACA,EACA,MAED,sBAAuB,CACtB,KACA,EACA,MAED,oBAAqB,CACpB,KACA,EACA,KACA,MAED,wBAAyB,CACxB,KACA,EACA,KACA,MAED,qBAAsB,CACrB,IACA,EACA,KACA,KACA,KAED,yBAA0B,CACzB,IACA,EACA,KACA,KACA,KAED,sBAAuB,CACtB,KACA,EACA,KACA,KACA,KACA,MAED,0BAA2B,CAC1B,KACA,EACA,KACA,KACA,KACA,MAED,0BAA2B,CAC1B,KACA,EACA,KACA,KACA,KACA,MAED,8BAA+B,CAC9B,KACA,EACA,KACA,KACA,KACA,MAED,SAAU,CACT,KACA,GAED,cAAe,CACd,KACA,IAGF,SAAS4N,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAE/N,EAAK6N,GAC9B,OAAO/N,QAAQkO,UAAUC,MAAK,WAC7B,IAAIpC,EAAI,IAAIqC,MAAM,uBAAyBL,EAAM,KAEjD,MADAhC,EAAEsC,KAAO,mBACHtC,CACP,IAGD,IAAIuC,EAAMpO,EAAI6N,GAAMQ,EAAKD,EAAI,GAC7B,OAAOtO,QAAQC,IAAIqO,EAAIlc,MAAM,GAAG8N,IAAI8N,EAAoBjC,IAAIoC,MAAK,WAChE,OAAOH,EAAoBQ,EAAED,EAAa,GAATD,EAAI,GACtC,GACD,CACAR,EAAoBlQ,KAAO,WAAa,OAAOD,OAAOC,KAAKsC,EAAM,EACjE4N,EAAoBS,GAAK,KACzBE,EAAOC,QAAUZ,C","sources":["webpack://platypush/./src/components/File/Browser.vue","webpack://platypush/./src/components/File/Browser.vue?8abf","webpack://platypush/./src/components/panels/Media/Index.vue","webpack://platypush/./src/components/panels/Media/Browser.vue","webpack://platypush/./src/components/panels/Media/Browser.vue?039d","webpack://platypush/./src/components/panels/Media/Header.vue","webpack://platypush/./src/components/panels/Media/Players.vue","webpack://platypush/./src/components/panels/Media/Players/Chromecast.vue","webpack://platypush/./src/components/panels/Media/Players/Mixin.vue","webpack://platypush/./src/components/panels/Media/Players/Mixin.vue?8a34","webpack://platypush/./src/components/panels/Media/Players/Chromecast.vue?c107","webpack://platypush/./src/components/panels/Media/Players/Kodi.vue","webpack://platypush/./src/components/panels/Media/Players/Kodi.vue?6dfd","webpack://platypush/./src/components/panels/Media/Players/Mplayer.vue","webpack://platypush/./src/components/panels/Media/Players/Mplayer.vue?eab0","webpack://platypush/./src/components/panels/Media/Players/Mpv.vue","webpack://platypush/./src/components/panels/Media/Players/Mpv.vue?06ab","webpack://platypush/./src/components/panels/Media/Players/Omxplayer.vue","webpack://platypush/./src/components/panels/Media/Players/Omxplayer.vue?69bd","webpack://platypush/./src/components/panels/Media/Players/Vlc.vue","webpack://platypush/./src/components/panels/Media/Players/Vlc.vue?4868","webpack://platypush/./src/components/panels/Media/Players.vue?c223","webpack://platypush/./src/components/panels/Media/Header.vue?b895","webpack://platypush/./src/components/panels/Media/Nav.vue","webpack://platypush/./src/components/panels/Media/Nav.vue?bae0","webpack://platypush/./src/components/panels/Media/Subtitles.vue","webpack://platypush/./src/components/panels/Media/Subtitles.vue?17fa","webpack://platypush/./src/components/panels/Media/UrlPlayer.vue","webpack://platypush/./src/components/panels/Media/UrlPlayer.vue?df3e","webpack://platypush/./src/components/panels/Media/Index.vue?1f2c","webpack://platypush/./src/components/panels/Media/MediaImage.vue","webpack://platypush/./src/components/panels/Media/MediaImage.vue?fc5b","webpack://platypush/./src/components/panels/Media/Results.vue","webpack://platypush/./src/components/panels/Media/Info.vue","webpack://platypush/./src/components/panels/Media/Info.vue?c19c","webpack://platypush/./src/components/panels/Media/Item.vue","webpack://platypush/./src/components/panels/Media/Item.vue?41dd","webpack://platypush/./src/components/panels/Media/Results.vue?23d6","webpack://platypush/./src/components/panels/Torrent/View.vue","webpack://platypush/./src/components/panels/Torrent/View.vue?80df","webpack://platypush/./src/components/panels/Media/Providers/ lazy ^\\.\\/.*$ namespace object"],"sourcesContent":["<template>\n <div class=\"browser\">\n <Loading v-if=\"loading\" />\n\n <div class=\"nav\" ref=\"nav\">\n <span class=\"path\"\n v-for=\"(token, i) in pathTokens\"\n :key=\"i\"\n @click=\"path = pathTokens.slice(0, i + 1).join('/').slice(1)\">\n <span class=\"token\">\n {{ token }}\n </span>\n\n <span class=\"separator\" v-if=\"(i > 0 || pathTokens.length > 1) && i < pathTokens.length - 1\">\n <i class=\"fa fa-chevron-right\" />\n </span>\n </span>\n </div>\n\n <div class=\"items\" ref=\"items\">\n <div class=\"row item\"\n @click=\"onBack\"\n v-if=\"(path?.length && path !== '/') || hasBack\">\n <div class=\"col-10 left side\">\n <i class=\"icon fa fa-folder\" />\n <span class=\"name\">..</span>\n </div>\n </div>\n\n <div class=\"row item\" v-for=\"(file, i) in filteredFiles\" :key=\"i\" @click=\"onItemSelect(file)\">\n <div class=\"col-10\">\n <i class=\"icon fa\" :class=\"{'fa-file': file.type !== 'directory', 'fa-folder': file.type === 'directory'}\" />\n <span class=\"name\">\n {{ file.name }}\n </span>\n </div>\n\n <div class=\"col-2 actions\" v-if=\"fileActions.length\">\n <Dropdown>\n <DropdownItem icon-class=\"fa fa-play\" text=\"Play\"\n @click=\"$emit('play', {type: 'file', url: `file://${file.path}`})\"\n v-if=\"hasPlay && file.type !== 'directory'\" />\n </Dropdown>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\n\nexport default {\n name: \"Browser\",\n components: {DropdownItem, Dropdown, Loading},\n mixins: [Utils, MediaUtils],\n emits: ['back', 'path-change', 'play', 'input'],\n\n props: {\n hasBack: {\n type: Boolean,\n default: false,\n },\n\n initialPath: {\n type: String,\n },\n\n isMedia: {\n type: Boolean,\n },\n\n filter: {\n type: String,\n default: '',\n },\n },\n\n data() {\n return {\n loading: false,\n path: this.initialPath,\n files: [],\n }\n },\n\n computed: {\n filteredFiles() {\n if (!this.filter?.length)\n return this.files\n\n return this.files.filter((file) => (file?.name || '').toLowerCase().indexOf(this.filter.toLowerCase()) >= 0)\n },\n\n hasPlay() {\n return this.isMedia && this.files.some((file) => this.mediaExtensions.has(file.name.split('.').pop()?.toLowerCase()))\n },\n\n fileActions() {\n if (!this.hasPlay)\n return []\n\n return [\n {\n iconClass: 'fa fa-play',\n text: 'Play',\n onClick: (file) => this.$emit('play', {type: 'file', url: `file://${file.path}`}),\n },\n ]\n },\n\n pathTokens() {\n if (!this.path?.length)\n return ['/']\n\n return ['/', ...this.path.split(/(?<!\\\\)\\//).slice(1)]\n },\n },\n\n methods: {\n async refresh() {\n this.loading = true\n this.$nextTick(() => {\n // Scroll to the end of the path navigator\n this.$refs.nav.scrollLeft = 99999\n // Scroll to the top of the items list\n this.$refs.items.scrollTop = 0\n })\n\n try {\n this.files = await this.request('file.list', {path: this.path})\n this.$emit('path-change', this.path)\n } finally {\n this.loading = false\n }\n },\n\n onBack() {\n if (!this.path?.length || this.path === '/')\n this.$emit('back')\n else\n this.path = [...this.pathTokens].slice(0, -1).join('/').slice(1)\n },\n\n onItemSelect(file) {\n if (file.type === 'directory')\n this.path = file.path\n else\n this.$emit('input', file.path)\n },\n },\n\n watch: {\n initialPath() {\n this.path = this.initialPath\n },\n\n path() {\n this.refresh()\n },\n },\n\n mounted() {\n this.refresh()\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"src/style/items\";\n\n.browser {\n height: 100%;\n display: flex;\n flex-direction: column;\n\n .item {\n .actions {\n display: inline-flex;\n justify-content: right;\n }\n }\n\n .items {\n height: calc(100% - #{$nav-height});\n overflow: auto;\n }\n}\n</style>\n","import { render } from \"./Browser.vue?vue&type=template&id=0f0ae058&scoped=true\"\nimport script from \"./Browser.vue?vue&type=script&lang=js\"\nexport * from \"./Browser.vue?vue&type=script&lang=js\"\n\nimport \"./Browser.vue?vue&type=style&index=0&id=0f0ae058&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f0ae058\"]])\n\nexport default __exports__","<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\" @mute=\"toggleMute\" @unmute=\"toggleMute\">\n <main>\n <div class=\"nav-container from tablet\" :style=\"navContainerStyle\">\n <Nav :selected-view=\"selectedView\"\n :torrent-plugin=\"torrentPlugin\"\n @input=\"selectedView = $event\"\n @toggle=\"forceShowNav = !forceShowNav\" />\n </div>\n\n <div class=\"view-container\">\n <Header :plugin-name=\"pluginName\"\n :selected-view=\"selectedView\"\n :has-subtitles-plugin=\"hasSubtitlesPlugin\"\n :sources=\"sources\"\n :selected-item=\"selectedItem\"\n :selected-subtitles=\"selectedSubtitles\"\n :browser-filter=\"browserFilter\"\n :show-nav-button=\"!forceShowNav\"\n ref=\"header\"\n @search=\"search\"\n @select-player=\"selectedPlayer = $event\"\n @player-status=\"onStatusUpdate\"\n @torrent-add=\"downloadTorrent($event)\"\n @show-subtitles=\"showSubtitlesModal = !showSubtitlesModal\"\n @play-url=\"showPlayUrlModal\"\n @filter=\"browserFilter = $event\"\n @toggle-nav=\"forceShowNav = !forceShowNav\"\n @source-toggle=\"sources[$event] = !sources[$event]\" />\n\n <div class=\"body-container\" :class=\"{'expanded-header': $refs.header?.filterVisible}\">\n <Results :results=\"results\"\n :selected-result=\"selectedResult\"\n :sources=\"sources\"\n :loading=\"loading\"\n :filter=\"browserFilter\"\n @select=\"onResultSelect($event)\"\n @play=\"play\"\n @view=\"view\"\n @download=\"download\"\n v-if=\"selectedView === 'search'\" />\n\n <TorrentView :plugin-name=\"torrentPlugin\"\n :is-media=\"true\"\n @play=\"play\"\n v-else-if=\"selectedView === 'torrents'\" />\n\n <Browser :filter=\"browserFilter\"\n @path-change=\"browserFilter = ''\"\n @play=\"play($event)\"\n v-else-if=\"selectedView === 'browser'\" />\n </div>\n </div>\n </main>\n </MediaView>\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\n <div class=\"play-url-container\">\n <Modal title=\"Play URL\" ref=\"playUrlModal\" @open=\"onPlayUrlModalOpen\">\n <UrlPlayer :value=\"urlPlay\" @input=\"urlPlay = $event.target.value\" @play=\"playUrl($event)\" />\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\";\n\nimport Browser from \"@/components/panels/Media/Browser\";\nimport Header from \"@/components/panels/Media/Header\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport MediaView from \"@/components/Media/View\";\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\";\nimport UrlPlayer from \"@/components/panels/Media/UrlPlayer\";\n\nexport default {\n name: \"Media\",\n mixins: [Utils, MediaUtils],\n components: {\n Browser,\n Header,\n Loading,\n MediaView,\n Modal,\n Nav,\n Results,\n Subtitles,\n TorrentView,\n UrlPlayer,\n },\n\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 forceShowNav: false,\n awaitingPlayTorrent: null,\n urlPlay: null,\n browserFilter: null,\n torrentPlugin: null,\n torrentPlugins: [\n 'torrent',\n 'rtorrent',\n ],\n\n sources: {\n 'file': true,\n 'youtube': true,\n 'torrent': true,\n },\n }\n },\n\n computed: {\n hasSubtitlesPlugin() {\n return 'media.subtitles' in this.$root.config\n },\n\n navContainerStyle() {\n if (this.forceShowNav)\n return {\n display: 'flex !important',\n }\n\n return {}\n },\n\n selectedItem() {\n if (\n this.selectedPlayer && this.selectedPlayer.status &&\n (\n this.selectedPlayer.status.state === 'play' ||\n this.selectedPlayer.status.state === 'pause'\n )\n )\n return this.selectedPlayer.status\n\n return this.results[this.selectedResult]\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 this.notify({\n text: 'Torrent queued for download',\n image: {\n iconClass: 'fa fa-magnet',\n }\n })\n\n await this.download(item)\n return\n }\n\n this.loading = true\n\n try {\n if (!this.selectedPlayer.component.supports(item))\n item = await this.startStreaming(item, this.pluginName)\n\n await this.selectedPlayer.component.play(item, this.selectedSubtitles, this.selectedPlayer)\n await this.refresh()\n } finally {\n this.loading = false\n }\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 toggleMute() {\n await this.selectedPlayer.component.toggleMute(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, this.pluginName, 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 onPlayUrlModalOpen() {\n const modal = this.$refs.playUrlModal\n this.urlPlay = ''\n modal.$nextTick(() => {\n const input = modal.$el.querySelector('input[type=text]')\n if (input) {\n input.focus()\n input.select()\n }\n })\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 } else {\n this.selectedResult = null\n }\n },\n\n showPlayUrlModal() {\n this.$refs.playUrlModal.show()\n },\n\n async playUrl(url) {\n this.urlPlay = url\n this.loading = true\n\n try {\n await this.play({\n url: url,\n })\n\n this.$refs.playUrlModal.close()\n } finally {\n this.loading = false\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 if ('media.plex' in this.$root.config)\n this.sources.plex = true\n\n if ('media.jellyfin' in this.$root.config)\n this.sources.jellyfin = true\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@import \"~@/components/Media/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} - #{$media-ctrl-panel-height});\n padding-top: .1em;\n overflow: auto;\n\n &.expanded-header {\n height: calc(100% - #{$media-header-height} - #{$filter-header-height} - #{$media-ctrl-panel-height});\n }\n }\n }\n}\n\n:deep(.loading) {\n z-index: 10;\n}\n\n:deep(.subtitles-container) {\n .body {\n padding: 0 !important;\n\n .item {\n padding: 1em;\n }\n }\n}\n</style>\n","<template>\n <keep-alive>\n <div class=\"media-browser\">\n <Loading v-if=\"loading\" />\n\n <div class=\"media-index grid\" v-else-if=\"!mediaProvider\">\n <div class=\"item\"\n v-for=\"(provider, name) in mediaProviders\"\n :key=\"name\"\n @click=\"mediaProvider = provider\">\n <div class=\"icon\">\n <i v-bind=\"providersMetadata[name].icon\"\n :style=\"{ color: providersMetadata[name].icon?.color || 'inherit' }\"\n v-if=\"providersMetadata[name].icon\" />\n </div>\n <div class=\"name\">\n {{ providersMetadata[name].name }}\n </div>\n </div>\n </div>\n\n <div class=\"media-browser-body\" v-else-if=\"mediaProvider\">\n <component\n :is=\"mediaProvider\"\n :filter=\"filter\"\n @back=\"mediaProvider = null\"\n @path-change=\"$emit('path-change', $event)\"\n @play=\"$emit('play', $event)\" />\n </div>\n </div>\n </keep-alive>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from \"vue\";\nimport Browser from \"@/components/File/Browser\";\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\nimport providersMetadata from \"./Providers/meta.json\";\n\nexport default {\n emits: ['path-change', 'play'],\n mixins: [Utils],\n components: {\n Browser,\n Loading,\n },\n\n props: {\n filter: {\n type: String,\n default: '',\n },\n },\n\n data() {\n return {\n loading: false,\n mediaProvider: null,\n mediaProviders: {},\n providersMetadata: providersMetadata,\n }\n },\n\n methods: {\n registerMediaProvider(type) {\n const component = shallowRef(\n defineAsyncComponent(\n () => import(`@/components/panels/Media/Providers/${type}`)\n )\n )\n\n this.$options.components[type] = component\n this.mediaProviders[type] = component\n },\n\n async refreshMediaProviders() {\n const config = await this.request('config.get')\n this.mediaProviders = {}\n // The local File provider is always enabled\n this.registerMediaProvider('File')\n\n if (config.youtube)\n this.registerMediaProvider('YouTube')\n },\n },\n\n mounted() {\n this.refreshMediaProviders()\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"./style.scss\";\n\n.media-browser {\n height: 100%;\n\n .media-browser-body {\n height: 100%;\n }\n}\n</style>\n","import { render } from \"./Browser.vue?vue&type=template&id=6b56bca2&scoped=true\"\nimport script from \"./Browser.vue?vue&type=script&lang=js\"\nexport * from \"./Browser.vue?vue&type=script&lang=js\"\n\nimport \"./Browser.vue?vue&type=style&index=0&id=6b56bca2&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6b56bca2\"]])\n\nexport default __exports__","<template>\n <div class=\"header\" :class=\"{'with-filter': filterVisible}\">\n <div class=\"row\">\n <div class=\"col-s-8 col-m-7 left side\" v-if=\"selectedView === 'search'\">\n <button title=\"Filter\" class=\"filter-btn\" :class=\"{selected: filterVisible}\"\n @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-s-8 col-m-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-s-8 col-m-7 left side\" v-else-if=\"selectedView === 'browser'\">\n <label class=\"search-box\">\n <input type=\"search\" placeholder=\"Filter\" :value=\"browserFilter\" @change=\"$emit('filter', $event.target.value)\"\n @keyup=\"$emit('filter', $event.target.value)\">\n </label>\n </div>\n\n <div class=\"col-s-4 col-m-5 right side\">\n <button class=\"mobile\" title=\"Menu\" @click=\"$emit('toggle-nav')\" v-if=\"showNavButton\">\n <i class=\"fas fa-bars\" />\n </button>\n\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\n <button title=\"Play URL\" @click=\"$emit('play-url')\">\n <i class=\"fas fa-play\" />\n </button>\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\" :checked=\"sources[source]\" @change=\"$emit('source-toggle', source)\" />\n {{ source }}\n </label>\n </div>\n </div>\n</template>\n\n<script>\nimport Players from \"@/components/panels/Media/Players\";\nexport default {\n name: \"Header\",\n components: {Players},\n emits: [\n 'filter',\n 'play-url',\n 'player-status',\n 'search',\n 'select-player',\n 'show-subtitles',\n 'source-toggle',\n 'toggle-nav',\n 'torrent-add',\n ],\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 showNavButton: {\n type: Boolean,\n },\n\n browserFilter: {\n type: String,\n default: '',\n },\n\n sources: {\n type: Object,\n default: () => {},\n }\n },\n\n data() {\n return {\n filterVisible: false,\n query: '',\n torrentURL: '',\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 mounted() {\n this.$watch(() => this.selectedView, () => {\n this.$emit('filter', '')\n this.torrentURL = ''\n this.query = ''\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 .filter-btn.selected {\n color: $selected-fg;\n }\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 padding-bottom: 0;\n }\n\n .side {\n display: inline-flex;\n align-items: center;\n\n &.right {\n justify-content: right;\n direction: rtl;\n }\n }\n\n :deep(button) {\n background: none;\n padding: 0 .5em;\n border: 0;\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 width: 100%;\n height: $filter-header-height;\n margin-top: .5em;\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=\"media-players\">\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 </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\">\n.media-players {\n .plugins {\n display: none;\n }\n\n .no-results {\n padding: 1em;\n }\n}\n\n.dropdown-container {\n .refresh {\n font-weight: bold;\n font-size: .8em;\n opacity: .7;\n }\n\n .player.selected {\n .item {\n color: $selected-fg;\n }\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 = Object.values(\n await this.request(`${this.pluginName}.status`)\n )\n\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 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 (\n await this.request(`${this.pluginName}.status`, {chromecast: this.getPlayerName(player)})\n )?.status\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() {\n return true\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 toggleMute() {\n return await this.request(`${this.pluginName}.mute`)\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('file://') || (resource.url || resource).startsWith('http://') ||\n (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\nconst __exports__ = script;\n\nexport default __exports__","import { render } from \"./Chromecast.vue?vue&type=template&id=79fe2304\"\nimport script from \"./Chromecast.vue?vue&type=script&lang=js\"\nexport * from \"./Chromecast.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<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\"\nimport script from \"./Kodi.vue?vue&type=script&lang=js\"\nexport * from \"./Kodi.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<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\"\nimport script from \"./Mplayer.vue?vue&type=script&lang=js\"\nexport * from \"./Mplayer.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<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\"\nimport script from \"./Mpv.vue?vue&type=script&lang=js\"\nexport * from \"./Mpv.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<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\"\nimport script from \"./Omxplayer.vue?vue&type=script&lang=js\"\nexport * from \"./Omxplayer.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<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\"\nimport script from \"./Vlc.vue?vue&type=script&lang=js\"\nexport * from \"./Vlc.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Players.vue?vue&type=template&id=642cb651\"\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=642cb651&lang=scss\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Header.vue?vue&type=template&id=39ee4bbe&scoped=true\"\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=39ee4bbe&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-39ee4bbe\"]])\n\nexport default __exports__","<template>\n <nav>\n <button class=\"menu-button mobile\" @click=\"$emit('toggle')\">\n <i class=\"fa fa-bars\" />\n </button>\n\n <li v-for=\"(view, name) in displayedViews\" :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 emits: ['input', 'toggle'],\n props: {\n selectedView: {\n type: String,\n },\n\n collapsed: {\n type: Boolean,\n default: false,\n },\n\n torrentPlugin: {\n type: String,\n },\n\n views: {\n type: Object,\n default: () => {\n return {\n search: {\n iconClass: 'fa fa-search',\n displayName: 'Search',\n },\n\n browser: {\n iconClass: 'fa fa-folder',\n displayName: 'Browser',\n },\n\n torrents: {\n iconClass: 'fa fa-magnet',\n displayName: 'Torrents',\n },\n }\n }\n },\n },\n\n computed: {\n displayedViews() {\n const views = {...this.views}\n if (!this.torrentPlugin?.length)\n delete views.torrents\n\n return views\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 position: relative;\n box-shadow: 2.5px 0 4.5px 2px $nav-collapsed-fg;\n margin-left: 2.5px;\n overflow: auto;\n\n .menu-button {\n position: absolute;\n top: 0.75em;\n left: 0;\n width: 100%;\n display: inline-flex;\n justify-content: center;\n padding: 0;\n margin: 0;\n font-size: 1.2em;\n border: 0;\n background: none;\n cursor: pointer;\n z-index: 1;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\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=b15d23b2&scoped=true\"\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=b15d23b2&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b15d23b2\"]])\n\nexport default __exports__","<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\"\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\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-77ae3705\"]])\n\nexport default __exports__","<template>\n <form class=\"url-player\" @submit.prevent=\"$emit('play', value)\">\n <div class=\"row\">\n <label>\n Play URL (use the file:// prefix for local files)\n <input type=\"text\"\n v-model=\"value\"\n ref=\"playUrlInput\"\n autofocus />\n </label>\n </div>\n\n <div class=\"row footer\">\n <button type=\"submit\" :disabled=\"!value?.length\">\n <i class=\"fa fa-play\"></i> Play\n </button>\n </div>\n </form>\n</template>\n\n<script>\nexport default {\n emits: ['input', 'play'],\n props: {\n playUrl: {\n type: String,\n default: '',\n },\n },\n\n data() {\n return {\n value: this.playUrl,\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.url-player {\n padding: 0;\n margin: 0;\n border: none;\n border-radius: 0;\n box-shadow: none;\n\n .body {\n padding: 1em !important;\n }\n\n input[type=text] {\n width: 100%;\n }\n\n [type=submit] {\n background: initial;\n border-color: initial;\n border-radius: 1.5em;\n\n &:hover {\n color: $default-hover-fg-2;\n }\n }\n\n .footer {\n display: flex;\n justify-content: right;\n padding: 0;\n margin-top: 1em;\n }\n}\n</style>\n","import { render } from \"./UrlPlayer.vue?vue&type=template&id=6f90e487&scoped=true\"\nimport script from \"./UrlPlayer.vue?vue&type=script&lang=js\"\nexport * from \"./UrlPlayer.vue?vue&type=script&lang=js\"\n\nimport \"./UrlPlayer.vue?vue&type=style&index=0&id=6f90e487&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6f90e487\"]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=877bb22c&scoped=true\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=877bb22c&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-877bb22c\"]])\n\nexport default __exports__","<template>\n <div class=\"image-container\"\n :class=\"{ 'with-image': !!item?.image }\">\n <div class=\"play-overlay\" @click=\"$emit('play', item)\" v-if=\"hasPlay\">\n <i class=\"fas fa-play\" />\n </div>\n\n <span class=\"icon type-icon\" v-if=\"typeIcons[item?.type]\">\n <a :href=\"item.url\" target=\"_blank\" v-if=\"item.url\">\n <i :class=\"typeIcons[item.type]\" :title=\"item.type\">\n &nbsp;\n </i>\n </a>\n </span>\n\n <img class=\"image\" :src=\"item.image\" :alt=\"item.title\" v-if=\"item?.image\" />\n <div class=\"image\" v-else>\n <div class=\"inner\">\n <i class=\"fas fa-play\" />\n </div>\n </div>\n\n <span class=\"icon imdb-link\" v-if=\"item?.imdb_id\">\n <a :href=\"`https://www.imdb.com/title/${item.imdb_id}`\" target=\"_blank\">\n <i class=\"fab fa-imdb\" />\n </a>\n </span>\n\n <span class=\"bottom-overlay duration\" v-if=\"item?.duration != null\"\n v-text=\"convertTime(item.duration)\" />\n <span class=\"bottom-overlay videos\" v-else-if=\"item?.videos != null\">\n {{ item.videos }} items\n </span>\n </div>\n</template>\n\n<script>\nimport Icons from \"./icons.json\";\nimport MediaUtils from \"@/components/Media/Utils\";\n\nexport default {\n mixins: [Icons, MediaUtils],\n emits: ['play'],\n props: {\n item: {\n type: Object,\n default: () => {},\n },\n\n hasPlay: {\n type: Boolean,\n default: true,\n },\n },\n\n data() {\n return {\n typeIcons: Icons,\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n\n.icon {\n position: absolute;\n width: 30px;\n height: 30px;\n font-size: 30px;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 0.25em;\n color: $default-media-img-fg;\n\n a {\n width: 100%;\n height: 100%;\n color: $default-media-img-fg;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n i {\n margin: 2.5px;\n }\n\n .fa-imdb {\n position: absolute;\n top: 0;\n margin: 1px 2.5px 3px 2.5px;\n }\n\n .fa-youtube {\n margin-left: 1px;\n }\n}\n\n.imdb-link {\n top: 0;\n right: 0;\n}\n\n.bottom-overlay {\n position: absolute;\n bottom: 0;\n right: 0;\n font-size: 0.9em;\n background: rgba(0, 0, 0, 0.5);\n color: white;\n padding: 0.25em 0.5em;\n border-radius: 0.25em;\n}\n\n.type-icon {\n top: 0;\n left: 0;\n font-size: 25px;\n}\n\n.image-container {\n max-width: 100%;\n min-height: 200px;\n aspect-ratio: 16 / 9;\n display: flex;\n justify-content: center;\n position: relative;\n\n &.with-image {\n background: black;\n\n .icon {\n background: none;\n }\n\n .play-overlay {\n border-radius: 0;\n }\n }\n\n img {\n height: 100%;\n }\n}\n\n.image {\n max-width: 100%;\n}\n\ndiv.image {\n width: 100%;\n color: $default-media-img-fg;\n font-size: 5em;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .inner {\n width: 100%;\n height: 100%;\n background: $default-media-img-bg;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 0.5em;\n }\n}\n\n.play-overlay {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.5);\n border-radius: 2em;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n\n &:hover {\n opacity: 1;\n }\n\n i {\n font-size: 5em;\n color: $default-media-img-fg;\n }\n}\n</style>\n","import { render } from \"./MediaImage.vue?vue&type=template&id=0f1ba97a&scoped=true\"\nimport script from \"./MediaImage.vue?vue&type=script&lang=js\"\nexport * from \"./MediaImage.vue?vue&type=script&lang=js\"\n\nimport \"./MediaImage.vue?vue&type=style&index=0&id=0f1ba97a&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f1ba97a\"]])\n\nexport default __exports__","<template>\n <div class=\"media-results\">\n <Loading v-if=\"loading\" />\n <div class=\"grid\" ref=\"grid\" v-if=\"results?.length\" @scroll=\"onScroll\">\n <Item v-for=\"(item, i) in visibleResults\"\n :key=\"i\"\n :item=\"item\"\n :selected=\"selectedResult === i\"\n :hidden=\"!!Object.keys(sources || {}).length && !sources[item.type]\"\n @select=\"$emit('select', i)\"\n @play=\"$emit('play', item)\"\n @view=\"$emit('view', item)\"\n @download=\"$emit('download', item)\" />\n </div>\n\n <Modal ref=\"infoModal\" title=\"Media info\" @close=\"$emit('select', null)\">\n <Info :item=\"results[selectedResult]\"\n @play=\"$emit('play', results[selectedResult])\"\n v-if=\"selectedResult != null\" />\n </Modal>\n </div>\n</template>\n\n<script>\nimport Info from \"@/components/panels/Media/Info\";\nimport Item from \"./Item\";\nimport Loading from \"@/components/Loading\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n components: {Info, Item, Loading, Modal},\n emits: ['select', 'play', 'view', 'download', 'scroll-end'],\n props: {\n loading: {\n type: Boolean,\n default: false,\n },\n\n results: {\n type: Array,\n default: () => [],\n },\n\n selectedResult: {\n type: Number,\n },\n\n sources: {\n type: Object,\n default: () => {},\n },\n\n filter: {\n type: String,\n default: null,\n },\n\n resultIndexStep: {\n type: Number,\n default: 25,\n },\n },\n\n data() {\n return {\n maxResultIndex: this.resultIndexStep,\n }\n },\n\n computed: {\n visibleResults() {\n return this.results\n .filter((item) => {\n if (!this.filter)\n return true\n\n return item.title.toLowerCase().includes(this.filter.toLowerCase())\n })\n .slice(0, this.maxResultIndex)\n },\n },\n\n methods: {\n onScroll(e) {\n const el = e.target\n if (!el)\n return\n\n const bottom = (el.scrollHeight - el.scrollTop) <= el.clientHeight + 150\n if (!bottom)\n return\n\n this.$emit('scroll-end')\n this.maxResultIndex += this.resultIndexStep\n },\n },\n\n mounted() {\n this.$watch('selectedResult', (value) => {\n if (value == null)\n this.$refs.infoModal?.close()\n else\n this.$refs.infoModal?.show()\n })\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"src/style/items\";\n@import \"vars\";\n\n.media-results {\n width: 100%;\n height: 100%;\n background: $background-color;\n\n .grid {\n height: 100%;\n overflow: auto;\n }\n\n .info-container {\n width: 100%;\n cursor: initial;\n }\n}\n</style>\n","<template>\n <div class=\"media-info\">\n <div class=\"row header\">\n <div class=\"image-container\">\n <MediaImage :item=\"item\" @play=\"$emit('play')\" />\n </div>\n\n <div class=\"title\">\n <i :class=\"typeIcons[item.type]\"\n :title=\"item.type\" \n v-if=\"typeIcons[item?.type]\">\n &nbsp;\n </i>\n <a :href=\"item.url\" target=\"_blank\" v-if=\"item.url\" v-text=\"item.title\" />\n <span v-else v-text=\"item.title\" />\n </div>\n </div>\n\n <div class=\"row\" v-if=\"item?.series\">\n <div class=\"left side\">TV Series</div>\n <div class=\"right side\" v-text=\"item.series\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.season\">\n <div class=\"left side\">Season</div>\n <div class=\"right side\" v-text=\"item.season\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.episode\">\n <div class=\"left side\">Episode</div>\n <div class=\"right side\" v-text=\"item.episode\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.num_seasons\">\n <div class=\"left side\">Number of seasons</div>\n <div class=\"right side\" v-text=\"item.num_seasons\" />\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?.summary\">\n <div class=\"left side\">Summary</div>\n <div class=\"right side\" v-text=\"item.summary\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.overview\">\n <div class=\"left side\">Overview</div>\n <div class=\"right side\" v-text=\"item.overview\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.country\">\n <div class=\"left side\">Country</div>\n <div class=\"right side\" v-text=\"item.country\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.network\">\n <div class=\"left side\">Network</div>\n <div class=\"right side\" v-text=\"item.network\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.status\">\n <div class=\"left side\">Status</div>\n <div class=\"right side\" v-text=\"item.status\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.width && item?.height\">\n <div class=\"left side\">Resolution</div>\n <div class=\"right side\">\n {{ item.width }}x{{ item.height }}\n </div>\n </div>\n\n <div class=\"row\" v-if=\"item?.rating\">\n <div class=\"left side\">Rating</div>\n <div class=\"right side\">{{ item.rating.percentage }}%</div>\n </div>\n\n <div class=\"row\" v-if=\"item?.critic_rating\">\n <div class=\"left side\">Critic Rating</div>\n <div class=\"right side\">{{ item.critic_rating }}%</div>\n </div>\n\n <div class=\"row\" v-if=\"item?.community_rating\">\n <div class=\"left side\">Community Rating</div>\n <div class=\"right side\">{{ item.community_rating }}%</div>\n </div>\n\n <div class=\"row\" v-if=\"item?.rating\">\n <div class=\"left side\">Votes</div>\n <div class=\"right side\" v-text=\"item.rating.votes\" />\n </div>\n\n <div class=\"row\" v-if=\"item?.genres\">\n <div class=\"left side\">Genres</div>\n <div class=\"right side\" v-text=\"item.genres.join(', ')\" />\n </div>\n\n <div class=\"row\" v-if=\"channel\">\n <div class=\"left side\">Channel</div>\n <div class=\"right side\">\n <a :href=\"channel.url\" target=\"_blank\" v-text=\"channel.title || channel.url\" />\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=\"publishedDate\">\n <div class=\"left side\">Published at</div>\n <div class=\"right side\" v-text=\"publishedDate\" />\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?.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 </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\nimport MediaUtils from \"@/components/Media/Utils\";\nimport MediaImage from \"./MediaImage\";\nimport Icons from \"./icons.json\";\n\nexport default {\n name: \"Info\",\n components: {MediaImage},\n mixins: [Utils, MediaUtils],\n emits: ['play'],\n props: {\n item: {\n type: Object,\n default: () => {},\n }\n },\n\n data() {\n return {\n typeIcons: Icons,\n }\n },\n\n computed: {\n channel() {\n let ret = null\n if (this.item?.channelId)\n ret = {\n url: `https://www.youtube.com/channel/${this.item.channelId}`,\n }\n else if (this.item?.channel_url)\n ret = {\n url: this.item.channel_url,\n }\n\n if (!ret)\n return null\n\n if (this.item?.channelTitle)\n ret.title = this.item.channelTitle\n else if (this.item?.channel)\n ret.title = this.item.channel\n\n return ret\n },\n\n publishedDate() {\n if (this.item?.publishedAt)\n return this.formatDate(this.item.publishedAt, true)\n if (this.item?.created_at)\n return this.formatDate(this.item.created_at, true)\n\n return null\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n\n.media-info {\n width: 100%;\n}\n\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\n.header {\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n\n .image-container {\n @include from($desktop) {\n .image-container {\n width: 420px;\n }\n }\n }\n\n .title {\n width: 100%;\n font-size: 1.5em;\n font-weight: bold;\n margin-top: 0.5em;\n text-align: center;\n overflow-wrap: break-word;\n\n @include from($desktop) {\n flex: 1;\n padding-left: 1em;\n }\n }\n\n &:hover {\n background: initial;\n }\n}\n</style>\n","import { render } from \"./Info.vue?vue&type=template&id=91888714&scoped=true\"\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=91888714&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-91888714\"]])\n\nexport default __exports__","<template>\n <div class=\"item media-item\" :class=\"{selected: selected}\" v-if=\"!hidden\">\n <div class=\"thumbnail\">\n <MediaImage :item=\"item\" @play=\"$emit('play')\" />\n </div>\n\n <div class=\"body\">\n <div class=\"row title\">\n <div class=\"col-11 left side\" v-text=\"item.title\" @click=\"$emit('select')\" />\n <div class=\"col-1 right side\">\n <Dropdown title=\"Actions\" icon-class=\"fa fa-ellipsis-h\">\n <DropdownItem icon-class=\"fa fa-play\" text=\"Play\" @click=\"$emit('play')\"\n v-if=\"item.type !== 'torrent'\" />\n <DropdownItem icon-class=\"fa fa-download\" text=\"Download\" @click=\"$emit('download')\"\n v-if=\"item.type === 'torrent'\" />\n <DropdownItem icon-class=\"fa fa-window-maximize\" text=\"View in browser\" @click=\"$emit('view')\"\n v-if=\"item.type === 'file'\" />\n <DropdownItem icon-class=\"fa fa-info-circle\" text=\"Info\" @click=\"$emit('select')\" />\n </Dropdown>\n </div>\n </div>\n\n <div class=\"row subtitle\" v-if=\"item.channel\">\n <a class=\"channel\" :href=\"item.channel_url\" target=\"_blank\">\n <img :src=\"item.channel_image\" class=\"channel-image\" v-if=\"item.channel_image\" />\n <span class=\"channel-name\" v-text=\"item.channel\" />\n </a>\n </div>\n\n <div class=\"row creation-date\" v-if=\"item.created_at\">\n {{ formatDateTime(item.created_at, true) }}\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport Icons from \"./icons.json\";\nimport MediaImage from \"./MediaImage\";\nimport Utils from \"@/Utils\";\n\nexport default {\n components: {Dropdown, DropdownItem, MediaImage},\n mixins: [Utils],\n emits: ['play', 'select', 'view', 'download'],\n props: {\n item: {\n type: Object,\n required: true,\n },\n\n hidden: {\n type: Boolean,\n default: false,\n },\n\n selected: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n typeIcons: Icons,\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"vars\";\n\n.media-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-between;\n cursor: initial !important;\n margin-bottom: 5px;\n border: 1px solid transparent;\n border-bottom: 1px solid transparent !important;\n\n &.selected {\n box-shadow: $border-shadow-bottom;\n background: $selected-bg;\n }\n\n &:hover {\n background: none !important;\n box-shadow: $border-shadow;\n border-radius: 0.5em;\n }\n\n .thumbnail {\n max-width: 100%;\n }\n\n .body {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n flex: 1;\n\n .row {\n width: 100%;\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n }\n\n .title {\n display: flex;\n align-items: center;\n font-size: 1.1em;\n font-weight: bold;\n padding: .5em 0;\n flex: 1;\n cursor: pointer;\n overflow: hidden;\n\n &:hover {\n text-decoration: underline;\n }\n }\n\n .side {\n display: inline-flex;\n align-items: center;\n\n &.left {\n max-height: 3em;\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n overflow: hidden;\n text-overflow: \" [...]\";\n margin-right: 0.5em;\n }\n\n &.right {\n align-items: flex-end;\n margin-right: 0.5em;\n }\n\n :deep(.dropdown-container) {\n .item {\n flex-direction: row;\n box-shadow: none;\n cursor: pointer !important;\n\n &:hover {\n background: $hover-bg !important;\n }\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 .subtitle {\n font-size: .9em;\n color: $default-fg-2;\n display: flex;\n align-items: center;\n margin-top: .5em;\n flex: 1;\n\n .channel {\n display: flex;\n align-items: center;\n\n .channel-name {\n display: inline-flex;\n }\n }\n }\n\n .channel-image {\n width: 2em;\n height: 2em;\n border-radius: 50%;\n margin-right: .5em;\n }\n\n .creation-date {\n font-size: .85em;\n color: $default-fg-2;\n flex: 1;\n }\n}\n</style>\n","import { render } from \"./Item.vue?vue&type=template&id=19442018&scoped=true\"\nimport script from \"./Item.vue?vue&type=script&lang=js\"\nexport * from \"./Item.vue?vue&type=script&lang=js\"\n\nimport \"./Item.vue?vue&type=style&index=0&id=19442018&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-19442018\"]])\n\nexport default __exports__","import { render } from \"./Results.vue?vue&type=template&id=7147de76&scoped=true\"\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=7147de76&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7147de76\"]])\n\nexport default __exports__","<template>\n <Loading v-if=\"loading\" />\n\n <div class=\"torrent-transfers fade-in\" v-else>\n <div class=\"no-content\" v-if=\"!Object.keys(transfers).length\">No torrent transfers in progress</div>\n\n <div class=\"row item\" :class=\"{selected: selectedItem === i}\" v-for=\"(torrent, i) in transfers\" :key=\"i\"\n @click=\"selectedItem = i\">\n <div class=\"col-8 left side\">\n <i class=\"icon fa\" :class=\"{\n 'fa-check': torrent.finish_date != null,\n 'fa-play': !torrent.finish_date && torrent.state === 'downloading',\n 'fa-pause': !torrent.finish_date && torrent.state === 'paused',\n 'fa-stop': !torrent.finish_date && torrent.state === 'stopped',\n }\" />\n <div class=\"title\" v-text=\"torrent.name || torrent.hash || torrent.url\" />\n </div>\n\n <div class=\"col-2 right side\">\n <span v-text=\"`${torrent.progress}%`\" />\n </div>\n\n <div class=\"col-2 right side\">\n <Dropdown title=\"Actions\" icon-class=\"fa fa-ellipsis-h\" @click=\"selectedItem = i\">\n <DropdownItem icon-class=\"fa fa-pause\" text=\"Pause transfer\" @click=\"pause(torrentId(torrent))\"\n v-if=\"torrent.state === 'downloading'\" />\n <DropdownItem icon-class=\"fa fa-play\" text=\"Resume transfer\" @click=\"resume(torrentId(torrent))\"\n v-if=\"torrent.state === 'paused'\" />\n <DropdownItem icon-class=\"fa fa-trash\" text=\"Remove transfer\" @click=\"remove(torrentId(torrent))\" />\n <DropdownItem icon-class=\"fa fa-folder\" text=\"View files\" @click=\"$refs.torrentFiles.isVisible = true\" />\n <DropdownItem icon-class=\"fa fa-info\" text=\"Torrent info\" @click=\"$refs.torrentInfo.isVisible = true\" />\n </Dropdown>\n </div>\n </div>\n\n <Modal ref=\"torrentInfo\" title=\"Torrent info\" width=\"80%\">\n <div class=\"modal-body torrent-info\" v-if=\"selectedItem != null && transfers[selectedItem]\">\n <div class=\"row\" v-if=\"transfers[selectedItem].name\">\n <div class=\"attr\">Name</div>\n <div class=\"value\" v-text=\"transfers[selectedItem].name\" />\n </div>\n\n <div class=\"row\" v-if=\"transfers[selectedItem].state\">\n <div class=\"attr\">State</div>\n <div class=\"value\" v-text=\"transfers[selectedItem].state\" />\n </div>\n\n <div class=\"row\">\n <div class=\"attr\">Progress</div>\n <div class=\"value\" v-text=\"`${transfers[selectedItem].progress || 0}%`\" />\n </div>\n\n <div class=\"row\">\n <div class=\"attr\">DL rate</div>\n <div class=\"value\" v-text=\"`${convertSize(transfers[selectedItem].download_rate || 0)}/s`\" />\n </div>\n\n <div class=\"row\">\n <div class=\"attr\">UL rate</div>\n <div class=\"value\" v-text=\"`${convertSize(transfers[selectedItem].upload_rate || 0)}/s`\" />\n </div>\n\n <div class=\"row\">\n <div class=\"attr\">Size</div>\n <div class=\"value\" v-text=\"convertSize(transfers[selectedItem].size || 0)\" />\n </div>\n\n <div class=\"row\" v-if=\"transfers[selectedItem].remaining_bytes\">\n <div class=\"attr\">Remaining</div>\n <div class=\"value\" v-text=\"convertSize(transfers[selectedItem].remaining_bytes)\" />\n </div>\n\n <div class=\"row\">\n <div class=\"attr\">URL</div>\n <div class=\"value nowrap\">\n <a :href=\"transfers[selectedItem].url\" target=\"_blank\" v-text=\"transfers[selectedItem].url\" />\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"attr\">Peers</div>\n <div class=\"value\" v-text=\"transfers[selectedItem].peers || 0\" />\n </div>\n\n <div class=\"row\" v-if=\"transfers[selectedItem].start_date\">\n <div class=\"attr\">Started</div>\n <div class=\"value\" v-text=\"formatDateTime(transfers[selectedItem].start_date)\" />\n </div>\n\n <div class=\"row\" v-if=\"transfers[selectedItem].finish_date\">\n <div class=\"attr\">Finished</div>\n <div class=\"value\" v-text=\"formatDateTime(transfers[selectedItem].finish_date)\" />\n </div>\n\n <div class=\"row\" v-if=\"transfers[selectedItem].save_path\">\n <div class=\"attr\">Save path</div>\n <div class=\"value\" v-text=\"transfers[selectedItem].save_path\" />\n </div>\n </div>\n </Modal>\n\n <Modal ref=\"torrentFiles\" title=\"Torrent files\" width=\"80%\">\n <div class=\"modal-body torrent-files\" v-if=\"selectedItem != null && transfers[selectedItem]\">\n <div class=\"row\" v-for=\"(file, i) in relativeFiles\" :key=\"file\">\n <div class=\"col-1 icon\">\n <Dropdown v-if=\"isMedia && mediaExtensions.has(file.split('.').pop())\">\n <DropdownItem icon-class=\"fa fa-play\" text=\"Play\"\n @click=\"$emit('play', {url: `file://${transfers[selectedItem].files[i]}`, type: 'file'})\" />\n </Dropdown>\n\n <i class=\"fa fa-file\" v-else />\n </div>\n <div class=\"col-11 name\" v-text=\"file\" />\n </div>\n </div>\n </Modal>\n </div>\n</template>\n\n<script>\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\nimport MediaUtils from \"@/components/Media/Utils.vue\"\nimport Modal from \"@/components/Modal\";\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\n\nexport default {\n name: \"View\",\n emits: ['play', 'play-with-captions'],\n components: {Dropdown, DropdownItem, Loading, Modal},\n mixins: [Utils, MediaUtils],\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n\n isMedia: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n loading: false,\n transfers: {},\n selectedItem: null,\n }\n },\n\n computed: {\n relativeFiles() {\n if (this.selectedItem == null || !this.transfers[this.selectedItem]?.files?.length)\n return []\n\n return this.transfers[this.selectedItem].files.map((file) => file.split('/').pop())\n },\n },\n\n methods: {\n torrentId(torrent) {\n if (torrent?.hash && torrent.hash.length)\n return torrent.hash\n\n return torrent.url\n },\n\n async refresh() {\n this.loading = true\n\n try {\n this.transfers = Object.values(await this.request(`${this.pluginName}.status`) || {})\n .reduce((obj, torrent) => {\n obj[this.torrentId(torrent)] = torrent\n return obj\n }, {})\n } finally {\n this.loading = false\n }\n },\n\n async pause(torrent) {\n await this.request(`${this.pluginName}.pause`, {torrent: torrent})\n await this.refresh()\n },\n\n async resume(torrent) {\n await this.request(`${this.pluginName}.resume`, {torrent: torrent})\n await this.refresh()\n },\n\n async remove(torrent) {\n await this.request(`${this.pluginName}.remove`, {torrent: torrent})\n await this.refresh()\n },\n\n onTorrentUpdate(torrent) {\n this.transfers[this.torrentId(torrent)] = torrent\n },\n\n onTorrentRemove(torrent) {\n const torrentId = this.torrentId(torrent)\n if (torrentId in this.transfers)\n delete this.transfers[torrentId]\n },\n },\n\n mounted() {\n this.refresh()\n\n this.subscribe(\n this.onTorrentUpdate,'on-torrent-update',\n 'platypush.message.event.torrent.TorrentQueuedEvent',\n 'platypush.message.event.torrent.TorrentDownloadedMetadataEvent',\n 'platypush.message.event.torrent.TorrentDownloadStartEvent',\n 'platypush.message.event.torrent.TorrentDownloadProgressEvent',\n 'platypush.message.event.torrent.TorrentResumedEvent',\n 'platypush.message.event.torrent.TorrentPausedEvent',\n 'platypush.message.event.torrent.TorrentSeedingStartEvent',\n 'platypush.message.event.torrent.TorrentStateChangeEvent',\n 'platypush.message.event.torrent.TorrentDownloadStopEvent',\n 'platypush.message.event.torrent.TorrentDownloadCompletedEvent')\n\n this.subscribe(this.onTorrentRemove,'on-torrent-remove',\n 'platypush.message.event.torrent.TorrentRemovedEvent')\n },\n\n destroy() {\n this.unsubscribe('on-torrent-update')\n this.unsubscribe('on-torrent-remove')\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"src/style/items\";\n\n.torrent-transfers {\n height: 100%;\n background: $background-color;\n\n .no-content {\n height: 100%;\n }\n}\n\n:deep(.modal-body) {\n .row {\n display: flex;\n border-bottom: $default-border;\n padding: .5em .25em;\n border-radius: .5em;\n\n &:hover {\n background-color: $hover-bg;\n }\n\n .attr {\n @extend .col-3;\n display: inline-flex;\n }\n\n .value {\n @extend .col-9;\n display: inline-flex;\n justify-content: right;\n\n &.nowrap {\n overflow: hidden;\n white-space: nowrap;\n text-overflow: clip;\n }\n }\n }\n}\n\n:deep(.modal-body) {\n .dropdown-container {\n .row {\n box-shadow: none;\n border: none;\n }\n\n button {\n border: none;\n background: none;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n }\n}\n</style>\n","import { render } from \"./View.vue?vue&type=template&id=7351a8a4&scoped=true\"\nimport script from \"./View.vue?vue&type=script&lang=js\"\nexport * from \"./View.vue?vue&type=script&lang=js\"\n\nimport \"./View.vue?vue&type=style&index=0&id=7351a8a4&lang=scss&scoped=true\"\n\nimport exportComponent from \"../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7351a8a4\"]])\n\nexport default __exports__","var map = {\n\t\"./File\": [\n\t\t2892,\n\t\t9,\n\t\t2892\n\t],\n\t\"./File.vue\": [\n\t\t2892,\n\t\t9,\n\t\t2892\n\t],\n\t\"./Mixin\": [\n\t\t6640,\n\t\t9,\n\t\t6640\n\t],\n\t\"./Mixin.vue\": [\n\t\t6640,\n\t\t9,\n\t\t6640\n\t],\n\t\"./Nav\": [\n\t\t5578,\n\t\t9,\n\t\t3661,\n\t\t5578\n\t],\n\t\"./Nav.vue\": [\n\t\t5578,\n\t\t9,\n\t\t3661,\n\t\t5578\n\t],\n\t\"./YouTube\": [\n\t\t5931,\n\t\t9,\n\t\t2992,\n\t\t3671,\n\t\t5833,\n\t\t3390,\n\t\t3661,\n\t\t6579,\n\t\t4790,\n\t\t5059,\n\t\t5931\n\t],\n\t\"./YouTube.vue\": [\n\t\t5931,\n\t\t9,\n\t\t2992,\n\t\t3671,\n\t\t5833,\n\t\t3390,\n\t\t3661,\n\t\t6579,\n\t\t4790,\n\t\t5059,\n\t\t5931\n\t],\n\t\"./YouTube/Channel\": [\n\t\t7018,\n\t\t9,\n\t\t3671,\n\t\t5762\n\t],\n\t\"./YouTube/Channel.vue\": [\n\t\t7018,\n\t\t9,\n\t\t3671,\n\t\t5762\n\t],\n\t\"./YouTube/Feed\": [\n\t\t886,\n\t\t9,\n\t\t2992,\n\t\t5059,\n\t\t886\n\t],\n\t\"./YouTube/Feed.vue\": [\n\t\t886,\n\t\t9,\n\t\t2992,\n\t\t5059,\n\t\t886\n\t],\n\t\"./YouTube/Index\": [\n\t\t2200,\n\t\t9,\n\t\t2200\n\t],\n\t\"./YouTube/Index.vue\": [\n\t\t2200,\n\t\t9,\n\t\t2200\n\t],\n\t\"./YouTube/NoToken\": [\n\t\t9091,\n\t\t9,\n\t\t4790,\n\t\t9091\n\t],\n\t\"./YouTube/NoToken.vue\": [\n\t\t9091,\n\t\t9,\n\t\t4790,\n\t\t9091\n\t],\n\t\"./YouTube/Playlist\": [\n\t\t342,\n\t\t9,\n\t\t2992,\n\t\t5833,\n\t\t342\n\t],\n\t\"./YouTube/Playlist.vue\": [\n\t\t342,\n\t\t9,\n\t\t2992,\n\t\t5833,\n\t\t342\n\t],\n\t\"./YouTube/Playlists\": [\n\t\t7898,\n\t\t9,\n\t\t2992,\n\t\t5833,\n\t\t6579,\n\t\t7898\n\t],\n\t\"./YouTube/Playlists.vue\": [\n\t\t7898,\n\t\t9,\n\t\t2992,\n\t\t5833,\n\t\t6579,\n\t\t7898\n\t],\n\t\"./YouTube/Subscriptions\": [\n\t\t7425,\n\t\t9,\n\t\t2992,\n\t\t3671,\n\t\t3390,\n\t\t6123\n\t],\n\t\"./YouTube/Subscriptions.vue\": [\n\t\t7425,\n\t\t9,\n\t\t2992,\n\t\t3671,\n\t\t3390,\n\t\t6123\n\t],\n\t\"./meta\": [\n\t\t4569,\n\t\t3\n\t],\n\t\"./meta.json\": [\n\t\t4569,\n\t\t3\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(2).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__.t(id, ids[1] | 16)\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 6809;\nmodule.exports = webpackAsyncContext;"],"names":["class","ref","_createElementVNode","_hoisted_6","_hoisted_9","_createElementBlock","_hoisted_1","$data","loading","_createBlock","_component_Loading","key","_hoisted_2","_Fragment","_renderList","$options","pathTokens","token","i","onClick","$event","path","slice","join","_hoisted_4","_toDisplayString","length","_hoisted_5","_hoisted_7","_hoisted_8","$props","hasBack","_cache","args","onBack","filteredFiles","file","onItemSelect","_hoisted_12","_normalizeClass","type","_hoisted_13","name","fileActions","_hoisted_14","_createVNode","_component_Dropdown","hasPlay","_component_DropdownItem","text","_ctx","$emit","url","components","DropdownItem","Dropdown","Loading","mixins","Utils","MediaUtils","emits","props","Boolean","default","initialPath","String","isMedia","filter","data","this","files","computed","toLowerCase","indexOf","some","mediaExtensions","has","split","pop","iconClass","methods","refresh","$nextTick","$refs","nav","scrollLeft","items","scrollTop","request","watch","mounted","__exports__","render","_KeepAlive","_component_MediaView","pluginName","status","selectedPlayer","track","buttons","mediaButtons","onPlay","pause","onPause","onStop","stop","onSetVolume","setVolume","onSeek","seek","onSearch","search","onMute","toggleMute","onUnmute","style","_normalizeStyle","navContainerStyle","_component_Nav","selectedView","torrentPlugin","onInput","onToggle","forceShowNav","_component_Header","hasSubtitlesPlugin","sources","selectedItem","selectedSubtitles","browserFilter","onSelectPlayer","onPlayerStatus","onStatusUpdate","onTorrentAdd","downloadTorrent","onShowSubtitles","showSubtitlesModal","onPlayUrl","showPlayUrlModal","onFilter","onToggleNav","onSourceToggle","header","filterVisible","_component_Results","results","selectedResult","onSelect","onResultSelect","play","onView","view","onDownload","download","_component_TorrentView","_component_Browser","onPathChange","_hoisted_3","_component_Modal","title","visible","onClose","_component_Subtitles","item","state","onSelectSubs","selectSubtitles","onOpen","onPlayUrlModalOpen","_component_UrlPlayer","value","urlPlay","target","playUrl","mediaProvider","_resolveDynamicComponent","mediaProviders","provider","providersMetadata","icon","_mergeProps","color","Browser","registerMediaProvider","component","shallowRef","defineAsyncComponent","refreshMediaProviders","config","youtube","_hoisted_16","selected","onSubmit","_withModifiers","placeholder","query","torrentURL","onChange","onKeyup","_hoisted_11","showNavButton","startsWith","_component_Players","onStatus","hidden","Object","keys","source","checked","_component_Chromecast","player","_component_Kodi","_component_Mplayer","_component_Mpv","_component_Omxplayer","_component_Vlc","players","select","getPlayers","resource","subs","subtitles","volume","position","onNewMedia","event","isMine","onMediaEvent","notify","device","image","plugin","addSubtitles","filename","removeSubtitles","supports","subscribe","destroy","unsubscribe","Mixin","devices","values","Promise","all","map","async","getPlayerName","chromecast","$root","host","Chromecast","Kodi","Mplayer","Mpv","Omxplayer","Vlc","required","plugins","loadPlugins","entries","p","endsWith","push","Players","types","$watch","displayedViews","displayName","collapsed","views","browser","torrents","sub","IsLocal","ISO639","SubFileName","_hoisted_10","language","autofocus","disabled","Header","MediaView","Modal","Nav","Results","Subtitles","TorrentView","UrlPlayer","previous","next","awaitingPlayTorrent","torrentPlugins","display","startStreaming","ret","window","open","modal","playUrlModal","input","$el","querySelector","focus","onTorrentQueued","onTorrentMetadata","onTorrentDownloadStart","onTorrentDownloadCompleted","getTorrentPlugin","pluginConf","torrent_plugin","torrent","error","subtitlesSelector","close","link","SubDownloadLink","result","show","Set","plex","jellyfin","typeIcons","href","src","alt","imdb_id","duration","convertTime","videos","_hoisted_15","Icons","onScroll","visibleResults","_component_Item","_component_Info","_component_MediaImage","series","season","episode","num_seasons","_hoisted_17","_hoisted_18","synopsis","_hoisted_20","_hoisted_21","description","_hoisted_23","_hoisted_24","summary","_hoisted_26","_hoisted_27","overview","_hoisted_29","_hoisted_30","country","_hoisted_32","_hoisted_33","network","_hoisted_35","_hoisted_36","_hoisted_38","_hoisted_39","width","height","_hoisted_41","_hoisted_42","_hoisted_43","rating","_hoisted_44","_hoisted_45","_hoisted_46","percentage","critic_rating","_hoisted_47","_hoisted_48","_hoisted_49","community_rating","_hoisted_50","_hoisted_51","_hoisted_52","_hoisted_53","_hoisted_54","votes","genres","_hoisted_56","_hoisted_57","channel","_hoisted_59","_hoisted_60","_hoisted_61","year","_hoisted_63","_hoisted_64","publishedDate","_hoisted_66","_hoisted_67","_hoisted_69","_hoisted_70","trailer","_hoisted_72","_hoisted_73","_hoisted_74","size","_hoisted_76","_hoisted_77","convertSize","quality","_hoisted_79","_hoisted_80","seeds","_hoisted_82","_hoisted_83","peers","_hoisted_85","_hoisted_86","_hoisted_88","_hoisted_89","MediaImage","channelId","channel_url","channelTitle","publishedAt","formatDate","created_at","channel_image","formatDateTime","Info","Item","Array","Number","resultIndexStep","maxResultIndex","includes","e","el","bottom","scrollHeight","clientHeight","infoModal","transfers","finish_date","hash","progress","torrentId","resume","remove","torrentFiles","isVisible","torrentInfo","_hoisted_19","download_rate","_hoisted_22","upload_rate","_hoisted_25","remaining_bytes","_hoisted_28","_hoisted_31","start_date","save_path","relativeFiles","reduce","obj","onTorrentUpdate","onTorrentRemove","webpackAsyncContext","req","__webpack_require__","o","resolve","then","Error","code","ids","id","t","module","exports"],"sourceRoot":""}