diff --git a/CHANGELOG.md b/CHANGELOG.md index b58dad2307..110599154e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,13 @@ ## Unreleased #### New Features +- Added support for Prowlarr ([9653](https://github.com/pymedusa/Medusa/pull/9653)) #### Improvements +- Vueified config/providers ([9653](https://github.com/pymedusa/Medusa/pull/9653)) #### Fixes -- Fix email notifications for per show notifications with special chars ([9652](https://github.com/pymedusa/Medusa/pull/96520)) +- Fix email notifications for per show notifications with special chars ([9652](https://github.com/pymedusa/Medusa/pull/9652)) ----- diff --git a/medusa/__main__.py b/medusa/__main__.py index 5b9bdfab31..7d82dac6e0 100755 --- a/medusa/__main__.py +++ b/medusa/__main__.py @@ -687,6 +687,9 @@ def initialize(self, console_logging=True): app.CREATE_MISSING_SHOW_DIRS = bool(check_setting_int(app.CFG, 'General', 'create_missing_show_dirs', 0)) app.ADD_SHOWS_WO_DIR = bool(check_setting_int(app.CFG, 'General', 'add_shows_wo_dir', 0)) + app.PROWLARR_URL = check_setting_str(app.CFG, 'Prowlarr', 'url', '', censor_log='normal') + app.PROWLARR_APIKEY = check_setting_str(app.CFG, 'Prowlarr', 'apikey', '', censor_log='high') + app.NZBS = bool(check_setting_int(app.CFG, 'NZBs', 'nzbs', 0)) app.NZBS_UID = check_setting_str(app.CFG, 'NZBs', 'nzbs_uid', '', censor_log='normal') app.NZBS_HASH = check_setting_str(app.CFG, 'NZBs', 'nzbs_hash', '', censor_log='low') @@ -1078,6 +1081,9 @@ def initialize(self, console_logging=True): app.TORZNAB_PROVIDERS = check_setting_list(app.CFG, 'Torznab', 'torznab_providers') app.torznab_providers_list = TorznabProvider.get_providers_list(app.TORZNAB_PROVIDERS) + app.PROWLARR_PROVIDERS = check_setting_list(app.CFG, 'Prowlarr', 'providers') + # TODO implement ProwlarrProvider.get_providers_list(app.PROWLARR_PROVIDERS) + all_providers = providers.sorted_provider_list() # dynamically load provider settings @@ -1126,6 +1132,8 @@ def initialize(self, console_logging=True): load_provider_setting(app.CFG, provider, 'string', 'url', '', censor_log='low') load_provider_setting(app.CFG, provider, 'list', 'cat_ids', '', split_value=',') load_provider_setting(app.CFG, provider, 'list', 'cap_tv_search', '', split_value=',') + load_provider_setting(app.CFG, provider, 'string', 'manager', '', censor_log='low') + load_provider_setting(app.CFG, provider, 'string', 'id_manager', '', censor_log='low') if isinstance(provider, NewznabProvider): # non configurable @@ -1134,6 +1142,8 @@ def initialize(self, console_logging=True): load_provider_setting(app.CFG, provider, 'bool', 'needs_auth', 1) # configurable load_provider_setting(app.CFG, provider, 'list', 'cat_ids', '', split_value=',') + load_provider_setting(app.CFG, provider, 'string', 'manager', '', censor_log='low') + load_provider_setting(app.CFG, provider, 'string', 'id_manager', '', censor_log='low') if not os.path.isfile(app.CONFIG_FILE): logger.debug(u'Unable to find {config!r}, all settings will be default!', config=app.CONFIG_FILE) @@ -1697,7 +1707,7 @@ def save_config(): 'all': [ 'name', 'url', 'cat_ids', 'api_key', 'username', 'search_mode', 'search_fallback', 'enable_daily', 'enable_backlog', 'enable_manualsearch', 'enable_search_delay', - 'search_delay', + 'search_delay', 'manager', 'id_manager' ], 'encrypted': [ 'password', @@ -1987,6 +1997,11 @@ def save_config(): new_config['Torznab'] = {} new_config['Torznab']['torznab_providers'] = app.TORZNAB_PROVIDERS + new_config['Prowlarr'] = {} + new_config['Prowlarr']['providers'] = app.PROWLARR_PROVIDERS + new_config['Prowlarr']['url'] = app.PROWLARR_URL + new_config['Prowlarr']['apikey'] = app.PROWLARR_APIKEY + new_config['GUI'] = {} new_config['GUI']['theme_name'] = app.THEME_NAME new_config['GUI']['fanart_background'] = app.FANART_BACKGROUND diff --git a/medusa/app.py b/medusa/app.py index db366d71fc..669bd2076a 100644 --- a/medusa/app.py +++ b/medusa/app.py @@ -666,6 +666,11 @@ def __init__(self): self.NEWZNAB_PROVIDERS = [] + # Prowlarr section. + self.PROWLARR_URL = '' + self.PROWLARR_APIKEY = '' + self.PROWLARR_PROVIDERS = [] + self.TORRENTRSS_PROVIDERS = [] self.TORZNAB_PROVIDERS = [] diff --git a/medusa/providers/generic_provider.py b/medusa/providers/generic_provider.py index 8880397db6..d1d3461323 100644 --- a/medusa/providers/generic_provider.py +++ b/medusa/providers/generic_provider.py @@ -63,6 +63,10 @@ class GenericProvider(object): NZB = 'nzb' TORRENT = 'torrent' + NEWZNAB = 'newznab' + TORZNAB = 'torznab' + TORRENTRSS = 'torrentrss' + PROWLARR = 'prowlarr' def __init__(self, name): """Initialize the class.""" @@ -76,7 +80,8 @@ def __init__(self, name): self.enabled = False self.headers = {'User-Agent': USER_AGENT} self.proper_strings = ['PROPER|REPACK|REAL|RERIP'] - self.provider_type = None + self.provider_type = None # generic type. For ex: nzb or torrent + self.provider_sub_type = None # specific type. For ex: neznab or torznab self.public = False self.search_fallback = False self.search_mode = None @@ -891,9 +896,11 @@ def __unicode__(self): def to_json(self): """Return a json representation for a provider.""" from medusa.providers.torrent.torrent_provider import TorrentProvider - return { + # Generic options + data = { 'name': self.name, 'id': self.get_id(), + 'imageName': self.image_name(), 'config': { 'enabled': self.enabled, 'search': { @@ -901,10 +908,10 @@ def to_json(self): 'enabled': self.enable_backlog }, 'manual': { - 'enabled': self.enable_backlog + 'enabled': self.enable_manualsearch }, 'daily': { - 'enabled': self.enable_backlog, + 'enabled': self.enable_daily, 'maxRecentItems': self.max_recent_items, 'stopAt': self.stop_at }, @@ -920,16 +927,92 @@ def to_json(self): }, 'animeOnly': self.anime_only, 'type': self.provider_type, + 'subType': self.provider_sub_type, 'public': self.public, 'btCacheUrls': self.bt_cache_urls if isinstance(self, TorrentProvider) else [], 'properStrings': self.proper_strings, 'headers': self.headers, 'supportsAbsoluteNumbering': self.supports_absolute_numbering, 'supportsBacklog': self.supports_backlog, - 'url': self.url, + 'url': self.custom_url or self.url if hasattr(self, 'custom_url') else self.url, 'urls': self.urls, 'cookies': { 'enabled': self.enable_cookies, 'required': self.cookies } } + + # Custom options (torrent client specific) + if hasattr(self, 'username'): + data['config']['username'] = self.username + + if hasattr(self, 'password'): + data['config']['password'] = self.password + + if hasattr(self, 'api_key'): + data['config']['apikey'] = self.api_key + + if hasattr(self, 'custom_url'): + data['config']['customUrl'] = self.custom_url + + if hasattr(self, 'minseed'): + data['config']['minseed'] = self.minseed + + if hasattr(self, 'minleech'): + data['config']['minleech'] = self.minleech + + if hasattr(self, 'ratio'): + data['config']['ratio'] = self.ratio + + if hasattr(self, 'client_ratio'): + data['config']['clientRatio'] = self.client_ratio + + if hasattr(self, 'passkey'): + data['config']['passkey'] = self.passkey + + if hasattr(self, 'hash'): + data['config']['hash'] = self.hash + + if hasattr(self, 'digest'): + data['config']['digest'] = self.digest + + if hasattr(self, 'pin'): + data['config']['pin'] = self.pin + + if hasattr(self, 'confirmed'): + data['config']['confirmed'] = self.confirmed + + if hasattr(self, 'ranked'): + data['config']['ranked'] = self.ranked + + if hasattr(self, 'sorting'): + data['config']['sorting'] = self.sorting + + if hasattr(self, 'cookies'): + data['config']['cookies'] = self.cookies + + # Custom options (newznab specific) + if hasattr(self, 'default'): + data['default'] = self.default + + if hasattr(self, 'cat_ids'): + data['config']['catIds'] = self.cat_ids + + if hasattr(self, 'params'): + data['config']['params'] = self.params + + if hasattr(self, 'needs_auth'): + data['needsAuth'] = self.needs_auth + + # Custom options (torrentrss) + if hasattr(self, 'title_tag'): + data['config']['titleTag'] = self.title_tag + + # Custom options (prowlarr): + if hasattr(self, 'manager'): + data['manager'] = self.manager + + if hasattr(self, 'id_manager'): + data['idManager'] = self.id_manager + + return data diff --git a/medusa/providers/nzb/newznab.py b/medusa/providers/nzb/newznab.py index 068c10546b..1d9caf6e7b 100644 --- a/medusa/providers/nzb/newznab.py +++ b/medusa/providers/nzb/newznab.py @@ -28,6 +28,7 @@ ) from medusa.indexers.utils import mappings from medusa.logger.adapters.style import BraceAdapter +from medusa.providers.generic_provider import GenericProvider from medusa.providers.nzb.nzb_provider import NZBProvider from requests.compat import urljoin @@ -48,13 +49,16 @@ class NewznabProvider(NZBProvider): Tested with: newznab, nzedb, spotweb """ - IDENTIFIER_REGEX = re.compile(r'(.*)apikey=.+') + IDENTIFIER_REGEX = re.compile(r'apikey=[^&]+') def __init__(self, name, url='', api_key='0', cat_ids=None, default=False, search_mode='eponly', - search_fallback=False, enable_daily=True, enable_backlog=False, enable_manualsearch=False): + search_fallback=False, enable_daily=True, enable_backlog=False, + enable_manualsearch=False, manager=None): """Initialize the class.""" super(NewznabProvider, self).__init__(name) + self.provider_sub_type = GenericProvider.NEWZNAB + self.url = url self.api_key = api_key @@ -84,6 +88,10 @@ def __init__(self, name, url='', api_key='0', cat_ids=None, default=False, searc 'Season {season}', # example: 'Series.Name Season 3' ) + # Specify the manager if externally managed. + self.manager = manager + self.id_manager = self.name + self.cache = tv.Cache(self) def search(self, search_strings, age=0, ep_obj=None, force_query=False, manual_search=False, **kwargs): @@ -284,9 +292,9 @@ def _get_identifier(item): Cut the apikey from it, as this might change over time. So we'd like to prevent adding duplicates to cache. """ - url = NewznabProvider.IDENTIFIER_REGEX.match(item.url) + url = NewznabProvider.IDENTIFIER_REGEX.sub('', item.url) if url: - return url.group(1) + return url return item.url def config_string(self): @@ -367,6 +375,10 @@ def image_name(self): """ if os.path.isfile(os.path.join(app.THEME_DATA_ROOT, 'assets/img/providers/', self.get_id() + '.png')): return self.get_id() + '.png' + + if self.manager == 'prowlarr': + return 'prowlarr.png' + return 'newznab.png' def _match_indexer(self): diff --git a/medusa/providers/prowlarr.py b/medusa/providers/prowlarr.py new file mode 100644 index 0000000000..122f2a92a5 --- /dev/null +++ b/medusa/providers/prowlarr.py @@ -0,0 +1,29 @@ +"""Utility class for prowlarr.""" +from urllib.parse import urljoin + +from medusa.session.core import ProviderSession + + +class ProwlarrManager(object): + """Utility class for prowlarr.""" + + def __init__(self, url, apikey): + self.url = url + self.apikey = apikey + self.session = ProviderSession() + self.session.headers.update({'x-api-key': self.apikey}) + + def test_connectivity(self): + """Verify connectivity to Prowlarrs internal api.""" + response = self.session.get(urljoin(self.url, 'api/v1/health')) + if response and response.ok: + return True + return False + + def get_indexers(self): + """Get a list of providers (newznab/torznab indexers).""" + response = self.session.get(urljoin(self.url, 'api/v1/indexer')) + if not response: + return False + + return response.json() diff --git a/medusa/providers/torrent/rss/rsstorrent.py b/medusa/providers/torrent/rss/rsstorrent.py index e4bf9e1e79..5adf36fa58 100644 --- a/medusa/providers/torrent/rss/rsstorrent.py +++ b/medusa/providers/torrent/rss/rsstorrent.py @@ -17,6 +17,7 @@ tv, ) from medusa.helper.exceptions import ex +from medusa.providers.generic_provider import GenericProvider from medusa.providers.torrent.torrent_provider import TorrentProvider log = logging.getLogger(__name__) @@ -30,6 +31,7 @@ def __init__(self, name, url='', cookies='', title_tag=None, search_mode='eponly enable_daily=False, enable_backlog=False, enable_manualsearch=False): """Initialize the class.""" super(TorrentRssProvider, self).__init__(name) + self.provider_sub_type = GenericProvider.TORRENTRSS # Credentials diff --git a/medusa/providers/torrent/torznab/torznab.py b/medusa/providers/torrent/torznab/torznab.py index f238bbbd29..edfe0149d9 100644 --- a/medusa/providers/torrent/torznab/torznab.py +++ b/medusa/providers/torrent/torznab/torznab.py @@ -21,6 +21,7 @@ ) from medusa.indexers.utils import mappings from medusa.logger.adapters.style import BraceAdapter +from medusa.providers.generic_provider import GenericProvider from medusa.providers.torrent.torrent_provider import TorrentProvider from requests.compat import urljoin @@ -37,14 +38,23 @@ class TorznabProvider(TorrentProvider): """Generic provider for built in and custom providers who expose a Torznab compatible api.""" - def __init__(self, name, url=None, api_key=None, cat_ids=None, cap_tv_search=None): + def __init__(self, name, url=None, api_key=None, cat_ids=None, cap_tv_search=None, + search_mode='eponly', search_fallback=False, enable_daily=True, + enable_backlog=False, enable_manualsearch=False, manager=None): """Initialize the class.""" super(TorznabProvider, self).__init__(name) + self.provider_sub_type = GenericProvider.TORZNAB + self.url = url or '' self.api_key = api_key or '' self.cat_ids = cat_ids or ['5010', '5030', '5040', '7000'] self.cap_tv_search = cap_tv_search or [] + self.search_mode = search_mode + self.search_fallback = search_fallback + self.enable_daily = enable_daily + self.enable_backlog = enable_backlog + self.enable_manualsearch = enable_manualsearch # For now apply the additional season search string for all torznab providers. # If we want to limited this per provider, I suggest using a dict, with provider: [list of season templates] @@ -57,6 +67,10 @@ def __init__(self, name, url=None, api_key=None, cat_ids=None, cap_tv_search=Non # Proper Strings self.proper_strings = ['PROPER', 'REPACK', 'REAL', 'RERIP'] + # Specify the manager if externally managed. + self.manager = manager + self.id_manager = self.name + self.cache = tv.Cache(self) def search(self, search_strings, age=0, ep_obj=None, force_query=False, manual_search=False, **kwargs): @@ -246,6 +260,10 @@ def image_name(self): """ if os.path.isfile(os.path.join(app.THEME_DATA_ROOT, 'assets/img/providers/', self.get_id() + '.png')): return self.get_id() + '.png' + + if self.manager == 'prowlarr': + return 'prowlarr.png' + return 'jackett.png' def _match_indexer(self): diff --git a/medusa/search/core.py b/medusa/search/core.py index 5ca150b93e..20e752ed2f 100644 --- a/medusa/search/core.py +++ b/medusa/search/core.py @@ -760,8 +760,8 @@ def search_providers(series_obj, episodes, forced_search=False, down_cur_quality else: searched_episode_list = [episode_obj.episode for episode_obj in episodes] + [MULTI_EP_RESULT] for searched_episode in searched_episode_list: - if (searched_episode in search_results and - cur_provider.cache.update_cache_manual_search(search_results[searched_episode])): + if (searched_episode in search_results + and cur_provider.cache.update_cache_manual_search(search_results[searched_episode])): # If we have at least a result from one provider, it's good enough to be marked as result manual_search_results.append(True) # Continue because we don't want to pick best results as we are running a manual search by user diff --git a/medusa/server/api/v2/config.py b/medusa/server/api/v2/config.py index 4433ec99ec..c59b8ac40b 100644 --- a/medusa/server/api/v2/config.py +++ b/medusa/server/api/v2/config.py @@ -104,6 +104,7 @@ class ConfigHandler(BaseRequestHandler): 'defaultPage': StringField(app, 'DEFAULT_PAGE'), 'trashRemoveShow': BooleanField(app, 'TRASH_REMOVE_SHOW'), 'trashRotateLogs': BooleanField(app, 'TRASH_ROTATE_LOGS'), + 'brokenProviders': ListField(app, 'BROKEN_PROVIDERS'), 'indexerDefaultLanguage': StringField(app, 'INDEXER_DEFAULT_LANGUAGE'), 'showUpdateHour': IntegerField(app, 'SHOWUPDATE_HOUR'), @@ -180,6 +181,8 @@ class ConfigHandler(BaseRequestHandler): 'namingForceFolders': BooleanField(app, 'NAMING_FORCE_FOLDERS'), 'subtitles.enabled': BooleanField(app, 'USE_SUBTITLES'), 'recentShows': ListField(app, 'SHOWS_RECENT'), + 'providers.prowlarr.url': StringField(app, 'PROWLARR_URL'), + 'providers.prowlarr.apikey': StringField(app, 'PROWLARR_APIKEY'), # Sections 'clients.torrents.authType': StringField(app, 'TORRENT_AUTH_TYPE'), @@ -612,6 +615,7 @@ def data_main(): section_data['subtitles']['enabled'] = bool(app.USE_SUBTITLES) section_data['recentShows'] = app.SHOWS_RECENT section_data['addTitleWithYear'] = bool(app.ADD_TITLE_WITH_YEAR) + section_data['brokenProviders'] = [provider for provider in app.BROKEN_PROVIDERS if provider] # Pick a random series to show as background. # TODO: Recreate this in Vue when the webapp has a reliable list of shows to choose from. @@ -720,6 +724,11 @@ def data_main(): section_data['backlogOverview']['status'] = app.BACKLOG_STATUS section_data['backlogOverview']['period'] = app.BACKLOG_PERIOD + section_data['providers'] = {} + section_data['providers']['prowlarr'] = {} + section_data['providers']['prowlarr']['url'] = app.PROWLARR_URL + section_data['providers']['prowlarr']['apikey'] = app.PROWLARR_APIKEY + return section_data # The consts info only needs to be generated once. diff --git a/medusa/server/api/v2/providers.py b/medusa/server/api/v2/providers.py index 9920ded171..18b2920e83 100644 --- a/medusa/server/api/v2/providers.py +++ b/medusa/server/api/v2/providers.py @@ -3,16 +3,28 @@ from __future__ import unicode_literals import logging +import re +from collections import OrderedDict from datetime import datetime from dateutil import parser -from medusa import providers +from medusa import app, providers from medusa.logger.adapters.style import BraceAdapter +from medusa.providers import get_provider_class +from medusa.providers.generic_provider import GenericProvider +from medusa.providers.nzb.newznab import NewznabProvider +from medusa.providers.prowlarr import ProwlarrManager +from medusa.providers.torrent.rss.rsstorrent import TorrentRssProvider +from medusa.providers.torrent.torrent_provider import TorrentProvider +from medusa.providers.torrent.torznab.torznab import TorznabProvider from medusa.server.api.v2.base import ( BaseRequestHandler, ) +from requests.compat import urljoin + +from tornado.escape import json_decode log = BraceAdapter(logging.getLogger(__name__)) log.logger.addHandler(logging.NullHandler()) @@ -52,48 +64,516 @@ def get(self, identifier, path_param=None): if not provider: return self._not_found('Provider not found') - if not path_param == 'results': - return self._ok(provider.to_json()) - - provider_results = provider.cache.get_results(show_slug=show_slug, season=season, episode=episode) - - arg_page = self._get_page() - arg_limit = self._get_limit(default=50) - - def data_generator(): - """Read log lines based on the specified criteria.""" - start = arg_limit * (arg_page - 1) + 1 - - for item in provider_results[start - 1:start - 1 + arg_limit]: - episodes = [int(ep) for ep in item['episodes'].strip('|').split('|') if ep != ''] - yield { - 'identifier': item['identifier'], - 'release': item['name'], - 'season': item['season'], - 'episodes': episodes, - # For now if episodes is 0 or (multiepisode) mark as season pack. - 'seasonPack': len(episodes) == 0 or len(episodes) > 1, - 'indexer': item['indexer'], - 'seriesId': item['indexerid'], - 'showSlug': show_slug, - 'url': item['url'], - 'time': datetime.fromtimestamp(item['time']), - 'quality': item['quality'], - 'releaseGroup': item['release_group'], - 'dateAdded': datetime.fromtimestamp(item['date_added']), - 'version': item['version'], - 'seeders': item['seeders'], - 'size': item['size'], - 'leechers': item['leechers'], - 'pubdate': parser.parse(item['pubdate']).replace(microsecond=0) if item['pubdate'] else None, - 'provider': { - 'id': provider.get_id(), - 'name': provider.name, - 'imageName': provider.image_name() + # Return provider results + if path_param == 'results': + provider_results = provider.cache.get_results(show_slug=show_slug, season=season, episode=episode) + + arg_page = self._get_page() + arg_limit = self._get_limit(default=50) + + def data_generator(): + """Create provider results.""" + start = arg_limit * (arg_page - 1) + 1 + + for item in provider_results[start - 1:start - 1 + arg_limit]: + episodes = [int(ep) for ep in item['episodes'].strip('|').split('|') if ep != ''] + yield { + 'identifier': item['identifier'], + 'release': item['name'], + 'season': item['season'], + 'episodes': episodes, + # For now if episodes is 0 or (multiepisode) mark as season pack. + 'seasonPack': len(episodes) == 0 or len(episodes) > 1, + 'indexer': item['indexer'], + 'seriesId': item['indexerid'], + 'showSlug': show_slug, + 'url': item['url'], + 'time': datetime.fromtimestamp(item['time']), + 'quality': item['quality'], + 'releaseGroup': item['release_group'], + 'dateAdded': datetime.fromtimestamp(item['date_added']), + 'version': item['version'], + 'seeders': item['seeders'], + 'size': item['size'], + 'leechers': item['leechers'], + 'pubdate': parser.parse(item['pubdate']).replace(microsecond=0) if item['pubdate'] else None, + 'provider': { + 'id': provider.get_id(), + 'name': provider.name, + 'imageName': provider.image_name() + } } - } - if not len(provider_results): - return self._not_found('Provider cache results not found') + if not len(provider_results): + return self._not_found('Provider cache results not found') + + return self._paginate(data_generator=data_generator) + + return self._ok(provider.to_json()) + + def patch(self, identifier, **kwargs): + """Patch provider config.""" + data = json_decode(self.request.body) + if not identifier: + return self._bad_request('You should provide the provider you want to patch') + + provider = get_provider_class(identifier) + if not provider: + return self._bad_request('Could not locate provider by id') + + self._set_common_settings(provider, data) + if isinstance(provider, TorrentProvider): + self._set_torrent_settings(provider, data) + + app.instance.save_config() + return self._ok() + + def post(self, identifier, path_param=None): + """ + Add a new provider or run an operation on a specific provider type. + + Without the identifier an arary of provider objects is expected to save the provider order list. + With a subType param, operations can be executed, like the newznab/getCategories. Which will return + a list of available newznab categories. + :param identifier: Provider subType. For example: torznab, newznab, torrentrss. + """ + if not identifier: + data = json_decode(self.request.body) + sorted_providers = data.get('providers') + if sorted_providers is None: + return self._bad_request('You should provide an array of providers') + + self._save_provider_order(sorted_providers) + return self._created(data={'providers': providers}) + + if identifier: + data = json_decode(self.request.body) + if identifier in ('newznab', 'torznab', 'torrentrss', 'prowlarr'): + if not path_param: + # No path_param passed. Asume we're trying to add a provider. + if identifier == 'newznab': + return self._add_newznab_provider(data) + if identifier == 'torrentrss': + return self._add_torrentrss_provider(data) + if identifier == 'torznab': + return self._add_torznab_provider(data) + if identifier == 'prowlarr': + return self._add_prowlarr_provider(data) + + if path_param == 'operation': + if data.get('type') == 'GETCATEGORIES': + return self._get_categories(identifier, data) + + if identifier == 'prowlarr': + if path_param == 'operation': + if data.get('type') == 'TEST': + # Test prowlarr connectivity + prowlarr = ProwlarrManager(data.get('url'), data.get('apikey')) + if prowlarr.test_connectivity(): + return self._ok('Connection successfull') + else: + return self._not_found('Çould not connect to prowlarr') + if data.get('type') == 'GETINDEXERS': + prowlarr = ProwlarrManager(data.get('url'), data.get('apikey')) + indexers = prowlarr.get_indexers() + if indexers: + return self._ok(indexers) + return self._internal_server_error() + + return self._bad_request('Could not locate provider by id') + + def delete(self, identifier, path_param=None): + """ + Delete a provider. + + You cannot delete "default" providers. The provider needs to be able to be part of + a certain subType. For example: 'newznab', 'torznab' or 'torrentrss'. + + :param identifier: The provider subtype. + :param path_param: Provider id. + """ + if identifier not in ('newznab', 'torznab', 'torrentrss'): + return self._bad_request('You should provide an identifier. For example: newznab, torznab or torrentrss.') + + if not path_param: + return self._bad_request('Missing provider id') + + if identifier == 'newznab': + remove_provider = [prov for prov in app.newznabProviderList if prov.get_id() == path_param and not prov.default] + if not remove_provider: + return self._not_found('Provider id not found') + + # delete it from the list + app.newznabProviderList.remove(remove_provider[0]) + + if path_param in app.PROVIDER_ORDER: + app.PROVIDER_ORDER.remove(path_param) + app.instance.save_config() + + return self._no_content() + + if identifier == 'torrentrss': + remove_provider = [prov for prov in app.torrentRssProviderList if prov.get_id() == path_param] + if not remove_provider: + return self._not_found('Provider id not found') + + # delete it from the list + app.torrentRssProviderList.remove(remove_provider[0]) + + if path_param in app.PROVIDER_ORDER: + app.PROVIDER_ORDER.remove(path_param) + app.instance.save_config() + + return self._no_content() + + if identifier == 'torznab': + remove_provider = [prov for prov in app.torznab_providers_list if prov.get_id() == path_param] + if not remove_provider: + return self._not_found('Provider id not found') + + # delete it from the list + app.torznab_providers_list.remove(remove_provider[0]) + + if path_param in app.PROVIDER_ORDER: + app.PROVIDER_ORDER.remove(path_param) + app.instance.save_config() + + return self._no_content() + + def _get_categories(self, sub_type, data): + """ + Retrieve a list of possible categories with category ids. + + Using the default url/api?cat + http://yournewznaburl.com/api?t=caps&apikey=yourapikey + """ + if not data.get('name'): + return self._bad_request('No provider name provided') + + if not data.get('url'): + return self._bad_request('No provider url provided') + + if not data.get('apikey'): + return self._bad_request('No provider api key provided') + + if sub_type == 'newznab': + provider = NewznabProvider(data.get('name'), data.get('url'), data.get('apikey')) + elif sub_type == 'torznab': + provider = TorznabProvider(data.get('name'), data.get('url'), data.get('apikey')) + + capabilities = provider.get_capabilities() + return self._created(data={'result': capabilities._asdict()}) + + def _add_newznab_provider(self, data): + if not data.get('name'): + return self._bad_request('No provider name provided') + + if not data.get('url'): + return self._bad_request('No provider url provided') + + if not data.get('apikey'): + return self._bad_request('No provider api key provided') + + new_provider = NewznabProvider(data.get('name'), data.get('url'), api_key=data.get('apikey')) + new_provider = self.provider_name_auto_numbered(new_provider) + + app.newznabProviderList.append(new_provider) + NewznabProvider.save_newznab_providers() + app.instance.save_config() + return self._created(data={'result': new_provider.to_json()}) + + def _add_torznab_provider(self, data): + if not data.get('name'): + return self._bad_request('No provider name provided') + + if not data.get('url'): + return self._bad_request('No provider url provided') + + if not data.get('apikey'): + return self._bad_request('No provider api key provided') + + new_provider = TorznabProvider(data.get('name'), data.get('url'), api_key=data.get('apikey')) + new_provider = self.provider_name_auto_numbered(new_provider) + + app.torznab_providers_list.append(new_provider) + app.TORZNAB_PROVIDERS = [provider.name for provider in app.torznab_providers_list] + app.instance.save_config() + return self._created(data={'result': new_provider.to_json()}) + + def _add_prowlarr_provider(self, data): + if not data.get('subType'): + return self._bad_request("Missing subtype ('newznab' or 'torznab')") + + if data.get('subType') not in ('newznab', 'torznab'): + return self._bad_request('Subtype needs to be newznab or torznab') + + if not data.get('id'): + return self._bad_request('No provider id provided') + + if not data.get('name'): + return self._bad_request('No provider name provided') + + if not app.PROWLARR_URL or not app.PROWLARR_APIKEY: + return self._bad_request('Missing prowlarr url and/or api. Cannot build the url.') + + provider_url = f"{urljoin(app.PROWLARR_URL, str(data.get('id')))}/api" + + provider_class = None + if data.get('subType') == 'torznab': + provider_class = TorznabProvider + else: + provider_class = NewznabProvider + + new_provider = provider_class( + data.get('name'), provider_url, api_key=app.PROWLARR_APIKEY, manager=GenericProvider.PROWLARR + ) + new_provider = self.provider_name_auto_numbered(new_provider) + + if data.get('subType') == 'torznab': + app.torznab_providers_list.append(new_provider) + app.TORZNAB_PROVIDERS = [provider.name for provider in app.torznab_providers_list] + else: + app.newznabProviderList.append(new_provider) + NewznabProvider.save_newznab_providers() + + app.instance.save_config() + return self._created(data={'result': new_provider.to_json()}) + + def _add_torrentrss_provider(self, data): + if not data.get('name'): + return self._bad_request('No provider name provided') + + if not data.get('url'): + return self._bad_request('No provider url provided') + + new_provider = TorrentRssProvider(data.get('name'), data.get('url'), data.get('cookies', ''), data.get('titleTag', 'title')) + new_provider = self.provider_name_auto_numbered(new_provider) + + app.torrentRssProviderList.append(new_provider) + # Update the torrentrss provider list + app.TORRENTRSS_PROVIDERS = [provider.name for provider in app.torrentRssProviderList] + + app.instance.save_config() + return self._created(data={'result': new_provider.to_json()}) + + def _save_provider_order(self, sorted_providers): + """Save the provider order.""" + def ordered_providers(names, providers): + reminder = {} + for name in names: + for provider in providers: + reminder[provider.get_id()] = provider + if provider.get_id() == name: + yield provider + else: + rest = set(reminder).difference(set(names)) + for provider in rest: + yield reminder[provider] + + ordered_names = OrderedDict() + for sorted_provider in sorted_providers: + ordered_names[sorted_provider['id']] = sorted_provider['config']['enabled'] + + providers_enabled = [] + providers_disabled = [] + all_providers = providers.sorted_provider_list() + + for provider in ordered_providers(ordered_names, all_providers): + name = provider.get_id() + if ordered_names.get(name): + provider.enabled = True + providers_enabled.append(name) + else: + provider.enabled = False + providers_disabled.append(name) + + new_settings = [prov for prov in sorted_providers if prov.get('id') == name] + if not new_settings: + continue + + self._set_common_settings(provider, new_settings[0]['config']) + if isinstance(provider, TorrentProvider): + self._set_torrent_settings(provider, new_settings[0]['config']) + + app.PROVIDER_ORDER = providers_enabled + providers_disabled + app.instance.save_config() + + @staticmethod + def _set_common_settings(provider, config): + if hasattr(provider, 'username'): + try: + provider.username = config['username'] + except (AttributeError, KeyError): + provider.username = None + + if hasattr(provider, 'api_key'): + try: + provider.api_key = config['apikey'] + except (AttributeError, KeyError): + pass + + if hasattr(provider, 'search_mode'): + try: + provider.search_mode = config['search']['mode'] + except (AttributeError, KeyError): + provider.search_mode = 'eponly' + + if hasattr(provider, 'search_fallback'): + try: + provider.search_fallback = config['search']['fallback'] + except (AttributeError, KeyError): + provider.search_fallback = 0 + + if hasattr(provider, 'enable_daily'): + try: + provider.enable_daily = config['search']['daily']['enabled'] + except (AttributeError, KeyError): + provider.enable_daily = 0 + + if hasattr(provider, 'enable_backlog'): + try: + provider.enable_backlog = config['search']['backlog']['enabled'] + except (AttributeError, KeyError): + provider.enable_backlog = 0 + + if hasattr(provider, 'enable_manualsearch'): + try: + provider.enable_manualsearch = config['search']['manual']['enabled'] + except (AttributeError, KeyError): + provider.enable_manualsearch = 0 + + if hasattr(provider, 'enable_search_delay'): + try: + provider.enable_search_delay = config['search']['delay']['enabled'] + except (AttributeError, KeyError): + provider.enable_search_delay = 0 + + if hasattr(provider, 'search_delay'): + try: + search_delay = float(config['search']['delay']['duration']) + provider.search_delay = (search_delay, 30)[search_delay < 30] + except (AttributeError, KeyError, ValueError): + provider.search_delay = 480 + + # Newznab specific + if hasattr(provider, 'cat_ids'): + try: + provider.cat_ids = config['catIds'] + except (AttributeError, KeyError): + provider.cat_ids = [] + + @staticmethod + def _set_torrent_settings(provider, config): + + if hasattr(provider, 'custom_url'): + try: + provider.custom_url = config['customUrl'] + except (AttributeError, KeyError): + provider.custom_url = None + + if hasattr(provider, 'minseed'): + try: + provider.minseed = config['minseed'] + except (AttributeError, KeyError, ValueError): + provider.minseed = 1 + + if hasattr(provider, 'minleech'): + try: + provider.minleech = config['minleech'] + except (AttributeError, KeyError, ValueError): + provider.minleech = 0 + + if hasattr(provider, 'ratio'): + try: + ratio = config['ratio'] + provider.ratio = (ratio, -1)[ratio < 0] + except (AttributeError, KeyError, ValueError, TypeError): + provider.ratio = -1 + + if hasattr(provider, 'digest'): + try: + provider.digest = config['digest'] + except (AttributeError, KeyError): + provider.digest = None + + if hasattr(provider, 'hash'): + try: + provider.hash = config['hash'] + except (AttributeError, KeyError): + provider.hash = None + + if hasattr(provider, 'passkey'): + try: + provider.passkey = config['passkey'] + except (AttributeError, KeyError): + provider.passkey = None + + if hasattr(provider, 'pin'): + try: + provider.pin = config['pin'] + except (AttributeError, KeyError): + provider.pin = None + + if hasattr(provider, 'confirmed'): + try: + provider.confirmed = config['confirmed'] + except (AttributeError, KeyError): + provider.confirmed = 0 + + if hasattr(provider, 'ranked'): + try: + provider.ranked = config['ranked'] + except (AttributeError, KeyError): + provider.ranked = 0 + + if hasattr(provider, 'sorting'): + try: + provider.sorting = config['sorting'] + except (AttributeError, KeyError): + provider.sorting = 'seeders' + + if hasattr(provider, 'freeleech'): + try: + provider.freeleech = config['freeleech'] + except (AttributeError, KeyError): + provider.freeleech = 0 + + if provider.enable_cookies: + try: + provider.cookies = config['cookies'] + except (AttributeError, KeyError): + # I don't want to configure a default value here, as it can also + # be configured intially as a custom rss torrent provider + pass + + if hasattr(provider, 'title_tag'): + try: + provider.title_tag = config['titleTag'] + except (AttributeError, KeyError): + provider.title_tag = 'title' + + @staticmethod + def provider_name_auto_numbered(new_provider): + """ + Check if the provider_id (created from the provider name) is already used. + + If so create a name with autonumbering added to it. + + For example. provider_id is used. Create provider_id_1. If provider_id_1 is also used. + Create provider_id_2. + + :param new_provider: Provider object. + :return: Unique provider id. + """ + unique_number = 1 + + while new_provider.get_id() in [x.get_id() for x in providers.sorted_provider_list()]: + provider_ends_with_number = re.match(r'(.+_)(\d+)$', new_provider.name) + if not provider_ends_with_number: + new_provider.name = f'{new_provider.name}_{unique_number}' + else: + # The id is already numbered, let's bumb the number. + unique_number += 1 + new_provider.name = f'{provider_ends_with_number.group(1)}{unique_number}' - return self._paginate(data_generator=data_generator) + return new_provider diff --git a/medusa/server/web/config/providers.py b/medusa/server/web/config/providers.py index 0fb311bc11..8daec4773c 100644 --- a/medusa/server/web/config/providers.py +++ b/medusa/server/web/config/providers.py @@ -4,19 +4,6 @@ from __future__ import unicode_literals -import json -import os -from builtins import str -from builtins import zip -from collections import OrderedDict - -from medusa import app, config, providers, ui -from medusa.helper.common import try_int -from medusa.helpers.utils import split_and_strip -from medusa.providers.nzb.newznab import NewznabProvider -from medusa.providers.torrent.rss.rsstorrent import TorrentRssProvider -from medusa.providers.torrent.torrent_provider import TorrentProvider -from medusa.providers.torrent.torznab.torznab import TorznabProvider from medusa.server.web.config.handler import Config from medusa.server.web.core import PageTemplate @@ -33,520 +20,10 @@ def __init__(self, *args, **kwargs): super(ConfigProviders, self).__init__(*args, **kwargs) def index(self): - """Render the Provider configuration page.""" - t = PageTemplate(rh=self, filename='config_providers.mako') - - return t.render(controller='config', action='providers') - - @staticmethod - def canAddTorrentRssProvider(name, url, cookies, title_tag): - """See if a Torrent provider can be added.""" - if not name: - return json.dumps({'error': 'Invalid name specified'}) - - found_chars = [c for c in INVALID_CHARS if c in name] - if found_chars: - return json.dumps({'error': 'Invalid character in provider name: {0}'.format(', '.join(found_chars))}) - - provider_dict = dict(list(zip([x.get_id() for x in app.torrentRssProviderList], - app.torrentRssProviderList))) - temp_provider = TorrentRssProvider(name, url, cookies, title_tag) - - if temp_provider.get_id() in provider_dict: - return json.dumps({'error': 'Provider name already exists as {name}'.format( - name=provider_dict[temp_provider.get_id()].name)}) - else: - validate = temp_provider.validate_rss() - if validate['result']: - return json.dumps({'success': temp_provider.get_id()}) - else: - return json.dumps({'error': validate['message']}) - - @staticmethod - def canAddProvider(kind, name, url, api_key=None): - """See if a Newznab or Torznab provider can be added.""" - if not name: - return json.dumps({'error': 'No Provider Name specified'}) - - found_chars = [c for c in INVALID_CHARS if c in name] - if found_chars: - return json.dumps({'error': 'Invalid character in provider name: {0}'.format(', '.join(found_chars))}) - - if kind == 'newznab': - provider_dict = dict(list(zip([x.get_id() for x in app.newznabProviderList], - app.newznabProviderList))) - temp_provider = NewznabProvider(name, url) - elif kind == 'torznab': - provider_dict = dict(list(zip([x.get_id() for x in app.torznab_providers_list], - app.torznab_providers_list))) - temp_provider = TorznabProvider(name, url, api_key) - - if temp_provider.get_id() in provider_dict: - return json.dumps({'error': 'Provider name already exists as {name}'.format( - name=provider_dict[temp_provider.get_id()].name)}) - else: - return json.dumps({'success': temp_provider.get_id()}) - - @staticmethod - def getZnabCategories(kind, name, url, api_key): """ - Retrieve a list of possible categories with category ids. + Render the providers configuration page. - Using the default url/api?cat - http://yournewznaburl.com/api?t=caps&apikey=yourapikey + [Converted to VueRouter] """ - error = '' - - if not name: - error += '\nNo Provider Name specified' - if not url: - error += '\nNo Provider Url specified' - if not api_key: - error += '\nNo Provider Api key specified' - - if error != '': - return json.dumps({'success': False, 'message': error}) - - if kind == 'newznab': - temp_provider = NewznabProvider(name, url, api_key) - elif kind == 'torznab': - temp_provider = TorznabProvider(name, url, api_key) - - capabilities = temp_provider.get_capabilities() - - return json.dumps(capabilities._asdict()) - - @staticmethod - def saveNewznabProvider(name, url, api_key=''): - """Save a Newznab Provider.""" - if not name or not url: - return '0' - - provider_dict = dict(list(zip([x.name for x in app.newznabProviderList], app.newznabProviderList))) - - if name in provider_dict: - if not provider_dict[name].default: - provider_dict[name].name = name - provider_dict[name].url = config.clean_url(url) - - provider_dict[name].api_key = api_key - # a 0 in the api key spot indicates that no api key is needed - if api_key == '0': - provider_dict[name].needs_auth = False - else: - provider_dict[name].needs_auth = True - - return '|'.join([provider_dict[name].get_id(), provider_dict[name].config_string()]) - - else: - new_provider = NewznabProvider(name, url, api_key=api_key) - app.newznabProviderList.append(new_provider) - return '|'.join([new_provider.get_id(), new_provider.config_string()]) - - @staticmethod - def deleteNewznabProvider(nnid): - """Delete a Newznab Provider.""" - provider_dict = dict(list(zip([x.get_id() for x in app.newznabProviderList], app.newznabProviderList))) - - if nnid not in provider_dict or provider_dict[nnid].default: - return '0' - - # delete it from the list - app.newznabProviderList.remove(provider_dict[nnid]) - - if nnid in app.PROVIDER_ORDER: - app.PROVIDER_ORDER.remove(nnid) - - return '1' - - @staticmethod - def saveTorrentRssProvider(name, url, cookies, title_tag): - """Save a Torrent Provider.""" - if not name or not url: - return '0' - - provider_dict = dict(list(zip([x.name for x in app.torrentRssProviderList], app.torrentRssProviderList))) - - if name in provider_dict: - provider_dict[name].name = name - provider_dict[name].url = config.clean_url(url) - provider_dict[name].cookies = cookies - provider_dict[name].title_tag = title_tag - - return '|'.join([provider_dict[name].get_id(), provider_dict[name].config_string()]) - - else: - new_provider = TorrentRssProvider(name, url, cookies, title_tag) - app.torrentRssProviderList.append(new_provider) - return '|'.join([new_provider.get_id(), new_provider.config_string()]) - - @staticmethod - def deleteTorrentRssProvider(provider_id): - """Delete a Torrent Provider.""" - provider_dict = dict( - list(zip([x.get_id() for x in app.torrentRssProviderList], app.torrentRssProviderList))) - - if provider_id not in provider_dict: - return '0' - - # delete it from the list - app.torrentRssProviderList.remove(provider_dict[provider_id]) - - if provider_id in app.PROVIDER_ORDER: - app.PROVIDER_ORDER.remove(provider_id) - - return '1' - - @staticmethod - def _save_newznab_providers(providers_settings): - providers = [] - settings = providers_settings.split('!!!') - providers_dict = dict( - list(zip([x.get_id() for x in app.newznabProviderList], app.newznabProviderList))) - - for provider_settings in settings: - if not provider_settings: - continue - - name, url, api_key, categories = provider_settings.split('|') - url = config.clean_url(url) - categories = split_and_strip(categories) - - new_provider = NewznabProvider(name, url=url, api_key=api_key, cat_ids=categories) - provider_id = new_provider.get_id() - - # if it already exists then update it - if provider_id in providers_dict: - providers_dict[provider_id].name = name - providers_dict[provider_id].url = url - providers_dict[provider_id].api_key = api_key - providers_dict[provider_id].cat_ids = categories - # a 0 in the key spot indicates that no key is needed - if api_key == '0': - providers_dict[provider_id].needs_auth = False - else: - providers_dict[provider_id].needs_auth = True - else: - app.newznabProviderList.append(new_provider) - - providers.append(provider_id) - - # delete anything that is missing - for provider in app.newznabProviderList: - if provider.get_id() not in providers: - app.newznabProviderList.remove(provider) - - # Update the custom newznab provider list - NewznabProvider.save_newznab_providers() - - @staticmethod - def _save_rsstorrent_providers(providers_settings): - providers = [] - settings = providers_settings.split('!!!') - providers_dict = dict( - list(zip([x.get_id() for x in app.torrentRssProviderList], app.torrentRssProviderList))) - - for provider_settings in settings: - if not provider_settings: - continue - - name, url, cookies, title_tag = provider_settings.split('|') - url = config.clean_url(url) - - new_provider = TorrentRssProvider(name, url=url, cookies=cookies, title_tag=title_tag) - provider_id = new_provider.get_id() - - # if it already exists then update it - if provider_id in providers_dict: - providers_dict[provider_id].name = name - providers_dict[provider_id].url = url - providers_dict[provider_id].cookies = cookies - providers_dict[provider_id].title_tag = title_tag - else: - app.torrentRssProviderList.append(new_provider) - - providers.append(provider_id) - - # delete anything that is missing - for provider in app.torrentRssProviderList: - if provider.get_id() not in providers: - app.torrentRssProviderList.remove(provider) - - # Update the torrentrss provider list - app.TORRENTRSS_PROVIDERS = [provider.name for provider in app.torrentRssProviderList] - - @staticmethod - def _save_torznab_providers(providers_settings): - providers = [] - settings = providers_settings.split('!!!') - providers_dict = dict( - list(zip([x.get_id() for x in app.torznab_providers_list], app.torznab_providers_list))) - - for provider_settings in settings: - if not provider_settings: - continue - - name, url, api_key, categories, caps = provider_settings.split('|') - url = config.clean_url(url) - categories = split_and_strip(categories) - caps = split_and_strip(caps) - - new_provider = TorznabProvider(name, url=url, api_key=api_key, cat_ids=categories, - cap_tv_search=caps) - provider_id = new_provider.get_id() - - # if it already exists then update it - if provider_id in providers_dict: - providers_dict[provider_id].name = name - providers_dict[provider_id].url = url - providers_dict[provider_id].api_key = api_key - providers_dict[provider_id].cat_ids = categories - providers_dict[provider_id].cap_tv_search = caps - else: - app.torznab_providers_list.append(new_provider) - - providers.append(provider_id) - - # delete anything that is missing - for provider in app.torznab_providers_list: - if provider.get_id() not in providers: - app.torznab_providers_list.remove(provider) - - app.TORZNAB_PROVIDERS = [provider.name for provider in app.torznab_providers_list] - - @staticmethod - def _set_common_settings(provider, **kwargs): - - if hasattr(provider, 'username'): - try: - provider.username = str(kwargs['{id}_username'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.username = None # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'api_key'): - try: - provider.api_key = str(kwargs['{id}_api_key'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - pass - - if hasattr(provider, 'search_mode'): - try: - provider.search_mode = str(kwargs['{id}_search_mode'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.search_mode = 'eponly' # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'search_fallback'): - try: - provider.search_fallback = config.checkbox_to_value( - kwargs['{id}_search_fallback'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.search_fallback = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'enable_daily'): - try: - provider.enable_daily = config.checkbox_to_value( - kwargs['{id}_enable_daily'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.enable_daily = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'enable_backlog'): - try: - provider.enable_backlog = config.checkbox_to_value( - kwargs['{id}_enable_backlog'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.enable_backlog = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'enable_manualsearch'): - try: - provider.enable_manualsearch = config.checkbox_to_value( - kwargs['{id}_enable_manualsearch'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.enable_manualsearch = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'enable_search_delay'): - try: - provider.enable_search_delay = config.checkbox_to_value( - kwargs['{id}_enable_search_delay'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.enable_search_delay = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'search_delay'): - try: - search_delay = float(str(kwargs['{id}_search_delay'.format(id=provider.get_id())]).strip()) - provider.search_delay = (int(search_delay * 60), 30)[search_delay < 0.5] - except (AttributeError, KeyError, ValueError): - provider.search_delay = 480 # these exceptions are actually catching unselected checkboxes - - @staticmethod - def _set_torrent_settings(provider, **kwargs): - - if hasattr(provider, 'custom_url'): - try: - provider.custom_url = str(kwargs['{id}_custom_url'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.custom_url = None # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'minseed'): - try: - provider.minseed = int(str(kwargs['{id}_minseed'.format(id=provider.get_id())]).strip()) - except (AttributeError, KeyError, ValueError): - provider.minseed = 1 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'minleech'): - try: - provider.minleech = int(str(kwargs['{id}_minleech'.format(id=provider.get_id())]).strip()) - except (AttributeError, KeyError, ValueError): - provider.minleech = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'ratio'): - try: - ratio = float(str(kwargs['{id}_ratio'.format(id=provider.get_id())]).strip()) - provider.ratio = (ratio, -1)[ratio < 0] - except (AttributeError, KeyError, ValueError): - provider.ratio = '' # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'digest'): - try: - provider.digest = str(kwargs['{id}_digest'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.digest = None # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'hash'): - try: - provider.hash = str(kwargs['{id}_hash'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.hash = None # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'password'): - try: - provider.password = str(kwargs['{id}_password'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.password = None # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'passkey'): - try: - provider.passkey = str(kwargs['{id}_passkey'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.passkey = None # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'pin'): - try: - provider.pin = str(kwargs['{id}_pin'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.pin = None # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'confirmed'): - try: - provider.confirmed = config.checkbox_to_value( - kwargs['{id}_confirmed'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.confirmed = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'ranked'): - try: - provider.ranked = config.checkbox_to_value( - kwargs['{id}_ranked'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.ranked = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'engrelease'): - try: - provider.engrelease = config.checkbox_to_value( - kwargs['{id}_engrelease'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.engrelease = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'onlyspasearch'): - try: - provider.onlyspasearch = config.checkbox_to_value( - kwargs['{id}_onlyspasearch'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.onlyspasearch = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'sorting'): - try: - provider.sorting = str(kwargs['{id}_sorting'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - provider.sorting = 'seeders' # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'freeleech'): - try: - provider.freeleech = config.checkbox_to_value( - kwargs['{id}_freeleech'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.freeleech = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'cat'): - try: - provider.cat = int(str(kwargs['{id}_cat'.format(id=provider.get_id())]).strip()) - except (AttributeError, KeyError): - provider.cat = 0 # these exceptions are actually catching unselected checkboxes - - if hasattr(provider, 'subtitle'): - try: - provider.subtitle = config.checkbox_to_value( - kwargs['{id}_subtitle'.format(id=provider.get_id())]) - except (AttributeError, KeyError): - provider.subtitle = 0 # these exceptions are actually catching unselected checkboxes - - if provider.enable_cookies: - try: - provider.cookies = str(kwargs['{id}_cookies'.format(id=provider.get_id())]).strip() - except (AttributeError, KeyError): - # I don't want to configure a default value here, as it can also - # be configured intially as a custom rss torrent provider - pass - - def saveProviders(self, provider_order, **kwargs): - """Save Provider related settings.""" - newznab_string = kwargs.pop('newznab_string', '') - torrentrss_string = kwargs.pop('torrentrss_string', '') - torznab_string = kwargs.pop('torznab_string', '') - - self._save_newznab_providers(newznab_string) - self._save_rsstorrent_providers(torrentrss_string) - self._save_torznab_providers(torznab_string) - - def ordered_providers(names, providers): - reminder = {} - for name in names: - for provider in providers: - reminder[provider.get_id()] = provider - if provider.get_id() == name: - yield provider - else: - rest = set(reminder).difference(set(names)) - for provider in rest: - yield reminder[provider] - - ordered_names = OrderedDict() - provider_order_list = provider_order.split() - for provider_setting in provider_order_list: - cur_provider, cur_setting = provider_setting.split(':') - enabled = try_int(cur_setting) - ordered_names[cur_provider] = enabled - - providers_enabled = [] - providers_disabled = [] - all_providers = providers.sorted_provider_list() - - for provider in ordered_providers(ordered_names, all_providers): - name = provider.get_id() - if ordered_names.get(name): - provider.enabled = True - providers_enabled.append(name) - else: - provider.enabled = False - providers_disabled.append(name) - - self._set_common_settings(provider, **kwargs) - if isinstance(provider, TorrentProvider): - self._set_torrent_settings(provider, **kwargs) - - app.PROVIDER_ORDER = providers_enabled + providers_disabled - - app.instance.save_config() - - ui.notifications.message('Configuration Saved', os.path.join(app.CONFIG_FILE)) - - return self.redirect('/config/providers/') + t = PageTemplate(rh=self, filename='index.mako') + return t.render() diff --git a/tests/apiv2/test_config.py b/tests/apiv2/test_config.py index 6dd70b5d21..868fce5a34 100644 --- a/tests/apiv2/test_config.py +++ b/tests/apiv2/test_config.py @@ -50,6 +50,7 @@ def config_main(monkeypatch, app_config): section_data['subtitles']['enabled'] = bool(app.USE_SUBTITLES) section_data['recentShows'] = app.SHOWS_RECENT section_data['addTitleWithYear'] = bool(app.ADD_TITLE_WITH_YEAR) + section_data['brokenProviders'] = [provider for provider in app.BROKEN_PROVIDERS if provider] # Pick a random series to show as background. # TODO: Recreate this in Vue when the webapp has a reliable list of shows to choose from. @@ -155,6 +156,12 @@ def config_main(monkeypatch, app_config): section_data['backlogOverview'] = {} section_data['backlogOverview']['status'] = app.BACKLOG_STATUS section_data['backlogOverview']['period'] = app.BACKLOG_PERIOD + + section_data['providers'] = {} + section_data['providers']['prowlarr'] = {} + section_data['providers']['prowlarr']['url'] = app.PROWLARR_URL + section_data['providers']['prowlarr']['apikey'] = app.PROWLARR_APIKEY + return section_data diff --git a/themes-default/slim/.eslintrc.js b/themes-default/slim/.eslintrc.js index d40b8311d8..971427a59a 100644 --- a/themes-default/slim/.eslintrc.js +++ b/themes-default/slim/.eslintrc.js @@ -87,7 +87,13 @@ module.exports = { 'error', 'kebab-case', ], - 'vue/html-self-closing': 'error', + 'vue/html-self-closing': ['error', { + html: { + void: 'never', + normal: 'always', + component: 'always', + }, + }], 'vue/html-closing-bracket-spacing': [ 'error', { diff --git a/themes-default/slim/src/components/config-providers.vue b/themes-default/slim/src/components/config-providers.vue new file mode 100644 index 0000000000..1375185c63 --- /dev/null +++ b/themes-default/slim/src/components/config-providers.vue @@ -0,0 +1,262 @@ + + + + diff --git a/themes-default/slim/src/components/helpers/config-custom-newznab.vue b/themes-default/slim/src/components/helpers/config-custom-newznab.vue new file mode 100644 index 0000000000..a0a5072e4e --- /dev/null +++ b/themes-default/slim/src/components/helpers/config-custom-newznab.vue @@ -0,0 +1,259 @@ + + + + + diff --git a/themes-default/slim/src/components/helpers/config-custom-prowlarr.vue b/themes-default/slim/src/components/helpers/config-custom-prowlarr.vue new file mode 100644 index 0000000000..34b7577863 --- /dev/null +++ b/themes-default/slim/src/components/helpers/config-custom-prowlarr.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/themes-default/slim/src/components/helpers/config-custom-torrentrss.vue b/themes-default/slim/src/components/helpers/config-custom-torrentrss.vue new file mode 100644 index 0000000000..149c78b514 --- /dev/null +++ b/themes-default/slim/src/components/helpers/config-custom-torrentrss.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/themes-default/slim/src/components/helpers/config-custom-torznab.vue b/themes-default/slim/src/components/helpers/config-custom-torznab.vue new file mode 100644 index 0000000000..917d52d5a3 --- /dev/null +++ b/themes-default/slim/src/components/helpers/config-custom-torznab.vue @@ -0,0 +1,259 @@ + + + + + diff --git a/themes-default/slim/src/components/helpers/config-provider-nzb.vue b/themes-default/slim/src/components/helpers/config-provider-nzb.vue new file mode 100644 index 0000000000..75659c3a99 --- /dev/null +++ b/themes-default/slim/src/components/helpers/config-provider-nzb.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/themes-default/slim/src/components/helpers/config-provider-torrent.vue b/themes-default/slim/src/components/helpers/config-provider-torrent.vue new file mode 100644 index 0000000000..0e9fa447d2 --- /dev/null +++ b/themes-default/slim/src/components/helpers/config-provider-torrent.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/themes-default/slim/src/components/helpers/config-textbox.vue b/themes-default/slim/src/components/helpers/config-textbox.vue index 695c7fc1ac..1938e43d43 100644 --- a/themes-default/slim/src/components/helpers/config-textbox.vue +++ b/themes-default/slim/src/components/helpers/config-textbox.vue @@ -11,6 +11,7 @@
Make sure to start your URI with http://, https://, scgi://, etc..
+

{{ explanation }}

diff --git a/themes-default/slim/src/components/helpers/index.js b/themes-default/slim/src/components/helpers/index.js index 7a47db59cf..a97f1b84c9 100644 --- a/themes-default/slim/src/components/helpers/index.js +++ b/themes-default/slim/src/components/helpers/index.js @@ -5,6 +5,12 @@ export { default as ConfigTemplate } from './config-template.vue'; export { default as ConfigTextbox } from './config-textbox.vue'; export { default as ConfigTextboxNumber } from './config-textbox-number.vue'; export { default as ConfigToggleSlider } from './config-toggle-slider.vue'; +export { default as ConfigCustomNewznab } from './config-custom-newznab.vue'; +export { default as ConfigCustomProwlarr } from './config-custom-prowlarr.vue'; +export { default as ConfigCustomTorrentrss } from './config-custom-torrentrss.vue'; +export { default as ConfigCustomTorznab } from './config-custom-torznab.vue'; +export { default as ConfigProviderNzb } from './config-provider-nzb.vue'; +export { default as ConfigProviderTorrent } from './config-provider-torrent.vue'; export { default as CustomLogs } from './custom-logs.vue'; export { default as FileBrowser } from './file-browser.vue'; export { default as LanguageSelect } from './language-select.vue'; diff --git a/themes-default/slim/src/components/history-compact.vue b/themes-default/slim/src/components/history-compact.vue index f5fd826c55..80d2ca5029 100644 --- a/themes-default/slim/src/components/history-compact.vue +++ b/themes-default/slim/src/components/history-compact.vue @@ -38,7 +38,7 @@ - {{ props.row.episodeTitle }} + {{ props.row.episodeTitle }} diff --git a/themes-default/slim/src/components/index.js b/themes-default/slim/src/components/index.js index e98ad0dde6..6d9d1f0d05 100644 --- a/themes-default/slim/src/components/index.js +++ b/themes-default/slim/src/components/index.js @@ -10,6 +10,7 @@ export { default as Config } from './config.vue'; export { default as ConfigAnime } from './config-anime.vue'; export { default as ConfigGeneral } from './config-general.vue'; export { default as ConfigPostProcessing } from './config-post-processing.vue'; +export { default as ConfigProviders } from './config-providers.vue'; export { default as ConfigNotifications } from './config-notifications.vue'; export { default as ConfigSearch } from './config-search.vue'; export { default as DisplayShow } from './display-show.vue'; diff --git a/themes-default/slim/src/router/routes.js b/themes-default/slim/src/router/routes.js index 55259eb6cd..aa333e0621 100644 --- a/themes-default/slim/src/router/routes.js +++ b/themes-default/slim/src/router/routes.js @@ -193,8 +193,10 @@ const configRoutes = [ title: 'Config - Providers', header: 'Search Providers', topMenu: 'config', - subMenu: configSubMenu - } + subMenu: configSubMenu, + converted: true + }, + component: () => import('../components/config-providers.vue') }, { path: '/config/search', diff --git a/themes-default/slim/src/store/modules/config/general.js b/themes-default/slim/src/store/modules/config/general.js index b7f1410245..af2e51d31c 100644 --- a/themes-default/slim/src/store/modules/config/general.js +++ b/themes-default/slim/src/store/modules/config/general.js @@ -12,6 +12,7 @@ const state = { subtitles: { enabled: null }, + brokenProviders: [], logs: { debug: null, dbDebug: null, @@ -106,7 +107,13 @@ const state = { period: null }, // Remove themeName when we get fully rid of MEDUSA.config. - themeName: null + themeName: null, + providers: { + prowlarr: { + url: null, + apikey: null + } + } }; const mutations = { diff --git a/themes-default/slim/src/store/modules/provider.js b/themes-default/slim/src/store/modules/provider.js index 281c6e8592..e0e38c09df 100644 --- a/themes-default/slim/src/store/modules/provider.js +++ b/themes-default/slim/src/store/modules/provider.js @@ -1,35 +1,56 @@ import Vue from 'vue'; import { api } from '../../api'; -import { ADD_PROVIDERS, ADD_PROVIDER_CACHE, ADD_SEARCH_RESULTS } from '../mutation-types'; +import { + ADD_PROVIDER, + ADD_PROVIDERS, + ADD_PROVIDER_CACHE, + ADD_SEARCH_RESULTS, + REMOVE_PROVIDER +} from '../mutation-types'; const state = { - providers: {} + providers: [] }; const mutations = { - [ADD_PROVIDERS](state, providers) { - for (const provider of providers) { - Vue.set(state.providers, provider.id, { ...state.providers[provider.id], ...provider }); + [ADD_PROVIDER](state, provider) { + if (!state.providers.find(p => p.id === provider.id)) { + state.providers.push(provider); } }, + [ADD_PROVIDERS](state, providers) { + providers.forEach(provider => { + const existingProvider = state.providers.find(p => p.id === provider.id); + if (existingProvider) { + Vue.set(state.providers, state.providers.indexOf(existingProvider), provider); + } else { + state.providers.push(provider); + } + }); + }, + [REMOVE_PROVIDER](state, providerId) { + state.providers = state.providers.filter(prov => prov.id !== providerId); + }, [ADD_PROVIDER_CACHE](state, { providerId, cache }) { // Check if this provider has already been added. - if (!state.providers[providerId]) { - state.providers[providerId] = { + let currentProvider = state.providers.find(prov => prov.id === providerId); + if (!currentProvider) { + currentProvider = { name: '', config: {} }; + state.providers.push(currentProvider); } - if (state.providers[providerId].cache === undefined) { - Vue.set(state.providers[providerId], 'cache', []); + if (currentProvider.cache === undefined) { + Vue.set(currentProvider, 'cache', []); } const newCache = []; for (const result of cache) { - const existingIdentifier = state.providers[providerId].cache.find(item => item.identifier === result.identifier); + const existingIdentifier = currentProvider.cache.find(item => item.identifier === result.identifier); if (existingIdentifier) { newCache.push({ ...existingIdentifier, ...result }); } else { @@ -37,7 +58,7 @@ const mutations = { } } - Vue.set(state.providers[providerId], 'cache', newCache); + Vue.set(currentProvider, 'cache', newCache); }, /** * Add search results which have been retreived through the webSocket. @@ -46,15 +67,17 @@ const mutations = { */ [ADD_SEARCH_RESULTS](state, searchResults) { for (const searchResult of searchResults) { - if (!state.providers[searchResult.provider.id]) { - state.providers[searchResult.provider.id] = { + let currentProvider = state.providers.find(prov => prov.id === searchResult.provider.id); + + if (!currentProvider) { + currentProvider = { name: '', config: {}, cache: [] }; } - const { cache } = state.providers[searchResult.provider.id]; + const { cache } = currentProvider; // Check if we don't allready have this result in our store. // In that case, we update the existing object. @@ -62,15 +85,17 @@ const mutations = { if (existingSearchResult) { // Because this is an existing result, whe're not overwriting dateAdded field. const { dateAdded, ...rest } = searchResult; - Vue.set(state.providers[searchResult.provider.id].cache, cache.indexOf(existingSearchResult), { ...existingSearchResult, ...rest }); + Vue.set(currentProvider.cache, cache.indexOf(existingSearchResult), { ...existingSearchResult, ...rest }); } else { - Vue.set(state.providers[searchResult.provider.id], 'cache', [...cache || [], ...[searchResult]]); + Vue.set(currentProvider, 'cache', [...cache || [], ...[searchResult]]); } } } }; -const getters = {}; +const getters = { + providerNameToId: _ => providerName => providerName.replace(/[^\d\w_]/gi, '_').toLowerCase().trim() // eslint-disable-line unicorn/better-regex +}; /** * An object representing request parameters for getting a show from the API. @@ -121,7 +146,12 @@ const actions = { let lastPage = false; const results = []; - const { id: providerId } = state.providers[provider]; + const currentProvider = state.providers.find(prov => prov.id === provider.id); + if (!currentProvider) { + return results; + } + + const { id: providerId } = currentProvider; page = 0; lastPage = false; @@ -161,8 +191,8 @@ const actions = { totalSearchResults: [] }; - for (const provider in state.providers) { - if (!state.providers[provider].config.enabled) { + for (const provider of state.providers) { + if (!provider.config.enabled) { continue; } diff --git a/themes-default/slim/src/store/mutation-types.js b/themes-default/slim/src/store/mutation-types.js index fdf0adb9d2..f9bd801227 100644 --- a/themes-default/slim/src/store/mutation-types.js +++ b/themes-default/slim/src/store/mutation-types.js @@ -28,12 +28,14 @@ const ADD_HISTORY = '📺 History added to store'; const ADD_HISTORY_ROW = '📺 History row added to store'; const ADD_SHOW_HISTORY = '📺 Show specific History added to store'; const ADD_SHOW_EPISODE_HISTORY = "📺 Show's episode specific History added to store"; +const ADD_PROVIDER = '⛽ Provider added to store'; const ADD_PROVIDERS = '⛽ Provider list added to store'; const ADD_PROVIDER_CACHE = '⛽ Provider cache results added to store'; const ADD_SEARCH_RESULTS = '⛽ New search results added for provider'; const ADD_QUEUE_ITEM = '🔍 Search queue item updated'; const ADD_SHOW_QUEUE_ITEM = '📺 Show queue item added to store'; const REMOVE_SHOW = '📺 Show removed from store'; +const REMOVE_PROVIDER = '⛽ Provider removed'; const UPDATE_SHOWLIST_DEFAULT = '⚙️ Anime config showlist default updated'; const ADD_SCHEDULE = '📅 Schedule information added'; @@ -68,12 +70,14 @@ export { REMOVE_SHOW_SCENE_EXCEPTION, ADD_SHOW_HISTORY, ADD_SHOW_EPISODE_HISTORY, + ADD_PROVIDER, ADD_PROVIDERS, ADD_PROVIDER_CACHE, ADD_SEARCH_RESULTS, ADD_QUEUE_ITEM, ADD_SHOW_QUEUE_ITEM, REMOVE_SHOW, + REMOVE_PROVIDER, UPDATE_SHOWLIST_DEFAULT, ADD_SCHEDULE }; diff --git a/themes-default/slim/src/style/vgt-table.scss b/themes-default/slim/src/style/vgt-table.scss index 9e0efc92f1..3fe46f79fb 100644 --- a/themes-default/slim/src/style/vgt-table.scss +++ b/themes-default/slim/src/style/vgt-table.scss @@ -116,11 +116,11 @@ color: rgb(0, 0, 0); } - span.episode-title > a{ + span.episode-title > a { color: black; text-decoration: none; } - + .skipped { background-color: rgb(190, 222, 237); } diff --git a/themes-default/slim/static/images/providers/prowlarr.png b/themes-default/slim/static/images/providers/prowlarr.png new file mode 100644 index 0000000000..867e1bfde1 Binary files /dev/null and b/themes-default/slim/static/images/providers/prowlarr.png differ diff --git a/themes-default/slim/test/specs/__snapshots__/config-textbox.spec.js.snap b/themes-default/slim/test/specs/__snapshots__/config-textbox.spec.js.snap index 900f83e439..aacb1fe9c6 100644 --- a/themes-default/slim/test/specs/__snapshots__/config-textbox.spec.js.snap +++ b/themes-default/slim/test/specs/__snapshots__/config-textbox.spec.js.snap @@ -37,6 +37,7 @@ exports[`ConfigTextbox.test.js renders 1`] = ` > +

diff --git a/themes/dark/assets/img/providers/prowlarr.png b/themes/dark/assets/img/providers/prowlarr.png new file mode 100644 index 0000000000..867e1bfde1 Binary files /dev/null and b/themes/dark/assets/img/providers/prowlarr.png differ diff --git a/themes/dark/assets/js/medusa-runtime.js b/themes/dark/assets/js/medusa-runtime.js index cba12ddf74..1fec93ee76 100644 --- a/themes/dark/assets/js/medusa-runtime.js +++ b/themes/dark/assets/js/medusa-runtime.js @@ -140,6 +140,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-providers.vue?vue&type=script&lang=js&": +/*!*******************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-providers.vue?vue&type=script&lang=js& ***! + \*******************************************************************************************************************************************************************************************************/ +/***/ ((__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_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../api.js */ \"./src/api.js\");\n/* harmony import */ var vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-nav-tabs/dist/vue-tabs.js */ \"./node_modules/vue-nav-tabs/dist/vue-tabs.js\");\n/* harmony import */ var vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var vuedraggable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vuedraggable */ \"./node_modules/vuedraggable/dist/vuedraggable.umd.js\");\n/* harmony import */ var vuedraggable__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(vuedraggable__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-providers',\n components: {\n AppLink: _helpers__WEBPACK_IMPORTED_MODULE_3__.AppLink,\n Draggable: (vuedraggable__WEBPACK_IMPORTED_MODULE_2___default()),\n ConfigCustomNewznab: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigCustomNewznab,\n ConfigCustomProwlarr: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigCustomProwlarr,\n ConfigCustomTorrentrss: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigCustomTorrentrss,\n ConfigCustomTorznab: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigCustomTorznab,\n ConfigProviderNzb: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigProviderNzb,\n ConfigProviderTorrent: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigProviderTorrent,\n ConfigTemplate: _helpers__WEBPACK_IMPORTED_MODULE_3__.ConfigTemplate,\n VueTabs: vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__.VueTabs,\n VTab: vue_nav_tabs_dist_vue_tabs_js__WEBPACK_IMPORTED_MODULE_1__.VTab\n },\n\n data() {\n return {\n saving: false,\n selectedProvider: ''\n };\n },\n\n mounted() {\n const {\n getProviders\n } = this;\n getProviders();\n },\n\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapState)({\n provider: state => state.provider,\n providers: state => state.provider.providers,\n clients: state => state.config.clients,\n general: state => state.config.general\n }),\n providerPriorities: {\n get() {\n const {\n provider\n } = this;\n return provider.providers;\n },\n\n set(providers) {\n const {\n save\n } = this;\n this.provider.providers = providers;\n save();\n }\n\n },\n\n enabledProviders() {\n const {\n clients,\n providers\n } = this;\n const data = [];\n\n for (const provider of providers) {\n if (!provider.config.enabled) {\n continue;\n }\n\n if (provider.type === 'torrent' && clients.torrents.enabled) {\n data.push({\n value: provider.id,\n text: provider.name\n });\n }\n\n if (provider.type === 'nzb' && clients.nzb.enabled) {\n data.push({\n value: provider.id,\n text: provider.name\n });\n }\n }\n\n return data;\n },\n\n currentProvider() {\n const {\n providers,\n selectedProvider\n } = this;\n return providers.find(prov => prov.id === selectedProvider);\n }\n\n },\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapActions)(['getProviders']),\n\n async save() {\n const {\n provider\n } = this;\n const {\n providers\n } = provider; // Disable the save button until we're done.\n\n this.saving = true;\n\n try {\n await _api_js__WEBPACK_IMPORTED_MODULE_0__.api.post('providers', {\n providers\n });\n this.$snotify.success('Saved providers', 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error('Error while trying to save providers', 'Error');\n } finally {\n this.saving = false;\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/config-providers.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-search.vue?vue&type=script&lang=js&": /*!****************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-search.vue?vue&type=script&lang=js& ***! @@ -217,6 +228,72 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************************************************/ +/***/ ((__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 vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _store_mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store/mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! . */ \"./src/components/helpers/index.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-multiselect */ \"./node_modules/vue-multiselect/dist/vue-multiselect.min.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue_multiselect__WEBPACK_IMPORTED_MODULE_3__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-custom-newznab',\n components: {\n ConfigTextbox: ___WEBPACK_IMPORTED_MODULE_2__.ConfigTextbox,\n ConfigTemplate: ___WEBPACK_IMPORTED_MODULE_2__.ConfigTemplate,\n Multiselect: (vue_multiselect__WEBPACK_IMPORTED_MODULE_3___default())\n },\n\n data() {\n return {\n saving: false,\n selectedProvider: '#add',\n name: '',\n url: '',\n apikey: '',\n availableCategories: []\n };\n },\n\n methods: {\n async save() {\n const {\n provider\n } = this; // Disable the save button until we're done.\n\n this.saving = true;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.patch(`providers/${provider.id}`, provider.config);\n this.$snotify.success(`Saved provider ${provider.name}`, 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to save provider ${provider.name}`, 'Error');\n } finally {\n this.saving = false;\n }\n },\n\n async getCategories() {\n const {\n currentProvider\n } = this;\n\n if (!currentProvider.name || !currentProvider.url || !currentProvider.config.apikey) {\n return;\n }\n\n try {\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/newznab/operation', {\n type: 'GETCATEGORIES',\n apikey: currentProvider.config.apikey,\n name: currentProvider.name,\n url: currentProvider.url\n });\n\n if (response.data.result.success) {\n this.availableCategories = response.data.result.categories;\n }\n } catch (error) {\n this.$snotify.error(`Error while trying to get cats for provider ${currentProvider.name}`, 'Error');\n }\n },\n\n async addProvider() {\n const {\n name,\n apikey,\n url\n } = this;\n\n try {\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/newznab', {\n apikey,\n name,\n url\n });\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER, response.data.result);\n this.$snotify.success(`Saved provider ${name}`, 'Saved', {\n timeout: 5000\n });\n this.apikey = '';\n this.name = '';\n this.url = '';\n } catch (error) {\n this.$snotify.error(`Error while trying to get cats for provider ${name}`, 'Error');\n }\n },\n\n async removeProvider() {\n const {\n currentProvider\n } = this;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.delete(`providers/newznab/${currentProvider.id}`);\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.REMOVE_PROVIDER, currentProvider.id);\n this.$snotify.success(`Removed provider ${currentProvider.name}`, 'Removed', {\n timeout: 5000\n });\n this.selectedProvider = '#add';\n } catch (error) {\n this.$snotify.error(`Error while trying to remove provider ${currentProvider.name}`, 'Error');\n }\n }\n\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapState)({\n providers: state => state.provider.providers\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapGetters)(['providerNameToId']),\n\n newznabProviderOptions() {\n const {\n providers\n } = this;\n return providers.filter(prov => prov.subType === 'newznab').map(prov => {\n return {\n value: prov.id,\n text: prov.name\n };\n });\n },\n\n currentProvider() {\n const {\n providers,\n selectedProvider\n } = this;\n\n if (!selectedProvider) {\n return null;\n }\n\n return providers.find(prov => prov.id === selectedProvider);\n },\n\n providerCatIds() {\n const {\n currentProvider\n } = this;\n\n if (!currentProvider || currentProvider.config.catIds.length === 0) {\n return [];\n } // Check if we have a list of objects.\n\n\n if (currentProvider.config.catIds.every(x => typeof x === 'string')) {\n return currentProvider.config.catIds.map(cat => ({\n id: cat,\n name: null\n }));\n }\n\n return currentProvider.config.catIds;\n },\n\n providerIdAvailable() {\n const {\n providerNameToId,\n providers,\n name\n } = this;\n return providers.filter(provider => providerNameToId(name) === provider.id).length === 0;\n }\n\n },\n watch: {\n currentProvider(newProvider, oldProvider) {\n if (newProvider && newProvider !== oldProvider) {\n this.getCategories();\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-newznab.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=script&lang=js&": +/*!*********************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=script&lang=js& ***! + \*********************************************************************************************************************************************************************************************************************/ +/***/ ((__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 vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _store_mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store/mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! . */ \"./src/components/helpers/index.js\");\n/* harmony import */ var vue_good_table__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-good-table */ \"./node_modules/vue-good-table/dist/vue-good-table.esm.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-custom-prowlarr',\n components: {\n ConfigTextbox: ___WEBPACK_IMPORTED_MODULE_2__.ConfigTextbox,\n VueGoodTable: vue_good_table__WEBPACK_IMPORTED_MODULE_3__.VueGoodTable\n },\n\n data() {\n return {\n saving: false,\n url: '',\n apikey: '',\n testResult: null,\n availableProviders: [],\n columns: [{\n label: 'Added',\n field: 'addedProvider',\n sortable: false\n }, {\n label: 'name',\n field: 'name'\n }, {\n label: 'protocol',\n field: 'protocol'\n }, {\n label: 'Action',\n field: 'action',\n sortable: false\n }]\n };\n },\n\n mounted() {\n const {\n getAvailableProviders\n } = this; // If we already have an url and apikey, try to get the list with prowlarr (available) providers.\n\n this.unwatchProp = this.$watch('prowlarr', prowlarr => {\n if (prowlarr.url && prowlarr.apikey) {\n this.unwatchProp();\n getAvailableProviders();\n }\n }, {\n immediate: true,\n deep: true\n });\n },\n\n methods: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapActions)({\n setConfig: 'setConfig'\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapGetters)(['providerNameToId']),\n\n async addProvider(provider) {\n const subType = provider.protocol === 'torrent' ? 'torznab' : 'newznab';\n\n try {\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/prowlarr', {\n subType,\n id: provider.id,\n name: provider.name\n });\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER, response.data.result);\n this.$snotify.success(`Saved provider ${provider.name}`, 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to get cats for provider ${provider.name}`, 'Error');\n }\n },\n\n async removeProvider(provider) {\n const subType = provider.protocol === 'torrent' ? 'torznab' : 'newznab';\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.delete(`providers/${subType}/${provider.localId}`);\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.REMOVE_PROVIDER, provider.localId);\n this.$snotify.success(`Removed provider ${provider.name}`, 'Removed', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to remove provider ${provider.name}`, 'Error');\n }\n },\n\n async testConnectivity() {\n const {\n prowlarr\n } = this;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/prowlarr/operation', {\n type: 'TEST',\n url: prowlarr.url,\n apikey: prowlarr.apikey\n });\n this.testResult = 'connected';\n } catch (error) {\n this.testResult = 'could not connect';\n this.$snotify.error('Error while trying to connect to prowlarr', 'Error');\n }\n },\n\n async saveConfig() {\n const {\n prowlarr,\n setConfig\n } = this;\n const config = {\n providers: {\n prowlarr\n }\n };\n\n try {\n await setConfig({\n section: 'main',\n config\n });\n this.$snotify.success('Saved general config', 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error('Error while trying to save general config', `Error: ${error}`);\n }\n },\n\n async getAvailableProviders() {\n const {\n prowlarr\n } = this;\n\n if (prowlarr.url && prowlarr.apikey) {\n try {\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/prowlarr/operation', {\n type: 'GETINDEXERS',\n url: prowlarr.url,\n apikey: prowlarr.apikey\n });\n this.availableProviders = response.data;\n } catch (error) {\n this.$snotify.warning('Could not retrieve available providers', 'Warning');\n }\n }\n }\n\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapState)({\n prowlarr: state => state.config.general.providers.prowlarr,\n providers: state => state.provider.providers\n }),\n\n prowlarrProviders() {\n const {\n providerNameToId,\n providers,\n availableProviders\n } = this;\n const managedProviders = providers.filter(prov => prov.manager === 'prowlarr');\n return availableProviders.map(prov => {\n prov.localProvider = Boolean(managedProviders.find(internalProvider => internalProvider.idManager === prov.name));\n prov.localId = providerNameToId(prov.name);\n return prov;\n });\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-prowlarr.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=script&lang=js&": +/*!***********************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=script&lang=js& ***! + \***********************************************************************************************************************************************************************************************************************/ +/***/ ((__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 vuex__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _store_mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store/mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! . */ \"./src/components/helpers/index.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-custom-torrentrss',\n components: {\n ConfigTextbox: ___WEBPACK_IMPORTED_MODULE_2__.ConfigTextbox,\n ConfigTemplate: ___WEBPACK_IMPORTED_MODULE_2__.ConfigTemplate\n },\n\n data() {\n return {\n saving: false,\n selectedProvider: '#add',\n name: '',\n url: '',\n cookies: '',\n searchElement: ''\n };\n },\n\n methods: {\n async save() {\n const {\n provider\n } = this; // Disable the save button until we're done.\n\n this.saving = true;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.patch(`providers/${provider.id}`, provider.config);\n this.$snotify.success(`Saved provider ${provider.name}`, 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to save provider ${provider.name}`, 'Error');\n } finally {\n this.saving = false;\n }\n },\n\n async addProvider() {\n const {\n name,\n url,\n cookies,\n searchElement\n } = this;\n\n try {\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/torrentrss', {\n name,\n url,\n cookies,\n titleTag: searchElement\n });\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER, response.data.result);\n this.$snotify.success(`Saved provider ${name}`, 'Saved', {\n timeout: 5000\n });\n this.apikey = '';\n this.name = '';\n this.url = '';\n } catch (error) {\n this.$snotify.error(`Error while trying to add provider ${name}`, 'Error');\n }\n },\n\n async removeProvider() {\n const {\n currentProvider\n } = this;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.delete(`providers/torrentrss/${currentProvider.id}`);\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.REMOVE_PROVIDER, currentProvider.id);\n this.$snotify.success(`Removed provider ${currentProvider.name}`, 'Removed', {\n timeout: 5000\n });\n this.selectedProvider = '#add';\n } catch (error) {\n this.$snotify.error(`Error while trying to remove provider ${currentProvider.name}`, 'Error');\n }\n }\n\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_3__.mapState)({\n providers: state => state.provider.providers\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_3__.mapGetters)(['providerNameToId']),\n\n torrentrssProviderOptions() {\n const {\n providers\n } = this;\n return providers.filter(prov => prov.subType === 'torrentrss').map(prov => {\n return {\n value: prov.id,\n text: prov.name\n };\n });\n },\n\n currentProvider() {\n const {\n providers,\n selectedProvider\n } = this;\n\n if (!selectedProvider) {\n return null;\n }\n\n return providers.find(prov => prov.id === selectedProvider);\n },\n\n providerIdAvailable() {\n const {\n providerNameToId,\n providers,\n name\n } = this;\n return providers.filter(provider => providerNameToId(name) === provider.id).length === 0;\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torrentrss.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=script&lang=js&": +/*!********************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=script&lang=js& ***! + \********************************************************************************************************************************************************************************************************************/ +/***/ ((__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 vuex__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vuex */ \"./node_modules/vuex/dist/vuex.esm.js\");\n/* harmony import */ var _store_mutation_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../store/mutation-types */ \"./src/store/mutation-types.js\");\n/* harmony import */ var ___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! . */ \"./src/components/helpers/index.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue-multiselect */ \"./node_modules/vue-multiselect/dist/vue-multiselect.min.js\");\n/* harmony import */ var vue_multiselect__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(vue_multiselect__WEBPACK_IMPORTED_MODULE_3__);\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-custom-torznab',\n components: {\n ConfigTextbox: ___WEBPACK_IMPORTED_MODULE_2__.ConfigTextbox,\n ConfigTemplate: ___WEBPACK_IMPORTED_MODULE_2__.ConfigTemplate,\n Multiselect: (vue_multiselect__WEBPACK_IMPORTED_MODULE_3___default())\n },\n\n data() {\n return {\n saving: false,\n selectedProvider: '#add',\n name: '',\n url: '',\n apikey: '',\n availableCategories: []\n };\n },\n\n methods: {\n async save() {\n const {\n provider\n } = this; // Disable the save button until we're done.\n\n this.saving = true;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.patch(`providers/${provider.id}`, provider.config);\n this.$snotify.success(`Saved provider ${provider.name}`, 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to save provider ${provider.name}`, 'Error');\n } finally {\n this.saving = false;\n }\n },\n\n async getCategories() {\n const {\n currentProvider\n } = this;\n\n if (!currentProvider.name || !currentProvider.url || !currentProvider.config.apikey) {\n return;\n }\n\n try {\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/torznab/operation', {\n type: 'GETCATEGORIES',\n apikey: currentProvider.config.apikey,\n name: currentProvider.name,\n url: currentProvider.url\n });\n\n if (response.data.result.success) {\n this.availableCategories = response.data.result.categories;\n }\n } catch (error) {\n this.$snotify.error(`Error while trying to get cats for provider ${currentProvider.name}`, 'Error');\n }\n },\n\n async addProvider() {\n const {\n name,\n apikey,\n url\n } = this;\n\n try {\n const response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.post('providers/torznab', {\n apikey,\n name,\n url\n });\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER, response.data.result);\n this.$snotify.success(`Saved provider ${name}`, 'Saved', {\n timeout: 5000\n });\n this.apikey = '';\n this.name = '';\n this.url = '';\n } catch (error) {\n this.$snotify.error(`Error while trying to get cats for provider ${name}`, 'Error');\n }\n },\n\n async removeProvider() {\n const {\n currentProvider\n } = this;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.delete(`providers/torznab/${currentProvider.id}`);\n this.$store.commit(_store_mutation_types__WEBPACK_IMPORTED_MODULE_1__.REMOVE_PROVIDER, currentProvider.id);\n this.$snotify.success(`Removed provider ${currentProvider.name}`, 'Removed', {\n timeout: 5000\n });\n this.selectedProvider = '#add';\n } catch (error) {\n this.$snotify.error(`Error while trying to remove provider ${currentProvider.name}`, 'Error');\n }\n }\n\n },\n computed: { ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapState)({\n providers: state => state.provider.providers\n }),\n ...(0,vuex__WEBPACK_IMPORTED_MODULE_4__.mapGetters)(['providerNameToId']),\n\n torznabProviderOptions() {\n const {\n providers\n } = this;\n return providers.filter(prov => prov.subType === 'torznab').map(prov => {\n return {\n value: prov.id,\n text: prov.name\n };\n });\n },\n\n currentProvider() {\n const {\n providers,\n selectedProvider\n } = this;\n\n if (!selectedProvider) {\n return null;\n }\n\n return providers.find(prov => prov.id === selectedProvider);\n },\n\n providerCatIds() {\n const {\n currentProvider\n } = this;\n\n if (!currentProvider || currentProvider.config.catIds.length === 0) {\n return [];\n } // Check if we have a list of objects.\n\n\n if (currentProvider.config.catIds.every(x => typeof x === 'string')) {\n return currentProvider.config.catIds.map(cat => ({\n id: cat,\n name: null\n }));\n }\n\n return currentProvider.config.catIds;\n },\n\n providerIdAvailable() {\n const {\n providerNameToId,\n providers,\n name\n } = this;\n return providers.filter(provider => providerNameToId(name) === provider.id).length === 0;\n }\n\n },\n watch: {\n currentProvider(newProvider, oldProvider) {\n if (newProvider && newProvider !== oldProvider) {\n this.getCategories();\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torznab.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-nzb.vue?vue&type=script&lang=js&": +/*!******************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-nzb.vue?vue&type=script&lang=js& ***! + \******************************************************************************************************************************************************************************************************************/ +/***/ ((__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 ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ \"./src/components/helpers/index.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-provider-nzb',\n components: {\n ConfigTextbox: ___WEBPACK_IMPORTED_MODULE_1__.ConfigTextbox,\n ConfigTextboxNumber: ___WEBPACK_IMPORTED_MODULE_1__.ConfigTextboxNumber,\n ConfigTemplate: ___WEBPACK_IMPORTED_MODULE_1__.ConfigTemplate,\n ConfigToggleSlider: ___WEBPACK_IMPORTED_MODULE_1__.ConfigToggleSlider\n },\n props: {\n provider: {\n type: Object,\n required: true\n }\n },\n\n data() {\n return {\n saving: false,\n editProvider: {}\n };\n },\n\n mounted() {\n const {\n provider\n } = this;\n this.editProvider = { ...provider\n };\n },\n\n methods: {\n async save() {\n const {\n editProvider\n } = this; // Disable the save button until we're done.\n\n this.saving = true;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.patch(`providers/${editProvider.id}`, editProvider.config);\n this.$snotify.success(`Saved provider ${editProvider.name}`, 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to save provider ${editProvider.name}`, 'Error');\n } finally {\n this.saving = false;\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-nzb.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-torrent.vue?vue&type=script&lang=js&": +/*!**********************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-torrent.vue?vue&type=script&lang=js& ***! + \**********************************************************************************************************************************************************************************************************************/ +/***/ ((__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 ___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! . */ \"./src/components/helpers/index.js\");\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-provider-torrent',\n components: {\n AppLink: ___WEBPACK_IMPORTED_MODULE_1__.AppLink,\n ConfigTextbox: ___WEBPACK_IMPORTED_MODULE_1__.ConfigTextbox,\n ConfigTextboxNumber: ___WEBPACK_IMPORTED_MODULE_1__.ConfigTextboxNumber,\n ConfigTemplate: ___WEBPACK_IMPORTED_MODULE_1__.ConfigTemplate,\n ConfigToggleSlider: ___WEBPACK_IMPORTED_MODULE_1__.ConfigToggleSlider\n },\n props: {\n provider: {\n type: Object,\n required: true\n }\n },\n\n data() {\n return {\n saving: false\n };\n },\n\n mounted() {\n const {\n provider\n } = this;\n this.editProvider = { ...provider\n };\n },\n\n methods: {\n async save() {\n const {\n editProvider\n } = this; // Disable the save button until we're done.\n\n this.saving = true;\n\n try {\n await _api__WEBPACK_IMPORTED_MODULE_0__.api.patch(`providers/${editProvider.id}`, editProvider.config);\n this.$snotify.success(`Saved provider ${editProvider.name}`, 'Saved', {\n timeout: 5000\n });\n } catch (error) {\n this.$snotify.error(`Error while trying to save provider ${editProvider.name}`, 'Error');\n } finally {\n this.saving = false;\n }\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-torrent.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-scene-exceptions.vue?vue&type=script&lang=js&": /*!**********************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-scene-exceptions.vue?vue&type=script&lang=js& ***! @@ -257,7 +334,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//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-textbox',\n props: {\n label: {\n type: String,\n required: true\n },\n id: {\n type: String,\n required: true\n },\n explanations: {\n type: Array,\n default: () => []\n },\n value: {\n type: String,\n default: ''\n },\n type: {\n type: String,\n default: 'text'\n },\n disabled: Boolean,\n\n /**\n * Overwrite the default configured class on the element.\n */\n inputClass: {\n type: String,\n default: 'form-control input-sm max-input350'\n },\n placeholder: {\n type: String,\n default: ''\n },\n validateUri: Boolean\n },\n\n data() {\n return {\n localValue: null\n };\n },\n\n mounted() {\n const {\n value\n } = this;\n this.localValue = value;\n },\n\n computed: {\n uriError() {\n const {\n localValue,\n validateUri\n } = this;\n\n if (!validateUri || !localValue) {\n return false;\n }\n\n return !localValue.match(/^[A-Za-z]{3,5}:\\/\\//);\n }\n\n },\n watch: {\n value() {\n const {\n value\n } = this;\n this.localValue = value;\n }\n\n },\n methods: {\n updateValue() {\n const {\n localValue\n } = this;\n this.$emit('input', localValue);\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-textbox.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'config-textbox',\n props: {\n label: {\n type: String,\n required: true\n },\n id: {\n type: String,\n required: true\n },\n explanations: {\n type: Array,\n default: () => []\n },\n value: {\n type: String,\n default: ''\n },\n type: {\n type: String,\n default: 'text'\n },\n disabled: Boolean,\n\n /**\n * Overwrite the default configured class on the element.\n */\n inputClass: {\n type: String,\n default: 'form-control input-sm max-input350'\n },\n placeholder: {\n type: String,\n default: ''\n },\n validateUri: Boolean\n },\n\n data() {\n return {\n localValue: null\n };\n },\n\n mounted() {\n const {\n value\n } = this;\n this.localValue = value;\n },\n\n computed: {\n uriError() {\n const {\n localValue,\n validateUri\n } = this;\n\n if (!validateUri || !localValue) {\n return false;\n }\n\n return !localValue.match(/^[A-Za-z]{3,5}:\\/\\//);\n }\n\n },\n watch: {\n value() {\n const {\n value\n } = this;\n this.localValue = value;\n }\n\n },\n methods: {\n updateValue() {\n const {\n localValue\n } = this;\n this.$emit('input', localValue);\n }\n\n }\n});\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-textbox.vue?./node_modules/babel-loader/lib/index.js??clonedRuleSet-1%5B0%5D.rules%5B0%5D!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -851,7 +928,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 */ \"AppLink\": () => (/* reexport safe */ _app_link_vue__WEBPACK_IMPORTED_MODULE_0__.default),\n/* harmony export */ \"Asset\": () => (/* reexport safe */ _asset_vue__WEBPACK_IMPORTED_MODULE_1__.default),\n/* harmony export */ \"ConfigSceneExceptions\": () => (/* reexport safe */ _config_scene_exceptions_vue__WEBPACK_IMPORTED_MODULE_2__.default),\n/* harmony export */ \"ConfigTemplate\": () => (/* reexport safe */ _config_template_vue__WEBPACK_IMPORTED_MODULE_3__.default),\n/* harmony export */ \"ConfigTextbox\": () => (/* reexport safe */ _config_textbox_vue__WEBPACK_IMPORTED_MODULE_4__.default),\n/* harmony export */ \"ConfigTextboxNumber\": () => (/* reexport safe */ _config_textbox_number_vue__WEBPACK_IMPORTED_MODULE_5__.default),\n/* harmony export */ \"ConfigToggleSlider\": () => (/* reexport safe */ _config_toggle_slider_vue__WEBPACK_IMPORTED_MODULE_6__.default),\n/* harmony export */ \"CustomLogs\": () => (/* reexport safe */ _custom_logs_vue__WEBPACK_IMPORTED_MODULE_7__.default),\n/* harmony export */ \"FileBrowser\": () => (/* reexport safe */ _file_browser_vue__WEBPACK_IMPORTED_MODULE_8__.default),\n/* harmony export */ \"LanguageSelect\": () => (/* reexport safe */ _language_select_vue__WEBPACK_IMPORTED_MODULE_9__.default),\n/* harmony export */ \"LoadProgressBar\": () => (/* reexport safe */ _load_progress_bar_vue__WEBPACK_IMPORTED_MODULE_10__.default),\n/* harmony export */ \"NamePattern\": () => (/* reexport safe */ _name_pattern_vue__WEBPACK_IMPORTED_MODULE_11__.default),\n/* harmony export */ \"PlotInfo\": () => (/* reexport safe */ _plot_info_vue__WEBPACK_IMPORTED_MODULE_12__.default),\n/* harmony export */ \"ProgressBar\": () => (/* reexport safe */ _progress_bar_vue__WEBPACK_IMPORTED_MODULE_13__.default),\n/* harmony export */ \"PosterSizeSlider\": () => (/* reexport safe */ _poster_size_slider_vue__WEBPACK_IMPORTED_MODULE_14__.default),\n/* harmony export */ \"QualityChooser\": () => (/* reexport safe */ _quality_chooser_vue__WEBPACK_IMPORTED_MODULE_15__.default),\n/* harmony export */ \"QualityPill\": () => (/* reexport safe */ _quality_pill_vue__WEBPACK_IMPORTED_MODULE_16__.default),\n/* harmony export */ \"ScrollButtons\": () => (/* reexport safe */ _scroll_buttons_vue__WEBPACK_IMPORTED_MODULE_17__.default),\n/* harmony export */ \"Search\": () => (/* reexport safe */ _search_vue__WEBPACK_IMPORTED_MODULE_18__.default),\n/* harmony export */ \"SelectList\": () => (/* reexport safe */ _select_list_vue__WEBPACK_IMPORTED_MODULE_19__.default),\n/* harmony export */ \"ShowSelector\": () => (/* reexport safe */ _show_selector_vue__WEBPACK_IMPORTED_MODULE_20__.default),\n/* harmony export */ \"SortedSelectList\": () => (/* reexport safe */ _sorted_select_list_vue__WEBPACK_IMPORTED_MODULE_21__.default),\n/* harmony export */ \"StateSwitch\": () => (/* reexport safe */ _state_switch_vue__WEBPACK_IMPORTED_MODULE_22__.default)\n/* harmony export */ });\n/* harmony import */ var _app_link_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app-link.vue */ \"./src/components/helpers/app-link.vue\");\n/* harmony import */ var _asset_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./asset.vue */ \"./src/components/helpers/asset.vue\");\n/* harmony import */ var _config_scene_exceptions_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-scene-exceptions.vue */ \"./src/components/helpers/config-scene-exceptions.vue\");\n/* harmony import */ var _config_template_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./config-template.vue */ \"./src/components/helpers/config-template.vue\");\n/* harmony import */ var _config_textbox_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config-textbox.vue */ \"./src/components/helpers/config-textbox.vue\");\n/* harmony import */ var _config_textbox_number_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config-textbox-number.vue */ \"./src/components/helpers/config-textbox-number.vue\");\n/* harmony import */ var _config_toggle_slider_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./config-toggle-slider.vue */ \"./src/components/helpers/config-toggle-slider.vue\");\n/* harmony import */ var _custom_logs_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./custom-logs.vue */ \"./src/components/helpers/custom-logs.vue\");\n/* harmony import */ var _file_browser_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./file-browser.vue */ \"./src/components/helpers/file-browser.vue\");\n/* harmony import */ var _language_select_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./language-select.vue */ \"./src/components/helpers/language-select.vue\");\n/* harmony import */ var _load_progress_bar_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./load-progress-bar.vue */ \"./src/components/helpers/load-progress-bar.vue\");\n/* harmony import */ var _name_pattern_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./name-pattern.vue */ \"./src/components/helpers/name-pattern.vue\");\n/* harmony import */ var _plot_info_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./plot-info.vue */ \"./src/components/helpers/plot-info.vue\");\n/* harmony import */ var _progress_bar_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./progress-bar.vue */ \"./src/components/helpers/progress-bar.vue\");\n/* harmony import */ var _poster_size_slider_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./poster-size-slider.vue */ \"./src/components/helpers/poster-size-slider.vue\");\n/* harmony import */ var _quality_chooser_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./quality-chooser.vue */ \"./src/components/helpers/quality-chooser.vue\");\n/* harmony import */ var _quality_pill_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./quality-pill.vue */ \"./src/components/helpers/quality-pill.vue\");\n/* harmony import */ var _scroll_buttons_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./scroll-buttons.vue */ \"./src/components/helpers/scroll-buttons.vue\");\n/* harmony import */ var _search_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./search.vue */ \"./src/components/helpers/search.vue\");\n/* harmony import */ var _select_list_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./select-list.vue */ \"./src/components/helpers/select-list.vue\");\n/* harmony import */ var _show_selector_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./show-selector.vue */ \"./src/components/helpers/show-selector.vue\");\n/* harmony import */ var _sorted_select_list_vue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./sorted-select-list.vue */ \"./src/components/helpers/sorted-select-list.vue\");\n/* harmony import */ var _state_switch_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./state-switch.vue */ \"./src/components/helpers/state-switch.vue\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AppLink\": () => (/* reexport safe */ _app_link_vue__WEBPACK_IMPORTED_MODULE_0__.default),\n/* harmony export */ \"Asset\": () => (/* reexport safe */ _asset_vue__WEBPACK_IMPORTED_MODULE_1__.default),\n/* harmony export */ \"ConfigSceneExceptions\": () => (/* reexport safe */ _config_scene_exceptions_vue__WEBPACK_IMPORTED_MODULE_2__.default),\n/* harmony export */ \"ConfigTemplate\": () => (/* reexport safe */ _config_template_vue__WEBPACK_IMPORTED_MODULE_3__.default),\n/* harmony export */ \"ConfigTextbox\": () => (/* reexport safe */ _config_textbox_vue__WEBPACK_IMPORTED_MODULE_4__.default),\n/* harmony export */ \"ConfigTextboxNumber\": () => (/* reexport safe */ _config_textbox_number_vue__WEBPACK_IMPORTED_MODULE_5__.default),\n/* harmony export */ \"ConfigToggleSlider\": () => (/* reexport safe */ _config_toggle_slider_vue__WEBPACK_IMPORTED_MODULE_6__.default),\n/* harmony export */ \"ConfigCustomNewznab\": () => (/* reexport safe */ _config_custom_newznab_vue__WEBPACK_IMPORTED_MODULE_7__.default),\n/* harmony export */ \"ConfigCustomProwlarr\": () => (/* reexport safe */ _config_custom_prowlarr_vue__WEBPACK_IMPORTED_MODULE_8__.default),\n/* harmony export */ \"ConfigCustomTorrentrss\": () => (/* reexport safe */ _config_custom_torrentrss_vue__WEBPACK_IMPORTED_MODULE_9__.default),\n/* harmony export */ \"ConfigCustomTorznab\": () => (/* reexport safe */ _config_custom_torznab_vue__WEBPACK_IMPORTED_MODULE_10__.default),\n/* harmony export */ \"ConfigProviderNzb\": () => (/* reexport safe */ _config_provider_nzb_vue__WEBPACK_IMPORTED_MODULE_11__.default),\n/* harmony export */ \"ConfigProviderTorrent\": () => (/* reexport safe */ _config_provider_torrent_vue__WEBPACK_IMPORTED_MODULE_12__.default),\n/* harmony export */ \"CustomLogs\": () => (/* reexport safe */ _custom_logs_vue__WEBPACK_IMPORTED_MODULE_13__.default),\n/* harmony export */ \"FileBrowser\": () => (/* reexport safe */ _file_browser_vue__WEBPACK_IMPORTED_MODULE_14__.default),\n/* harmony export */ \"LanguageSelect\": () => (/* reexport safe */ _language_select_vue__WEBPACK_IMPORTED_MODULE_15__.default),\n/* harmony export */ \"LoadProgressBar\": () => (/* reexport safe */ _load_progress_bar_vue__WEBPACK_IMPORTED_MODULE_16__.default),\n/* harmony export */ \"NamePattern\": () => (/* reexport safe */ _name_pattern_vue__WEBPACK_IMPORTED_MODULE_17__.default),\n/* harmony export */ \"PlotInfo\": () => (/* reexport safe */ _plot_info_vue__WEBPACK_IMPORTED_MODULE_18__.default),\n/* harmony export */ \"ProgressBar\": () => (/* reexport safe */ _progress_bar_vue__WEBPACK_IMPORTED_MODULE_19__.default),\n/* harmony export */ \"PosterSizeSlider\": () => (/* reexport safe */ _poster_size_slider_vue__WEBPACK_IMPORTED_MODULE_20__.default),\n/* harmony export */ \"QualityChooser\": () => (/* reexport safe */ _quality_chooser_vue__WEBPACK_IMPORTED_MODULE_21__.default),\n/* harmony export */ \"QualityPill\": () => (/* reexport safe */ _quality_pill_vue__WEBPACK_IMPORTED_MODULE_22__.default),\n/* harmony export */ \"ScrollButtons\": () => (/* reexport safe */ _scroll_buttons_vue__WEBPACK_IMPORTED_MODULE_23__.default),\n/* harmony export */ \"Search\": () => (/* reexport safe */ _search_vue__WEBPACK_IMPORTED_MODULE_24__.default),\n/* harmony export */ \"SelectList\": () => (/* reexport safe */ _select_list_vue__WEBPACK_IMPORTED_MODULE_25__.default),\n/* harmony export */ \"ShowSelector\": () => (/* reexport safe */ _show_selector_vue__WEBPACK_IMPORTED_MODULE_26__.default),\n/* harmony export */ \"SortedSelectList\": () => (/* reexport safe */ _sorted_select_list_vue__WEBPACK_IMPORTED_MODULE_27__.default),\n/* harmony export */ \"StateSwitch\": () => (/* reexport safe */ _state_switch_vue__WEBPACK_IMPORTED_MODULE_28__.default)\n/* harmony export */ });\n/* harmony import */ var _app_link_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./app-link.vue */ \"./src/components/helpers/app-link.vue\");\n/* harmony import */ var _asset_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./asset.vue */ \"./src/components/helpers/asset.vue\");\n/* harmony import */ var _config_scene_exceptions_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-scene-exceptions.vue */ \"./src/components/helpers/config-scene-exceptions.vue\");\n/* harmony import */ var _config_template_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./config-template.vue */ \"./src/components/helpers/config-template.vue\");\n/* harmony import */ var _config_textbox_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./config-textbox.vue */ \"./src/components/helpers/config-textbox.vue\");\n/* harmony import */ var _config_textbox_number_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./config-textbox-number.vue */ \"./src/components/helpers/config-textbox-number.vue\");\n/* harmony import */ var _config_toggle_slider_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./config-toggle-slider.vue */ \"./src/components/helpers/config-toggle-slider.vue\");\n/* harmony import */ var _config_custom_newznab_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./config-custom-newznab.vue */ \"./src/components/helpers/config-custom-newznab.vue\");\n/* harmony import */ var _config_custom_prowlarr_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./config-custom-prowlarr.vue */ \"./src/components/helpers/config-custom-prowlarr.vue\");\n/* harmony import */ var _config_custom_torrentrss_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./config-custom-torrentrss.vue */ \"./src/components/helpers/config-custom-torrentrss.vue\");\n/* harmony import */ var _config_custom_torznab_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./config-custom-torznab.vue */ \"./src/components/helpers/config-custom-torznab.vue\");\n/* harmony import */ var _config_provider_nzb_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./config-provider-nzb.vue */ \"./src/components/helpers/config-provider-nzb.vue\");\n/* harmony import */ var _config_provider_torrent_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./config-provider-torrent.vue */ \"./src/components/helpers/config-provider-torrent.vue\");\n/* harmony import */ var _custom_logs_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./custom-logs.vue */ \"./src/components/helpers/custom-logs.vue\");\n/* harmony import */ var _file_browser_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./file-browser.vue */ \"./src/components/helpers/file-browser.vue\");\n/* harmony import */ var _language_select_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./language-select.vue */ \"./src/components/helpers/language-select.vue\");\n/* harmony import */ var _load_progress_bar_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./load-progress-bar.vue */ \"./src/components/helpers/load-progress-bar.vue\");\n/* harmony import */ var _name_pattern_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./name-pattern.vue */ \"./src/components/helpers/name-pattern.vue\");\n/* harmony import */ var _plot_info_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./plot-info.vue */ \"./src/components/helpers/plot-info.vue\");\n/* harmony import */ var _progress_bar_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./progress-bar.vue */ \"./src/components/helpers/progress-bar.vue\");\n/* harmony import */ var _poster_size_slider_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./poster-size-slider.vue */ \"./src/components/helpers/poster-size-slider.vue\");\n/* harmony import */ var _quality_chooser_vue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./quality-chooser.vue */ \"./src/components/helpers/quality-chooser.vue\");\n/* harmony import */ var _quality_pill_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./quality-pill.vue */ \"./src/components/helpers/quality-pill.vue\");\n/* harmony import */ var _scroll_buttons_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./scroll-buttons.vue */ \"./src/components/helpers/scroll-buttons.vue\");\n/* harmony import */ var _search_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./search.vue */ \"./src/components/helpers/search.vue\");\n/* harmony import */ var _select_list_vue__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./select-list.vue */ \"./src/components/helpers/select-list.vue\");\n/* harmony import */ var _show_selector_vue__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./show-selector.vue */ \"./src/components/helpers/show-selector.vue\");\n/* harmony import */ var _sorted_select_list_vue__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./sorted-select-list.vue */ \"./src/components/helpers/sorted-select-list.vue\");\n/* harmony import */ var _state_switch_vue__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./state-switch.vue */ \"./src/components/helpers/state-switch.vue\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/index.js?"); /***/ }), @@ -873,7 +950,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 */ \"AddRecommended\": () => (/* reexport safe */ _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__.default),\n/* harmony export */ \"AddShowOptions\": () => (/* reexport safe */ _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__.default),\n/* harmony export */ \"AddShows\": () => (/* reexport safe */ _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__.default),\n/* harmony export */ \"AnidbReleaseGroupUi\": () => (/* reexport safe */ _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__.default),\n/* harmony export */ \"App\": () => (/* reexport safe */ _app_vue__WEBPACK_IMPORTED_MODULE_4__.default),\n/* harmony export */ \"AppFooter\": () => (/* reexport safe */ _app_footer_vue__WEBPACK_IMPORTED_MODULE_5__.default),\n/* harmony export */ \"AppHeader\": () => (/* reexport safe */ _app_header_vue__WEBPACK_IMPORTED_MODULE_6__.default),\n/* harmony export */ \"Backstretch\": () => (/* reexport safe */ _backstretch_vue__WEBPACK_IMPORTED_MODULE_7__.default),\n/* harmony export */ \"Config\": () => (/* reexport safe */ _config_vue__WEBPACK_IMPORTED_MODULE_8__.default),\n/* harmony export */ \"ConfigAnime\": () => (/* reexport safe */ _config_anime_vue__WEBPACK_IMPORTED_MODULE_9__.default),\n/* harmony export */ \"ConfigGeneral\": () => (/* reexport safe */ _config_general_vue__WEBPACK_IMPORTED_MODULE_10__.default),\n/* harmony export */ \"ConfigPostProcessing\": () => (/* reexport safe */ _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_11__.default),\n/* harmony export */ \"ConfigNotifications\": () => (/* reexport safe */ _config_notifications_vue__WEBPACK_IMPORTED_MODULE_12__.default),\n/* harmony export */ \"ConfigSearch\": () => (/* reexport safe */ _config_search_vue__WEBPACK_IMPORTED_MODULE_13__.default),\n/* harmony export */ \"DisplayShow\": () => (/* reexport safe */ _display_show_vue__WEBPACK_IMPORTED_MODULE_14__.default),\n/* harmony export */ \"CurrentDownloads\": () => (/* reexport safe */ _current_downloads_vue__WEBPACK_IMPORTED_MODULE_15__.default),\n/* harmony export */ \"EditShow\": () => (/* reexport safe */ _edit_show_vue__WEBPACK_IMPORTED_MODULE_16__.default),\n/* harmony export */ \"History\": () => (/* reexport safe */ _history_vue__WEBPACK_IMPORTED_MODULE_17__.default),\n/* harmony export */ \"HistoryCompact\": () => (/* reexport safe */ _history_compact_vue__WEBPACK_IMPORTED_MODULE_18__.default),\n/* harmony export */ \"HistoryDetailed\": () => (/* reexport safe */ _history_detailed_vue__WEBPACK_IMPORTED_MODULE_19__.default),\n/* harmony export */ \"Home\": () => (/* reexport safe */ _home_vue__WEBPACK_IMPORTED_MODULE_20__.default),\n/* harmony export */ \"IRC\": () => (/* reexport safe */ _irc_vue__WEBPACK_IMPORTED_MODULE_21__.default),\n/* harmony export */ \"Login\": () => (/* reexport safe */ _login_vue__WEBPACK_IMPORTED_MODULE_22__.default),\n/* harmony export */ \"Logs\": () => (/* reexport safe */ _logs_vue__WEBPACK_IMPORTED_MODULE_23__.default),\n/* harmony export */ \"manageSearches\": () => (/* reexport safe */ _manage_searches_vue__WEBPACK_IMPORTED_MODULE_24__.default),\n/* harmony export */ \"ManualPostProcess\": () => (/* reexport safe */ _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_25__.default),\n/* harmony export */ \"NewShow\": () => (/* reexport safe */ _new_show_vue__WEBPACK_IMPORTED_MODULE_26__.default),\n/* harmony export */ \"NewShowsExisting\": () => (/* reexport safe */ _new_shows_existing_vue__WEBPACK_IMPORTED_MODULE_27__.default),\n/* harmony export */ \"Restart\": () => (/* reexport safe */ _restart_vue__WEBPACK_IMPORTED_MODULE_28__.default),\n/* harmony export */ \"RootDirs\": () => (/* reexport safe */ _root_dirs_vue__WEBPACK_IMPORTED_MODULE_29__.default),\n/* harmony export */ \"Schedule\": () => (/* reexport safe */ _schedule_vue__WEBPACK_IMPORTED_MODULE_30__.default),\n/* harmony export */ \"ShowHeader\": () => (/* reexport safe */ _show_header_vue__WEBPACK_IMPORTED_MODULE_31__.default),\n/* harmony export */ \"ShowHistory\": () => (/* reexport safe */ _show_history_vue__WEBPACK_IMPORTED_MODULE_32__.default),\n/* harmony export */ \"ShowResults\": () => (/* reexport safe */ _show_results_vue__WEBPACK_IMPORTED_MODULE_33__.default),\n/* harmony export */ \"SnatchSelection\": () => (/* reexport safe */ _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_34__.default),\n/* harmony export */ \"Status\": () => (/* reexport safe */ _status_vue__WEBPACK_IMPORTED_MODULE_35__.default),\n/* harmony export */ \"SubMenu\": () => (/* reexport safe */ _sub_menu_vue__WEBPACK_IMPORTED_MODULE_36__.default),\n/* harmony export */ \"SubtitleSearch\": () => (/* reexport safe */ _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_37__.default),\n/* harmony export */ \"Update\": () => (/* reexport safe */ _update_vue__WEBPACK_IMPORTED_MODULE_38__.default),\n/* harmony export */ \"NotFound\": () => (/* reexport safe */ _http__WEBPACK_IMPORTED_MODULE_39__.NotFound),\n/* harmony export */ \"AppLink\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.AppLink),\n/* harmony export */ \"Asset\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.Asset),\n/* harmony export */ \"ConfigSceneExceptions\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ConfigSceneExceptions),\n/* harmony export */ \"ConfigTemplate\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ConfigTemplate),\n/* harmony export */ \"ConfigTextbox\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ConfigTextbox),\n/* harmony export */ \"ConfigTextboxNumber\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ConfigTextboxNumber),\n/* harmony export */ \"ConfigToggleSlider\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ConfigToggleSlider),\n/* harmony export */ \"CustomLogs\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.CustomLogs),\n/* harmony export */ \"FileBrowser\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.FileBrowser),\n/* harmony export */ \"LanguageSelect\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.LanguageSelect),\n/* harmony export */ \"LoadProgressBar\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.LoadProgressBar),\n/* harmony export */ \"NamePattern\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.NamePattern),\n/* harmony export */ \"PlotInfo\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.PlotInfo),\n/* harmony export */ \"PosterSizeSlider\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.PosterSizeSlider),\n/* harmony export */ \"ProgressBar\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ProgressBar),\n/* harmony export */ \"QualityChooser\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.QualityChooser),\n/* harmony export */ \"QualityPill\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.QualityPill),\n/* harmony export */ \"ScrollButtons\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ScrollButtons),\n/* harmony export */ \"Search\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.Search),\n/* harmony export */ \"SelectList\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.SelectList),\n/* harmony export */ \"ShowSelector\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.ShowSelector),\n/* harmony export */ \"SortedSelectList\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.SortedSelectList),\n/* harmony export */ \"StateSwitch\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_40__.StateSwitch)\n/* harmony export */ });\n/* harmony import */ var _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-recommended.vue */ \"./src/components/add-recommended.vue\");\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony import */ var _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-shows.vue */ \"./src/components/add-shows.vue\");\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony import */ var _app_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app.vue */ \"./src/components/app.vue\");\n/* harmony import */ var _app_footer_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app-footer.vue */ \"./src/components/app-footer.vue\");\n/* harmony import */ var _app_header_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./app-header.vue */ \"./src/components/app-header.vue\");\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony import */ var _config_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./config.vue */ \"./src/components/config.vue\");\n/* harmony import */ var _config_anime_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./config-anime.vue */ \"./src/components/config-anime.vue\");\n/* harmony import */ var _config_general_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./config-general.vue */ \"./src/components/config-general.vue\");\n/* harmony import */ var _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./config-post-processing.vue */ \"./src/components/config-post-processing.vue\");\n/* harmony import */ var _config_notifications_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./config-notifications.vue */ \"./src/components/config-notifications.vue\");\n/* harmony import */ var _config_search_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./config-search.vue */ \"./src/components/config-search.vue\");\n/* harmony import */ var _display_show_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./display-show.vue */ \"./src/components/display-show.vue\");\n/* harmony import */ var _current_downloads_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./current-downloads.vue */ \"./src/components/current-downloads.vue\");\n/* harmony import */ var _edit_show_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./edit-show.vue */ \"./src/components/edit-show.vue\");\n/* harmony import */ var _history_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./history.vue */ \"./src/components/history.vue\");\n/* harmony import */ var _history_compact_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./history-compact.vue */ \"./src/components/history-compact.vue\");\n/* harmony import */ var _history_detailed_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./history-detailed.vue */ \"./src/components/history-detailed.vue\");\n/* harmony import */ var _home_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./home.vue */ \"./src/components/home.vue\");\n/* harmony import */ var _irc_vue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./irc.vue */ \"./src/components/irc.vue\");\n/* harmony import */ var _login_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./login.vue */ \"./src/components/login.vue\");\n/* harmony import */ var _logs_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./logs.vue */ \"./src/components/logs.vue\");\n/* harmony import */ var _manage_searches_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./manage-searches.vue */ \"./src/components/manage-searches.vue\");\n/* harmony import */ var _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./manual-post-process.vue */ \"./src/components/manual-post-process.vue\");\n/* harmony import */ var _new_show_vue__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./new-show.vue */ \"./src/components/new-show.vue\");\n/* harmony import */ var _new_shows_existing_vue__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./new-shows-existing.vue */ \"./src/components/new-shows-existing.vue\");\n/* harmony import */ var _restart_vue__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./restart.vue */ \"./src/components/restart.vue\");\n/* harmony import */ var _root_dirs_vue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./root-dirs.vue */ \"./src/components/root-dirs.vue\");\n/* harmony import */ var _schedule_vue__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./schedule.vue */ \"./src/components/schedule.vue\");\n/* harmony import */ var _show_header_vue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./show-header.vue */ \"./src/components/show-header.vue\");\n/* harmony import */ var _show_history_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./show-history.vue */ \"./src/components/show-history.vue\");\n/* harmony import */ var _show_results_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./show-results.vue */ \"./src/components/show-results.vue\");\n/* harmony import */ var _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./snatch-selection.vue */ \"./src/components/snatch-selection.vue\");\n/* harmony import */ var _status_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./status.vue */ \"./src/components/status.vue\");\n/* harmony import */ var _sub_menu_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./sub-menu.vue */ \"./src/components/sub-menu.vue\");\n/* harmony import */ var _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./subtitle-search.vue */ \"./src/components/subtitle-search.vue\");\n/* harmony import */ var _update_vue__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./update.vue */ \"./src/components/update.vue\");\n/* harmony import */ var _http__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./http */ \"./src/components/http/index.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://slim/./src/components/index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"AddRecommended\": () => (/* reexport safe */ _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__.default),\n/* harmony export */ \"AddShowOptions\": () => (/* reexport safe */ _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__.default),\n/* harmony export */ \"AddShows\": () => (/* reexport safe */ _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__.default),\n/* harmony export */ \"AnidbReleaseGroupUi\": () => (/* reexport safe */ _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__.default),\n/* harmony export */ \"App\": () => (/* reexport safe */ _app_vue__WEBPACK_IMPORTED_MODULE_4__.default),\n/* harmony export */ \"AppFooter\": () => (/* reexport safe */ _app_footer_vue__WEBPACK_IMPORTED_MODULE_5__.default),\n/* harmony export */ \"AppHeader\": () => (/* reexport safe */ _app_header_vue__WEBPACK_IMPORTED_MODULE_6__.default),\n/* harmony export */ \"Backstretch\": () => (/* reexport safe */ _backstretch_vue__WEBPACK_IMPORTED_MODULE_7__.default),\n/* harmony export */ \"Config\": () => (/* reexport safe */ _config_vue__WEBPACK_IMPORTED_MODULE_8__.default),\n/* harmony export */ \"ConfigAnime\": () => (/* reexport safe */ _config_anime_vue__WEBPACK_IMPORTED_MODULE_9__.default),\n/* harmony export */ \"ConfigGeneral\": () => (/* reexport safe */ _config_general_vue__WEBPACK_IMPORTED_MODULE_10__.default),\n/* harmony export */ \"ConfigPostProcessing\": () => (/* reexport safe */ _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_11__.default),\n/* harmony export */ \"ConfigProviders\": () => (/* reexport safe */ _config_providers_vue__WEBPACK_IMPORTED_MODULE_12__.default),\n/* harmony export */ \"ConfigNotifications\": () => (/* reexport safe */ _config_notifications_vue__WEBPACK_IMPORTED_MODULE_13__.default),\n/* harmony export */ \"ConfigSearch\": () => (/* reexport safe */ _config_search_vue__WEBPACK_IMPORTED_MODULE_14__.default),\n/* harmony export */ \"DisplayShow\": () => (/* reexport safe */ _display_show_vue__WEBPACK_IMPORTED_MODULE_15__.default),\n/* harmony export */ \"CurrentDownloads\": () => (/* reexport safe */ _current_downloads_vue__WEBPACK_IMPORTED_MODULE_16__.default),\n/* harmony export */ \"EditShow\": () => (/* reexport safe */ _edit_show_vue__WEBPACK_IMPORTED_MODULE_17__.default),\n/* harmony export */ \"History\": () => (/* reexport safe */ _history_vue__WEBPACK_IMPORTED_MODULE_18__.default),\n/* harmony export */ \"HistoryCompact\": () => (/* reexport safe */ _history_compact_vue__WEBPACK_IMPORTED_MODULE_19__.default),\n/* harmony export */ \"HistoryDetailed\": () => (/* reexport safe */ _history_detailed_vue__WEBPACK_IMPORTED_MODULE_20__.default),\n/* harmony export */ \"Home\": () => (/* reexport safe */ _home_vue__WEBPACK_IMPORTED_MODULE_21__.default),\n/* harmony export */ \"IRC\": () => (/* reexport safe */ _irc_vue__WEBPACK_IMPORTED_MODULE_22__.default),\n/* harmony export */ \"Login\": () => (/* reexport safe */ _login_vue__WEBPACK_IMPORTED_MODULE_23__.default),\n/* harmony export */ \"Logs\": () => (/* reexport safe */ _logs_vue__WEBPACK_IMPORTED_MODULE_24__.default),\n/* harmony export */ \"manageSearches\": () => (/* reexport safe */ _manage_searches_vue__WEBPACK_IMPORTED_MODULE_25__.default),\n/* harmony export */ \"ManualPostProcess\": () => (/* reexport safe */ _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_26__.default),\n/* harmony export */ \"NewShow\": () => (/* reexport safe */ _new_show_vue__WEBPACK_IMPORTED_MODULE_27__.default),\n/* harmony export */ \"NewShowsExisting\": () => (/* reexport safe */ _new_shows_existing_vue__WEBPACK_IMPORTED_MODULE_28__.default),\n/* harmony export */ \"Restart\": () => (/* reexport safe */ _restart_vue__WEBPACK_IMPORTED_MODULE_29__.default),\n/* harmony export */ \"RootDirs\": () => (/* reexport safe */ _root_dirs_vue__WEBPACK_IMPORTED_MODULE_30__.default),\n/* harmony export */ \"Schedule\": () => (/* reexport safe */ _schedule_vue__WEBPACK_IMPORTED_MODULE_31__.default),\n/* harmony export */ \"ShowHeader\": () => (/* reexport safe */ _show_header_vue__WEBPACK_IMPORTED_MODULE_32__.default),\n/* harmony export */ \"ShowHistory\": () => (/* reexport safe */ _show_history_vue__WEBPACK_IMPORTED_MODULE_33__.default),\n/* harmony export */ \"ShowResults\": () => (/* reexport safe */ _show_results_vue__WEBPACK_IMPORTED_MODULE_34__.default),\n/* harmony export */ \"SnatchSelection\": () => (/* reexport safe */ _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_35__.default),\n/* harmony export */ \"Status\": () => (/* reexport safe */ _status_vue__WEBPACK_IMPORTED_MODULE_36__.default),\n/* harmony export */ \"SubMenu\": () => (/* reexport safe */ _sub_menu_vue__WEBPACK_IMPORTED_MODULE_37__.default),\n/* harmony export */ \"SubtitleSearch\": () => (/* reexport safe */ _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_38__.default),\n/* harmony export */ \"Update\": () => (/* reexport safe */ _update_vue__WEBPACK_IMPORTED_MODULE_39__.default),\n/* harmony export */ \"NotFound\": () => (/* reexport safe */ _http__WEBPACK_IMPORTED_MODULE_40__.NotFound),\n/* harmony export */ \"AppLink\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.AppLink),\n/* harmony export */ \"Asset\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.Asset),\n/* harmony export */ \"ConfigCustomNewznab\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigCustomNewznab),\n/* harmony export */ \"ConfigCustomProwlarr\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigCustomProwlarr),\n/* harmony export */ \"ConfigCustomTorrentrss\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigCustomTorrentrss),\n/* harmony export */ \"ConfigCustomTorznab\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigCustomTorznab),\n/* harmony export */ \"ConfigProviderNzb\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigProviderNzb),\n/* harmony export */ \"ConfigProviderTorrent\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigProviderTorrent),\n/* harmony export */ \"ConfigSceneExceptions\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigSceneExceptions),\n/* harmony export */ \"ConfigTemplate\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigTemplate),\n/* harmony export */ \"ConfigTextbox\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigTextbox),\n/* harmony export */ \"ConfigTextboxNumber\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigTextboxNumber),\n/* harmony export */ \"ConfigToggleSlider\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ConfigToggleSlider),\n/* harmony export */ \"CustomLogs\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.CustomLogs),\n/* harmony export */ \"FileBrowser\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.FileBrowser),\n/* harmony export */ \"LanguageSelect\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.LanguageSelect),\n/* harmony export */ \"LoadProgressBar\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.LoadProgressBar),\n/* harmony export */ \"NamePattern\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.NamePattern),\n/* harmony export */ \"PlotInfo\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.PlotInfo),\n/* harmony export */ \"PosterSizeSlider\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.PosterSizeSlider),\n/* harmony export */ \"ProgressBar\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ProgressBar),\n/* harmony export */ \"QualityChooser\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.QualityChooser),\n/* harmony export */ \"QualityPill\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.QualityPill),\n/* harmony export */ \"ScrollButtons\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ScrollButtons),\n/* harmony export */ \"Search\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.Search),\n/* harmony export */ \"SelectList\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.SelectList),\n/* harmony export */ \"ShowSelector\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.ShowSelector),\n/* harmony export */ \"SortedSelectList\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.SortedSelectList),\n/* harmony export */ \"StateSwitch\": () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_41__.StateSwitch)\n/* harmony export */ });\n/* harmony import */ var _add_recommended_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add-recommended.vue */ \"./src/components/add-recommended.vue\");\n/* harmony import */ var _add_show_options_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./add-show-options.vue */ \"./src/components/add-show-options.vue\");\n/* harmony import */ var _add_shows_vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-shows.vue */ \"./src/components/add-shows.vue\");\n/* harmony import */ var _anidb_release_group_ui_vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./anidb-release-group-ui.vue */ \"./src/components/anidb-release-group-ui.vue\");\n/* harmony import */ var _app_vue__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./app.vue */ \"./src/components/app.vue\");\n/* harmony import */ var _app_footer_vue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app-footer.vue */ \"./src/components/app-footer.vue\");\n/* harmony import */ var _app_header_vue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./app-header.vue */ \"./src/components/app-header.vue\");\n/* harmony import */ var _backstretch_vue__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./backstretch.vue */ \"./src/components/backstretch.vue\");\n/* harmony import */ var _config_vue__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./config.vue */ \"./src/components/config.vue\");\n/* harmony import */ var _config_anime_vue__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./config-anime.vue */ \"./src/components/config-anime.vue\");\n/* harmony import */ var _config_general_vue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./config-general.vue */ \"./src/components/config-general.vue\");\n/* harmony import */ var _config_post_processing_vue__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./config-post-processing.vue */ \"./src/components/config-post-processing.vue\");\n/* harmony import */ var _config_providers_vue__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./config-providers.vue */ \"./src/components/config-providers.vue\");\n/* harmony import */ var _config_notifications_vue__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./config-notifications.vue */ \"./src/components/config-notifications.vue\");\n/* harmony import */ var _config_search_vue__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./config-search.vue */ \"./src/components/config-search.vue\");\n/* harmony import */ var _display_show_vue__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./display-show.vue */ \"./src/components/display-show.vue\");\n/* harmony import */ var _current_downloads_vue__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./current-downloads.vue */ \"./src/components/current-downloads.vue\");\n/* harmony import */ var _edit_show_vue__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./edit-show.vue */ \"./src/components/edit-show.vue\");\n/* harmony import */ var _history_vue__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./history.vue */ \"./src/components/history.vue\");\n/* harmony import */ var _history_compact_vue__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./history-compact.vue */ \"./src/components/history-compact.vue\");\n/* harmony import */ var _history_detailed_vue__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./history-detailed.vue */ \"./src/components/history-detailed.vue\");\n/* harmony import */ var _home_vue__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./home.vue */ \"./src/components/home.vue\");\n/* harmony import */ var _irc_vue__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./irc.vue */ \"./src/components/irc.vue\");\n/* harmony import */ var _login_vue__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./login.vue */ \"./src/components/login.vue\");\n/* harmony import */ var _logs_vue__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./logs.vue */ \"./src/components/logs.vue\");\n/* harmony import */ var _manage_searches_vue__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ./manage-searches.vue */ \"./src/components/manage-searches.vue\");\n/* harmony import */ var _manual_post_process_vue__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ./manual-post-process.vue */ \"./src/components/manual-post-process.vue\");\n/* harmony import */ var _new_show_vue__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ./new-show.vue */ \"./src/components/new-show.vue\");\n/* harmony import */ var _new_shows_existing_vue__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ./new-shows-existing.vue */ \"./src/components/new-shows-existing.vue\");\n/* harmony import */ var _restart_vue__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ./restart.vue */ \"./src/components/restart.vue\");\n/* harmony import */ var _root_dirs_vue__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ./root-dirs.vue */ \"./src/components/root-dirs.vue\");\n/* harmony import */ var _schedule_vue__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ./schedule.vue */ \"./src/components/schedule.vue\");\n/* harmony import */ var _show_header_vue__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ./show-header.vue */ \"./src/components/show-header.vue\");\n/* harmony import */ var _show_history_vue__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! ./show-history.vue */ \"./src/components/show-history.vue\");\n/* harmony import */ var _show_results_vue__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! ./show-results.vue */ \"./src/components/show-results.vue\");\n/* harmony import */ var _snatch_selection_vue__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! ./snatch-selection.vue */ \"./src/components/snatch-selection.vue\");\n/* harmony import */ var _status_vue__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! ./status.vue */ \"./src/components/status.vue\");\n/* harmony import */ var _sub_menu_vue__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! ./sub-menu.vue */ \"./src/components/sub-menu.vue\");\n/* harmony import */ var _subtitle_search_vue__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! ./subtitle-search.vue */ \"./src/components/subtitle-search.vue\");\n/* harmony import */ var _update_vue__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! ./update.vue */ \"./src/components/update.vue\");\n/* harmony import */ var _http__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! ./http */ \"./src/components/http/index.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! ./helpers */ \"./src/components/helpers/index.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://slim/./src/components/index.js?"); /***/ }), @@ -939,7 +1016,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 _sub_menus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sub-menus */ \"./src/router/sub-menus.js\");\n\n/** @type {import('.').Route[]} */\n\nconst homeRoutes = [{\n path: '/home',\n name: 'home',\n meta: {\n title: 'Home',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/home.vue */ \"./src/components/home.vue\"))\n}, {\n path: '/home/editShow',\n name: 'editShow',\n meta: {\n topMenu: 'home',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/edit-show.vue */ \"./src/components/edit-show.vue\"))\n}, {\n path: '/home/displayShow',\n name: 'show',\n meta: {\n topMenu: 'home',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/display-show.vue */ \"./src/components/display-show.vue\"))\n}, {\n path: '/home/snatchSelection',\n name: 'snatchSelection',\n meta: {\n topMenu: 'home',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/snatch-selection.vue */ \"./src/components/snatch-selection.vue\"))\n}, {\n path: '/home/testRename',\n name: 'testRename',\n meta: {\n title: 'Preview Rename',\n header: 'Preview Rename',\n topMenu: 'home'\n }\n}, {\n path: '/home/postprocess',\n name: 'postprocess',\n meta: {\n title: 'Manual Post-Processing',\n header: 'Manual Post-Processing',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/manual-post-process.vue */ \"./src/components/manual-post-process.vue\"))\n}, {\n path: '/home/status',\n name: 'status',\n meta: {\n title: 'Status',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/status.vue */ \"./src/components/status.vue\"))\n}, {\n path: '/home/restart',\n name: 'restart',\n meta: {\n title: 'Restarting...',\n header: 'Performing Restart',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/restart.vue */ \"./src/components/restart.vue\"))\n}, {\n path: '/home/shutdown',\n name: 'shutdown',\n meta: {\n header: 'Shutting down',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/restart.vue */ \"./src/components/restart.vue\")),\n props: {\n shutdown: true\n }\n}, {\n path: '/home/update',\n name: 'update',\n meta: {\n header: 'Update Medusa',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/update.vue */ \"./src/components/update.vue\"))\n}];\n/** @type {import('.').Route[]} */\n\nconst configRoutes = [{\n path: '/config',\n name: 'config',\n meta: {\n title: 'Help & Info',\n header: 'Medusa Configuration',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config.vue */ \"./src/components/config.vue\"))\n}, {\n path: '/config/anime',\n name: 'configAnime',\n meta: {\n title: 'Config - Anime',\n header: 'Anime',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-anime.vue */ \"./src/components/config-anime.vue\"))\n}, {\n path: '/config/backuprestore',\n name: 'configBackupRestore',\n meta: {\n title: 'Config - Backup/Restore',\n header: 'Backup/Restore',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu\n }\n}, {\n path: '/config/general',\n name: 'configGeneral',\n meta: {\n title: 'Config - General',\n header: 'General Configuration',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-general.vue */ \"./src/components/config-general.vue\"))\n}, {\n path: '/config/notifications',\n name: 'configNotifications',\n meta: {\n title: 'Config - Notifications',\n header: 'Notifications',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-notifications.vue */ \"./src/components/config-notifications.vue\"))\n}, {\n path: '/config/postProcessing',\n name: 'configPostProcessing',\n meta: {\n title: 'Config - Post-Processing',\n header: 'Post-Processing',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-post-processing.vue */ \"./src/components/config-post-processing.vue\"))\n}, {\n path: '/config/providers',\n name: 'configSearchProviders',\n meta: {\n title: 'Config - Providers',\n header: 'Search Providers',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu\n }\n}, {\n path: '/config/search',\n name: 'configSearchSettings',\n meta: {\n title: 'Config - Episode Search',\n header: 'Search Settings',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-search.vue */ \"./src/components/config-search.vue\"))\n}, {\n path: '/config/subtitles',\n name: 'configSubtitles',\n meta: {\n title: 'Config - Subtitles',\n header: 'Subtitles',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu\n }\n}];\n/** @type {import('.').Route[]} */\n\nconst addShowRoutes = [{\n path: '/addShows',\n name: 'addShows',\n meta: {\n title: 'Add Shows',\n header: 'Add Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/add-shows.vue */ \"./src/components/add-shows.vue\"))\n}, {\n path: '/addShows/existingShows',\n name: 'addExistingShows',\n meta: {\n title: 'Add Existing Shows',\n header: 'Add Existing Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/new-shows-existing.vue */ \"./src/components/new-shows-existing.vue\"))\n}, {\n path: '/addShows/newShow',\n name: 'addNewShow',\n meta: {\n title: 'Add New Show',\n header: 'Add New Show',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/new-show.vue */ \"./src/components/new-show.vue\"))\n}, {\n path: '/addShows/trendingShows',\n name: 'addTrendingShows',\n meta: {\n topMenu: 'home'\n }\n}, {\n path: '/addShows/popularShows',\n name: 'addPopularShows',\n meta: {\n title: 'Popular Shows',\n header: 'Popular Shows',\n topMenu: 'home'\n }\n}, {\n path: '/addShows/popularAnime',\n name: 'addPopularAnime',\n meta: {\n title: 'Popular Anime Shows',\n header: 'Popular Anime Shows',\n topMenu: 'home'\n }\n}];\n/** @type {import('.').Route} */\n\nconst loginRoute = {\n path: '/login',\n name: 'login',\n meta: {\n title: 'Login'\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/login.vue */ \"./src/components/login.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst addRecommendedRoute = {\n path: '/addRecommended',\n name: 'addRecommended',\n meta: {\n title: 'Add Recommended Shows',\n header: 'Add Recommended Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/add-recommended.vue */ \"./src/components/add-recommended.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst scheduleRoute = {\n path: '/schedule',\n name: 'schedule',\n meta: {\n title: 'Schedule',\n header: 'Schedule',\n topMenu: 'schedule',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/schedule.vue */ \"./src/components/schedule.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst historyRoute = {\n path: '/history',\n name: 'history',\n meta: {\n title: 'History',\n header: 'History',\n topMenu: 'history',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.historySubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/history.vue */ \"./src/components/history.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst downloadsRoute = {\n path: '/downloads',\n name: 'downloads',\n meta: {\n title: 'Downloads',\n header: 'Downloads',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/current-downloads.vue */ \"./src/components/current-downloads.vue\"))\n};\n/** @type {import('.').Route[]} */\n\nconst manageRoutes = [{\n path: '/manage',\n name: 'manage',\n meta: {\n title: 'Mass Update',\n header: 'Mass Update',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/backlogOverview',\n name: 'manageBacklogOverview',\n meta: {\n title: 'Backlog Overview',\n header: 'Backlog Overview',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/episodeStatuses',\n name: 'manageEpisodeOverview',\n meta: {\n title: 'Episode Overview',\n header: 'Episode Overview',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/failedDownloads',\n name: 'manageFailedDownloads',\n meta: {\n title: 'Failed Downloads',\n header: 'Failed Downloads',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/manageSearches',\n name: 'manageManageSearches',\n meta: {\n title: 'Manage Searches',\n header: 'Manage Searches',\n topMenu: 'manage',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/manage-searches.vue */ \"./src/components/manage-searches.vue\"))\n}, {\n path: '/manage/massEdit',\n name: 'manageMassEdit',\n meta: {\n title: 'Mass Edit',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/subtitleMissed',\n name: 'manageSubtitleMissed',\n meta: {\n title: 'Missing Subtitles',\n header: 'Missing Subtitles',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/subtitleMissedPP',\n name: 'manageSubtitleMissedPP',\n meta: {\n title: 'Missing Subtitles in Post-Process folder',\n header: 'Missing Subtitles in Post-Process folder',\n topMenu: 'manage'\n }\n}];\n/** @type {import('.').Route[]} */\n\nconst errorLogsRoutes = [{\n path: '/errorlogs',\n name: 'errorlogs',\n meta: {\n title: 'Logs & Errors',\n topMenu: 'system',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.errorlogsSubMenu\n }\n}, {\n path: '/errorlogs/viewlog',\n name: 'viewlog',\n meta: {\n title: 'Logs',\n header: 'Log File',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/logs.vue */ \"./src/components/logs.vue\"))\n}];\n/** @type {import('.').Route} */\n\nconst newsRoute = {\n path: '/news',\n name: 'news',\n meta: {\n title: 'News',\n header: 'News',\n topMenu: 'system'\n }\n};\n/** @type {import('.').Route} */\n\nconst changesRoute = {\n path: '/changes',\n name: 'changes',\n meta: {\n title: 'Changelog',\n header: 'Changelog',\n topMenu: 'system'\n }\n};\n/** @type {import('.').Route} */\n\nconst ircRoute = {\n path: '/IRC',\n name: 'IRC',\n meta: {\n title: 'IRC',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/irc.vue */ \"./src/components/irc.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst notFoundRoute = {\n path: '/not-found',\n name: 'not-found',\n meta: {\n title: '404',\n header: '404 - page not found'\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/http/404.vue */ \"./src/components/http/404.vue\"))\n}; // @NOTE: Redirect can only be added once all routes are vue\n\n/*\n/** @type {import('.').Route} *-/\nconst notFoundRedirect = {\n path: '*',\n redirect: '/not-found'\n};\n*/\n\n/** @type {import('.').Route[]} */\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([...homeRoutes, ...configRoutes, ...addShowRoutes, loginRoute, addRecommendedRoute, scheduleRoute, historyRoute, downloadsRoute, ...manageRoutes, ...errorLogsRoutes, newsRoute, changesRoute, ircRoute, notFoundRoute]);\n\n//# sourceURL=webpack://slim/./src/router/routes.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 _sub_menus__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sub-menus */ \"./src/router/sub-menus.js\");\n\n/** @type {import('.').Route[]} */\n\nconst homeRoutes = [{\n path: '/home',\n name: 'home',\n meta: {\n title: 'Home',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/home.vue */ \"./src/components/home.vue\"))\n}, {\n path: '/home/editShow',\n name: 'editShow',\n meta: {\n topMenu: 'home',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/edit-show.vue */ \"./src/components/edit-show.vue\"))\n}, {\n path: '/home/displayShow',\n name: 'show',\n meta: {\n topMenu: 'home',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/display-show.vue */ \"./src/components/display-show.vue\"))\n}, {\n path: '/home/snatchSelection',\n name: 'snatchSelection',\n meta: {\n topMenu: 'home',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.showSubMenu,\n converted: true,\n nocache: true // Use this flag, to have the router-view use :key=\"$route.fullPath\"\n\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/snatch-selection.vue */ \"./src/components/snatch-selection.vue\"))\n}, {\n path: '/home/testRename',\n name: 'testRename',\n meta: {\n title: 'Preview Rename',\n header: 'Preview Rename',\n topMenu: 'home'\n }\n}, {\n path: '/home/postprocess',\n name: 'postprocess',\n meta: {\n title: 'Manual Post-Processing',\n header: 'Manual Post-Processing',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/manual-post-process.vue */ \"./src/components/manual-post-process.vue\"))\n}, {\n path: '/home/status',\n name: 'status',\n meta: {\n title: 'Status',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/status.vue */ \"./src/components/status.vue\"))\n}, {\n path: '/home/restart',\n name: 'restart',\n meta: {\n title: 'Restarting...',\n header: 'Performing Restart',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/restart.vue */ \"./src/components/restart.vue\"))\n}, {\n path: '/home/shutdown',\n name: 'shutdown',\n meta: {\n header: 'Shutting down',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/restart.vue */ \"./src/components/restart.vue\")),\n props: {\n shutdown: true\n }\n}, {\n path: '/home/update',\n name: 'update',\n meta: {\n header: 'Update Medusa',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/update.vue */ \"./src/components/update.vue\"))\n}];\n/** @type {import('.').Route[]} */\n\nconst configRoutes = [{\n path: '/config',\n name: 'config',\n meta: {\n title: 'Help & Info',\n header: 'Medusa Configuration',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config.vue */ \"./src/components/config.vue\"))\n}, {\n path: '/config/anime',\n name: 'configAnime',\n meta: {\n title: 'Config - Anime',\n header: 'Anime',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-anime.vue */ \"./src/components/config-anime.vue\"))\n}, {\n path: '/config/backuprestore',\n name: 'configBackupRestore',\n meta: {\n title: 'Config - Backup/Restore',\n header: 'Backup/Restore',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu\n }\n}, {\n path: '/config/general',\n name: 'configGeneral',\n meta: {\n title: 'Config - General',\n header: 'General Configuration',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-general.vue */ \"./src/components/config-general.vue\"))\n}, {\n path: '/config/notifications',\n name: 'configNotifications',\n meta: {\n title: 'Config - Notifications',\n header: 'Notifications',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-notifications.vue */ \"./src/components/config-notifications.vue\"))\n}, {\n path: '/config/postProcessing',\n name: 'configPostProcessing',\n meta: {\n title: 'Config - Post-Processing',\n header: 'Post-Processing',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-post-processing.vue */ \"./src/components/config-post-processing.vue\"))\n}, {\n path: '/config/providers',\n name: 'configSearchProviders',\n meta: {\n title: 'Config - Providers',\n header: 'Search Providers',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-providers.vue */ \"./src/components/config-providers.vue\"))\n}, {\n path: '/config/search',\n name: 'configSearchSettings',\n meta: {\n title: 'Config - Episode Search',\n header: 'Search Settings',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/config-search.vue */ \"./src/components/config-search.vue\"))\n}, {\n path: '/config/subtitles',\n name: 'configSubtitles',\n meta: {\n title: 'Config - Subtitles',\n header: 'Subtitles',\n topMenu: 'config',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.configSubMenu\n }\n}];\n/** @type {import('.').Route[]} */\n\nconst addShowRoutes = [{\n path: '/addShows',\n name: 'addShows',\n meta: {\n title: 'Add Shows',\n header: 'Add Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/add-shows.vue */ \"./src/components/add-shows.vue\"))\n}, {\n path: '/addShows/existingShows',\n name: 'addExistingShows',\n meta: {\n title: 'Add Existing Shows',\n header: 'Add Existing Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/new-shows-existing.vue */ \"./src/components/new-shows-existing.vue\"))\n}, {\n path: '/addShows/newShow',\n name: 'addNewShow',\n meta: {\n title: 'Add New Show',\n header: 'Add New Show',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/new-show.vue */ \"./src/components/new-show.vue\"))\n}, {\n path: '/addShows/trendingShows',\n name: 'addTrendingShows',\n meta: {\n topMenu: 'home'\n }\n}, {\n path: '/addShows/popularShows',\n name: 'addPopularShows',\n meta: {\n title: 'Popular Shows',\n header: 'Popular Shows',\n topMenu: 'home'\n }\n}, {\n path: '/addShows/popularAnime',\n name: 'addPopularAnime',\n meta: {\n title: 'Popular Anime Shows',\n header: 'Popular Anime Shows',\n topMenu: 'home'\n }\n}];\n/** @type {import('.').Route} */\n\nconst loginRoute = {\n path: '/login',\n name: 'login',\n meta: {\n title: 'Login'\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/login.vue */ \"./src/components/login.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst addRecommendedRoute = {\n path: '/addRecommended',\n name: 'addRecommended',\n meta: {\n title: 'Add Recommended Shows',\n header: 'Add Recommended Shows',\n topMenu: 'home',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/add-recommended.vue */ \"./src/components/add-recommended.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst scheduleRoute = {\n path: '/schedule',\n name: 'schedule',\n meta: {\n title: 'Schedule',\n header: 'Schedule',\n topMenu: 'schedule',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/schedule.vue */ \"./src/components/schedule.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst historyRoute = {\n path: '/history',\n name: 'history',\n meta: {\n title: 'History',\n header: 'History',\n topMenu: 'history',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.historySubMenu,\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/history.vue */ \"./src/components/history.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst downloadsRoute = {\n path: '/downloads',\n name: 'downloads',\n meta: {\n title: 'Downloads',\n header: 'Downloads',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/current-downloads.vue */ \"./src/components/current-downloads.vue\"))\n};\n/** @type {import('.').Route[]} */\n\nconst manageRoutes = [{\n path: '/manage',\n name: 'manage',\n meta: {\n title: 'Mass Update',\n header: 'Mass Update',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/backlogOverview',\n name: 'manageBacklogOverview',\n meta: {\n title: 'Backlog Overview',\n header: 'Backlog Overview',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/episodeStatuses',\n name: 'manageEpisodeOverview',\n meta: {\n title: 'Episode Overview',\n header: 'Episode Overview',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/failedDownloads',\n name: 'manageFailedDownloads',\n meta: {\n title: 'Failed Downloads',\n header: 'Failed Downloads',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/manageSearches',\n name: 'manageManageSearches',\n meta: {\n title: 'Manage Searches',\n header: 'Manage Searches',\n topMenu: 'manage',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/manage-searches.vue */ \"./src/components/manage-searches.vue\"))\n}, {\n path: '/manage/massEdit',\n name: 'manageMassEdit',\n meta: {\n title: 'Mass Edit',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/subtitleMissed',\n name: 'manageSubtitleMissed',\n meta: {\n title: 'Missing Subtitles',\n header: 'Missing Subtitles',\n topMenu: 'manage'\n }\n}, {\n path: '/manage/subtitleMissedPP',\n name: 'manageSubtitleMissedPP',\n meta: {\n title: 'Missing Subtitles in Post-Process folder',\n header: 'Missing Subtitles in Post-Process folder',\n topMenu: 'manage'\n }\n}];\n/** @type {import('.').Route[]} */\n\nconst errorLogsRoutes = [{\n path: '/errorlogs',\n name: 'errorlogs',\n meta: {\n title: 'Logs & Errors',\n topMenu: 'system',\n subMenu: _sub_menus__WEBPACK_IMPORTED_MODULE_0__.errorlogsSubMenu\n }\n}, {\n path: '/errorlogs/viewlog',\n name: 'viewlog',\n meta: {\n title: 'Logs',\n header: 'Log File',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/logs.vue */ \"./src/components/logs.vue\"))\n}];\n/** @type {import('.').Route} */\n\nconst newsRoute = {\n path: '/news',\n name: 'news',\n meta: {\n title: 'News',\n header: 'News',\n topMenu: 'system'\n }\n};\n/** @type {import('.').Route} */\n\nconst changesRoute = {\n path: '/changes',\n name: 'changes',\n meta: {\n title: 'Changelog',\n header: 'Changelog',\n topMenu: 'system'\n }\n};\n/** @type {import('.').Route} */\n\nconst ircRoute = {\n path: '/IRC',\n name: 'IRC',\n meta: {\n title: 'IRC',\n topMenu: 'system',\n converted: true\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/irc.vue */ \"./src/components/irc.vue\"))\n};\n/** @type {import('.').Route} */\n\nconst notFoundRoute = {\n path: '/not-found',\n name: 'not-found',\n meta: {\n title: '404',\n header: '404 - page not found'\n },\n component: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ../components/http/404.vue */ \"./src/components/http/404.vue\"))\n}; // @NOTE: Redirect can only be added once all routes are vue\n\n/*\n/** @type {import('.').Route} *-/\nconst notFoundRedirect = {\n path: '*',\n redirect: '/not-found'\n};\n*/\n\n/** @type {import('.').Route[]} */\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ([...homeRoutes, ...configRoutes, ...addShowRoutes, loginRoute, addRecommendedRoute, scheduleRoute, historyRoute, downloadsRoute, ...manageRoutes, ...errorLogsRoutes, newsRoute, changesRoute, ircRoute, notFoundRoute]);\n\n//# sourceURL=webpack://slim/./src/router/routes.js?"); /***/ }), @@ -1016,7 +1093,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/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/core */ \"./src/utils/core.js\");\n\n\n\nconst state = {\n addTitleWithYear: null,\n wikiUrl: null,\n donationsUrl: null,\n namingForceFolders: null,\n sourceUrl: null,\n rootDirs: [],\n subtitles: {\n enabled: null\n },\n logs: {\n debug: null,\n dbDebug: null,\n loggingLevels: {},\n numErrors: null,\n numWarnings: null,\n actualLogDir: null,\n nr: null,\n size: null,\n subliminalLog: null,\n privacyLevel: null,\n custom: {}\n },\n cpuPreset: null,\n subtitlesMulti: null,\n anonRedirect: null,\n recentShows: [],\n randomShowSlug: null,\n // @TODO: Recreate this in Vue when the webapp has a reliable list of shows to choose from.\n showDefaults: {\n status: null,\n statusAfter: null,\n quality: null,\n subtitles: null,\n seasonFolders: null,\n anime: null,\n scene: null,\n showLists: null\n },\n launchBrowser: null,\n defaultPage: null,\n trashRemoveShow: null,\n indexerDefaultLanguage: null,\n showUpdateHour: null,\n indexerTimeout: null,\n indexerDefault: null,\n plexFallBack: {\n enable: null,\n notifications: null,\n timeout: null\n },\n versionNotify: null,\n autoUpdate: null,\n updateFrequency: null,\n notifyOnUpdate: null,\n availableThemes: null,\n timePresets: [],\n datePresets: [],\n webInterface: {\n apiKey: null,\n log: null,\n username: null,\n password: null,\n port: null,\n host: null,\n notifyOnLogin: null,\n ipv6: null,\n httpsEnable: null,\n httpsCert: null,\n httpsKey: null,\n handleReverseProxy: null\n },\n sslVerify: null,\n sslCaBundle: null,\n noRestart: null,\n encryptionVersion: null,\n calendarUnprotected: null,\n calendarIcons: null,\n proxySetting: null,\n proxyProviders: null,\n proxyClients: null,\n proxyIndexers: null,\n proxyOthers: null,\n skipRemovedFiles: null,\n epDefaultDeletedStatus: null,\n developer: null,\n experimental: null,\n git: {\n username: null,\n password: null,\n token: null,\n authType: null,\n remote: null,\n path: null,\n org: null,\n reset: null,\n resetBranches: null,\n url: null\n },\n // Remove backlogOverview after manage_backlogOverview.mako is gone.\n backlogOverview: {\n status: null,\n period: null\n },\n // Remove themeName when we get fully rid of MEDUSA.config.\n themeName: null\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG](state, {\n section,\n config\n }) {\n if (section === 'main') {\n state = Object.assign(state, config);\n }\n },\n\n addRecentShow(state, {\n show\n }) {\n state.recentShows = state.recentShows.filter(filterShow => !(filterShow.showSlug === show.showSlug && filterShow.name === show.name));\n state.recentShows.unshift(show); // Add the new show object to the start of the array.\n\n state.recentShows = state.recentShows.slice(0, 5); // Cut the array of at 5 items.\n }\n\n};\nconst getters = {\n effectiveIgnored: (state, _, rootState) => series => {\n const seriesIgnored = series.config.release.ignoredWords.map(x => x.toLowerCase());\n const globalIgnored = rootState.config.search.filters.ignored.map(x => x.toLowerCase());\n\n if (!series.config.release.ignoredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayUnique)(globalIgnored.concat(seriesIgnored));\n }\n\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayExclude)(globalIgnored, seriesIgnored);\n },\n effectiveRequired: (state, _, rootState) => series => {\n const seriesRequired = series.config.release.requiredWords.map(x => x.toLowerCase());\n const globalRequired = rootState.config.search.filters.required.map(x => x.toLowerCase());\n\n if (!series.config.release.requiredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayUnique)(globalRequired.concat(seriesRequired));\n }\n\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayExclude)(globalRequired, seriesRequired);\n }\n};\nconst actions = {\n getConfig(context, section) {\n const {\n commit\n } = context;\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/config/' + (section || '')).then(res => {\n if (section) {\n const config = res.data;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n return config;\n }\n\n const sections = res.data;\n Object.keys(sections).forEach(section => {\n const config = sections[section];\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n });\n return sections;\n });\n },\n\n setConfig(context, {\n section,\n config\n }) {\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.patch(`config/${section}`, config);\n },\n\n updateConfig(context, {\n section,\n config\n }) {\n const {\n commit\n } = context;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n },\n\n getApiKey(context) {\n const {\n commit\n } = context;\n const section = 'main';\n const config = {\n webInterface: {\n apiKey: ''\n }\n };\n return _api__WEBPACK_IMPORTED_MODULE_0__.apiRoute.get('config/general/generate_api_key').then(response => {\n config.webInterface.apiKey = response.data;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n });\n },\n\n setRecentShow({\n commit,\n state\n }, show) {\n commit('addRecentShow', {\n show\n });\n const config = {\n recentShows: state.recentShows\n };\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.patch('config/main', config);\n },\n\n setCustomLogs({\n commit\n }, logs) {\n // Convert back to object.\n const reducedLogs = logs.reduce((obj, item) => ({ ...obj,\n [item.identifier]: item.level\n }), {});\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.patch('config/main', {\n logs: {\n custom: logs\n }\n }).then(() => {\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section: 'main',\n config: {\n logs: {\n custom: reducedLogs\n }\n }\n });\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/config/general.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/* harmony import */ var _utils_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils/core */ \"./src/utils/core.js\");\n\n\n\nconst state = {\n addTitleWithYear: null,\n wikiUrl: null,\n donationsUrl: null,\n namingForceFolders: null,\n sourceUrl: null,\n rootDirs: [],\n subtitles: {\n enabled: null\n },\n brokenProviders: [],\n logs: {\n debug: null,\n dbDebug: null,\n loggingLevels: {},\n numErrors: null,\n numWarnings: null,\n actualLogDir: null,\n nr: null,\n size: null,\n subliminalLog: null,\n privacyLevel: null,\n custom: {}\n },\n cpuPreset: null,\n subtitlesMulti: null,\n anonRedirect: null,\n recentShows: [],\n randomShowSlug: null,\n // @TODO: Recreate this in Vue when the webapp has a reliable list of shows to choose from.\n showDefaults: {\n status: null,\n statusAfter: null,\n quality: null,\n subtitles: null,\n seasonFolders: null,\n anime: null,\n scene: null,\n showLists: null\n },\n launchBrowser: null,\n defaultPage: null,\n trashRemoveShow: null,\n indexerDefaultLanguage: null,\n showUpdateHour: null,\n indexerTimeout: null,\n indexerDefault: null,\n plexFallBack: {\n enable: null,\n notifications: null,\n timeout: null\n },\n versionNotify: null,\n autoUpdate: null,\n updateFrequency: null,\n notifyOnUpdate: null,\n availableThemes: null,\n timePresets: [],\n datePresets: [],\n webInterface: {\n apiKey: null,\n log: null,\n username: null,\n password: null,\n port: null,\n host: null,\n notifyOnLogin: null,\n ipv6: null,\n httpsEnable: null,\n httpsCert: null,\n httpsKey: null,\n handleReverseProxy: null\n },\n sslVerify: null,\n sslCaBundle: null,\n noRestart: null,\n encryptionVersion: null,\n calendarUnprotected: null,\n calendarIcons: null,\n proxySetting: null,\n proxyProviders: null,\n proxyClients: null,\n proxyIndexers: null,\n proxyOthers: null,\n skipRemovedFiles: null,\n epDefaultDeletedStatus: null,\n developer: null,\n experimental: null,\n git: {\n username: null,\n password: null,\n token: null,\n authType: null,\n remote: null,\n path: null,\n org: null,\n reset: null,\n resetBranches: null,\n url: null\n },\n // Remove backlogOverview after manage_backlogOverview.mako is gone.\n backlogOverview: {\n status: null,\n period: null\n },\n // Remove themeName when we get fully rid of MEDUSA.config.\n themeName: null,\n providers: {\n prowlarr: {\n url: null,\n apikey: null\n }\n }\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG](state, {\n section,\n config\n }) {\n if (section === 'main') {\n state = Object.assign(state, config);\n }\n },\n\n addRecentShow(state, {\n show\n }) {\n state.recentShows = state.recentShows.filter(filterShow => !(filterShow.showSlug === show.showSlug && filterShow.name === show.name));\n state.recentShows.unshift(show); // Add the new show object to the start of the array.\n\n state.recentShows = state.recentShows.slice(0, 5); // Cut the array of at 5 items.\n }\n\n};\nconst getters = {\n effectiveIgnored: (state, _, rootState) => series => {\n const seriesIgnored = series.config.release.ignoredWords.map(x => x.toLowerCase());\n const globalIgnored = rootState.config.search.filters.ignored.map(x => x.toLowerCase());\n\n if (!series.config.release.ignoredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayUnique)(globalIgnored.concat(seriesIgnored));\n }\n\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayExclude)(globalIgnored, seriesIgnored);\n },\n effectiveRequired: (state, _, rootState) => series => {\n const seriesRequired = series.config.release.requiredWords.map(x => x.toLowerCase());\n const globalRequired = rootState.config.search.filters.required.map(x => x.toLowerCase());\n\n if (!series.config.release.requiredWordsExclude) {\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayUnique)(globalRequired.concat(seriesRequired));\n }\n\n return (0,_utils_core__WEBPACK_IMPORTED_MODULE_2__.arrayExclude)(globalRequired, seriesRequired);\n }\n};\nconst actions = {\n getConfig(context, section) {\n const {\n commit\n } = context;\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/config/' + (section || '')).then(res => {\n if (section) {\n const config = res.data;\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n return config;\n }\n\n const sections = res.data;\n Object.keys(sections).forEach(section => {\n const config = sections[section];\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n });\n return sections;\n });\n },\n\n setConfig(context, {\n section,\n config\n }) {\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.patch(`config/${section}`, config);\n },\n\n updateConfig(context, {\n section,\n config\n }) {\n const {\n commit\n } = context;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n },\n\n getApiKey(context) {\n const {\n commit\n } = context;\n const section = 'main';\n const config = {\n webInterface: {\n apiKey: ''\n }\n };\n return _api__WEBPACK_IMPORTED_MODULE_0__.apiRoute.get('config/general/generate_api_key').then(response => {\n config.webInterface.apiKey = response.data;\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section,\n config\n });\n });\n },\n\n setRecentShow({\n commit,\n state\n }, show) {\n commit('addRecentShow', {\n show\n });\n const config = {\n recentShows: state.recentShows\n };\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.patch('config/main', config);\n },\n\n setCustomLogs({\n commit\n }, logs) {\n // Convert back to object.\n const reducedLogs = logs.reduce((obj, item) => ({ ...obj,\n [item.identifier]: item.level\n }), {});\n return _api__WEBPACK_IMPORTED_MODULE_0__.api.patch('config/main', {\n logs: {\n custom: logs\n }\n }).then(() => {\n return commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_CONFIG, {\n section: 'main',\n config: {\n logs: {\n custom: reducedLogs\n }\n }\n });\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/config/general.js?"); /***/ }), @@ -1412,7 +1489,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 vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\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\n\nconst state = {\n providers: {}\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDERS](state, providers) {\n for (const provider of providers) {\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(state.providers, provider.id, { ...state.providers[provider.id],\n ...provider\n });\n }\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER_CACHE](state, {\n providerId,\n cache\n }) {\n // Check if this provider has already been added.\n if (!state.providers[providerId]) {\n state.providers[providerId] = {\n name: '',\n config: {}\n };\n }\n\n if (state.providers[providerId].cache === undefined) {\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(state.providers[providerId], 'cache', []);\n }\n\n const newCache = [];\n\n for (const result of cache) {\n const existingIdentifier = state.providers[providerId].cache.find(item => item.identifier === result.identifier);\n\n if (existingIdentifier) {\n newCache.push({ ...existingIdentifier,\n ...result\n });\n } else {\n newCache.push(result);\n }\n }\n\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(state.providers[providerId], 'cache', newCache);\n },\n\n /**\n * Add search results which have been retreived through the webSocket.\n * @param {*} state - Vue state\n * @param {Array} searchResults - One or more search results.\n */\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SEARCH_RESULTS](state, searchResults) {\n for (const searchResult of searchResults) {\n if (!state.providers[searchResult.provider.id]) {\n state.providers[searchResult.provider.id] = {\n name: '',\n config: {},\n cache: []\n };\n }\n\n const {\n cache\n } = state.providers[searchResult.provider.id]; // Check if we don't allready have this result in our store.\n // In that case, we update the existing object.\n\n const existingSearchResult = (cache || []).find(result => result.identifier === searchResult.identifier);\n\n if (existingSearchResult) {\n // Because this is an existing result, whe're not overwriting dateAdded field.\n const {\n dateAdded,\n ...rest\n } = searchResult;\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(state.providers[searchResult.provider.id].cache, cache.indexOf(existingSearchResult), { ...existingSearchResult,\n ...rest\n });\n } else {\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(state.providers[searchResult.provider.id], 'cache', [...(cache || []), ...[searchResult]]);\n }\n }\n }\n\n};\nconst getters = {};\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 providers.\n *\n * @param {*} context The store context.\n * @returns {Promise} The API response.\n */\n getProviders(context) {\n return new Promise((resolve, reject) => {\n const {\n commit\n } = context;\n _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/providers').then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDERS, response.data);\n resolve();\n }).catch(error => {\n console.error(`Could not get providers with error: ${error}`);\n reject();\n });\n });\n },\n\n /**\n * Get provider cache results for enabled providers.\n *\n * @param {*} context The store context.\n * @param {String} The provider id.\n * @returns {void}.\n */\n async getProviderCacheResults(context, {\n showSlug,\n season,\n episode\n }) {\n const {\n commit,\n state\n } = context;\n const limit = 1000;\n const params = {\n limit,\n showslug: showSlug,\n season\n };\n\n if (episode) {\n params.episode = episode;\n }\n\n const getProviderResults = async provider => {\n let page = 0;\n let lastPage = false;\n const results = [];\n const {\n id: providerId\n } = state.providers[provider];\n page = 0;\n lastPage = false;\n\n while (!lastPage) {\n let response = null;\n page += 1;\n params.page = page;\n\n try {\n response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.get(`/providers/${providerId}/results`, {\n params\n }); // eslint-disable-line no-await-in-loop\n } catch (error) {\n if (error.response && error.response.status === 404) {\n console.debug(`No results available for provider ${provider}`);\n }\n\n lastPage = true;\n }\n\n if (response) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER_CACHE, {\n providerId,\n cache: response.data\n });\n results.push(...response.data);\n\n if (response.data.length < limit) {\n lastPage = true;\n }\n } else {\n lastPage = true;\n }\n }\n\n return results;\n };\n\n const result = {\n providersSearched: 0,\n totalSearchResults: []\n };\n\n for (const provider in state.providers) {\n if (!state.providers[provider].config.enabled) {\n continue;\n }\n\n result.providersSearched += 1;\n const providerResults = await getProviderResults(provider); // eslint-disable-line no-await-in-loop\n\n result.totalSearchResults.push(...providerResults);\n }\n\n return result;\n },\n\n /**\n * Get provider cache results for enabled providers.\n *\n * @param {*} {commit} Destructured commit object.\n * @param {Object} searchResult - Search result.\n * @returns {void}.\n */\n addManualSearchResult({\n commit\n }, searchResult) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SEARCH_RESULTS, [searchResult]);\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/provider.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 vue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue */ \"./node_modules/vue/dist/vue.esm.js\");\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\n\nconst state = {\n providers: []\n};\nconst mutations = {\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER](state, provider) {\n if (!state.providers.find(p => p.id === provider.id)) {\n state.providers.push(provider);\n }\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDERS](state, providers) {\n providers.forEach(provider => {\n const existingProvider = state.providers.find(p => p.id === provider.id);\n\n if (existingProvider) {\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(state.providers, state.providers.indexOf(existingProvider), provider);\n } else {\n state.providers.push(provider);\n }\n });\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.REMOVE_PROVIDER](state, providerId) {\n state.providers = state.providers.filter(prov => prov.id !== providerId);\n },\n\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER_CACHE](state, {\n providerId,\n cache\n }) {\n // Check if this provider has already been added.\n let currentProvider = state.providers.find(prov => prov.id === providerId);\n\n if (!currentProvider) {\n currentProvider = {\n name: '',\n config: {}\n };\n state.providers.push(currentProvider);\n }\n\n if (currentProvider.cache === undefined) {\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(currentProvider, 'cache', []);\n }\n\n const newCache = [];\n\n for (const result of cache) {\n const existingIdentifier = currentProvider.cache.find(item => item.identifier === result.identifier);\n\n if (existingIdentifier) {\n newCache.push({ ...existingIdentifier,\n ...result\n });\n } else {\n newCache.push(result);\n }\n }\n\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(currentProvider, 'cache', newCache);\n },\n\n /**\n * Add search results which have been retreived through the webSocket.\n * @param {*} state - Vue state\n * @param {Array} searchResults - One or more search results.\n */\n [_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SEARCH_RESULTS](state, searchResults) {\n for (const searchResult of searchResults) {\n let currentProvider = state.providers.find(prov => prov.id === searchResult.provider.id);\n\n if (!currentProvider) {\n currentProvider = {\n name: '',\n config: {},\n cache: []\n };\n }\n\n const {\n cache\n } = currentProvider; // Check if we don't allready have this result in our store.\n // In that case, we update the existing object.\n\n const existingSearchResult = (cache || []).find(result => result.identifier === searchResult.identifier);\n\n if (existingSearchResult) {\n // Because this is an existing result, whe're not overwriting dateAdded field.\n const {\n dateAdded,\n ...rest\n } = searchResult;\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(currentProvider.cache, cache.indexOf(existingSearchResult), { ...existingSearchResult,\n ...rest\n });\n } else {\n vue__WEBPACK_IMPORTED_MODULE_2__.default.set(currentProvider, 'cache', [...(cache || []), ...[searchResult]]);\n }\n }\n }\n\n};\nconst getters = {\n providerNameToId: _ => providerName => providerName.replace(/[^\\d\\w_]/gi, '_').toLowerCase().trim() // eslint-disable-line unicorn/better-regex\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 providers.\n *\n * @param {*} context The store context.\n * @returns {Promise} The API response.\n */\n getProviders(context) {\n return new Promise((resolve, reject) => {\n const {\n commit\n } = context;\n _api__WEBPACK_IMPORTED_MODULE_0__.api.get('/providers').then(response => {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDERS, response.data);\n resolve();\n }).catch(error => {\n console.error(`Could not get providers with error: ${error}`);\n reject();\n });\n });\n },\n\n /**\n * Get provider cache results for enabled providers.\n *\n * @param {*} context The store context.\n * @param {String} The provider id.\n * @returns {void}.\n */\n async getProviderCacheResults(context, {\n showSlug,\n season,\n episode\n }) {\n const {\n commit,\n state\n } = context;\n const limit = 1000;\n const params = {\n limit,\n showslug: showSlug,\n season\n };\n\n if (episode) {\n params.episode = episode;\n }\n\n const getProviderResults = async provider => {\n let page = 0;\n let lastPage = false;\n const results = [];\n const currentProvider = state.providers.find(prov => prov.id === provider.id);\n\n if (!currentProvider) {\n return results;\n }\n\n const {\n id: providerId\n } = currentProvider;\n page = 0;\n lastPage = false;\n\n while (!lastPage) {\n let response = null;\n page += 1;\n params.page = page;\n\n try {\n response = await _api__WEBPACK_IMPORTED_MODULE_0__.api.get(`/providers/${providerId}/results`, {\n params\n }); // eslint-disable-line no-await-in-loop\n } catch (error) {\n if (error.response && error.response.status === 404) {\n console.debug(`No results available for provider ${provider}`);\n }\n\n lastPage = true;\n }\n\n if (response) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_PROVIDER_CACHE, {\n providerId,\n cache: response.data\n });\n results.push(...response.data);\n\n if (response.data.length < limit) {\n lastPage = true;\n }\n } else {\n lastPage = true;\n }\n }\n\n return results;\n };\n\n const result = {\n providersSearched: 0,\n totalSearchResults: []\n };\n\n for (const provider of state.providers) {\n if (!provider.config.enabled) {\n continue;\n }\n\n result.providersSearched += 1;\n const providerResults = await getProviderResults(provider); // eslint-disable-line no-await-in-loop\n\n result.totalSearchResults.push(...providerResults);\n }\n\n return result;\n },\n\n /**\n * Get provider cache results for enabled providers.\n *\n * @param {*} {commit} Destructured commit object.\n * @param {Object} searchResult - Search result.\n * @returns {void}.\n */\n addManualSearchResult({\n commit\n }, searchResult) {\n commit(_mutation_types__WEBPACK_IMPORTED_MODULE_1__.ADD_SEARCH_RESULTS, [searchResult]);\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/provider.js?"); /***/ }), @@ -1478,7 +1555,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 */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst LOGIN_PENDING = '🔒 Logging in';\nconst LOGIN_SUCCESS = '🔒 ✅ Login Successful';\nconst LOGIN_FAILED = '🔒 ❌ Login Failed';\nconst LOGOUT = '🔒 Logout';\nconst REFRESH_TOKEN = '🔒 Refresh Token';\nconst REMOVE_AUTH_ERROR = '🔒 Remove Auth Error';\nconst SOCKET_ONOPEN = '🔗 ✅ WebSocket connected';\nconst SOCKET_ONCLOSE = '🔗 ❌ WebSocket disconnected';\nconst SOCKET_ONERROR = '🔗 ❌ WebSocket error';\nconst SOCKET_ONMESSAGE = '🔗 ✉️ 📥 WebSocket message received';\nconst SOCKET_RECONNECT = '🔗 🔃 WebSocket reconnecting';\nconst SOCKET_RECONNECT_ERROR = '🔗 🔃 ❌ WebSocket reconnection attempt failed';\nconst NOTIFICATIONS_ENABLED = '🔔 Notifications Enabled';\nconst NOTIFICATIONS_DISABLED = '🔔 Notifications Disabled';\nconst ADD_CONFIG = '⚙️ Config added to store';\nconst UPDATE_LAYOUT_LOCAL = '⚙️ Local layout updated in store';\nconst ADD_REMOTE_BRANCHES = '⚙️ Add git remote branches to store';\nconst ADD_SHOW = '📺 Show added to store';\nconst ADD_SHOW_CONFIG = '📺 Show config updated in store';\nconst ADD_SHOWS = '📺 Multiple Shows added to store in bulk';\nconst ADD_SHOW_EPISODE = '📺 Shows season with episodes added to store';\nconst ADD_STATS = 'ℹ️ Statistics added to store';\nconst SET_STATS = 'SET_STATS';\nconst SET_MAX_DOWNLOAD_COUNT = 'SET_MAX_DOWNLOAD_COUNT';\nconst ADD_SHOW_SCENE_EXCEPTION = '📺 Add a scene exception';\nconst REMOVE_SHOW_SCENE_EXCEPTION = '📺 Remove a scene exception';\nconst ADD_HISTORY = '📺 History added to store';\nconst ADD_HISTORY_ROW = '📺 History row added to store';\nconst ADD_SHOW_HISTORY = '📺 Show specific History added to store';\nconst ADD_SHOW_EPISODE_HISTORY = \"📺 Show's episode specific History added to store\";\nconst ADD_PROVIDERS = '⛽ Provider list added to store';\nconst ADD_PROVIDER_CACHE = '⛽ Provider cache results added to store';\nconst ADD_SEARCH_RESULTS = '⛽ New search results added for provider';\nconst ADD_QUEUE_ITEM = '🔍 Search queue item updated';\nconst ADD_SHOW_QUEUE_ITEM = '📺 Show queue item added to store';\nconst REMOVE_SHOW = '📺 Show removed from store';\nconst UPDATE_SHOWLIST_DEFAULT = '⚙️ Anime config showlist default updated';\nconst ADD_SCHEDULE = '📅 Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"LOGIN_PENDING\": () => (/* binding */ LOGIN_PENDING),\n/* harmony export */ \"LOGIN_SUCCESS\": () => (/* binding */ LOGIN_SUCCESS),\n/* harmony export */ \"LOGIN_FAILED\": () => (/* binding */ LOGIN_FAILED),\n/* harmony export */ \"LOGOUT\": () => (/* binding */ LOGOUT),\n/* harmony export */ \"REFRESH_TOKEN\": () => (/* binding */ REFRESH_TOKEN),\n/* harmony export */ \"REMOVE_AUTH_ERROR\": () => (/* binding */ REMOVE_AUTH_ERROR),\n/* harmony export */ \"SOCKET_ONOPEN\": () => (/* binding */ SOCKET_ONOPEN),\n/* harmony export */ \"SOCKET_ONCLOSE\": () => (/* binding */ SOCKET_ONCLOSE),\n/* harmony export */ \"SOCKET_ONERROR\": () => (/* binding */ SOCKET_ONERROR),\n/* harmony export */ \"SOCKET_ONMESSAGE\": () => (/* binding */ SOCKET_ONMESSAGE),\n/* harmony export */ \"SOCKET_RECONNECT\": () => (/* binding */ SOCKET_RECONNECT),\n/* harmony export */ \"SOCKET_RECONNECT_ERROR\": () => (/* binding */ SOCKET_RECONNECT_ERROR),\n/* harmony export */ \"NOTIFICATIONS_ENABLED\": () => (/* binding */ NOTIFICATIONS_ENABLED),\n/* harmony export */ \"NOTIFICATIONS_DISABLED\": () => (/* binding */ NOTIFICATIONS_DISABLED),\n/* harmony export */ \"ADD_CONFIG\": () => (/* binding */ ADD_CONFIG),\n/* harmony export */ \"UPDATE_LAYOUT_LOCAL\": () => (/* binding */ UPDATE_LAYOUT_LOCAL),\n/* harmony export */ \"ADD_HISTORY\": () => (/* binding */ ADD_HISTORY),\n/* harmony export */ \"ADD_HISTORY_ROW\": () => (/* binding */ ADD_HISTORY_ROW),\n/* harmony export */ \"ADD_SHOW\": () => (/* binding */ ADD_SHOW),\n/* harmony export */ \"ADD_SHOW_CONFIG\": () => (/* binding */ ADD_SHOW_CONFIG),\n/* harmony export */ \"ADD_SHOWS\": () => (/* binding */ ADD_SHOWS),\n/* harmony export */ \"ADD_SHOW_EPISODE\": () => (/* binding */ ADD_SHOW_EPISODE),\n/* harmony export */ \"ADD_STATS\": () => (/* binding */ ADD_STATS),\n/* harmony export */ \"ADD_REMOTE_BRANCHES\": () => (/* binding */ ADD_REMOTE_BRANCHES),\n/* harmony export */ \"SET_STATS\": () => (/* binding */ SET_STATS),\n/* harmony export */ \"SET_MAX_DOWNLOAD_COUNT\": () => (/* binding */ SET_MAX_DOWNLOAD_COUNT),\n/* harmony export */ \"ADD_SHOW_SCENE_EXCEPTION\": () => (/* binding */ ADD_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"REMOVE_SHOW_SCENE_EXCEPTION\": () => (/* binding */ REMOVE_SHOW_SCENE_EXCEPTION),\n/* harmony export */ \"ADD_SHOW_HISTORY\": () => (/* binding */ ADD_SHOW_HISTORY),\n/* harmony export */ \"ADD_SHOW_EPISODE_HISTORY\": () => (/* binding */ ADD_SHOW_EPISODE_HISTORY),\n/* harmony export */ \"ADD_PROVIDER\": () => (/* binding */ ADD_PROVIDER),\n/* harmony export */ \"ADD_PROVIDERS\": () => (/* binding */ ADD_PROVIDERS),\n/* harmony export */ \"ADD_PROVIDER_CACHE\": () => (/* binding */ ADD_PROVIDER_CACHE),\n/* harmony export */ \"ADD_SEARCH_RESULTS\": () => (/* binding */ ADD_SEARCH_RESULTS),\n/* harmony export */ \"ADD_QUEUE_ITEM\": () => (/* binding */ ADD_QUEUE_ITEM),\n/* harmony export */ \"ADD_SHOW_QUEUE_ITEM\": () => (/* binding */ ADD_SHOW_QUEUE_ITEM),\n/* harmony export */ \"REMOVE_SHOW\": () => (/* binding */ REMOVE_SHOW),\n/* harmony export */ \"REMOVE_PROVIDER\": () => (/* binding */ REMOVE_PROVIDER),\n/* harmony export */ \"UPDATE_SHOWLIST_DEFAULT\": () => (/* binding */ UPDATE_SHOWLIST_DEFAULT),\n/* harmony export */ \"ADD_SCHEDULE\": () => (/* binding */ ADD_SCHEDULE)\n/* harmony export */ });\nconst LOGIN_PENDING = '🔒 Logging in';\nconst LOGIN_SUCCESS = '🔒 ✅ Login Successful';\nconst LOGIN_FAILED = '🔒 ❌ Login Failed';\nconst LOGOUT = '🔒 Logout';\nconst REFRESH_TOKEN = '🔒 Refresh Token';\nconst REMOVE_AUTH_ERROR = '🔒 Remove Auth Error';\nconst SOCKET_ONOPEN = '🔗 ✅ WebSocket connected';\nconst SOCKET_ONCLOSE = '🔗 ❌ WebSocket disconnected';\nconst SOCKET_ONERROR = '🔗 ❌ WebSocket error';\nconst SOCKET_ONMESSAGE = '🔗 ✉️ 📥 WebSocket message received';\nconst SOCKET_RECONNECT = '🔗 🔃 WebSocket reconnecting';\nconst SOCKET_RECONNECT_ERROR = '🔗 🔃 ❌ WebSocket reconnection attempt failed';\nconst NOTIFICATIONS_ENABLED = '🔔 Notifications Enabled';\nconst NOTIFICATIONS_DISABLED = '🔔 Notifications Disabled';\nconst ADD_CONFIG = '⚙️ Config added to store';\nconst UPDATE_LAYOUT_LOCAL = '⚙️ Local layout updated in store';\nconst ADD_REMOTE_BRANCHES = '⚙️ Add git remote branches to store';\nconst ADD_SHOW = '📺 Show added to store';\nconst ADD_SHOW_CONFIG = '📺 Show config updated in store';\nconst ADD_SHOWS = '📺 Multiple Shows added to store in bulk';\nconst ADD_SHOW_EPISODE = '📺 Shows season with episodes added to store';\nconst ADD_STATS = 'ℹ️ Statistics added to store';\nconst SET_STATS = 'SET_STATS';\nconst SET_MAX_DOWNLOAD_COUNT = 'SET_MAX_DOWNLOAD_COUNT';\nconst ADD_SHOW_SCENE_EXCEPTION = '📺 Add a scene exception';\nconst REMOVE_SHOW_SCENE_EXCEPTION = '📺 Remove a scene exception';\nconst ADD_HISTORY = '📺 History added to store';\nconst ADD_HISTORY_ROW = '📺 History row added to store';\nconst ADD_SHOW_HISTORY = '📺 Show specific History added to store';\nconst ADD_SHOW_EPISODE_HISTORY = \"📺 Show's episode specific History added to store\";\nconst ADD_PROVIDER = '⛽ Provider added to store';\nconst ADD_PROVIDERS = '⛽ Provider list added to store';\nconst ADD_PROVIDER_CACHE = '⛽ Provider cache results added to store';\nconst ADD_SEARCH_RESULTS = '⛽ New search results added for provider';\nconst ADD_QUEUE_ITEM = '🔍 Search queue item updated';\nconst ADD_SHOW_QUEUE_ITEM = '📺 Show queue item added to store';\nconst REMOVE_SHOW = '📺 Show removed from store';\nconst REMOVE_PROVIDER = '⛽ Provider removed';\nconst UPDATE_SHOWLIST_DEFAULT = '⚙️ Anime config showlist default updated';\nconst ADD_SCHEDULE = '📅 Schedule information added';\n\n\n//# sourceURL=webpack://slim/./src/store/mutation-types.js?"); /***/ }), @@ -1585,6 +1662,46 @@ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../. /***/ }), +/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css&": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css& ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.warning-enter-active[data-v-91b3dacc],\\n.warning-leave-active[data-v-91b3dacc] {\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: ease-in;\\n -webkit-transition-timing-function: ease-in;\\n -o-transition-timing-function: ease-in;\\n transition-timing-function: ease-in;\\n}\\n.warning-enter-to[data-v-91b3dacc],\\n.warning-leave[data-v-91b3dacc] {\\n max-height: 100%;\\n}\\n.warning-enter[data-v-91b3dacc],\\n.warning-leave-to[data-v-91b3dacc] {\\n max-height: 0;\\n}\\n.warning[data-v-91b3dacc] {\\n display: block;\\n overflow: hidden;\\n width: 100%;\\n position: absolute;\\n left: 0;\\n background-color: #e23636;\\n padding: 0 2px 0 2px;\\n}\\n.manager-note[data-v-91b3dacc] {\\n margin: 5px 0;\\n padding: 10px;\\n border: 1px solid #ccc;\\n}\\n.manager-note > img[data-v-91b3dacc] {\\n width: 16px;\\n padding-bottom: 4px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-newznab.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css&": +/*!******************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css& ***! + \******************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.testresult[data-v-86a6f9ec] {\\n display: inline-block;\\n border-style: solid;\\n border-width: 1px;\\n padding: 1px 4px 4px 4px;\\n border-color: #ccc;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-prowlarr.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css&": +/*!********************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css& ***! + \********************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.warning-enter-active[data-v-4cd1772d],\\n.warning-leave-active[data-v-4cd1772d] {\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: ease-in;\\n -webkit-transition-timing-function: ease-in;\\n -o-transition-timing-function: ease-in;\\n transition-timing-function: ease-in;\\n}\\n.warning-enter-to[data-v-4cd1772d],\\n.warning-leave[data-v-4cd1772d] {\\n max-height: 100%;\\n}\\n.warning-enter[data-v-4cd1772d],\\n.warning-leave-to[data-v-4cd1772d] {\\n max-height: 0;\\n}\\n.warning[data-v-4cd1772d] {\\n display: block;\\n overflow: hidden;\\n width: 100%;\\n position: absolute;\\n left: 0;\\n background-color: #e23636;\\n padding: 0 2px 0 2px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torrentrss.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css&": +/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css& ***! + \*****************************************************************************************************************************************************************************************************************************************************************************************************************/ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + +eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(function(i){return i[1]});\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.warning-enter-active[data-v-4beaf95e],\\n.warning-leave-active[data-v-4beaf95e] {\\n -moz-transition-duration: 0.3s;\\n -webkit-transition-duration: 0.3s;\\n -o-transition-duration: 0.3s;\\n transition-duration: 0.3s;\\n -moz-transition-timing-function: ease-in;\\n -webkit-transition-timing-function: ease-in;\\n -o-transition-timing-function: ease-in;\\n transition-timing-function: ease-in;\\n}\\n.warning-enter-to[data-v-4beaf95e],\\n.warning-leave[data-v-4beaf95e] {\\n max-height: 100%;\\n}\\n.warning-enter[data-v-4beaf95e],\\n.warning-leave-to[data-v-4beaf95e] {\\n max-height: 0;\\n}\\n.warning[data-v-4beaf95e] {\\n display: block;\\n overflow: hidden;\\n width: 100%;\\n position: absolute;\\n left: 0;\\n background-color: #e23636;\\n padding: 0 2px 0 2px;\\n z-index: 1;\\n}\\n.manager-note[data-v-4beaf95e] {\\n margin: 5px 0;\\n padding: 10px;\\n border: 1px solid #ccc;\\n}\\n.manager-note > img[data-v-4beaf95e] {\\n width: 16px;\\n padding-bottom: 4px;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = ___CSS_LOADER_EXPORT___;\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torznab.vue?./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3%5B0%5D.rules%5B0%5D.use%5B1%5D!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-scene-exceptions.vue?vue&type=style&index=0&id=1c188ea6&scoped=true&lang=css&": /*!*******************************************************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-scene-exceptions.vue?vue&type=style&index=0&id=1c188ea6&scoped=true&lang=css& ***! @@ -2118,6 +2235,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/config-providers.vue": +/*!*********************************************!*\ + !*** ./src/components/config-providers.vue ***! + \*********************************************/ +/***/ ((__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 _config_providers_vue_vue_type_template_id_e5a0f732___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config-providers.vue?vue&type=template&id=e5a0f732& */ \"./src/components/config-providers.vue?vue&type=template&id=e5a0f732&\");\n/* harmony import */ var _config_providers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-providers.vue?vue&type=script&lang=js& */ \"./src/components/config-providers.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__.default)(\n _config_providers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.default,\n _config_providers_vue_vue_type_template_id_e5a0f732___WEBPACK_IMPORTED_MODULE_0__.render,\n _config_providers_vue_vue_type_template_id_e5a0f732___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/config-providers.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/config-providers.vue?"); + +/***/ }), + /***/ "./src/components/config-search.vue": /*!******************************************!*\ !*** ./src/components/config-search.vue ***! @@ -2195,6 +2323,72 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/helpers/config-custom-newznab.vue": +/*!**********************************************************!*\ + !*** ./src/components/helpers/config-custom-newznab.vue ***! + \**********************************************************/ +/***/ ((__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 _config_custom_newznab_vue_vue_type_template_id_91b3dacc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true& */ \"./src/components/helpers/config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true&\");\n/* harmony import */ var _config_custom_newznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-custom-newznab.vue?vue&type=script&lang=js& */ \"./src/components/helpers/config-custom-newznab.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _config_custom_newznab_vue_vue_type_style_index_0_id_91b3dacc_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css& */ \"./src/components/helpers/config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__.default)(\n _config_custom_newznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.default,\n _config_custom_newznab_vue_vue_type_template_id_91b3dacc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _config_custom_newznab_vue_vue_type_template_id_91b3dacc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"91b3dacc\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/helpers/config-custom-newznab.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-newznab.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-prowlarr.vue": +/*!***********************************************************!*\ + !*** ./src/components/helpers/config-custom-prowlarr.vue ***! + \***********************************************************/ +/***/ ((__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 _config_custom_prowlarr_vue_vue_type_template_id_86a6f9ec_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true& */ \"./src/components/helpers/config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true&\");\n/* harmony import */ var _config_custom_prowlarr_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-custom-prowlarr.vue?vue&type=script&lang=js& */ \"./src/components/helpers/config-custom-prowlarr.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _config_custom_prowlarr_vue_vue_type_style_index_0_id_86a6f9ec_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css& */ \"./src/components/helpers/config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__.default)(\n _config_custom_prowlarr_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.default,\n _config_custom_prowlarr_vue_vue_type_template_id_86a6f9ec_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _config_custom_prowlarr_vue_vue_type_template_id_86a6f9ec_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"86a6f9ec\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/helpers/config-custom-prowlarr.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-prowlarr.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torrentrss.vue": +/*!*************************************************************!*\ + !*** ./src/components/helpers/config-custom-torrentrss.vue ***! + \*************************************************************/ +/***/ ((__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 _config_custom_torrentrss_vue_vue_type_template_id_4cd1772d_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true& */ \"./src/components/helpers/config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true&\");\n/* harmony import */ var _config_custom_torrentrss_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-custom-torrentrss.vue?vue&type=script&lang=js& */ \"./src/components/helpers/config-custom-torrentrss.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _config_custom_torrentrss_vue_vue_type_style_index_0_id_4cd1772d_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css& */ \"./src/components/helpers/config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__.default)(\n _config_custom_torrentrss_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.default,\n _config_custom_torrentrss_vue_vue_type_template_id_4cd1772d_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _config_custom_torrentrss_vue_vue_type_template_id_4cd1772d_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"4cd1772d\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/helpers/config-custom-torrentrss.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torrentrss.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torznab.vue": +/*!**********************************************************!*\ + !*** ./src/components/helpers/config-custom-torznab.vue ***! + \**********************************************************/ +/***/ ((__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 _config_custom_torznab_vue_vue_type_template_id_4beaf95e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true& */ \"./src/components/helpers/config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true&\");\n/* harmony import */ var _config_custom_torznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-custom-torznab.vue?vue&type=script&lang=js& */ \"./src/components/helpers/config-custom-torznab.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _config_custom_torznab_vue_vue_type_style_index_0_id_4beaf95e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css& */ \"./src/components/helpers/config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n;\n\n\n/* normalize component */\n\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__.default)(\n _config_custom_torznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.default,\n _config_custom_torznab_vue_vue_type_template_id_4beaf95e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render,\n _config_custom_torznab_vue_vue_type_template_id_4beaf95e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n \"4beaf95e\",\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/helpers/config-custom-torznab.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torznab.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-provider-nzb.vue": +/*!********************************************************!*\ + !*** ./src/components/helpers/config-provider-nzb.vue ***! + \********************************************************/ +/***/ ((__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 _config_provider_nzb_vue_vue_type_template_id_0944e0fb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config-provider-nzb.vue?vue&type=template&id=0944e0fb& */ \"./src/components/helpers/config-provider-nzb.vue?vue&type=template&id=0944e0fb&\");\n/* harmony import */ var _config_provider_nzb_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-provider-nzb.vue?vue&type=script&lang=js& */ \"./src/components/helpers/config-provider-nzb.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__.default)(\n _config_provider_nzb_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.default,\n _config_provider_nzb_vue_vue_type_template_id_0944e0fb___WEBPACK_IMPORTED_MODULE_0__.render,\n _config_provider_nzb_vue_vue_type_template_id_0944e0fb___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/helpers/config-provider-nzb.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-nzb.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-provider-torrent.vue": +/*!************************************************************!*\ + !*** ./src/components/helpers/config-provider-torrent.vue ***! + \************************************************************/ +/***/ ((__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 _config_provider_torrent_vue_vue_type_template_id_759f5275___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./config-provider-torrent.vue?vue&type=template&id=759f5275& */ \"./src/components/helpers/config-provider-torrent.vue?vue&type=template&id=759f5275&\");\n/* harmony import */ var _config_provider_torrent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-provider-torrent.vue?vue&type=script&lang=js& */ \"./src/components/helpers/config-provider-torrent.vue?vue&type=script&lang=js&\");\n/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ \"./node_modules/vue-loader/lib/runtime/componentNormalizer.js\");\n\n\n\n\n\n/* normalize component */\n;\nvar component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__.default)(\n _config_provider_torrent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__.default,\n _config_provider_torrent_vue_vue_type_template_id_759f5275___WEBPACK_IMPORTED_MODULE_0__.render,\n _config_provider_torrent_vue_vue_type_template_id_759f5275___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\n/* hot reload */\nif (false) { var api; }\ncomponent.options.__file = \"src/components/helpers/config-provider-torrent.vue\"\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-torrent.vue?"); + +/***/ }), + /***/ "./src/components/helpers/config-scene-exceptions.vue": /*!************************************************************!*\ !*** ./src/components/helpers/config-scene-exceptions.vue ***! @@ -2943,6 +3137,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/config-providers.vue?vue&type=script&lang=js&": +/*!**********************************************************************!*\ + !*** ./src/components/config-providers.vue?vue&type=script&lang=js& ***! + \**********************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_providers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-providers.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-providers.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_providers_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.default); \n\n//# sourceURL=webpack://slim/./src/components/config-providers.vue?"); + +/***/ }), + /***/ "./src/components/config-search.vue?vue&type=script&lang=js&": /*!*******************************************************************!*\ !*** ./src/components/config-search.vue?vue&type=script&lang=js& ***! @@ -3020,6 +3225,72 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/helpers/config-custom-newznab.vue?vue&type=script&lang=js&": +/*!***********************************************************************************!*\ + !*** ./src/components/helpers/config-custom-newznab.vue?vue&type=script&lang=js& ***! + \***********************************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-newznab.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.default); \n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-newznab.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-prowlarr.vue?vue&type=script&lang=js&": +/*!************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-prowlarr.vue?vue&type=script&lang=js& ***! + \************************************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-prowlarr.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.default); \n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-prowlarr.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torrentrss.vue?vue&type=script&lang=js&": +/*!**************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-torrentrss.vue?vue&type=script&lang=js& ***! + \**************************************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torrentrss.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.default); \n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torrentrss.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torznab.vue?vue&type=script&lang=js&": +/*!***********************************************************************************!*\ + !*** ./src/components/helpers/config-custom-torznab.vue?vue&type=script&lang=js& ***! + \***********************************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torznab.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.default); \n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torznab.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-provider-nzb.vue?vue&type=script&lang=js&": +/*!*********************************************************************************!*\ + !*** ./src/components/helpers/config-provider-nzb.vue?vue&type=script&lang=js& ***! + \*********************************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_nzb_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-nzb.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-nzb.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_nzb_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.default); \n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-nzb.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-provider-torrent.vue?vue&type=script&lang=js&": +/*!*************************************************************************************!*\ + !*** ./src/components/helpers/config-provider-torrent.vue?vue&type=script&lang=js& ***! + \*************************************************************************************/ +/***/ ((__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 _node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_torrent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-torrent.vue?vue&type=script&lang=js& */ \"./node_modules/babel-loader/lib/index.js??clonedRuleSet-1[0].rules[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-torrent.vue?vue&type=script&lang=js&\");\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_1_0_rules_0_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_torrent_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__.default); \n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-torrent.vue?"); + +/***/ }), + /***/ "./src/components/helpers/config-scene-exceptions.vue?vue&type=script&lang=js&": /*!*************************************************************************************!*\ !*** ./src/components/helpers/config-scene-exceptions.vue?vue&type=script&lang=js& ***! @@ -3768,6 +4039,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/config-providers.vue?vue&type=template&id=e5a0f732&": +/*!****************************************************************************!*\ + !*** ./src/components/config-providers.vue?vue&type=template&id=e5a0f732& ***! + \****************************************************************************/ +/***/ ((__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\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_providers_vue_vue_type_template_id_e5a0f732___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_providers_vue_vue_type_template_id_e5a0f732___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_providers_vue_vue_type_template_id_e5a0f732___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-providers.vue?vue&type=template&id=e5a0f732& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-providers.vue?vue&type=template&id=e5a0f732&\");\n\n\n//# sourceURL=webpack://slim/./src/components/config-providers.vue?"); + +/***/ }), + /***/ "./src/components/config-search.vue?vue&type=template&id=3e2dc133&": /*!*************************************************************************!*\ !*** ./src/components/config-search.vue?vue&type=template&id=3e2dc133& ***! @@ -3845,6 +4127,72 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./src/components/helpers/config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true&": +/*!*****************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true& ***! + \*****************************************************************************************************/ +/***/ ((__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\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_template_id_91b3dacc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_template_id_91b3dacc_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_template_id_91b3dacc_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true&\");\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-newznab.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true&": +/*!******************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true& ***! + \******************************************************************************************************/ +/***/ ((__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\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_template_id_86a6f9ec_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_template_id_86a6f9ec_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_template_id_86a6f9ec_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true&\");\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-prowlarr.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true&": +/*!********************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true& ***! + \********************************************************************************************************/ +/***/ ((__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\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_template_id_4cd1772d_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_template_id_4cd1772d_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_template_id_4cd1772d_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true&\");\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torrentrss.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true&": +/*!*****************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true& ***! + \*****************************************************************************************************/ +/***/ ((__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\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_template_id_4beaf95e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_template_id_4beaf95e_scoped_true___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_template_id_4beaf95e_scoped_true___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true&\");\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torznab.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-provider-nzb.vue?vue&type=template&id=0944e0fb&": +/*!***************************************************************************************!*\ + !*** ./src/components/helpers/config-provider-nzb.vue?vue&type=template&id=0944e0fb& ***! + \***************************************************************************************/ +/***/ ((__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\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_nzb_vue_vue_type_template_id_0944e0fb___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_nzb_vue_vue_type_template_id_0944e0fb___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_nzb_vue_vue_type_template_id_0944e0fb___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-nzb.vue?vue&type=template&id=0944e0fb& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-nzb.vue?vue&type=template&id=0944e0fb&\");\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-nzb.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-provider-torrent.vue?vue&type=template&id=759f5275&": +/*!*******************************************************************************************!*\ + !*** ./src/components/helpers/config-provider-torrent.vue?vue&type=template&id=759f5275& ***! + \*******************************************************************************************/ +/***/ ((__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\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_torrent_vue_vue_type_template_id_759f5275___WEBPACK_IMPORTED_MODULE_0__.render),\n/* harmony export */ \"staticRenderFns\": () => (/* reexport safe */ _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_torrent_vue_vue_type_template_id_759f5275___WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)\n/* harmony export */ });\n/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_config_provider_torrent_vue_vue_type_template_id_759f5275___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-provider-torrent.vue?vue&type=template&id=759f5275& */ \"./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-torrent.vue?vue&type=template&id=759f5275&\");\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-torrent.vue?"); + +/***/ }), + /***/ "./src/components/helpers/config-scene-exceptions.vue?vue&type=template&id=1c188ea6&scoped=true&": /*!*******************************************************************************************************!*\ !*** ./src/components/helpers/config-scene-exceptions.vue?vue&type=template&id=1c188ea6&scoped=true& ***! @@ -4538,6 +4886,50 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _nod /***/ }), +/***/ "./src/components/helpers/config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css&": +/*!*******************************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css& ***! + \*******************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_style_index_0_id_91b3dacc_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css& */ \"./node_modules/vue-style-loader/index.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=style&index=0&id=91b3dacc&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_style_index_0_id_91b3dacc_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_style_index_0_id_91b3dacc_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_style_index_0_id_91b3dacc_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_newznab_vue_vue_type_style_index_0_id_91b3dacc_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-newznab.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css&": +/*!********************************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css& ***! + \********************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_style_index_0_id_86a6f9ec_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css& */ \"./node_modules/vue-style-loader/index.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=style&index=0&id=86a6f9ec&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_style_index_0_id_86a6f9ec_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_style_index_0_id_86a6f9ec_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_style_index_0_id_86a6f9ec_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_prowlarr_vue_vue_type_style_index_0_id_86a6f9ec_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-prowlarr.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css&": +/*!**********************************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css& ***! + \**********************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_style_index_0_id_4cd1772d_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css& */ \"./node_modules/vue-style-loader/index.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=style&index=0&id=4cd1772d&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_style_index_0_id_4cd1772d_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_style_index_0_id_4cd1772d_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_style_index_0_id_4cd1772d_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torrentrss_vue_vue_type_style_index_0_id_4cd1772d_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torrentrss.vue?"); + +/***/ }), + +/***/ "./src/components/helpers/config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css&": +/*!*******************************************************************************************************************!*\ + !*** ./src/components/helpers/config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css& ***! + \*******************************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_style_index_0_id_4beaf95e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/vue-style-loader/index.js!../../../node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css& */ \"./node_modules/vue-style-loader/index.js!./node_modules/css-loader/dist/cjs.js??clonedRuleSet-3[0].rules[0].use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=style&index=0&id=4beaf95e&scoped=true&lang=css&\");\n/* harmony import */ var _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_style_index_0_id_4beaf95e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_style_index_0_id_4beaf95e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_style_index_0_id_4beaf95e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _node_modules_vue_style_loader_index_js_node_modules_css_loader_dist_cjs_js_clonedRuleSet_3_0_rules_0_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_vue_loader_lib_index_js_vue_loader_options_config_custom_torznab_vue_vue_type_style_index_0_id_4beaf95e_scoped_true_lang_css___WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torznab.vue?"); + +/***/ }), + /***/ "./src/components/helpers/config-scene-exceptions.vue?vue&type=style&index=0&id=1c188ea6&scoped=true&lang=css&": /*!*********************************************************************************************************************!*\ !*** ./src/components/helpers/config-scene-exceptions.vue?vue&type=style&index=0&id=1c188ea6&scoped=true&lang=css& ***! @@ -5088,6 +5480,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-providers.vue?vue&type=template&id=e5a0f732&": +/*!*******************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-providers.vue?vue&type=template&id=e5a0f732& ***! + \*******************************************************************************************************************************************************************************************************************/ +/***/ ((__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 { attrs: { id: \"config-providers\" } },\n [\n _c(\"vue-snotify\"),\n _vm._v(\" \"),\n _c(\n \"vue-tabs\",\n [\n _c(\n \"v-tab\",\n {\n key: \"provider_priorities\",\n attrs: { title: \"Provider Priorities\" }\n },\n [\n _c(\"div\", { staticClass: \"row component-group\" }, [\n _c(\n \"div\",\n { staticClass: \"component-group-desc col-xs-12 col-md-2\" },\n [\n _c(\"h3\", [_vm._v(\"Provider Priorities\")]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"Check off and drag the providers into the order you want them to be used.\"\n )\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"At least one provider is required but two are recommended.\"\n )\n ]),\n _vm._v(\" \"),\n !_vm.clients.nzb.enabled || !_vm.clients.torrents.enabled\n ? _c(\n \"blockquote\",\n { staticStyle: { margin: \"20px 0\" } },\n [\n _vm._v(\"NZB/Torrent providers can be toggled in \"),\n _c(\n \"b\",\n [\n _c(\n \"app-link\",\n { attrs: { href: \"config/search\" } },\n [_vm._v(\"Search Settings\")]\n )\n ],\n 1\n )\n ]\n )\n : _c(\"br\"),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"p\", { staticClass: \"note\" }, [\n _c(\"span\", { staticClass: \"red-text\" }, [_vm._v(\"*\")]),\n _vm._v(\n \" Provider does not support backlog searches at this time.\"\n )\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"note\" }, [\n _c(\"span\", { staticClass: \"red-text\" }, [_vm._v(\"!\")]),\n _vm._v(\" Provider is \"),\n _c(\"b\", [_vm._v(\"NOT WORKING\")]),\n _vm._v(\".\")\n ])\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-xs-12 col-md-10\" },\n [\n _c(\n \"draggable\",\n {\n staticClass: \"list-group\",\n attrs: {\n id: \"provider_order_list\",\n tag: \"ul\",\n handle: \".ui-state-default\"\n },\n model: {\n value: _vm.providerPriorities,\n callback: function($$v) {\n _vm.providerPriorities = $$v\n },\n expression: \"providerPriorities\"\n }\n },\n _vm._l(_vm.providerPriorities, function(currentProvider) {\n return _c(\n \"li\",\n {\n key: currentProvider.id,\n staticClass: \"ui-state-default\",\n class: [\n currentProvider.type === \"torrent\"\n ? \"torrent-provider\"\n : \"nzb-provider\"\n ],\n attrs: { id: currentProvider.id }\n },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: currentProvider.config.enabled,\n expression: \"currentProvider.config.enabled\"\n }\n ],\n staticClass: \"provider_enabler\",\n attrs: {\n type: \"checkbox\",\n id: \"enable_\" + currentProvider.name,\n disabled: _vm.general.brokenProviders.includes(\n currentProvider.id\n )\n },\n domProps: {\n checked: Array.isArray(\n currentProvider.config.enabled\n )\n ? _vm._i(\n currentProvider.config.enabled,\n null\n ) > -1\n : currentProvider.config.enabled\n },\n on: {\n change: function($event) {\n var $$a = currentProvider.config.enabled,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n _vm.$set(\n currentProvider.config,\n \"enabled\",\n $$a.concat([$$v])\n )\n } else {\n $$i > -1 &&\n _vm.$set(\n currentProvider.config,\n \"enabled\",\n $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1))\n )\n }\n } else {\n _vm.$set(\n currentProvider.config,\n \"enabled\",\n $$c\n )\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\n \"app-link\",\n {\n staticClass: \"imgLink\",\n attrs: {\n href: currentProvider.url,\n rel: \"noreferrer\",\n onclick:\n \"window.open(this.href, '_blank'); return false;\"\n }\n },\n [\n _c(\"img\", {\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n src:\n \"images/providers/\" +\n currentProvider.imageName,\n alt: currentProvider.name,\n title: currentProvider.name,\n width: \"16\",\n height: \"16\"\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { staticStyle: { \"vertical-align\": \"middle\" } },\n [_vm._v(_vm._s(currentProvider.name))]\n ),\n _vm._v(\" \"),\n !currentProvider.config.search.backlog.enabled\n ? _c(\"span\", { staticClass: \"red-text\" }, [\n _vm._v(\"*\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.general.brokenProviders.includes(\n currentProvider.id\n )\n ? _c(\"span\", { staticClass: \"red-text\" }, [\n _vm._v(\"!\")\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"span\", {\n staticClass:\n \"ui-icon ui-icon-arrowthick-2-n-s pull-right\",\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: { title: \"Re-order provider\" }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n staticClass: \"ui-icon pull-right\",\n class: [\n currentProvider.public\n ? \"ui-icon-unlocked\"\n : \"ui-icon-locked\"\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: { title: \"Public or Private\" }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n class: [\n currentProvider.config.search.manual.enabled\n ? \"ui-icon enable-manual-search-icon pull-right\"\n : \"\"\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: {\n title: \"Enabled for 'Manual Search' feature\"\n }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n class: [\n currentProvider.config.search.backlog.enabled\n ? \"ui-icon enable-backlog-search-icon pull-right\"\n : \"\"\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: { title: \"Enabled for Backlog Searches\" }\n }),\n _vm._v(\" \"),\n _c(\"span\", {\n class: [\n currentProvider.config.search.backlog.enabled\n ? \"ui-icon enable-daily-search-icon pull-right\"\n : \"\"\n ],\n staticStyle: { \"vertical-align\": \"middle\" },\n attrs: { title: \"Enabled for Daily Searches\" }\n })\n ],\n 1\n )\n }),\n 0\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { disabled: _vm.saving },\n on: {\n click: function($event) {\n return _vm.save()\n }\n }\n },\n [_vm._v(\"Save Changes\")]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"v-tab\",\n {\n key: \"provider_options\",\n attrs: { title: \"Provider Options & Feel\" }\n },\n [\n _c(\"div\", { staticClass: \"row component-group\" }, [\n _c(\n \"div\",\n { staticClass: \"component-group-desc col-xs-12 col-md-2\" },\n [\n _c(\"h3\", [_vm._v(\"Provider Options\")]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\"Configure individual provider settings here.\")\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"Check with provider's website on how to obtain an API key if needed.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-xs-12 col-md-10\" },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"edit_a_provider\",\n label: \"Select Provider\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedProvider,\n expression: \"selectedProvider\"\n }\n ],\n staticClass: \"form-control input-sm\",\n attrs: { id: \"edit_a_provider\" },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedProvider = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n [\n _c(\n \"option\",\n { attrs: { disabled: \"\", value: \"\" } },\n [_vm._v(\"Select Provider\")]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.enabledProviders, function(option) {\n return _c(\n \"option\",\n {\n key: option.value,\n domProps: { value: option.value }\n },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n })\n ],\n 2\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.currentProvider\n ? [\n _vm.currentProvider.type === \"nzb\"\n ? _c(\"config-provider-nzb\", {\n attrs: { provider: _vm.currentProvider }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.currentProvider.type === \"torrent\"\n ? _c(\"config-provider-torrent\", {\n attrs: { provider: _vm.currentProvider }\n })\n : _vm._e()\n ]\n : _vm._e()\n ],\n 2\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { disabled: _vm.saving },\n on: {\n click: function($event) {\n return _vm.save()\n }\n }\n },\n [_vm._v(\"Save Changes\")]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"v-tab\",\n {\n key: \"custom_newznab_providers\",\n attrs: { title: \"Configure Custom Newznab Providers\" }\n },\n [\n _c(\"div\", { staticClass: \"row component-group\" }, [\n _c(\n \"div\",\n { staticClass: \"component-group-desc col-xs-12 col-md-2\" },\n [\n _c(\"h3\", [_vm._v(\"Configure Custom Newznab Providers\")]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"Add and setup or remove custom Newznab providers.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-xs-12 col-md-10\" },\n [\n _c(\"config-custom-newznab\", {\n on: {\n save: function($event) {\n return _vm.save()\n }\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { disabled: _vm.saving },\n on: {\n click: function($event) {\n return _vm.save()\n }\n }\n },\n [_vm._v(\"Save Changes\")]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"v-tab\",\n {\n key: \"custom_torrent_providers\",\n attrs: { title: \"Configure Custom Torrent Providers\" }\n },\n [\n _c(\"div\", { staticClass: \"row component-group\" }, [\n _c(\n \"div\",\n { staticClass: \"component-group-desc col-xs-12 col-md-2\" },\n [\n _c(\"h3\", [_vm._v(\"Configure Custom Torrent Providers\")]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\"Add and setup or remove custom RSS providers.\")\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-xs-12 col-md-10\" },\n [\n _c(\"config-custom-torrentrss\", {\n on: {\n save: function($event) {\n return _vm.save()\n }\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { disabled: _vm.saving },\n on: {\n click: function($event) {\n return _vm.save()\n }\n }\n },\n [_vm._v(\"Save Changes\")]\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"v-tab\",\n {\n key: \"custom_torznab_providers\",\n attrs: { title: \"Configure Custom Torznab Providers\" }\n },\n [\n _c(\"div\", { staticClass: \"row component-group\" }, [\n _c(\n \"div\",\n { staticClass: \"component-group-desc col-xs-12 col-md-2\" },\n [\n _c(\"h3\", [_vm._v(\"Configure Torznab Providers\")]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\"Add and setup or remove Torznab providers.\")\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _c(\"img\", {\n attrs: { src: \"images/providers/jackett.png\" }\n }),\n _vm._v(\n \"\\n When using Jackett. You can add it's jackett url's here. Jackett makes use of the Torznab protocol.\\n \"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-xs-12 col-md-10\" },\n [\n _c(\"config-custom-torznab\", {\n on: {\n save: function($event) {\n return _vm.save()\n }\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"btn-medusa config_submitter\",\n attrs: {\n type: \"submit\",\n value: \"Save Changes\",\n disabled: _vm.saving\n }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"v-tab\",\n {\n key: \"custom_prowlarr_providers\",\n attrs: { title: \"Configure Custom Prowlarr Providers\" }\n },\n [\n _c(\"div\", { staticClass: \"row component-group\" }, [\n _c(\n \"div\",\n { staticClass: \"component-group-desc col-xs-12 col-md-2\" },\n [\n _c(\"img\", {\n attrs: { src: \"images/providers/prowlarr.png\" }\n }),\n _vm._v(\" \"),\n _c(\"h3\", [_vm._v(\"Configure Prowlarr\")]),\n _vm._v(\" \"),\n _c(\"p\", [_vm._v(\"Add or Remove Prowlarr providers\")])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-xs-12 col-md-10\" },\n [\n _c(\"config-custom-prowlarr\", {\n on: {\n save: function($event) {\n return _vm.save()\n }\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"btn-medusa config_submitter\",\n attrs: {\n type: \"submit\",\n value: \"Save Changes\",\n disabled: _vm.saving\n }\n })\n ]\n )\n ],\n 1\n )\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/config-providers.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-search.vue?vue&type=template&id=3e2dc133&": /*!****************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/config-search.vue?vue&type=template&id=3e2dc133& ***! @@ -5165,6 +5568,72 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true&": +/*!********************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-newznab.vue?vue&type=template&id=91b3dacc&scoped=true& ***! + \********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__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 { attrs: { id: \"custom-newznab\" } },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"select_newznab_provider\",\n label: \"Select Provider\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedProvider,\n expression: \"selectedProvider\"\n }\n ],\n staticClass: \"form-control input-sm\",\n attrs: { id: \"select-provider\" },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedProvider = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n [\n _c(\"option\", { attrs: { value: \"#add\" } }, [\n _vm._v(\"--- add new provider ---\")\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.newznabProviderOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n })\n ],\n 2\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.currentProvider && _vm.selectedProvider !== \"#add\"\n ? _c(\n \"div\",\n { staticClass: \"edit-provider\" },\n [\n _c(\"config-textbox\", {\n attrs: {\n disabled: \"\",\n label: \"Provider name\",\n id: \"edit_provider_name\"\n },\n model: {\n value: _vm.currentProvider.name,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider, \"name\", $$v)\n },\n expression: \"currentProvider.name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n disabled: \"\",\n label: \"Site Url\",\n id: \"edit_provider_url\"\n },\n model: {\n value: _vm.currentProvider.url,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider, \"url\", $$v)\n },\n expression: \"currentProvider.url\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"Api key\",\n id: \"edit_provider_api\"\n },\n model: {\n value: _vm.currentProvider.config.apikey,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider.config, \"apikey\", $$v)\n },\n expression: \"currentProvider.config.apikey\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n { attrs: { label: \"Categories\", \"label-for\": \"catids\" } },\n [\n _c(\"multiselect\", {\n attrs: {\n value: _vm.providerCatIds,\n multiple: true,\n options: _vm.availableCategories,\n label: \"id\",\n \"track-by\": \"id\"\n },\n on: {\n input: function($event) {\n _vm.currentProvider.config.catIds = $event.map(function(\n cat\n ) {\n return cat.id\n })\n }\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"option\",\n fn: function(props) {\n return [\n _c(\"span\", [\n _c(\"strong\", [_vm._v(_vm._s(props.option.id))]),\n _vm._v(\" (\" + _vm._s(props.option.name) + \")\")\n ])\n ]\n }\n }\n ],\n null,\n false,\n 3628531788\n )\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-danger newznab_delete\",\n attrs: {\n disabled: _vm.currentProvider.default,\n id: \"newznab_delete\"\n },\n on: { click: _vm.removeProvider }\n },\n [_vm._v(\"Delete\")]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter_refresh\",\n on: {\n click: function($event) {\n return _vm.$emit(\"save\")\n }\n }\n },\n [_vm._v(\"Save Changes\")]\n ),\n _vm._v(\" \"),\n _vm.currentProvider.manager === \"prowlarr\"\n ? _c(\"p\", { staticClass: \"manager-note\" }, [\n _c(\"img\", {\n staticStyle: { width: \"16px\" },\n attrs: { src: \"images/providers/prowlarr.png\" }\n }),\n _vm._v(\n \"\\n Note! This is a provider configured through the 'Configure Custom Prowlarr Providers' tab.\\n \"\n )\n ])\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedProvider === \"#add\"\n ? _c(\n \"div\",\n { staticClass: \"add-provider\" },\n [\n _c(\"config-textbox\", {\n attrs: { label: \"Provider name\", id: \"add_provider_name\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"warning\",\n fn: function() {\n return [\n _c(\"transition\", { attrs: { name: \"warning\" } }, [\n !_vm.providerIdAvailable\n ? _c(\"div\", { staticClass: \"warning\" }, [\n _vm._v(\"This provider id is already used.\")\n ])\n : _vm._e()\n ])\n ]\n },\n proxy: true\n }\n ],\n null,\n false,\n 3405532282\n ),\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: { label: \"Site Url\", id: \"add_provider_url\" },\n model: {\n value: _vm.url,\n callback: function($$v) {\n _vm.url = $$v\n },\n expression: \"url\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"Api key\",\n id: \"add_provider_api\"\n },\n model: {\n value: _vm.apikey,\n callback: function($$v) {\n _vm.apikey = $$v\n },\n expression: \"apikey\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { disabled: !_vm.providerIdAvailable },\n on: { click: _vm.addProvider }\n },\n [_vm._v(\"Add Provider\")]\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-newznab.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true&": +/*!*********************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-prowlarr.vue?vue&type=template&id=86a6f9ec&scoped=true& ***! + \*********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__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(\"div\", { attrs: { id: \"custom-prowlarr\" } }, [\n _c(\"div\", { staticClass: \"row\" }, [\n _c(\n \"div\",\n { staticClass: \"col-lg-12\" },\n [\n _c(\"config-textbox\", {\n attrs: { label: \"Prowler Url\", id: \"prowler_url\" },\n model: {\n value: _vm.prowlarr.url,\n callback: function($$v) {\n _vm.$set(_vm.prowlarr, \"url\", $$v)\n },\n expression: \"prowlarr.url\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: { label: \"Api Key\", id: \"prowler_apikey\" },\n model: {\n value: _vm.prowlarr.apikey,\n callback: function($$v) {\n _vm.$set(_vm.prowlarr, \"apikey\", $$v)\n },\n expression: \"prowlarr.apikey\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n on: { click: _vm.saveConfig }\n },\n [_vm._v(\"Save\")]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n on: { click: _vm.testConnectivity }\n },\n [_vm._v(\"Test\")]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n on: { click: _vm.getAvailableProviders }\n },\n [_vm._v(\"Get Providers\")]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.testResult,\n expression: \"testResult\"\n }\n ],\n staticClass: \"testresult\"\n },\n [_vm._v(_vm._s(_vm.testResult))]\n )\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"row\" }, [\n _c(\n \"div\",\n { staticClass: \"col-lg-12 vgt-table-styling\" },\n [\n _c(\"h3\", [_vm._v(\"Available providers\")]),\n _vm._v(\" \"),\n _c(\"vue-good-table\", {\n attrs: {\n columns: _vm.columns,\n rows: _vm.prowlarrProviders,\n \"search-options\": {\n enabled: false\n },\n \"sort-options\": {\n enabled: true,\n initialSortBy: { field: \"name\", type: \"asc\" }\n },\n styleClass: \"vgt-table condensed\"\n },\n scopedSlots: _vm._u([\n {\n key: \"table-row\",\n fn: function(props) {\n return [\n props.column.label === \"Added\"\n ? _c(\"span\", { staticClass: \"align-center\" }, [\n props.row.localProvider\n ? _c(\"img\", { attrs: { src: \"/images/yes16.png\" } })\n : _vm._e()\n ])\n : props.column.label === \"Action\"\n ? _c(\"span\", { staticClass: \"align-center\" }, [\n !props.row.localProvider\n ? _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n on: {\n click: function($event) {\n return _vm.addProvider(props.row)\n }\n }\n },\n [_vm._v(\"Add Provider\")]\n )\n : _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-danger\",\n on: {\n click: function($event) {\n return _vm.removeProvider(props.row)\n }\n }\n },\n [_vm._v(\"Remove Provider\")]\n )\n ])\n : _vm._e()\n ]\n }\n }\n ])\n })\n ],\n 1\n )\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-prowlarr.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true&": +/*!***********************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torrentrss.vue?vue&type=template&id=4cd1772d&scoped=true& ***! + \***********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__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 { attrs: { id: \"custom-torrentrss\" } },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"select_torrentrss_provider\",\n label: \"Select Provider\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedProvider,\n expression: \"selectedProvider\"\n }\n ],\n staticClass: \"form-control input-sm\",\n attrs: { id: \"select-provider\" },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedProvider = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n [\n _c(\"option\", { attrs: { value: \"#add\" } }, [\n _vm._v(\"--- add new provider ---\")\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.torrentrssProviderOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n })\n ],\n 2\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.currentProvider && _vm.selectedProvider !== \"#add\"\n ? _c(\n \"div\",\n { staticClass: \"edit-provider\" },\n [\n _c(\"config-textbox\", {\n attrs: {\n disabled: \"\",\n label: \"Provider name\",\n id: \"edit_provider_name\"\n },\n model: {\n value: _vm.currentProvider.name,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider, \"name\", $$v)\n },\n expression: \"currentProvider.name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n disabled: \"\",\n label: \"Rss Url\",\n id: \"edit_provider_url\"\n },\n model: {\n value: _vm.currentProvider.url,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider, \"url\", $$v)\n },\n expression: \"currentProvider.url\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n label: \"Cookies (optional)\",\n id: \"edit_provider_cookies\"\n },\n model: {\n value: _vm.currentProvider.config.cookies,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider.config, \"cookies\", $$v)\n },\n expression: \"currentProvider.config.cookies\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n label: \"Search element\",\n id: \"edit_provider_search_element\"\n },\n model: {\n value: _vm.currentProvider.config.titleTag,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider.config, \"titleTag\", $$v)\n },\n expression: \"currentProvider.config.titleTag\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-danger torrentrss_delete\",\n attrs: { id: \"torrentrss_delete\" },\n on: { click: _vm.removeProvider }\n },\n [_vm._v(\"Delete\")]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter_refresh\",\n on: {\n click: function($event) {\n return _vm.$emit(\"save\")\n }\n }\n },\n [_vm._v(\"Save Changes\")]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedProvider === \"#add\"\n ? _c(\n \"div\",\n { staticClass: \"add-provider\" },\n [\n _c(\"config-textbox\", {\n attrs: { label: \"Provider name\", id: \"add_provider_name\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"warning\",\n fn: function() {\n return [\n _c(\"transition\", { attrs: { name: \"warning\" } }, [\n !_vm.providerIdAvailable\n ? _c(\"div\", { staticClass: \"warning\" }, [\n _vm._v(\"This provider id is already used.\")\n ])\n : _vm._e()\n ])\n ]\n },\n proxy: true\n }\n ],\n null,\n false,\n 3405532282\n ),\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: { label: \"Site Url\", id: \"add_provider_url\" },\n model: {\n value: _vm.url,\n callback: function($$v) {\n _vm.url = $$v\n },\n expression: \"url\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: { label: \"Cookies\", id: \"add_provider_cookies\" },\n model: {\n value: _vm.cookies,\n callback: function($$v) {\n _vm.cookies = $$v\n },\n expression: \"cookies\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n label: \"Search element\",\n id: \"add_provider_search_element\"\n },\n model: {\n value: _vm.searchElement,\n callback: function($$v) {\n _vm.searchElement = $$v\n },\n expression: \"searchElement\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { disabled: !_vm.providerIdAvailable },\n on: { click: _vm.addProvider }\n },\n [_vm._v(\"Add Provider\")]\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torrentrss.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true&": +/*!********************************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-custom-torznab.vue?vue&type=template&id=4beaf95e&scoped=true& ***! + \********************************************************************************************************************************************************************************************************************************************/ +/***/ ((__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 { attrs: { id: \"custom-torznab\" } },\n [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"select_torznab_provider\",\n label: \"Select Provider\"\n }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.selectedProvider,\n expression: \"selectedProvider\"\n }\n ],\n staticClass: \"form-control input-sm\",\n attrs: { id: \"select-provider\" },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.selectedProvider = $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n }\n }\n },\n [\n _c(\"option\", { attrs: { value: \"#add\" } }, [\n _vm._v(\"--- add new provider ---\")\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.torznabProviderOptions, function(option) {\n return _c(\n \"option\",\n { key: option.value, domProps: { value: option.value } },\n [\n _vm._v(\n \"\\n \" +\n _vm._s(option.text) +\n \"\\n \"\n )\n ]\n )\n })\n ],\n 2\n )\n ]\n ),\n _vm._v(\" \"),\n _vm.currentProvider && _vm.selectedProvider !== \"#add\"\n ? _c(\n \"div\",\n { staticClass: \"edit-provider\" },\n [\n _c(\"config-textbox\", {\n attrs: {\n disabled: \"\",\n label: \"Provider name\",\n id: \"edit_provider_name\"\n },\n model: {\n value: _vm.currentProvider.name,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider, \"name\", $$v)\n },\n expression: \"currentProvider.name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n disabled: \"\",\n label: \"Site Url\",\n id: \"edit_provider_url\"\n },\n model: {\n value: _vm.currentProvider.url,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider, \"url\", $$v)\n },\n expression: \"currentProvider.url\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"Api key\",\n id: \"edit_provider_api\"\n },\n model: {\n value: _vm.currentProvider.config.apikey,\n callback: function($$v) {\n _vm.$set(_vm.currentProvider.config, \"apikey\", $$v)\n },\n expression: \"currentProvider.config.apikey\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n { attrs: { label: \"Categories\", \"label-for\": \"catids\" } },\n [\n _c(\"multiselect\", {\n attrs: {\n value: _vm.providerCatIds,\n multiple: true,\n options: _vm.availableCategories,\n label: \"id\",\n \"track-by\": \"id\"\n },\n on: {\n input: function($event) {\n _vm.currentProvider.config.catIds = $event.map(function(\n cat\n ) {\n return cat.id\n })\n }\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"option\",\n fn: function(props) {\n return [\n _c(\"span\", [\n _c(\"strong\", [_vm._v(_vm._s(props.option.id))]),\n _vm._v(\" (\" + _vm._s(props.option.name) + \")\")\n ])\n ]\n }\n }\n ],\n null,\n false,\n 3628531788\n )\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa btn-danger torznab_delete\",\n attrs: {\n disabled: _vm.currentProvider.default,\n id: \"torznab_delete\"\n },\n on: { click: _vm.removeProvider }\n },\n [_vm._v(\"Delete\")]\n ),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter_refresh\",\n on: {\n click: function($event) {\n return _vm.$emit(\"save\")\n }\n }\n },\n [_vm._v(\"Save Changes\")]\n ),\n _vm._v(\" \"),\n _vm.currentProvider.manager === \"prowlarr\"\n ? _c(\"p\", { staticClass: \"manager-note\" }, [\n _c(\"img\", {\n staticStyle: { width: \"16px\" },\n attrs: { src: \"images/providers/prowlarr.png\" }\n }),\n _vm._v(\n \"\\n Note! This is a provider configured through the 'Configure Custom Prowlarr Providers' tab.\\n \"\n )\n ])\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.selectedProvider === \"#add\"\n ? _c(\n \"div\",\n { staticClass: \"add-provider\" },\n [\n _c(\"config-textbox\", {\n attrs: { label: \"Provider name\", id: \"add_provider_name\" },\n scopedSlots: _vm._u(\n [\n {\n key: \"warning\",\n fn: function() {\n return [\n _c(\"transition\", { attrs: { name: \"warning\" } }, [\n !_vm.providerIdAvailable\n ? _c(\"div\", { staticClass: \"warning\" }, [\n _vm._v(\"This provider id is already used.\")\n ])\n : _vm._e()\n ])\n ]\n },\n proxy: true\n }\n ],\n null,\n false,\n 3405532282\n ),\n model: {\n value: _vm.name,\n callback: function($$v) {\n _vm.name = $$v\n },\n expression: \"name\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: { label: \"Site Url\", id: \"add_provider_url\" },\n model: {\n value: _vm.url,\n callback: function($$v) {\n _vm.url = $$v\n },\n expression: \"url\"\n }\n }),\n _vm._v(\" \"),\n _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"Api key\",\n id: \"add_provider_api\"\n },\n model: {\n value: _vm.apikey,\n callback: function($$v) {\n _vm.apikey = $$v\n },\n expression: \"apikey\"\n }\n }),\n _vm._v(\" \"),\n _c(\n \"button\",\n {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { disabled: !_vm.providerIdAvailable },\n on: { click: _vm.addProvider }\n },\n [_vm._v(\"Add Provider\")]\n )\n ],\n 1\n )\n : _vm._e()\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-custom-torznab.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-nzb.vue?vue&type=template&id=0944e0fb&": +/*!******************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-nzb.vue?vue&type=template&id=0944e0fb& ***! + \******************************************************************************************************************************************************************************************************************************/ +/***/ ((__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(\"div\", { attrs: { id: \"provider-options-nzb\" } }, [\n Object.keys(_vm.editProvider).length > 0\n ? _c(\n \"div\",\n {\n staticClass: \"providerDiv\",\n attrs: { id: _vm.editProvider.id + \"Div\" }\n },\n [\n \"username\" in _vm.editProvider.config &&\n _vm.editProvider.subType !== \"newznab\"\n ? _c(\"config-textbox\", {\n attrs: {\n label: \"Username\",\n id: _vm.editProvider.id + \"_username\"\n },\n model: {\n value: _vm.editProvider.config.username,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"username\", $$v)\n },\n expression: \"editProvider.config.username\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.editProvider.default && _vm.editProvider.needsAuth\n ? [\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": _vm.editProvider.id + \"_url\",\n label: \"URL\"\n }\n },\n [\n _c(\"input\", {\n staticClass: \"form-control input-sm input350\",\n attrs: {\n type: \"text\",\n id: _vm.editProvider.id + \"_url\",\n disabled: \"\"\n },\n domProps: { value: \"\" + _vm.editProvider.url }\n })\n ]\n ),\n _vm._v(\" \"),\n \"apikey\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"API key\",\n id: _vm.editProvider.id + \"_url\",\n \"input-class\": \"newznab_api_key\"\n },\n model: {\n value: _vm.editProvider.config.apikey,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"apikey\", $$v)\n },\n expression: \"editProvider.config.apikey\"\n }\n })\n : _vm._e()\n ]\n : _vm.editProvider.subType !== \"newznab\"\n ? [\n \"apikey\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"API key\",\n id: _vm.editProvider.id + \"_url\",\n \"input-class\": \"newznab_api_key\"\n },\n model: {\n value: _vm.editProvider.config.apikey,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"apikey\", $$v)\n },\n expression: \"editProvider.config.apikey\"\n }\n })\n : _vm._e()\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable daily searches\",\n name: _vm.editProvider.id + \"_enable_daily\",\n id: _vm.editProvider.id + \"_enable_daily\"\n },\n model: {\n value: _vm.editProvider.config.search.daily.enabled,\n callback: function($$v) {\n _vm.$set(\n _vm.editProvider.config.search.daily,\n \"enabled\",\n $$v\n )\n },\n expression: \"editProvider.config.search.daily.enabled\"\n }\n },\n [_c(\"p\", [_vm._v(\"enable provider to perform daily searches.\")])]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable manual searches\",\n name: _vm.editProvider.id + \"_enable_manual\",\n id: _vm.editProvider.id + \"_enable_manual\"\n },\n model: {\n value: _vm.editProvider.config.search.manual.enabled,\n callback: function($$v) {\n _vm.$set(\n _vm.editProvider.config.search.manual,\n \"enabled\",\n $$v\n )\n },\n expression: \"editProvider.config.search.manual.enabled\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"enable provider to be used in 'Manual Search' feature.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable backlog searches\",\n name: _vm.editProvider.id + \"_enable_backlog\",\n id: _vm.editProvider.id + \"_enable_backlog\"\n },\n model: {\n value: _vm.editProvider.config.search.backlog.enabled,\n callback: function($$v) {\n _vm.$set(\n _vm.editProvider.config.search.backlog,\n \"enabled\",\n $$v\n )\n },\n expression: \"editProvider.config.search.backlog.enabled\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\"enable provider to perform backlog searches.\")\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"backlog_search_mode\",\n label: \"Backlog search mode\"\n }\n },\n [\n _c(\"div\", { staticClass: \"radio-item\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.editProvider.config.search.mode,\n expression: \"editProvider.config.search.mode\"\n }\n ],\n attrs: {\n type: \"radio\",\n name: _vm.editProvider.id + \"_search_mode_sponly\",\n id: _vm.editProvider.id + \"_search_mode_sponly\",\n value: \"sponly\"\n },\n domProps: {\n checked: _vm._q(\n _vm.editProvider.config.search.mode,\n \"sponly\"\n )\n },\n on: {\n change: function($event) {\n return _vm.$set(\n _vm.editProvider.config.search,\n \"mode\",\n \"sponly\"\n )\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"one\" } }, [\n _vm._v(\"Season packs only\")\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"radio-item\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.editProvider.config.search.mode,\n expression: \"editProvider.config.search.mode\"\n }\n ],\n attrs: {\n type: \"radio\",\n name: _vm.editProvider.id + \"_search_mode_eponly\",\n id: _vm.editProvider.id + \"_search_mode_eponly\",\n value: \"eponly\"\n },\n domProps: {\n checked: _vm._q(\n _vm.editProvider.config.search.mode,\n \"eponly\"\n )\n },\n on: {\n change: function($event) {\n return _vm.$set(\n _vm.editProvider.config.search,\n \"mode\",\n \"eponly\"\n )\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"one\" } }, [\n _vm._v(\"Episodes only\")\n ])\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"when searching with backlog you can choose to have it look for season packs only, or choose to have it build a complete season from just single episodes.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable fallback\",\n name: _vm.editProvider.id + \"_enable_fallback\",\n id: _vm.editProvider.id + \"_enable_fallback\"\n },\n model: {\n value: _vm.editProvider.config.search.fallback,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config.search, \"fallback\", $$v)\n },\n expression: \"editProvider.config.search.fallback\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable search delay\",\n name: _vm.editProvider.id + \"_enable_search_delay\",\n id: _vm.editProvider.id + \"_enable_search_delay\"\n },\n model: {\n value: _vm.editProvider.config.search.delay.enabled,\n callback: function($$v) {\n _vm.$set(\n _vm.editProvider.config.search.delay,\n \"enabled\",\n $$v\n )\n },\n expression: \"editProvider.config.search.delay.enabled\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"Enable to delay downloads for this provider for an x amount of hours. The provider will start snatching results for a specific episode after a delay has expired, compared to when it first got a result for the specific episode.\"\n )\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"Searches for PROPER releases are exempted from the delay.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _vm.editProvider.config.search.delay.enabled\n ? _c(\n \"config-textbox-number\",\n {\n attrs: {\n value:\n _vm.editProvider.config.search.delay.duration / 60.0,\n label: \"Search delay (hours)\",\n id: _vm.editProvider.id + \"_search_delay_duration\",\n min: 0.5,\n step: 0.5\n },\n on: {\n input: function($event) {\n _vm.editProvider.config.search.delay.duration =\n $event * 60\n }\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"Amount of hours to wait for downloading a result compared to the first result for a specific episode.\"\n )\n ])\n ]\n )\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { type: \"submit\", value: \"Save Changes\", disabled: _vm.saving },\n on: { click: _vm.save }\n })\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-nzb.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-torrent.vue?vue&type=template&id=759f5275&": +/*!**********************************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-provider-torrent.vue?vue&type=template&id=759f5275& ***! + \**********************************************************************************************************************************************************************************************************************************/ +/***/ ((__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(\"div\", { attrs: { id: \"provider-options-torrent\" } }, [\n _c(\n \"div\",\n {\n staticClass: \"providerDiv\",\n attrs: { id: _vm.editProvider.id + \"Div\" }\n },\n [\n \"customUrl\" in _vm.editProvider.config\n ? _c(\n \"config-textbox\",\n {\n attrs: {\n label: \"Custom Url\",\n id: _vm.editProvider.id + \"_custom_url\"\n },\n model: {\n value: _vm.editProvider.config.customUrl,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"customUrl\", $$v)\n },\n expression: \"editProvider.config.customUrl\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"The URL should include the protocol (and port if applicable). Examples: http://192.168.1.4/ or http://localhost:3000/\"\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n \"apikey\" in _vm.editProvider.config &&\n _vm.editProvider.config.subType !== \"torznab\"\n ? _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"API key\",\n id: _vm.editProvider.id + \"_api_key\"\n },\n model: {\n value: _vm.editProvider.config.apikey,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"apikey\", $$v)\n },\n expression: \"editProvider.config.apikey\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"digest\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"Digest\",\n id: _vm.editProvider.id + \"_digest\"\n },\n model: {\n value: _vm.editProvider.config.digest,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"digest\", $$v)\n },\n expression: \"editProvider.config.digest\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"hash\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: { label: \"Hash\", id: _vm.editProvider.id + \"_hash\" },\n model: {\n value: _vm.editProvider.config.hash,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"hash\", $$v)\n },\n expression: \"editProvider.config.hash\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"username\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: {\n label: \"Username\",\n id: _vm.editProvider.id + \"_username\"\n },\n model: {\n value: _vm.editProvider.config.username,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"username\", $$v)\n },\n expression: \"editProvider.config.username\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"password\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: {\n autocomplete: \"no\",\n type: \"password\",\n label: \"Password\",\n id: _vm.editProvider.id + \"_password\"\n },\n model: {\n value: _vm.editProvider.config.password,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"password\", $$v)\n },\n expression: \"editProvider.config.password\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.editProvider.config.cookies.enabled ||\n _vm.editProvider.subType === \"torrentrss\"\n ? _c(\n \"config-textbox\",\n {\n attrs: {\n label: \"Cookies\",\n id: _vm.editProvider.id + \"_cookies\"\n }\n },\n [\n _vm.editProvider.config.cookies.required\n ? [\n _c(\"p\", [\n _vm._v(\n \"eg. \" +\n _vm._s(\n _vm.editProvider.config.cookies.required\n .map(function(cookie) {\n return cookie + \"=xx;\"\n })\n .join(\"\")\n .slice(0, -1)\n )\n )\n ]),\n _vm._v(\" \"),\n _c(\n \"p\",\n [\n _vm._v(\n \"This provider requires the following cookies: \" +\n _vm._s(\n _vm.editProvider.config.cookies.required.join(\n \", \"\n )\n ) +\n \".\\n \"\n ),\n _c(\"br\"),\n _vm._v(\n \"For a step by step guide please follow the link to our \"\n ),\n _c(\n \"app-link\",\n {\n attrs: {\n href:\n \"https://github.com/pymedusa/Medusa/wiki/Configure-Providers-with-captcha-protection\"\n }\n },\n [_vm._v(\"WIKI\")]\n )\n ],\n 1\n )\n ]\n : _vm._e()\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n \"passkey\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: { label: \"Passkey\", id: _vm.editProvider.id + \"_passkey\" },\n model: {\n value: _vm.editProvider.config.passkey,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"passkey\", $$v)\n },\n expression: \"editProvider.config.passkey\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"pin\" in _vm.editProvider.config\n ? _c(\"config-textbox\", {\n attrs: {\n type: \"password\",\n label: \"Pin\",\n id: _vm.editProvider.id + \"_pin\"\n },\n model: {\n value: _vm.editProvider.config.pin,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"pin\", $$v)\n },\n expression: \"editProvider.config.pin\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"ratio\" in _vm.editProvider.config\n ? _c(\n \"config-textbox-number\",\n {\n attrs: {\n min: -1,\n step: 0.1,\n label: \"Seed ratio\",\n id: _vm.editProvider.id + \"_seed_ratio\"\n },\n model: {\n value: _vm.editProvider.config.ratio,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"ratio\", $$v)\n },\n expression: \"editProvider.config.ratio\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"Configure a desired seeding ratio. Used by the (automated download handler in config - postprocessing)\\n \"\n ),\n _c(\"br\"),\n _vm._v(\n \"-1 for provider specific option is disabled.\\n \"\n ),\n _c(\"br\"),\n _vm._v(\n \"0 for not using a seed ratio. Actions configured in the download handler, will not wait for finished seeding.\\n \"\n ),\n _c(\"br\"),\n _vm._v(\n \"If disabled the global option is used in config - postprocessing (automated download handling))\\n \"\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n \"minseed\" in _vm.editProvider.config\n ? _c(\"config-textbox-number\", {\n attrs: {\n label: \"Minimum seeders\",\n min: 0,\n step: 1,\n id: _vm.editProvider.id + \"_min_seed\"\n },\n model: {\n value: _vm.editProvider.config.minseed,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"minseed\", $$v)\n },\n expression: \"editProvider.config.minseed\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"minleech\" in _vm.editProvider.config\n ? _c(\"config-textbox-number\", {\n attrs: {\n label: \"Minimum leechers\",\n min: 0,\n step: 1,\n id: _vm.editProvider.id + \"_min_leech\"\n },\n model: {\n value: _vm.editProvider.config.minleech,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"minleech\", $$v)\n },\n expression: \"editProvider.config.minleech\"\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n \"confirmed\" in _vm.editProvider.config\n ? _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Confirmed downloads\",\n name: _vm.editProvider.id + \"_confirmed\",\n id: _vm.editProvider.id + \"_confirmed\"\n },\n model: {\n value: _vm.editProvider.config.confirmed,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"confirmed\", $$v)\n },\n expression: \"editProvider.config.confirmed\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"only download torrents from trusted or verified uploaders ?\"\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n \"ranked\" in _vm.editProvider.config\n ? _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Ranked torrents\",\n name: _vm.editProvider.id + \"_ranked\",\n id: _vm.editProvider.id + \"_ranked\"\n },\n model: {\n value: _vm.editProvider.config.ranked,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"ranked\", $$v)\n },\n expression: \"editProvider.config.ranked\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\"only download ranked torrents (trusted releases)\")\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n \"sorting\" in _vm.editProvider.config\n ? _c(\n \"config-template\",\n {\n attrs: { \"label-for\": \"sorting\", label: \"Sorting results by\" }\n },\n [\n _c(\n \"select\",\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.editProvider.config.sorting,\n expression: \"editProvider.config.sorting\"\n }\n ],\n staticClass: \"form-control input-sm\",\n attrs: { id: \"sorting\" },\n on: {\n change: function($event) {\n var $$selectedVal = Array.prototype.filter\n .call($event.target.options, function(o) {\n return o.selected\n })\n .map(function(o) {\n var val = \"_value\" in o ? o._value : o.value\n return val\n })\n _vm.$set(\n _vm.editProvider.config,\n \"sorting\",\n $event.target.multiple\n ? $$selectedVal\n : $$selectedVal[0]\n )\n }\n }\n },\n [\n _c(\"option\", { attrs: { value: \"last\" } }, [\n _vm._v(\"last\")\n ]),\n _vm._v(\" \"),\n _c(\"option\", { attrs: { value: \"seeders\" } }, [\n _vm._v(\"seeders\")\n ]),\n _vm._v(\" \"),\n _c(\"option\", { attrs: { value: \"leechers\" } }, [\n _vm._v(\"leechers\")\n ])\n ]\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n \"freeleech\" in _vm.editProvider.config\n ? _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Freeleech\",\n name: _vm.editProvider.id + \"_freeleech\",\n id: _vm.editProvider.id + \"_freeleech\"\n },\n model: {\n value: _vm.editProvider.config.freeleech,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config, \"freeleech\", $$v)\n },\n expression: \"editProvider.config.freeleech\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\"only download \"),\n _c(\"b\", [_vm._v('\"FreeLeech\"')]),\n _vm._v(\" torrents.\")\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable daily searches\",\n name: _vm.editProvider.id + \"_enable_daily\",\n id: _vm.editProvider.id + \"_enable_daily\"\n },\n model: {\n value: _vm.editProvider.config.search.daily.enabled,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config.search.daily, \"enabled\", $$v)\n },\n expression: \"editProvider.config.search.daily.enabled\"\n }\n },\n [_c(\"p\", [_vm._v(\"enable provider to perform daily searches.\")])]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable manual searches\",\n name: _vm.editProvider.id + \"_enable_manual\",\n id: _vm.editProvider.id + \"_enable_manual\"\n },\n model: {\n value: _vm.editProvider.config.search.manual.enabled,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config.search.manual, \"enabled\", $$v)\n },\n expression: \"editProvider.config.search.manual.enabled\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\"enable provider to be used in 'Manual Search' feature.\")\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable backlog searches\",\n name: _vm.editProvider.id + \"_enable_backlog\",\n id: _vm.editProvider.id + \"_enable_backlog\"\n },\n model: {\n value: _vm.editProvider.config.search.backlog.enabled,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config.search.backlog, \"enabled\", $$v)\n },\n expression: \"editProvider.config.search.backlog.enabled\"\n }\n },\n [_c(\"p\", [_vm._v(\"enable provider to perform backlog searches.\")])]\n ),\n _vm._v(\" \"),\n _c(\n \"config-template\",\n {\n attrs: {\n \"label-for\": \"backlog_search_mode\",\n label: \"Backlog search mode\"\n }\n },\n [\n _c(\"div\", { staticClass: \"radio-item\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.editProvider.config.search.mode,\n expression: \"editProvider.config.search.mode\"\n }\n ],\n attrs: {\n type: \"radio\",\n name: _vm.editProvider.id + \"_search_mode_sponly\",\n id: _vm.editProvider.id + \"_search_mode_sponly\",\n value: \"sponly\"\n },\n domProps: {\n checked: _vm._q(_vm.editProvider.config.search.mode, \"sponly\")\n },\n on: {\n change: function($event) {\n return _vm.$set(\n _vm.editProvider.config.search,\n \"mode\",\n \"sponly\"\n )\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"one\" } }, [\n _vm._v(\"Season packs only\")\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"radio-item\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.editProvider.config.search.mode,\n expression: \"editProvider.config.search.mode\"\n }\n ],\n attrs: {\n type: \"radio\",\n name: _vm.editProvider.id + \"_search_mode_eponly\",\n id: _vm.editProvider.id + \"_search_mode_eponly\",\n value: \"eponly\"\n },\n domProps: {\n checked: _vm._q(_vm.editProvider.config.search.mode, \"eponly\")\n },\n on: {\n change: function($event) {\n return _vm.$set(\n _vm.editProvider.config.search,\n \"mode\",\n \"eponly\"\n )\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"one\" } }, [_vm._v(\"Episodes only\")])\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"when searching with backlog you can choose to have it look for season packs only, or choose to have it build a complete season from just single episodes.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable fallback\",\n name: _vm.editProvider.id + \"_enable_fallback\",\n id: _vm.editProvider.id + \"_enable_fallback\"\n },\n model: {\n value: _vm.editProvider.config.search.fallback,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config.search, \"fallback\", $$v)\n },\n expression: \"editProvider.config.search.fallback\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"config-toggle-slider\",\n {\n attrs: {\n label: \"Enable search delay\",\n name: _vm.editProvider.id + \"_enable_search_delay\",\n id: _vm.editProvider.id + \"_enable_search_delay\"\n },\n model: {\n value: _vm.editProvider.config.search.delay.enabled,\n callback: function($$v) {\n _vm.$set(_vm.editProvider.config.search.delay, \"enabled\", $$v)\n },\n expression: \"editProvider.config.search.delay.enabled\"\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"Enable to delay downloads for this provider for an x amount of hours. The provider will start snatching results for a specific episode after a delay has expired, compared to when it first got a result for the specific episode.\"\n )\n ]),\n _vm._v(\" \"),\n _c(\"p\", [\n _vm._v(\n \"Searches for PROPER releases are exempted from the delay.\"\n )\n ])\n ]\n ),\n _vm._v(\" \"),\n _vm.editProvider.config.search.delay.enabled\n ? _c(\n \"config-textbox-number\",\n {\n attrs: {\n value: _vm.editProvider.config.search.delay.duration / 60.0,\n label: \"Search delay (hours)\",\n id: _vm.editProvider.id + \"_search_delay_duration\",\n min: 0.5,\n step: 0.5\n },\n on: {\n input: function($event) {\n _vm.editProvider.config.search.delay.duration = $event * 60\n }\n }\n },\n [\n _c(\"p\", [\n _vm._v(\n \"Amount of hours to wait for downloading a result compared to the first result for a specific episode.\"\n )\n ])\n ]\n )\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"btn-medusa config_submitter\",\n attrs: { type: \"submit\", value: \"Save Changes\", disabled: _vm.saving },\n on: { click: _vm.save }\n })\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-provider-torrent.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); + +/***/ }), + /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-scene-exceptions.vue?vue&type=template&id=1c188ea6&scoped=true&": /*!**********************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options!./src/components/helpers/config-scene-exceptions.vue?vue&type=template&id=1c188ea6&scoped=true& ***! @@ -5205,7 +5674,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(\"div\", { attrs: { id: \"config-textbox\" } }, [\n _c(\"div\", { staticClass: \"form-group\" }, [\n _c(\"div\", { staticClass: \"row\" }, [\n _c(\n \"label\",\n { staticClass: \"col-sm-2 control-label\", attrs: { for: _vm.id } },\n [_c(\"span\", [_vm._v(_vm._s(_vm.label))])]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-sm-10 content\" },\n [\n _c(\n \"div\",\n { staticClass: \"parent\", class: _vm.inputClass },\n [\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n }.type === \"checkbox\"\n ? _c(\n \"input\",\n _vm._b(\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.localValue,\n expression: \"localValue\"\n }\n ],\n attrs: { type: \"checkbox\" },\n domProps: {\n checked: Array.isArray(_vm.localValue)\n ? _vm._i(_vm.localValue, null) > -1\n : _vm.localValue\n },\n on: {\n input: function($event) {\n return _vm.updateValue()\n },\n change: function($event) {\n var $$a = _vm.localValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n (_vm.localValue = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.localValue = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.localValue = $$c\n }\n }\n }\n },\n \"input\",\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n },\n false\n )\n )\n : {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n }.type === \"radio\"\n ? _c(\n \"input\",\n _vm._b(\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.localValue,\n expression: \"localValue\"\n }\n ],\n attrs: { type: \"radio\" },\n domProps: { checked: _vm._q(_vm.localValue, null) },\n on: {\n input: function($event) {\n return _vm.updateValue()\n },\n change: function($event) {\n _vm.localValue = null\n }\n }\n },\n \"input\",\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n },\n false\n )\n )\n : _c(\n \"input\",\n _vm._b(\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.localValue,\n expression: \"localValue\"\n }\n ],\n attrs: {\n type: {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n }.type\n },\n domProps: { value: _vm.localValue },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.localValue = $event.target.value\n },\n function($event) {\n return _vm.updateValue()\n }\n ]\n }\n },\n \"input\",\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n },\n false\n )\n ),\n _vm._v(\" \"),\n _c(\"transition\", { attrs: { name: \"uri-error\" } }, [\n _vm.uriError\n ? _c(\"div\", { staticClass: \"uri-error\" }, [\n _vm._v(\n \"Make sure to start your URI with http://, https://, scgi://, etc..\"\n )\n ])\n : _vm._e()\n ])\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm._l(_vm.explanations, function(explanation, index) {\n return _c(\"p\", { key: index }, [_vm._v(_vm._s(explanation))])\n }),\n _vm._v(\" \"),\n _vm._t(\"default\")\n ],\n 2\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-textbox.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(\"div\", { attrs: { id: \"config-textbox\" } }, [\n _c(\"div\", { staticClass: \"form-group\" }, [\n _c(\"div\", { staticClass: \"row\" }, [\n _c(\n \"label\",\n { staticClass: \"col-sm-2 control-label\", attrs: { for: _vm.id } },\n [_c(\"span\", [_vm._v(_vm._s(_vm.label))])]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"col-sm-10 content\" },\n [\n _c(\n \"div\",\n { staticClass: \"parent\", class: _vm.inputClass },\n [\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n }.type === \"checkbox\"\n ? _c(\n \"input\",\n _vm._b(\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.localValue,\n expression: \"localValue\"\n }\n ],\n attrs: { type: \"checkbox\" },\n domProps: {\n checked: Array.isArray(_vm.localValue)\n ? _vm._i(_vm.localValue, null) > -1\n : _vm.localValue\n },\n on: {\n input: function($event) {\n return _vm.updateValue()\n },\n change: function($event) {\n var $$a = _vm.localValue,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n (_vm.localValue = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.localValue = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.localValue = $$c\n }\n }\n }\n },\n \"input\",\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n },\n false\n )\n )\n : {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n }.type === \"radio\"\n ? _c(\n \"input\",\n _vm._b(\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.localValue,\n expression: \"localValue\"\n }\n ],\n attrs: { type: \"radio\" },\n domProps: { checked: _vm._q(_vm.localValue, null) },\n on: {\n input: function($event) {\n return _vm.updateValue()\n },\n change: function($event) {\n _vm.localValue = null\n }\n }\n },\n \"input\",\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n },\n false\n )\n )\n : _c(\n \"input\",\n _vm._b(\n {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.localValue,\n expression: \"localValue\"\n }\n ],\n attrs: {\n type: {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n }.type\n },\n domProps: { value: _vm.localValue },\n on: {\n input: [\n function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.localValue = $event.target.value\n },\n function($event) {\n return _vm.updateValue()\n }\n ]\n }\n },\n \"input\",\n {\n id: _vm.id,\n type: _vm.type,\n name: _vm.id,\n placeholder: _vm.placeholder,\n disabled: _vm.disabled\n },\n false\n )\n ),\n _vm._v(\" \"),\n _c(\"transition\", { attrs: { name: \"uri-error\" } }, [\n _vm.uriError\n ? _c(\"div\", { staticClass: \"uri-error\" }, [\n _vm._v(\n \"Make sure to start your URI with http://, https://, scgi://, etc..\"\n )\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _vm._t(\"warning\")\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm._l(_vm.explanations, function(explanation, index) {\n return _c(\"p\", { key: index }, [_vm._v(_vm._s(explanation))])\n }),\n _vm._v(\" \"),\n _vm._t(\"default\")\n ],\n 2\n )\n ])\n ])\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\n\n\n//# sourceURL=webpack://slim/./src/components/helpers/config-textbox.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib/index.js??vue-loader-options"); /***/ }), @@ -5414,7 +5883,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 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 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"); /***/ }), @@ -5851,6 +6320,46 @@ eval("// style-loader: Adds some css to the DOM by adding a