diff --git a/medusa/show/coming_episodes.py b/medusa/show/coming_episodes.py
index 80e528c399..a9a8248d7c 100644
--- a/medusa/show/coming_episodes.py
+++ b/medusa/show/coming_episodes.py
@@ -168,7 +168,8 @@ def get_coming_episodes(categories, sort, group, paused=app.COMING_EPS_DISPLAY_P
result['qualityValue'] = result['quality']
result['quality'] = get_quality_string(result['quality'])
result['airs'] = sbdatetime.sbftime(result['localtime'], t_preset=timeFormat).lstrip('0').replace(' 0', ' ')
- result['weekday'] = 1 + date.fromordinal(result['airdate']).weekday()
+ # Monday - Sunday (0 - 6)
+ result['weekday'] = date.fromordinal(result['airdate']).weekday()
result['tvdbid'] = result['indexer_id']
result['airdate'] = sbdatetime.sbfdate(result['localtime'], d_preset=dateFormat)
result['localtime'] = result['localtime'].toordinal()
diff --git a/themes-default/slim/src/components/history-compact.vue b/themes-default/slim/src/components/history-compact.vue
index 80d2ca5029..4cb3956720 100644
--- a/themes-default/slim/src/components/history-compact.vue
+++ b/themes-default/slim/src/components/history-compact.vue
@@ -56,7 +56,7 @@
diff --git a/themes-default/slim/src/components/schedule/calendar.vue b/themes-default/slim/src/components/schedule/calendar.vue
index efae3ef135..f40d89c219 100644
--- a/themes-default/slim/src/components/schedule/calendar.vue
+++ b/themes-default/slim/src/components/schedule/calendar.vue
@@ -4,7 +4,7 @@
- -
+
-
diff --git a/themes-default/slim/src/store/modules/schedule.js b/themes-default/slim/src/store/modules/schedule.js
index fb2a34d075..c0df7061da 100644
--- a/themes-default/slim/src/store/modules/schedule.js
+++ b/themes-default/slim/src/store/modules/schedule.js
@@ -135,7 +135,7 @@ const getters = {
if (!weekDay) {
weekDay = {
airdate: episode.airdate,
- header: days[episode.weekday - 1],
+ header: days[episode.weekday],
class: 'soon',
episodes: []
};
@@ -161,7 +161,7 @@ const getters = {
missed, today, soon, later
} = state;
const { displayPaused } = rootState.config.layout.comingEps;
- const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
+ const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
const newArray = [];
if (sort === 'date') {
@@ -212,7 +212,7 @@ const getters = {
if (sort === 'network') {
const { getScheduleFlattened } = getters;
- const filteredSchedule = getScheduleFlattened.filter(item => item.paused || displayPaused);
+ const filteredSchedule = getScheduleFlattened.filter(item => !item.paused || displayPaused);
for (const episode of filteredSchedule.sort((a, b) => a.network.localeCompare(b.network))) {
let network = newArray.find(item => item.header === episode.network);
diff --git a/themes/dark/assets/js/medusa-runtime.js b/themes/dark/assets/js/medusa-runtime.js
index 979ce2d36b..55766e6661 100644
--- a/themes/dark/assets/js/medusa-runtime.js
+++ b/themes/dark/assets/js/medusa-runtime.js
@@ -1577,7 +1577,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\nconst state = {\n categories: ['later', 'missed', 'soon', 'today'],\n later: [],\n missed: [],\n soon: [],\n today: [],\n displayCategory: {\n later: false,\n missed: false,\n soon: true,\n today: true\n }\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE](state, schedule) {\n for (const category in schedule) {\n // eslint-disable-line guard-for-in\n state[category] = schedule[category];\n }\n },\n\n setDisplayCategory(state, {\n category,\n value\n }) {\n state.displayCategory[category] = value;\n }\n\n};\nconst getters = {\n getScheduleFlattened: state => {\n const flattendedSchedule = [];\n const {\n categories,\n displayCategory\n } = state;\n\n for (const category of categories) {\n if (!displayCategory[category]) {\n continue;\n }\n\n const episodes = state[category];\n\n for (const episode of episodes) {\n episode.class = category;\n }\n\n flattendedSchedule.push(...episodes);\n }\n\n return flattendedSchedule;\n },\n\n /**\n * Group the coming episodes into an array of objects with an attibute header (the week day)\n * and an attribute episodes with an array of coming episodes.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n groupedSchedule: (state, getters, rootState) => {\n const {\n missed,\n soon,\n today,\n later,\n displayCategory\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n /* Return an array of the days to come */\n\n const comingDays = (currentDay, nrComingDays) => {\n let currentDayOfTheWeek = currentDay.getDay();\n const returnDays = [];\n\n for (let i = 0; i < nrComingDays; i++) {\n if (currentDayOfTheWeek > 7) {\n currentDayOfTheWeek = 1;\n }\n\n returnDays.push(currentDayOfTheWeek);\n currentDayOfTheWeek += 1;\n }\n\n return returnDays;\n };\n\n const _MS_PER_DAY = 1000 * 60 * 60 * 24; // A and b are javascript Date objects\n\n\n function dateDiffInDays(a, b) {\n // Discard the time and time-zone information.\n const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n return Math.floor((utc2 - utc1) / _MS_PER_DAY);\n }\n\n const newArray = [];\n const combinedEpisodes = [];\n\n if (displayCategory.missed) {\n combinedEpisodes.push(...missed);\n }\n\n if (displayCategory.today) {\n combinedEpisodes.push(...today);\n }\n\n if (displayCategory.soon) {\n combinedEpisodes.push(...soon);\n }\n\n if (displayCategory.later) {\n combinedEpisodes.push(...later);\n }\n\n const filteredEpisodes = combinedEpisodes.filter(item => !item.paused || displayPaused);\n\n if (filteredEpisodes.length === 0) {\n return [];\n }\n\n let currentDay = new Date(filteredEpisodes[0].airdate); // Group the coming episodes by day.\n\n for (const episode of filteredEpisodes) {\n // Calculate the gaps in the week, for which we don't have any scheduled shows.\n if (currentDay !== new Date(episode.airdate)) {\n const diffDays = dateDiffInDays(currentDay, new Date(episode.airdate));\n\n if (diffDays > 1) {\n let dayHeader = days[comingDays(currentDay, diffDays)[1] - 1]; // Add the elipses if there is a wider gap then 1 day.\n\n if (diffDays > 2) {\n dayHeader = `${dayHeader} ...`;\n }\n\n newArray.push({\n header: dayHeader,\n class: 'soon',\n episodes: []\n });\n }\n }\n\n currentDay = new Date(episode.airdate);\n let weekDay = newArray.find(item => item.airdate === episode.airdate);\n\n if (!weekDay) {\n weekDay = {\n airdate: episode.airdate,\n header: days[episode.weekday - 1],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n episode.airsTime = episode.airs.split(' ').slice(-2).join(' ');\n weekDay.episodes.push(episode);\n }\n\n return newArray;\n },\n\n /**\n * Group and sort the coming episodes into an array of objects with an attibute header (the week day).\n * Group the coming episodes into groups of missed, today, soon (subgrouped per day) and later.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n sortedSchedule: (state, getters, rootState) => sort => {\n const {\n displayCategory,\n missed,\n today,\n soon,\n later\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const newArray = [];\n\n if (sort === 'date') {\n if (displayCategory.missed) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'missed',\n class: 'missed',\n episodes: missed.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.today) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'today',\n class: 'today',\n episodes: today.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.soon) {\n // Group the coming episodes by day.\n for (const episode of soon.filter(item => !item.paused || displayPaused)) {\n let weekDay = newArray.find(item => item.header === days[episode.weekday]);\n\n if (!weekDay) {\n weekDay = {\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n weekDay.episodes.push(episode);\n }\n }\n\n if (displayCategory.later) {\n // Group later episodes (one group)\n newArray.push({\n header: 'later',\n class: 'later',\n episodes: later.filter(item => !item.paused || displayPaused)\n });\n }\n\n return newArray;\n }\n\n if (sort === 'network') {\n const {\n getScheduleFlattened\n } = getters;\n const filteredSchedule = getScheduleFlattened.filter(item => item.paused || displayPaused);\n\n for (const episode of filteredSchedule.sort((a, b) => a.network.localeCompare(b.network))) {\n let network = newArray.find(item => item.header === episode.network);\n\n if (!network) {\n network = {\n header: episode.network,\n class: episode.class,\n episodes: []\n };\n newArray.push(network);\n }\n\n network.episodes.push(episode);\n }\n\n return newArray;\n }\n }\n};\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show schedule from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n async getSchedule({\n commit,\n state\n }) {\n const params = {\n category: state.categories,\n paused: true\n };\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/schedule', {\n params\n });\n\n if (response.data) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE, response.data);\n }\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/schedule.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\nconst state = {\n categories: ['later', 'missed', 'soon', 'today'],\n later: [],\n missed: [],\n soon: [],\n today: [],\n displayCategory: {\n later: false,\n missed: false,\n soon: true,\n today: true\n }\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE](state, schedule) {\n for (const category in schedule) {\n // eslint-disable-line guard-for-in\n state[category] = schedule[category];\n }\n },\n\n setDisplayCategory(state, {\n category,\n value\n }) {\n state.displayCategory[category] = value;\n }\n\n};\nconst getters = {\n getScheduleFlattened: state => {\n const flattendedSchedule = [];\n const {\n categories,\n displayCategory\n } = state;\n\n for (const category of categories) {\n if (!displayCategory[category]) {\n continue;\n }\n\n const episodes = state[category];\n\n for (const episode of episodes) {\n episode.class = category;\n }\n\n flattendedSchedule.push(...episodes);\n }\n\n return flattendedSchedule;\n },\n\n /**\n * Group the coming episodes into an array of objects with an attibute header (the week day)\n * and an attribute episodes with an array of coming episodes.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n groupedSchedule: (state, getters, rootState) => {\n const {\n missed,\n soon,\n today,\n later,\n displayCategory\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n /* Return an array of the days to come */\n\n const comingDays = (currentDay, nrComingDays) => {\n let currentDayOfTheWeek = currentDay.getDay();\n const returnDays = [];\n\n for (let i = 0; i < nrComingDays; i++) {\n if (currentDayOfTheWeek > 7) {\n currentDayOfTheWeek = 1;\n }\n\n returnDays.push(currentDayOfTheWeek);\n currentDayOfTheWeek += 1;\n }\n\n return returnDays;\n };\n\n const _MS_PER_DAY = 1000 * 60 * 60 * 24; // A and b are javascript Date objects\n\n\n function dateDiffInDays(a, b) {\n // Discard the time and time-zone information.\n const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n return Math.floor((utc2 - utc1) / _MS_PER_DAY);\n }\n\n const newArray = [];\n const combinedEpisodes = [];\n\n if (displayCategory.missed) {\n combinedEpisodes.push(...missed);\n }\n\n if (displayCategory.today) {\n combinedEpisodes.push(...today);\n }\n\n if (displayCategory.soon) {\n combinedEpisodes.push(...soon);\n }\n\n if (displayCategory.later) {\n combinedEpisodes.push(...later);\n }\n\n const filteredEpisodes = combinedEpisodes.filter(item => !item.paused || displayPaused);\n\n if (filteredEpisodes.length === 0) {\n return [];\n }\n\n let currentDay = new Date(filteredEpisodes[0].airdate); // Group the coming episodes by day.\n\n for (const episode of filteredEpisodes) {\n // Calculate the gaps in the week, for which we don't have any scheduled shows.\n if (currentDay !== new Date(episode.airdate)) {\n const diffDays = dateDiffInDays(currentDay, new Date(episode.airdate));\n\n if (diffDays > 1) {\n let dayHeader = days[comingDays(currentDay, diffDays)[1] - 1]; // Add the elipses if there is a wider gap then 1 day.\n\n if (diffDays > 2) {\n dayHeader = `${dayHeader} ...`;\n }\n\n newArray.push({\n header: dayHeader,\n class: 'soon',\n episodes: []\n });\n }\n }\n\n currentDay = new Date(episode.airdate);\n let weekDay = newArray.find(item => item.airdate === episode.airdate);\n\n if (!weekDay) {\n weekDay = {\n airdate: episode.airdate,\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n episode.airsTime = episode.airs.split(' ').slice(-2).join(' ');\n weekDay.episodes.push(episode);\n }\n\n return newArray;\n },\n\n /**\n * Group and sort the coming episodes into an array of objects with an attibute header (the week day).\n * Group the coming episodes into groups of missed, today, soon (subgrouped per day) and later.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n sortedSchedule: (state, getters, rootState) => sort => {\n const {\n displayCategory,\n missed,\n today,\n soon,\n later\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n const newArray = [];\n\n if (sort === 'date') {\n if (displayCategory.missed) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'missed',\n class: 'missed',\n episodes: missed.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.today) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'today',\n class: 'today',\n episodes: today.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.soon) {\n // Group the coming episodes by day.\n for (const episode of soon.filter(item => !item.paused || displayPaused)) {\n let weekDay = newArray.find(item => item.header === days[episode.weekday]);\n\n if (!weekDay) {\n weekDay = {\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n weekDay.episodes.push(episode);\n }\n }\n\n if (displayCategory.later) {\n // Group later episodes (one group)\n newArray.push({\n header: 'later',\n class: 'later',\n episodes: later.filter(item => !item.paused || displayPaused)\n });\n }\n\n return newArray;\n }\n\n if (sort === 'network') {\n const {\n getScheduleFlattened\n } = getters;\n const filteredSchedule = getScheduleFlattened.filter(item => !item.paused || displayPaused);\n\n for (const episode of filteredSchedule.sort((a, b) => a.network.localeCompare(b.network))) {\n let network = newArray.find(item => item.header === episode.network);\n\n if (!network) {\n network = {\n header: episode.network,\n class: episode.class,\n episodes: []\n };\n newArray.push(network);\n }\n\n network.episodes.push(episode);\n }\n\n return newArray;\n }\n }\n};\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show schedule from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n async getSchedule({\n commit,\n state\n }) {\n const params = {\n category: state.categories,\n paused: true\n };\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/schedule', {\n params\n });\n\n if (response.data) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE, response.data);\n }\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/schedule.js?");
/***/ }),
@@ -6252,7 +6252,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"history-wrapper-compact vgt-table-styling\" },\n [\n _c(\"vue-good-table\", {\n attrs: {\n mode: \"remote\",\n columns: _vm.columns,\n rows: _vm.remoteHistory.rows,\n totalRows: _vm.remoteHistory.totalRows,\n \"search-options\": {\n enabled: false\n },\n \"sort-options\": {\n enabled: true,\n multipleColumns: false,\n initialSortBy: _vm.getSortFromCookie()\n },\n \"pagination-options\": {\n enabled: true,\n perPage: _vm.remoteHistory.perPage,\n perPageDropdown: _vm.perPageDropdown,\n dropdownAllowAll: false,\n position: \"both\"\n },\n \"column-filter-options\": {\n enabled: true\n },\n styleClass: \"vgt-table condensed\"\n },\n on: {\n \"on-page-change\": _vm.onPageChange,\n \"on-per-page-change\": _vm.onPerPageChange,\n \"on-sort-change\": _vm.onSortChange,\n \"on-column-filter\": _vm.onColumnFilter\n },\n scopedSlots: _vm._u([\n {\n key: \"table-row\",\n fn: function(props) {\n return [\n props.column.label === \"Date\"\n ? _c(\"span\", { staticClass: \"align-center\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n props.row.actionDate\n ? _vm.fuzzyParseDateTime(\n props.formattedRow[props.column.field]\n )\n : \"\"\n ) +\n \"\\n \"\n )\n ])\n : props.column.label === \"Episode\"\n ? _c(\n \"span\",\n { staticClass: \"episode-title\" },\n [\n _c(\n \"app-link\",\n {\n staticStyle: { color: \"white\" },\n attrs: {\n href:\n \"home/displayShow?showslug=\" +\n props.row.showSlug\n }\n },\n [_vm._v(_vm._s(props.row.episodeTitle))]\n )\n ],\n 1\n )\n : props.column.label === \"Snatched\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n row.statusName === \"Snatched\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.provider.name}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"margin-right\": \"5px\" },\n attrs: {\n src:\n \"images/providers/\" +\n row.provider.imageName,\n alt: row.provider.name,\n width: \"16\",\n height: \"16\",\n onError:\n \"this.onerror=null;this.src='images/providers/missing.png';\"\n }\n }),\n _vm._v(\" \"),\n row.manuallySearched\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n \"Manual searched episode: \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`Manual searched episode: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/manualsearch.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n row.properTags\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.properTags\n .split(/[ |]+/)\n .join(\", \") +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.properTags.split(/[ |]+/).join(', ')}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/info32.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ]\n : row.statusName === \"Failed\"\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \" download failed: \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.provider.name} download failed: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src: \"images/no16.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Downloaded\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n [\"Downloaded\", \"Archived\"].includes(row.statusName)\n ? [\n row.releaseGroup && row.releaseGroup !== \"-1\"\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticClass: \"release-group\"\n },\n [\n _c(\"i\", [\n _vm._v(_vm._s(row.releaseGroup))\n ])\n ]\n )\n : _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { cursor: \"help\" }\n },\n [_c(\"i\", [_vm._v(\"Unknown\")])]\n )\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Subtitled\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n {\n key: row.id,\n staticStyle: { \"margin-right\": \"5px\" }\n },\n [\n row.statusName === \"Subtitled\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n _vm.getFileBaseName(row.resource),\n expression:\n \"`${row.provider.name}: ${getFileBaseName(row.resource)}`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src:\n \"images/subtitles/\" +\n row.provider.name +\n \".png\",\n width: \"16\",\n height: \"16\",\n alt: row.provider.name\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticStyle: {\n \"vertical-align\": \"middle\"\n }\n },\n [_vm._v(\" / \")]\n ),\n _vm._v(\" \"),\n _c(\"img\", {\n staticStyle: {\n \"vertical-align\": \"middle !important\"\n },\n attrs: {\n width: \"16\",\n height: \"11\",\n src:\n \"images/subtitles/flags/\" +\n row.resource +\n \".png\",\n onError:\n \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Quality\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n [\n props.row.quality !== 0\n ? _c(\"quality-pill\", {\n attrs: { quality: props.row.quality }\n })\n : _vm._e()\n ],\n 1\n )\n : _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(props.formattedRow[props.column.field]) +\n \"\\n \"\n )\n ])\n ]\n }\n },\n {\n key: \"column-filter\",\n fn: function(ref) {\n var column = ref.column\n return [\n column.field === \"episodeTitle\"\n ? _c(\"span\", [\n _c(\"input\", {\n staticClass: \"'form-control input-sm vgt-input\",\n attrs: { placeholder: \"Resource\" },\n on: { input: _vm.updateResource }\n })\n ])\n : _vm._e()\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/history-compact.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"history-wrapper-compact vgt-table-styling\" },\n [\n _c(\"vue-good-table\", {\n attrs: {\n mode: \"remote\",\n columns: _vm.columns,\n rows: _vm.remoteHistory.rows,\n totalRows: _vm.remoteHistory.totalRows,\n \"search-options\": {\n enabled: false\n },\n \"sort-options\": {\n enabled: true,\n multipleColumns: false,\n initialSortBy: _vm.getSortFromCookie()\n },\n \"pagination-options\": {\n enabled: true,\n perPage: _vm.remoteHistory.perPage,\n perPageDropdown: _vm.perPageDropdown,\n dropdownAllowAll: false,\n position: \"both\"\n },\n \"column-filter-options\": {\n enabled: true\n },\n styleClass: \"vgt-table condensed\"\n },\n on: {\n \"on-page-change\": _vm.onPageChange,\n \"on-per-page-change\": _vm.onPerPageChange,\n \"on-sort-change\": _vm.onSortChange,\n \"on-column-filter\": _vm.onColumnFilter\n },\n scopedSlots: _vm._u([\n {\n key: \"table-row\",\n fn: function(props) {\n return [\n props.column.label === \"Date\"\n ? _c(\"span\", { staticClass: \"align-center\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n props.row.actionDate\n ? _vm.fuzzyParseDateTime(\n props.formattedRow[props.column.field]\n )\n : \"\"\n ) +\n \"\\n \"\n )\n ])\n : props.column.label === \"Episode\"\n ? _c(\n \"span\",\n { staticClass: \"episode-title\" },\n [\n _c(\n \"app-link\",\n {\n staticStyle: { color: \"white\" },\n attrs: {\n href:\n \"home/displayShow?showslug=\" +\n props.row.showSlug\n }\n },\n [_vm._v(_vm._s(props.row.episodeTitle))]\n )\n ],\n 1\n )\n : props.column.label === \"Snatched\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n row.statusName === \"Snatched\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.provider.name}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"margin-right\": \"5px\" },\n attrs: {\n src:\n \"images/providers/\" +\n row.provider.imageName,\n alt: row.provider.name,\n width: \"16\",\n height: \"16\",\n onError:\n \"this.onerror=null;this.src='images/providers/missing.png';\"\n }\n }),\n _vm._v(\" \"),\n row.manuallySearched\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n \"Manual searched episode: \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`Manual searched episode: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/manualsearch.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n row.properTags\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.properTags\n .split(/[ |]+/)\n .join(\", \") +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.properTags.split(/[ |]+/).join(', ')}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/info32.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ]\n : row.statusName === \"Failed\"\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \" download failed: \" +\n row.resource +\n \" (\" +\n _vm.fuzzyParseDateTime(row.actionDate) +\n \")\",\n expression:\n \"`${row.provider.name} download failed: ${row.resource} (${fuzzyParseDateTime(row.actionDate)})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src: \"images/no16.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Downloaded\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n [\"Downloaded\", \"Archived\"].includes(row.statusName)\n ? [\n row.releaseGroup && row.releaseGroup !== \"-1\"\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticClass: \"release-group\"\n },\n [\n _c(\"i\", [\n _vm._v(_vm._s(row.releaseGroup))\n ])\n ]\n )\n : _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { cursor: \"help\" }\n },\n [_c(\"i\", [_vm._v(\"Unknown\")])]\n )\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Subtitled\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n {\n key: row.id,\n staticStyle: { \"margin-right\": \"5px\" }\n },\n [\n row.statusName === \"Subtitled\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n _vm.getFileBaseName(row.resource),\n expression:\n \"`${row.provider.name}: ${getFileBaseName(row.resource)}`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src:\n \"images/subtitles/\" +\n row.provider.name +\n \".png\",\n width: \"16\",\n height: \"16\",\n alt: row.provider.name\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticStyle: {\n \"vertical-align\": \"middle\"\n }\n },\n [_vm._v(\" / \")]\n ),\n _vm._v(\" \"),\n _c(\"img\", {\n staticStyle: {\n \"vertical-align\": \"middle !important\"\n },\n attrs: {\n width: \"16\",\n height: \"11\",\n src:\n \"images/subtitles/flags/\" +\n row.resource +\n \".png\",\n onError:\n \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Quality\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n [\n props.row.quality !== 0\n ? _c(\"quality-pill\", {\n attrs: { quality: props.row.quality }\n })\n : _vm._e()\n ],\n 1\n )\n : _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(props.formattedRow[props.column.field]) +\n \"\\n \"\n )\n ])\n ]\n }\n },\n {\n key: \"column-filter\",\n fn: function(ref) {\n var column = ref.column\n return [\n column.field === \"episodeTitle\"\n ? _c(\"span\", [\n _c(\"input\", {\n staticClass: \"'form-control input-sm vgt-input\",\n attrs: { placeholder: \"Resource\" },\n on: { input: _vm.updateResource }\n })\n ])\n : _vm._e()\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/history-compact.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
@@ -6472,7 +6472,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"calendar-wrapper\",\n class: { fanartOpacity: _vm.layout.fanartBackgroundOpacity }\n },\n [\n _c(\n \"div\",\n { staticClass: \"wrap-center\" },\n _vm._l(_vm.groupedSchedule, function(day) {\n return _c(\"div\", { key: day.airdate, staticClass: \"day-column\" }, [\n _c(\n \"span\",\n {\n staticClass: \"day-header\",\n attrs: {\n title: day.airdate\n ? \"airs \" + day.airdate\n : \"No shows for this day\"\n }\n },\n [_vm._v(_vm._s(day.header))]\n ),\n _vm._v(\" \"),\n day.episodes.length > 0\n ? _c(\n \"ul\",\n _vm._l(day.episodes, function(episode) {\n return _c(\n \"li\",\n {\n key: episode.episodeSlug,\n staticClass: \"calendar-show\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"poster\" },\n [\n _c(\n \"app-link\",\n {\n attrs: {\n title: episode.showName,\n href:\n \"home/displayShow?showslug=\" +\n episode.showSlug\n }\n },\n [\n _c(\"asset\", {\n attrs: {\n \"default-src\": \"images/poster.png\",\n \"show-slug\": episode.showSlug,\n type: \"posterThumb\",\n link: false\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.airsTime) +\n \" on \" +\n _vm._s(episode.network) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"episode-title\",\n attrs: { title: episode.epName }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.episodeSlug) +\n \" - \" +\n _vm._s(episode.epName) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n )\n }),\n 0\n )\n : _c(\"ul\", [_vm._m(0, true)])\n ])\n }),\n 0\n ),\n _vm._v(\" \"),\n _c(\"backstretch\", { attrs: { slug: _vm.general.randomShowSlug } })\n ],\n 1\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"calendar-show\" }, [\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\"No shows for this day\")\n ])\n ])\n ])\n }\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/schedule/calendar.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"calendar-wrapper\",\n class: { fanartOpacity: _vm.layout.fanartBackgroundOpacity }\n },\n [\n _c(\n \"div\",\n { staticClass: \"wrap-center\" },\n _vm._l(_vm.groupedSchedule, function(day) {\n return _c(\"div\", { key: day.airdate, staticClass: \"day-column\" }, [\n _c(\n \"span\",\n {\n staticClass: \"day-header\",\n attrs: {\n title: day.airdate\n ? \"airs \" + day.airdate\n : \"No shows for this day\"\n }\n },\n [_vm._v(_vm._s(day.header))]\n ),\n _vm._v(\" \"),\n day.episodes.length > 0\n ? _c(\n \"ul\",\n _vm._l(day.episodes, function(episode) {\n return _c(\n \"li\",\n {\n key: \"\" + episode.showSlug + episode.episodeSlug,\n staticClass: \"calendar-show\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"poster\" },\n [\n _c(\n \"app-link\",\n {\n attrs: {\n title: episode.showName,\n href:\n \"home/displayShow?showslug=\" +\n episode.showSlug\n }\n },\n [\n _c(\"asset\", {\n attrs: {\n \"default-src\": \"images/poster.png\",\n \"show-slug\": episode.showSlug,\n type: \"posterThumb\",\n link: false\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.airsTime) +\n \" on \" +\n _vm._s(episode.network) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"episode-title\",\n attrs: { title: episode.epName }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.episodeSlug) +\n \" - \" +\n _vm._s(episode.epName) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n )\n }),\n 0\n )\n : _c(\"ul\", [_vm._m(0, true)])\n ])\n }),\n 0\n ),\n _vm._v(\" \"),\n _c(\"backstretch\", { attrs: { slug: _vm.general.randomShowSlug } })\n ],\n 1\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"calendar-show\" }, [\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\"No shows for this day\")\n ])\n ])\n ])\n }\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/schedule/calendar.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
diff --git a/themes/light/assets/js/medusa-runtime.js b/themes/light/assets/js/medusa-runtime.js
index 979ce2d36b..55766e6661 100644
--- a/themes/light/assets/js/medusa-runtime.js
+++ b/themes/light/assets/js/medusa-runtime.js
@@ -1577,7 +1577,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\nconst state = {\n categories: ['later', 'missed', 'soon', 'today'],\n later: [],\n missed: [],\n soon: [],\n today: [],\n displayCategory: {\n later: false,\n missed: false,\n soon: true,\n today: true\n }\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE](state, schedule) {\n for (const category in schedule) {\n // eslint-disable-line guard-for-in\n state[category] = schedule[category];\n }\n },\n\n setDisplayCategory(state, {\n category,\n value\n }) {\n state.displayCategory[category] = value;\n }\n\n};\nconst getters = {\n getScheduleFlattened: state => {\n const flattendedSchedule = [];\n const {\n categories,\n displayCategory\n } = state;\n\n for (const category of categories) {\n if (!displayCategory[category]) {\n continue;\n }\n\n const episodes = state[category];\n\n for (const episode of episodes) {\n episode.class = category;\n }\n\n flattendedSchedule.push(...episodes);\n }\n\n return flattendedSchedule;\n },\n\n /**\n * Group the coming episodes into an array of objects with an attibute header (the week day)\n * and an attribute episodes with an array of coming episodes.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n groupedSchedule: (state, getters, rootState) => {\n const {\n missed,\n soon,\n today,\n later,\n displayCategory\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n /* Return an array of the days to come */\n\n const comingDays = (currentDay, nrComingDays) => {\n let currentDayOfTheWeek = currentDay.getDay();\n const returnDays = [];\n\n for (let i = 0; i < nrComingDays; i++) {\n if (currentDayOfTheWeek > 7) {\n currentDayOfTheWeek = 1;\n }\n\n returnDays.push(currentDayOfTheWeek);\n currentDayOfTheWeek += 1;\n }\n\n return returnDays;\n };\n\n const _MS_PER_DAY = 1000 * 60 * 60 * 24; // A and b are javascript Date objects\n\n\n function dateDiffInDays(a, b) {\n // Discard the time and time-zone information.\n const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n return Math.floor((utc2 - utc1) / _MS_PER_DAY);\n }\n\n const newArray = [];\n const combinedEpisodes = [];\n\n if (displayCategory.missed) {\n combinedEpisodes.push(...missed);\n }\n\n if (displayCategory.today) {\n combinedEpisodes.push(...today);\n }\n\n if (displayCategory.soon) {\n combinedEpisodes.push(...soon);\n }\n\n if (displayCategory.later) {\n combinedEpisodes.push(...later);\n }\n\n const filteredEpisodes = combinedEpisodes.filter(item => !item.paused || displayPaused);\n\n if (filteredEpisodes.length === 0) {\n return [];\n }\n\n let currentDay = new Date(filteredEpisodes[0].airdate); // Group the coming episodes by day.\n\n for (const episode of filteredEpisodes) {\n // Calculate the gaps in the week, for which we don't have any scheduled shows.\n if (currentDay !== new Date(episode.airdate)) {\n const diffDays = dateDiffInDays(currentDay, new Date(episode.airdate));\n\n if (diffDays > 1) {\n let dayHeader = days[comingDays(currentDay, diffDays)[1] - 1]; // Add the elipses if there is a wider gap then 1 day.\n\n if (diffDays > 2) {\n dayHeader = `${dayHeader} ...`;\n }\n\n newArray.push({\n header: dayHeader,\n class: 'soon',\n episodes: []\n });\n }\n }\n\n currentDay = new Date(episode.airdate);\n let weekDay = newArray.find(item => item.airdate === episode.airdate);\n\n if (!weekDay) {\n weekDay = {\n airdate: episode.airdate,\n header: days[episode.weekday - 1],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n episode.airsTime = episode.airs.split(' ').slice(-2).join(' ');\n weekDay.episodes.push(episode);\n }\n\n return newArray;\n },\n\n /**\n * Group and sort the coming episodes into an array of objects with an attibute header (the week day).\n * Group the coming episodes into groups of missed, today, soon (subgrouped per day) and later.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n sortedSchedule: (state, getters, rootState) => sort => {\n const {\n displayCategory,\n missed,\n today,\n soon,\n later\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n const newArray = [];\n\n if (sort === 'date') {\n if (displayCategory.missed) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'missed',\n class: 'missed',\n episodes: missed.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.today) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'today',\n class: 'today',\n episodes: today.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.soon) {\n // Group the coming episodes by day.\n for (const episode of soon.filter(item => !item.paused || displayPaused)) {\n let weekDay = newArray.find(item => item.header === days[episode.weekday]);\n\n if (!weekDay) {\n weekDay = {\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n weekDay.episodes.push(episode);\n }\n }\n\n if (displayCategory.later) {\n // Group later episodes (one group)\n newArray.push({\n header: 'later',\n class: 'later',\n episodes: later.filter(item => !item.paused || displayPaused)\n });\n }\n\n return newArray;\n }\n\n if (sort === 'network') {\n const {\n getScheduleFlattened\n } = getters;\n const filteredSchedule = getScheduleFlattened.filter(item => item.paused || displayPaused);\n\n for (const episode of filteredSchedule.sort((a, b) => a.network.localeCompare(b.network))) {\n let network = newArray.find(item => item.header === episode.network);\n\n if (!network) {\n network = {\n header: episode.network,\n class: episode.class,\n episodes: []\n };\n newArray.push(network);\n }\n\n network.episodes.push(episode);\n }\n\n return newArray;\n }\n }\n};\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show schedule from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n async getSchedule({\n commit,\n state\n }) {\n const params = {\n category: state.categories,\n paused: true\n };\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/schedule', {\n params\n });\n\n if (response.data) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE, response.data);\n }\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/schedule.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _api__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../api */ \"./src/api.js\");\n/* harmony import */ var _mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../mutation-types */ \"./src/store/mutation-types.js\");\n\n\nconst state = {\n categories: ['later', 'missed', 'soon', 'today'],\n later: [],\n missed: [],\n soon: [],\n today: [],\n displayCategory: {\n later: false,\n missed: false,\n soon: true,\n today: true\n }\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE](state, schedule) {\n for (const category in schedule) {\n // eslint-disable-line guard-for-in\n state[category] = schedule[category];\n }\n },\n\n setDisplayCategory(state, {\n category,\n value\n }) {\n state.displayCategory[category] = value;\n }\n\n};\nconst getters = {\n getScheduleFlattened: state => {\n const flattendedSchedule = [];\n const {\n categories,\n displayCategory\n } = state;\n\n for (const category of categories) {\n if (!displayCategory[category]) {\n continue;\n }\n\n const episodes = state[category];\n\n for (const episode of episodes) {\n episode.class = category;\n }\n\n flattendedSchedule.push(...episodes);\n }\n\n return flattendedSchedule;\n },\n\n /**\n * Group the coming episodes into an array of objects with an attibute header (the week day)\n * and an attribute episodes with an array of coming episodes.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n groupedSchedule: (state, getters, rootState) => {\n const {\n missed,\n soon,\n today,\n later,\n displayCategory\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n /* Return an array of the days to come */\n\n const comingDays = (currentDay, nrComingDays) => {\n let currentDayOfTheWeek = currentDay.getDay();\n const returnDays = [];\n\n for (let i = 0; i < nrComingDays; i++) {\n if (currentDayOfTheWeek > 7) {\n currentDayOfTheWeek = 1;\n }\n\n returnDays.push(currentDayOfTheWeek);\n currentDayOfTheWeek += 1;\n }\n\n return returnDays;\n };\n\n const _MS_PER_DAY = 1000 * 60 * 60 * 24; // A and b are javascript Date objects\n\n\n function dateDiffInDays(a, b) {\n // Discard the time and time-zone information.\n const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\n const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\n return Math.floor((utc2 - utc1) / _MS_PER_DAY);\n }\n\n const newArray = [];\n const combinedEpisodes = [];\n\n if (displayCategory.missed) {\n combinedEpisodes.push(...missed);\n }\n\n if (displayCategory.today) {\n combinedEpisodes.push(...today);\n }\n\n if (displayCategory.soon) {\n combinedEpisodes.push(...soon);\n }\n\n if (displayCategory.later) {\n combinedEpisodes.push(...later);\n }\n\n const filteredEpisodes = combinedEpisodes.filter(item => !item.paused || displayPaused);\n\n if (filteredEpisodes.length === 0) {\n return [];\n }\n\n let currentDay = new Date(filteredEpisodes[0].airdate); // Group the coming episodes by day.\n\n for (const episode of filteredEpisodes) {\n // Calculate the gaps in the week, for which we don't have any scheduled shows.\n if (currentDay !== new Date(episode.airdate)) {\n const diffDays = dateDiffInDays(currentDay, new Date(episode.airdate));\n\n if (diffDays > 1) {\n let dayHeader = days[comingDays(currentDay, diffDays)[1] - 1]; // Add the elipses if there is a wider gap then 1 day.\n\n if (diffDays > 2) {\n dayHeader = `${dayHeader} ...`;\n }\n\n newArray.push({\n header: dayHeader,\n class: 'soon',\n episodes: []\n });\n }\n }\n\n currentDay = new Date(episode.airdate);\n let weekDay = newArray.find(item => item.airdate === episode.airdate);\n\n if (!weekDay) {\n weekDay = {\n airdate: episode.airdate,\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n episode.airsTime = episode.airs.split(' ').slice(-2).join(' ');\n weekDay.episodes.push(episode);\n }\n\n return newArray;\n },\n\n /**\n * Group and sort the coming episodes into an array of objects with an attibute header (the week day).\n * Group the coming episodes into groups of missed, today, soon (subgrouped per day) and later.\n * @param {object} state - local state object.\n * @param {object} getters - local getters object.\n * @param {object} rootState - root state object.\n * @returns {array} - Array of grouped episodes by header.\n */\n sortedSchedule: (state, getters, rootState) => sort => {\n const {\n displayCategory,\n missed,\n today,\n soon,\n later\n } = state;\n const {\n displayPaused\n } = rootState.config.layout.comingEps;\n const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];\n const newArray = [];\n\n if (sort === 'date') {\n if (displayCategory.missed) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'missed',\n class: 'missed',\n episodes: missed.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.today) {\n // Group missed episodes (one group)\n newArray.push({\n header: 'today',\n class: 'today',\n episodes: today.filter(item => !item.paused || displayPaused)\n });\n }\n\n if (displayCategory.soon) {\n // Group the coming episodes by day.\n for (const episode of soon.filter(item => !item.paused || displayPaused)) {\n let weekDay = newArray.find(item => item.header === days[episode.weekday]);\n\n if (!weekDay) {\n weekDay = {\n header: days[episode.weekday],\n class: 'soon',\n episodes: []\n };\n newArray.push(weekDay);\n }\n\n weekDay.episodes.push(episode);\n }\n }\n\n if (displayCategory.later) {\n // Group later episodes (one group)\n newArray.push({\n header: 'later',\n class: 'later',\n episodes: later.filter(item => !item.paused || displayPaused)\n });\n }\n\n return newArray;\n }\n\n if (sort === 'network') {\n const {\n getScheduleFlattened\n } = getters;\n const filteredSchedule = getScheduleFlattened.filter(item => !item.paused || displayPaused);\n\n for (const episode of filteredSchedule.sort((a, b) => a.network.localeCompare(b.network))) {\n let network = newArray.find(item => item.header === episode.network);\n\n if (!network) {\n network = {\n header: episode.network,\n class: episode.class,\n episodes: []\n };\n newArray.push(network);\n }\n\n network.episodes.push(episode);\n }\n\n return newArray;\n }\n }\n};\n/**\n * An object representing request parameters for getting a show from the API.\n *\n * @typedef {object} ShowGetParameters\n * @property {boolean} detailed Fetch detailed information? (e.g. scene/xem numbering)\n * @property {boolean} episodes Fetch seasons & episodes?\n */\n\nconst actions = {\n /**\n * Get show schedule from API and commit it to the store.\n *\n * @param {*} context The store context.\n * @param {ShowIdentifier&ShowGetParameters} parameters Request parameters.\n * @returns {Promise} The API response.\n */\n async getSchedule({\n commit,\n state\n }) {\n const params = {\n category: state.categories,\n paused: true\n };\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/schedule', {\n params\n });\n\n if (response.data) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SCHEDULE, response.data);\n }\n }\n\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n state,\n mutations,\n getters,\n actions\n});\n\n//# sourceURL=webpack://slim/./src/store/modules/schedule.js?");
/***/ }),
@@ -6252,7 +6252,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"history-wrapper-compact vgt-table-styling\" },\n [\n _c(\"vue-good-table\", {\n attrs: {\n mode: \"remote\",\n columns: _vm.columns,\n rows: _vm.remoteHistory.rows,\n totalRows: _vm.remoteHistory.totalRows,\n \"search-options\": {\n enabled: false\n },\n \"sort-options\": {\n enabled: true,\n multipleColumns: false,\n initialSortBy: _vm.getSortFromCookie()\n },\n \"pagination-options\": {\n enabled: true,\n perPage: _vm.remoteHistory.perPage,\n perPageDropdown: _vm.perPageDropdown,\n dropdownAllowAll: false,\n position: \"both\"\n },\n \"column-filter-options\": {\n enabled: true\n },\n styleClass: \"vgt-table condensed\"\n },\n on: {\n \"on-page-change\": _vm.onPageChange,\n \"on-per-page-change\": _vm.onPerPageChange,\n \"on-sort-change\": _vm.onSortChange,\n \"on-column-filter\": _vm.onColumnFilter\n },\n scopedSlots: _vm._u([\n {\n key: \"table-row\",\n fn: function(props) {\n return [\n props.column.label === \"Date\"\n ? _c(\"span\", { staticClass: \"align-center\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n props.row.actionDate\n ? _vm.fuzzyParseDateTime(\n props.formattedRow[props.column.field]\n )\n : \"\"\n ) +\n \"\\n \"\n )\n ])\n : props.column.label === \"Episode\"\n ? _c(\n \"span\",\n { staticClass: \"episode-title\" },\n [\n _c(\n \"app-link\",\n {\n staticStyle: { color: \"white\" },\n attrs: {\n href:\n \"home/displayShow?showslug=\" +\n props.row.showSlug\n }\n },\n [_vm._v(_vm._s(props.row.episodeTitle))]\n )\n ],\n 1\n )\n : props.column.label === \"Snatched\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n row.statusName === \"Snatched\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.provider.name}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"margin-right\": \"5px\" },\n attrs: {\n src:\n \"images/providers/\" +\n row.provider.imageName,\n alt: row.provider.name,\n width: \"16\",\n height: \"16\",\n onError:\n \"this.onerror=null;this.src='images/providers/missing.png';\"\n }\n }),\n _vm._v(\" \"),\n row.manuallySearched\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n \"Manual searched episode: \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`Manual searched episode: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/manualsearch.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n row.properTags\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.properTags\n .split(/[ |]+/)\n .join(\", \") +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.properTags.split(/[ |]+/).join(', ')}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/info32.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ]\n : row.statusName === \"Failed\"\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \" download failed: \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.provider.name} download failed: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src: \"images/no16.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Downloaded\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n [\"Downloaded\", \"Archived\"].includes(row.statusName)\n ? [\n row.releaseGroup && row.releaseGroup !== \"-1\"\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticClass: \"release-group\"\n },\n [\n _c(\"i\", [\n _vm._v(_vm._s(row.releaseGroup))\n ])\n ]\n )\n : _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { cursor: \"help\" }\n },\n [_c(\"i\", [_vm._v(\"Unknown\")])]\n )\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Subtitled\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n {\n key: row.id,\n staticStyle: { \"margin-right\": \"5px\" }\n },\n [\n row.statusName === \"Subtitled\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n _vm.getFileBaseName(row.resource),\n expression:\n \"`${row.provider.name}: ${getFileBaseName(row.resource)}`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src:\n \"images/subtitles/\" +\n row.provider.name +\n \".png\",\n width: \"16\",\n height: \"16\",\n alt: row.provider.name\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticStyle: {\n \"vertical-align\": \"middle\"\n }\n },\n [_vm._v(\" / \")]\n ),\n _vm._v(\" \"),\n _c(\"img\", {\n staticStyle: {\n \"vertical-align\": \"middle !important\"\n },\n attrs: {\n width: \"16\",\n height: \"11\",\n src:\n \"images/subtitles/flags/\" +\n row.resource +\n \".png\",\n onError:\n \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Quality\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n [\n props.row.quality !== 0\n ? _c(\"quality-pill\", {\n attrs: { quality: props.row.quality }\n })\n : _vm._e()\n ],\n 1\n )\n : _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(props.formattedRow[props.column.field]) +\n \"\\n \"\n )\n ])\n ]\n }\n },\n {\n key: \"column-filter\",\n fn: function(ref) {\n var column = ref.column\n return [\n column.field === \"episodeTitle\"\n ? _c(\"span\", [\n _c(\"input\", {\n staticClass: \"'form-control input-sm vgt-input\",\n attrs: { placeholder: \"Resource\" },\n on: { input: _vm.updateResource }\n })\n ])\n : _vm._e()\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/history-compact.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticClass: \"history-wrapper-compact vgt-table-styling\" },\n [\n _c(\"vue-good-table\", {\n attrs: {\n mode: \"remote\",\n columns: _vm.columns,\n rows: _vm.remoteHistory.rows,\n totalRows: _vm.remoteHistory.totalRows,\n \"search-options\": {\n enabled: false\n },\n \"sort-options\": {\n enabled: true,\n multipleColumns: false,\n initialSortBy: _vm.getSortFromCookie()\n },\n \"pagination-options\": {\n enabled: true,\n perPage: _vm.remoteHistory.perPage,\n perPageDropdown: _vm.perPageDropdown,\n dropdownAllowAll: false,\n position: \"both\"\n },\n \"column-filter-options\": {\n enabled: true\n },\n styleClass: \"vgt-table condensed\"\n },\n on: {\n \"on-page-change\": _vm.onPageChange,\n \"on-per-page-change\": _vm.onPerPageChange,\n \"on-sort-change\": _vm.onSortChange,\n \"on-column-filter\": _vm.onColumnFilter\n },\n scopedSlots: _vm._u([\n {\n key: \"table-row\",\n fn: function(props) {\n return [\n props.column.label === \"Date\"\n ? _c(\"span\", { staticClass: \"align-center\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(\n props.row.actionDate\n ? _vm.fuzzyParseDateTime(\n props.formattedRow[props.column.field]\n )\n : \"\"\n ) +\n \"\\n \"\n )\n ])\n : props.column.label === \"Episode\"\n ? _c(\n \"span\",\n { staticClass: \"episode-title\" },\n [\n _c(\n \"app-link\",\n {\n staticStyle: { color: \"white\" },\n attrs: {\n href:\n \"home/displayShow?showslug=\" +\n props.row.showSlug\n }\n },\n [_vm._v(_vm._s(props.row.episodeTitle))]\n )\n ],\n 1\n )\n : props.column.label === \"Snatched\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n row.statusName === \"Snatched\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.provider.name}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"margin-right\": \"5px\" },\n attrs: {\n src:\n \"images/providers/\" +\n row.provider.imageName,\n alt: row.provider.name,\n width: \"16\",\n height: \"16\",\n onError:\n \"this.onerror=null;this.src='images/providers/missing.png';\"\n }\n }),\n _vm._v(\" \"),\n row.manuallySearched\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n \"Manual searched episode: \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`Manual searched episode: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/manualsearch.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n row.properTags\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.properTags\n .split(/[ |]+/)\n .join(\", \") +\n \": \" +\n row.resource +\n \" (\" +\n row.actionDate +\n \")\",\n expression:\n \"`${row.properTags.split(/[ |]+/).join(', ')}: ${row.resource} (${row.actionDate})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: {\n \"vertical-align\": \"middle\"\n },\n attrs: {\n src: \"images/info32.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ]\n : row.statusName === \"Failed\"\n ? _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \" download failed: \" +\n row.resource +\n \" (\" +\n _vm.fuzzyParseDateTime(row.actionDate) +\n \")\",\n expression:\n \"`${row.provider.name} download failed: ${row.resource} (${fuzzyParseDateTime(row.actionDate)})`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src: \"images/no16.png\",\n width: \"16\",\n height: \"16\"\n }\n })\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Downloaded\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n { key: row.id },\n [\n [\"Downloaded\", \"Archived\"].includes(row.statusName)\n ? [\n row.releaseGroup && row.releaseGroup !== \"-1\"\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticClass: \"release-group\"\n },\n [\n _c(\"i\", [\n _vm._v(_vm._s(row.releaseGroup))\n ])\n ]\n )\n : _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value: _vm.getFileBaseName(\n row.resource\n ),\n expression:\n \"getFileBaseName(row.resource)\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { cursor: \"help\" }\n },\n [_c(\"i\", [_vm._v(\"Unknown\")])]\n )\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Subtitled\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n _vm._l(_vm.sortDate(props.row.rows), function(row) {\n return _c(\n \"div\",\n {\n key: row.id,\n staticStyle: { \"margin-right\": \"5px\" }\n },\n [\n row.statusName === \"Subtitled\"\n ? [\n _c(\"img\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.right\",\n value:\n row.provider.name +\n \": \" +\n _vm.getFileBaseName(row.resource),\n expression:\n \"`${row.provider.name}: ${getFileBaseName(row.resource)}`\",\n modifiers: { right: true }\n }\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src:\n \"images/subtitles/\" +\n row.provider.name +\n \".png\",\n width: \"16\",\n height: \"16\",\n alt: row.provider.name\n }\n }),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticStyle: {\n \"vertical-align\": \"middle\"\n }\n },\n [_vm._v(\" / \")]\n ),\n _vm._v(\" \"),\n _c(\"img\", {\n staticStyle: {\n \"vertical-align\": \"middle !important\"\n },\n attrs: {\n width: \"16\",\n height: \"11\",\n src:\n \"images/subtitles/flags/\" +\n row.resource +\n \".png\",\n onError:\n \"this.onerror=null;this.src='images/flags/unknown.png';\"\n }\n })\n ]\n : _vm._e()\n ],\n 2\n )\n }),\n 0\n )\n : props.column.label === \"Quality\"\n ? _c(\n \"span\",\n { staticClass: \"align-center\" },\n [\n props.row.quality !== 0\n ? _c(\"quality-pill\", {\n attrs: { quality: props.row.quality }\n })\n : _vm._e()\n ],\n 1\n )\n : _c(\"span\", [\n _vm._v(\n \"\\n \" +\n _vm._s(props.formattedRow[props.column.field]) +\n \"\\n \"\n )\n ])\n ]\n }\n },\n {\n key: \"column-filter\",\n fn: function(ref) {\n var column = ref.column\n return [\n column.field === \"episodeTitle\"\n ? _c(\"span\", [\n _c(\"input\", {\n staticClass: \"'form-control input-sm vgt-input\",\n attrs: { placeholder: \"Resource\" },\n on: { input: _vm.updateResource }\n })\n ])\n : _vm._e()\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/history-compact.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),
@@ -6472,7 +6472,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"calendar-wrapper\",\n class: { fanartOpacity: _vm.layout.fanartBackgroundOpacity }\n },\n [\n _c(\n \"div\",\n { staticClass: \"wrap-center\" },\n _vm._l(_vm.groupedSchedule, function(day) {\n return _c(\"div\", { key: day.airdate, staticClass: \"day-column\" }, [\n _c(\n \"span\",\n {\n staticClass: \"day-header\",\n attrs: {\n title: day.airdate\n ? \"airs \" + day.airdate\n : \"No shows for this day\"\n }\n },\n [_vm._v(_vm._s(day.header))]\n ),\n _vm._v(\" \"),\n day.episodes.length > 0\n ? _c(\n \"ul\",\n _vm._l(day.episodes, function(episode) {\n return _c(\n \"li\",\n {\n key: episode.episodeSlug,\n staticClass: \"calendar-show\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"poster\" },\n [\n _c(\n \"app-link\",\n {\n attrs: {\n title: episode.showName,\n href:\n \"home/displayShow?showslug=\" +\n episode.showSlug\n }\n },\n [\n _c(\"asset\", {\n attrs: {\n \"default-src\": \"images/poster.png\",\n \"show-slug\": episode.showSlug,\n type: \"posterThumb\",\n link: false\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.airsTime) +\n \" on \" +\n _vm._s(episode.network) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"episode-title\",\n attrs: { title: episode.epName }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.episodeSlug) +\n \" - \" +\n _vm._s(episode.epName) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n )\n }),\n 0\n )\n : _c(\"ul\", [_vm._m(0, true)])\n ])\n }),\n 0\n ),\n _vm._v(\" \"),\n _c(\"backstretch\", { attrs: { slug: _vm.general.randomShowSlug } })\n ],\n 1\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"calendar-show\" }, [\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\"No shows for this day\")\n ])\n ])\n ])\n }\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/schedule/calendar.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"render\": () => (/* binding */ render),\n/* harmony export */ \"staticRenderFns\": () => (/* binding */ staticRenderFns)\n/* harmony export */ });\nvar render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"calendar-wrapper\",\n class: { fanartOpacity: _vm.layout.fanartBackgroundOpacity }\n },\n [\n _c(\n \"div\",\n { staticClass: \"wrap-center\" },\n _vm._l(_vm.groupedSchedule, function(day) {\n return _c(\"div\", { key: day.airdate, staticClass: \"day-column\" }, [\n _c(\n \"span\",\n {\n staticClass: \"day-header\",\n attrs: {\n title: day.airdate\n ? \"airs \" + day.airdate\n : \"No shows for this day\"\n }\n },\n [_vm._v(_vm._s(day.header))]\n ),\n _vm._v(\" \"),\n day.episodes.length > 0\n ? _c(\n \"ul\",\n _vm._l(day.episodes, function(episode) {\n return _c(\n \"li\",\n {\n key: \"\" + episode.showSlug + episode.episodeSlug,\n staticClass: \"calendar-show\"\n },\n [\n _c(\n \"div\",\n { staticClass: \"poster\" },\n [\n _c(\n \"app-link\",\n {\n attrs: {\n title: episode.showName,\n href:\n \"home/displayShow?showslug=\" +\n episode.showSlug\n }\n },\n [\n _c(\"asset\", {\n attrs: {\n \"default-src\": \"images/poster.png\",\n \"show-slug\": episode.showSlug,\n type: \"posterThumb\",\n link: false\n }\n })\n ],\n 1\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.airsTime) +\n \" on \" +\n _vm._s(episode.network) +\n \"\\n \"\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n staticClass: \"episode-title\",\n attrs: { title: episode.epName }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(episode.episodeSlug) +\n \" - \" +\n _vm._s(episode.epName) +\n \"\\n \"\n )\n ]\n )\n ])\n ]\n )\n }),\n 0\n )\n : _c(\"ul\", [_vm._m(0, true)])\n ])\n }),\n 0\n ),\n _vm._v(\" \"),\n _c(\"backstretch\", { attrs: { slug: _vm.general.randomShowSlug } })\n ],\n 1\n )\n}\nvar staticRenderFns = [\n function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"li\", { staticClass: \"calendar-show\" }, [\n _c(\"div\", { staticClass: \"text\" }, [\n _c(\"span\", { staticClass: \"airtime\" }, [\n _vm._v(\"No shows for this day\")\n ])\n ])\n ])\n }\n]\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/schedule/calendar.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options");
/***/ }),