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 @@
+
+ Check off and drag the providers into the order you want them to be used. At least one provider is required but two are recommended. * Provider does not support backlog searches at this time. ! Provider is NOT WORKING. Configure individual provider settings here. Check with provider's website on how to obtain an API key if needed. Add and setup or remove custom Newznab providers. Add and setup or remove custom RSS providers. Add and setup or remove Torznab providers.
+
+ When using Jackett. You can add it's jackett url's here. Jackett makes use of the Torznab protocol.
+ Add or Remove Prowlarr providers
+
+ Note! This is a provider configured through the 'Configure Custom Prowlarr Providers' tab.
+
+
+ Note! This is a provider configured through the 'Configure Custom Prowlarr Providers' tab.
+ enable provider to perform daily searches. enable provider to be used in 'Manual Search' feature. enable provider to perform backlog searches. 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. 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. 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. Searches for PROPER releases are exempted from the delay. Amount of hours to wait for downloading a result compared to the first result for a specific episode. The URL should include the protocol (and port if applicable). Examples: http://192.168.1.4/ or http://localhost:3000/ eg. {{editProvider.config.cookies.required.map(cookie => cookie + '=xx;').join('').slice(0, -1)}} This provider requires the following cookies: {{editProvider.config.cookies.required.join(', ')}}.
+ Configure a desired seeding ratio. Used by the (automated download handler in config - postprocessing)
+ only download torrents from trusted or verified uploaders ? only download ranked torrents (trusted releases) only download "FreeLeech" torrents. enable provider to perform daily searches. enable provider to be used in 'Manual Search' feature. enable provider to perform backlog searches. 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. 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. 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. Searches for PROPER releases are exempted from the delay. Amount of hours to wait for downloading a result compared to the first result for a specific episode.Provider Priorities
+ NZB/Torrent providers can be toggled in
+
+
+ Provider Options
+ Configure Custom Newznab Providers
+ Configure Custom Torrent Providers
+ Configure Torznab Providers
+ Configure Prowlarr
+ Available providers
+
For a step by step guide please follow the link to our
-1 for provider specific option is disabled.
+
0 for not using a seed ratio. Actions configured in the download handler, will not wait for finished seeding.
+
If disabled the global option is used in config - postprocessing (automated download handling))
+
{{ explanation }}
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