diff options
-rw-r--r-- | bazarr.py | 47 | ||||
-rw-r--r-- | get_settings.py | 49 | ||||
-rw-r--r-- | init.py | 12 | ||||
-rw-r--r-- | requirements.txt | 4 | ||||
-rw-r--r-- | views/settings.tpl | 3766 |
5 files changed, 2062 insertions, 1816 deletions
@@ -18,7 +18,7 @@ from init import * from update_db import * -from get_settings import get_general_settings +from get_settings import get_general_settings, get_proxy_settings import logging from logging.handlers import TimedRotatingFileHandler @@ -57,6 +57,16 @@ def configure_logging(): configure_logging() +import requests +if get_proxy_settings()[0] != 'None': + if get_proxy_settings()[3] != '' and get_proxy_settings()[4] != '': + proxy = get_proxy_settings()[0] + '://' + get_proxy_settings()[3] + ':' + get_proxy_settings()[4] + '@' + get_proxy_settings()[1] + ':' + get_proxy_settings()[2] + else: + proxy = get_proxy_settings()[0] + '://' + get_proxy_settings()[1] + ':' + get_proxy_settings()[2] + os.environ['HTTP_PROXY'] = str(proxy) + os.environ['HTTPS_PROXY'] = str(proxy) + os.environ['NO_PROXY'] = str(get_proxy_settings()[5]) + from bottle import route, run, template, static_file, request, redirect, response, HTTPError, app import bottle bottle.TEMPLATE_PATH.insert(0, os.path.join(os.path.dirname(__file__), 'views/')) @@ -68,7 +78,6 @@ from cork import Cork from json import dumps import itertools import operator -import requests import pretty from datetime import datetime, timedelta from io import BytesIO @@ -768,13 +777,14 @@ def settings(): settings_notifier = c.fetchall() c.close() - from get_settings import get_general_settings, get_auth_settings, get_radarr_settings, get_sonarr_settings + from get_settings import get_general_settings, get_proxy_settings, get_auth_settings, get_radarr_settings, get_sonarr_settings settings_general = get_general_settings() + settings_proxy = get_proxy_settings() settings_auth = get_auth_settings() settings_sonarr = get_sonarr_settings() settings_radarr = get_radarr_settings() - return template('settings', __file__=__file__, bazarr_version=bazarr_version, settings_general=settings_general, settings_auth=settings_auth, settings_languages=settings_languages, settings_providers=settings_providers, settings_sonarr=settings_sonarr, settings_radarr=settings_radarr, settings_notifier=settings_notifier, base_url=base_url) + return template('settings', __file__=__file__, bazarr_version=bazarr_version, settings_general=settings_general, settings_proxy=settings_proxy, settings_auth=settings_auth, settings_languages=settings_languages, settings_providers=settings_providers, settings_sonarr=settings_sonarr, settings_radarr=settings_radarr, settings_notifier=settings_notifier, base_url=base_url) @route(base_url + 'save_settings', method='POST') @custom_auth_basic(check_credentials) @@ -883,6 +893,35 @@ def save_settings(): if after != before: configured() get_general_settings() + + settings_proxy = get_proxy_settings() + + if not cfg.has_section('proxy'): + cfg.add_section('proxy') + + settings_proxy_type = request.forms.get('settings_proxy_type') + settings_proxy_url = request.forms.get('settings_proxy_url') + settings_proxy_port = request.forms.get('settings_proxy_port') + settings_proxy_username = request.forms.get('settings_proxy_username') + settings_proxy_password = request.forms.get('settings_proxy_password') + settings_proxy_exclude = request.forms.get('settings_proxy_exclude') + + before_proxy_password = (unicode(settings_proxy[0]), unicode(settings_proxy[5])) + if before_proxy_password[0] != settings_proxy_type: + configured() + if before_proxy_password[1] == settings_proxy_password: + cfg.set('proxy', 'type', text_type(settings_proxy_type)) + cfg.set('proxy', 'url', text_type(settings_proxy_url)) + cfg.set('proxy', 'port', text_type(settings_proxy_port)) + cfg.set('proxy', 'username', text_type(settings_proxy_username)) + cfg.set('proxy', 'exclude', text_type(settings_proxy_exclude)) + else: + cfg.set('proxy', 'type', text_type(settings_proxy_type)) + cfg.set('proxy', 'url', text_type(settings_proxy_url)) + cfg.set('proxy', 'port', text_type(settings_proxy_port)) + cfg.set('proxy', 'username', text_type(settings_proxy_username)) + cfg.set('proxy', 'password', text_type(settings_proxy_password)) + cfg.set('proxy', 'exclude', text_type(settings_proxy_exclude)) settings_auth = get_auth_settings() diff --git a/get_settings.py b/get_settings.py index 36c5d303d..219936351 100644 --- a/get_settings.py +++ b/get_settings.py @@ -209,6 +209,55 @@ def get_auth_settings(): return [type, username, password] +def get_proxy_settings(): + cfg = ConfigParser() + try: + with open(config_file, 'r') as f: + cfg.read_file(f) + except Exception: + pass + + if cfg.has_section('proxy'): + if cfg.has_option('proxy', 'type'): + proxy_type = cfg.get('proxy', 'type') + else: + proxy_type = 'None' + + if cfg.has_option('proxy', 'url'): + url = cfg.get('proxy', 'url') + else: + url = '' + + if cfg.has_option('proxy', 'port'): + port = cfg.get('proxy', 'port') + else: + port = '' + + if cfg.has_option('proxy', 'username'): + username = cfg.get('proxy', 'username') + else: + username = '' + + if cfg.has_option('proxy', 'password'): + password = cfg.get('proxy', 'password') + else: + password = '' + + if cfg.has_option('proxy', 'exclude'): + exclude = cfg.get('proxy', 'exclude') + else: + exclude = 'localhost,127.0.0.1' + else: + proxy_type = '' + url = '' + port = '' + username = '' + password = '' + exclude = 'localhost,127.0.0.1' + + return [proxy_type, url, port, username, password, exclude] + + def get_sonarr_settings(): cfg = ConfigParser() try: @@ -156,6 +156,18 @@ except sqlite3.OperationalError: cfg.set(section, 'use_embedded_subs', "False") cfg.set(section, 'only_monitored', "False") cfg.set(section, 'adaptive_searching', "False") + + section = 'proxy' + + if not cfg.has_section(section): + cfg.add_section(section) + + cfg.set(section, 'type', "None") + cfg.set(section, 'url', "") + cfg.set(section, 'port', "") + cfg.set(section, 'username', "") + cfg.set(section, 'password', "") + cfg.set(section, 'exclude', "localhost,127.0.0.1") section = 'auth' diff --git a/requirements.txt b/requirements.txt index 8bd5f6f6e..888a3a3d0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,17 +8,17 @@ dogpile.cache>=0.6.5 #enzyme>=0.4.1 <-- included in /libs gitpython>=2.1.9 langdetect>=1.0.7 -Pillow>=5.1.0 py-pretty>=1 pycountry>=18.2.23 pytz>=2018.4 requests>=2.18.4 #subliminal>=2.0.5 <-- included in /libs tzlocal>=1.5.1 -urllib3<1.23,>=1.21.1 +#urllib3<1.23,>=1.21.1 waitress>=1.1.0 configparser>=3.5.0 backports.functools-lru-cache>=1.5 +pysocks>=1.6.8 beaker>=1.10.0 #Subliminal requirements diff --git a/views/settings.tpl b/views/settings.tpl index 00b4be5b2..164c55f9d 100644 --- a/views/settings.tpl +++ b/views/settings.tpl @@ -1,1810 +1,1956 @@ -<html>
- <head>
- <!DOCTYPE html>
- <script src="{{base_url}}static/jquery/jquery-latest.min.js"></script>
- <script src="{{base_url}}static/semantic/semantic.min.js"></script>
- <script src="{{base_url}}static/jquery/tablesort.js"></script>
- <link rel="stylesheet" href="{{base_url}}static/semantic/semantic.min.css">
-
- <link rel="apple-touch-icon" sizes="120x120" href="{{base_url}}static/apple-touch-icon.png">
- <link rel="icon" type="image/png" sizes="32x32" href="{{base_url}}static/favicon-32x32.png">
- <link rel="icon" type="image/png" sizes="16x16" href="{{base_url}}static/favicon-16x16.png">
- <link rel="manifest" href="{{base_url}}static/manifest.json">
- <link rel="mask-icon" href="{{base_url}}static/safari-pinned-tab.svg" color="#5bbad5">
- <link rel="shortcut icon" href="{{base_url}}static/favicon.ico">
- <meta name="msapplication-config" content="{{base_url}}static/browserconfig.xml">
- <meta name="theme-color" content="#ffffff">
-
- <title>Settings - Bazarr</title>
-
- <style>
- body {
- background-color: #272727;
- }
- #fondblanc {
- background-color: #ffffff;
- border-radius: 0px;
- box-shadow: 0px 0px 5px 5px #ffffff;
- margin-top: 32px;
- margin-bottom: 3em;
- padding: 1em;
- }
- .ui.tabular.menu > .disabled.item {
- opacity: 0.45 !important;
- pointer-events: none !important;
- }
- </style>
- </head>
- <body>
- <div id='loader' class="ui page dimmer">
- <div class="ui indeterminate text loader">Loading...</div>
- </div>
- % include('menu.tpl')
-
- <div id="fondblanc" class="ui container">
- <form name="settings_form" id="settings_form" action="{{base_url}}save_settings" method="post" class="ui form" autocomplete="off">
- <div id="form_validation_error" class="ui error message">
- <p>Some fields are in error and you can't save settings until you have corrected them. Be sure to check in every tabs.</p>
- </div>
- <div class="ui top attached tabular menu">
- <a class="tabs item active" data-tab="general">General</a>
- <a class="tabs item" id="sonarr_tab" data-tab="sonarr">Sonarr</a>
- <a class="tabs item" id="radarr_tab" data-tab="radarr">Radarr</a>
- <a class="tabs item" data-tab="subliminal">Subliminal</a>
- <a class="tabs item" data-tab="notifier">Notifications</a>
- </div>
- <div class="ui bottom attached tab segment active" data-tab="general">
- <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div>
- <div class="ui dividing header">Start-Up</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Listening IP address</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input name="settings_general_ip" type="text" value="{{settings_general[0]}}">
- </div>
- </div>
- </div>
-
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted="">
- <i class="yellow warning sign icon"></i>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Valid IP4 address or '0.0.0.0' for all interfaces" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Listening port</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input name="settings_general_port" type="text" value="{{settings_general[1]}}">
- </div>
- </div>
- </div>
-
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted="">
- <i class="yellow warning sign icon"></i>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Valid TCP port (default: 6767)" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Base URL</label>
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- %if settings_general[2] == None:
- % base_url = "/"
- %else:
- % base_url = settings_general[2]
- %end
- <input name="settings_general_baseurl" type="text" value="{{base_url}}">
- </div>
- </div>
-
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted="">
- <i class="yellow warning sign icon"></i>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="For reverse proxy support, default is '/'" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Log Level</label>
- </div>
- <div class="five wide column">
- <select name="settings_general_loglevel" id="settings_loglevel" class="ui fluid selection dropdown">
- <option value="">Log Level</option>
- <option value="DEBUG">Debug</option>
- <option value="INFO">Info</option>
- <option value="WARNING">Warning</option>
- <option value="ERROR">Error</option>
- <option value="CRITICAL">Critical</option>
- </select>
- </div>
-
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted="">
- <i class="yellow warning sign icon"></i>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Debug logging should only be enabled temporarily" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Page size</label>
- </div>
- <div class="five wide column">
- <select name="settings_page_size" id="settings_page_size" class="ui fluid selection dropdown">
- <option value="">Page Size</option>
- <option value="-1">Unlimited</option>
- <option value="25">25</option>
- <option value="50">50</option>
- <option value="100">100</option>
- <option value="250">250</option>
- <option value="500">500</option>
- <option value="1000">1000</option>
- </select>
- </div>
-
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="How many items to show in a list." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui dividing header">Security settings</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Authentication</label>
- </div>
- <div class="five wide column">
- <select name="settings_auth_type" id="settings_auth_type" class="ui fluid selection dropdown">
- <option value="None">None</option>
- <option value="basic">Basic (Browser Popup)</option>
- <option value="form">Forms (Login Page)</option>
- </select>
- <label></label>
- </div>
-
-
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted="">
- <i class="yellow warning sign icon"></i>
- </div>
- </div>
-
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Require Username and Password to access Bazarr." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="auth_option middle aligned row">
- <div class="right aligned four wide column">
- <label>Username</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_auth_username" name="settings_auth_username" type="text" autocomplete="nope" value="{{settings_auth[1]}}">
- </div>
- </div>
- </div>
- </div>
-
- <div class="auth_option middle aligned row">
- <div class="right aligned four wide column">
- <label>Password</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_auth_password" name="settings_auth_password" type="password" autocomplete="new-password" value="{{settings_auth[2]}}">
- </div>
- </div>
- </div>
-
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Authentication send username and password in clear over the network. You should add SSL encryption trough a reverse proxy." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui dividing header">Integration settings</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Use Sonarr</label>
- </div>
- <div class="one wide column">
- <div id="settings_use_sonarr" class="ui toggle checkbox" data-enabled={{settings_general[12]}}>
- <input name="settings_general_use_sonarr" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Enable Sonarr integration." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Use Radarr</label>
- </div>
- <div class="one wide column">
- <div id="settings_use_radarr" class="ui toggle checkbox" data-enabled={{settings_general[13]}}>
- <input name="settings_general_use_radarr" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Enable Radarr integration." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui dividing header">Path Mappings for shows</div>
- <div class="twelve wide column">
- <div class="ui grid">
- %import ast
- %if settings_general[3] is not None:
- % path_substitutions = ast.literal_eval(settings_general[3])
- %else:
- % path_substitutions = []
- %end
- <div class="middle aligned row">
- <div class="right aligned four wide column">
-
- </div>
- <div class="two wide column">
- <div class="ui fluid input">
- <h4 class="ui header">
- Path for Sonarr:
- </h4>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Root path to the directory Sonarr accesses." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- <div class="two wide center aligned column">
-
- </div>
- <div class="two wide column">
- <div class="ui fluid input">
- <h4 class="ui header">
- Path for Bazarr:
- </h4>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Path that Bazarr should use to access the same directory remotely." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- %for x in range(0, 5):
- % path = []
- % try:
- % path = path_substitutions[x]
- % except IndexError:
- % path = ["", ""]
- % end
- <div class="middle aligned row">
- <div class="right aligned four wide column">
-
- </div>
- <div class="four wide column">
- <div class="ui fluid input">
- <input name="settings_general_sourcepath" type="text" value="{{path[0]}}">
- </div>
- </div>
- <div class="center aligned column">
- <i class="arrow circle right icon"></i>
- </div>
- <div class="four wide column">
- <div class="ui fluid input">
- <input name="settings_general_destpath" type="text" value="{{path[1]}}">
- </div>
- </div>
- </div>
- %end
- </div>
- </div>
-
- <div class="ui dividing header">Path Mappings for movies</div>
- <div class="twelve wide column">
- <div class="ui grid">
- %import ast
- %if settings_general[14] is not None:
- % path_substitutions_movie = ast.literal_eval(settings_general[14])
- %else:
- % path_substitutions_movie = []
- %end
- <div class="middle aligned row">
- <div class="right aligned four wide column">
-
- </div>
- <div class="two wide column">
- <div class="ui fluid input">
- <h4 class="ui header">
- Path for Radarr:
- </h4>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Root path to the directory Radarr accesses." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- <div class="two wide center aligned column">
-
- </div>
- <div class="two wide column">
- <div class="ui fluid input">
- <h4 class="ui header">
- Path for Bazarr:
- </h4>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Path that Bazarr should use to access the same directory remotely." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- %for x in range(0, 5):
- % path_movie = []
- % try:
- % path_movie = path_substitutions_movie[x]
- % except IndexError:
- % path_movie = ["", ""]
- % end
- <div class="middle aligned row">
- <div class="right aligned four wide column">
-
- </div>
- <div class="four wide column">
- <div class="ui fluid input">
- <input name="settings_general_sourcepath_movie" type="text" value="{{path_movie[0]}}">
- </div>
- </div>
- <div class="center aligned column">
- <i class="arrow circle right icon"></i>
- </div>
- <div class="four wide column">
- <div class="ui fluid input">
- <input name="settings_general_destpath_movie" type="text" value="{{path_movie[1]}}">
- </div>
- </div>
- </div>
- %end
- </div>
- </div>
-
- <div class="ui dividing header">Post-processing</div>
- <div class="twelve wide column">
- <div class="ui orange message">
- <p>Be aware that the execution of post-processing command will prevent the user interface from being accessible until completion when downloading subtitles in interactive mode (meaning you'll see a loader during post-processing).</p>
- </div>
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Use post-processing</label>
- </div>
- <div class="one wide column">
- <div id="settings_use_postprocessing" class="ui toggle checkbox" data-postprocessing={{settings_general[10]}}>
- <input name="settings_general_use_postprocessing" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Enable the post-processing execution after downloading a subtitles." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Post-processing command</label>
- </div>
- <div class="five wide column">
- <div id="settings_general_postprocessing_cmd_div" class="ui fluid input">
- <input name="settings_general_postprocessing_cmd" type="text" value="{{settings_general[11] if settings_general[11] != None else ''}}">
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Variables you can use in your command (include the double curly brace):</label>
- </div>
- <div class="ten wide column">
- <div class="ui list">
- <div class="item">
- <div class="header">{{directory}}</div>
- The full path of the episode file parent directory.
- </div>
- <div class="item">
- <div class="header">{{episode}}</div>
- The full path of the episode file.
- </div>
- <div class="item">
- <div class="header">{{episode_name}}</div>
- The filename of the episode without parent directory or extension.
- </div>
- <div class="item">
- <div class="header">{{subtitles}}</div>
- The full path of the subtitles file.
- </div>
- <div class="item">
- <div class="header">{{subtitles_language}}</div>
- The language of the subtitles file.
- </div>
- <div class="item">
- <div class="header">{{subtitles_language_code2}}</div>
- The 2-letter ISO-639 language code of the subtitles language.
- </div>
- <div class="item">
- <div class="header">{{subtitles_language_code3}}</div>
- The 3-letter ISO-639 language code of the subtitles language.
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div id="div_update" >
- <div class="ui dividing header">Updates</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Branch</label>
- </div>
- <div class="five wide column">
- <select name="settings_general_branch" id="settings_branch" class="ui fluid selection dropdown">
- <option value="">Branch</option>
- <option value="master">master</option>
- <option value="development">development</option>
- </select>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Only select development branch if you want to live on the edge." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Automatic</label>
- </div>
- <div class="one wide column">
- <div id="settings_automatic_div" class="ui toggle checkbox" data-automatic={{settings_general[6]}}>
- <input name="settings_general_automatic" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Automatically download and install updates. You will still be able to install from System: Tasks" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="ui bottom attached tab segment" data-tab="sonarr">
- <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div>
- <div class="ui dividing header">Connection settings</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Settings validation:</label>
- </div>
- <div class="two wide column">
- <button id="sonarr_validate" class="test ui blue button" type="button">
- Test
- </button>
- </div>
- <div class="seven wide column">
- <div id="sonarr_validated" class="ui read-only checkbox">
- <input id="sonarr_validated_checkbox" type="checkbox">
- <label id="sonarr_validation_result">Not tested recently</label>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Hostname or IP address</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_sonarr_ip" name="settings_sonarr_ip" class="sonarr_config" type="text" value="{{settings_sonarr[0]}}">
- </div>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Hostname or IP4 address of Sonarr" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Listening port</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_sonarr_port" name="settings_sonarr_port" class="sonarr_config" type="text" value="{{settings_sonarr[1]}}">
- </div>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="TCP port of Sonarr" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Base URL</label>
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- <input id="settings_sonarr_baseurl" name="settings_sonarr_baseurl" class="sonarr_config" type="text" value="{{settings_sonarr[2]}}">
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Base URL for Sonarr (default: '/')" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>SSL enabled</label>
- </div>
- <div class="one wide column">
- <div id="sonarr_ssl_div" class="ui toggle checkbox" data-ssl={{settings_sonarr[3]}}>
- <input id="settings_sonarr_ssl" name="settings_sonarr_ssl" type="checkbox">
- <label></label>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>API key</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_sonarr_apikey" name="settings_sonarr_apikey" class="sonarr_config" type="text" value="{{settings_sonarr[4]}}">
- </div>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="API key for Sonarr (32 alphanumeric characters)" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui dividing header">Synchronization</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Full sync frequency</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <select name="settings_sonarr_sync" id="settings_sonarr_sync" class="ui fluid selection dropdown">
- <option value="Manually">Manually</option>
- <option value="Daily">Daily (at 4am)</option>
- <option value="Weekly">Weekly (sunday at 4am)</option>
- </select>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="ui bottom attached tab segment" data-tab="radarr">
- <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div>
- <div class="ui dividing header">Connection settings</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Settings validation:</label>
- </div>
- <div class="two wide column">
- <button id="radarr_validate" class="test ui blue button" type="button">
- Test
- </button>
- </div>
- <div class="seven wide column">
- <div id="radarr_validated" class="ui read-only checkbox">
- <input id="radarr_validated_checkbox" type="checkbox">
- <label id="radarr_validation_result">Not tested recently</label>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Hostname or IP address</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_radarr_ip" name="settings_radarr_ip" type="text" class="radarr_config" value="{{settings_radarr[0]}}">
- </div>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Hostname or IP4 address of Radarr" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Listening port</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_radarr_port" name="settings_radarr_port" type="text" class="radarr_config" value="{{settings_radarr[1]}}">
- </div>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="TCP port of Radarr" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Base URL</label>
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- <input id="settings_radarr_baseurl" name="settings_radarr_baseurl" type="text" class="radarr_config" value="{{settings_radarr[2]}}">
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Base URL for Radarr (default: '/')" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>SSL enabled</label>
- </div>
- <div class="one wide column">
- <div id="radarr_ssl_div" class="ui toggle checkbox" data-ssl={{settings_radarr[3]}}>
- <input id="settings_radarr_ssl" name="settings_radarr_ssl" type="checkbox">
- <label></label>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>API key</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <div class="ui fluid input">
- <input id="settings_radarr_apikey" name="settings_radarr_apikey" type="text" class="radarr_config" value="{{settings_radarr[4]}}">
- </div>
- </div>
- </div>
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="API key for Radarr (32 alphanumeric characters)" data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui dividing header">Synchronization</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Full sync frequency</label>
- </div>
- <div class="five wide column">
- <div class='field'>
- <select name="settings_radarr_sync" id="settings_radarr_sync" class="ui fluid selection dropdown">
- <option value="Manually">Manually</option>
- <option value="Daily">Daily (at 5am)</option>
- <option value="Weekly">Weekly (sunday at 5am)</option>
- </select>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="ui bottom attached tab segment" data-tab="subliminal">
- <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div>
- <br><br><br>
- <div class="ui container">
- <div class="ui info message">
- <p>Thanks to Diaoul for his work on <a href="https://github.com/Diaoul/subliminal" target="_blank">Subliminal</a> on which Bazarr is based.</p>
- </div>
- </div>
- <div class="ui dividing header">Subtitles options</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Use scene name when available</label>
- </div>
- <div class="one wide column">
- <div id="settings_scenename" class="ui toggle checkbox" data-scenename={{settings_general[9]}}>
- <input name="settings_general_scenename" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Use the scene name from Sonarr/Radarr if available to circumvent usage of episode file renaming." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Minimum score for episodes</label>
- </div>
- <div class="two wide column">
- <div class='field'>
- <div class="ui input">
- <input name="settings_general_minimum_score" type="number" min="0" max="100" step="5" onkeydown="return false" value="{{settings_general[8]}}">
- </div>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Minimum score for an episode subtitle to be downloaded (0 to 100)." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Minimum score for movies</label>
- </div>
- <div class="two wide column">
- <div class='field'>
- <div class="ui input">
- <input name="settings_general_minimum_score_movies" type="number" min="0" max="100" step="5" onkeydown="return false" value="{{settings_general[22]}}">
- </div>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Minimum score for a movie subtitle to be downloaded (0 to 100)." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Use embedded subtitles</label>
- </div>
- <div class="one wide column">
- <div id="settings_embedded" class="ui toggle checkbox" data-embedded={{settings_general[23]}}>
- <input name="settings_general_embedded" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Use embedded subtitles in media files when determining missing ones." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Download only monitored</label>
- </div>
- <div class="one wide column">
- <div id="settings_only_monitored" class="ui toggle checkbox" data-monitored={{settings_general[24]}}>
- <input name="settings_general_only_monitored" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Automatic download of subtitles will happen only for monitored episodes/movies in Sonarr/Radarr." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Adaptive searching</label>
- </div>
- <div class="one wide column">
- <div id="settings_adaptive_searching" class="ui toggle checkbox" data-adaptive={{settings_general[25]}}>
- <input name="settings_general_adaptive_searching" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="When searching for subtitles, Bazarr will search less frequently after sometime to limit call to providers." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="ui dividing header">Subtitles providers</div>
- <div class="twelve wide column">
- <div class="ui orange message">
- <p>Be aware that the more providers you enable, the longer it will take everytime you search for a subtitles.</p>
- </div>
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Enabled providers</label>
- </div>
- <div class="eleven wide column">
- <div class='field'>
- <select name="settings_subliminal_providers" id="settings_providers" multiple="" class="ui fluid selection dropdown">
- <option value="">Providers</option>
- %enabled_providers = []
- %for provider in settings_providers:
- <option value="{{provider[0]}}">{{provider[0]}}</option>
- %if provider[1] == True:
- % enabled_providers.append(str(provider[0]))
- %end
- %end
- </select>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="ui dividing header">Providers authentication (optional)</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
-
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- <h4 class="ui header">Username</h4>
- </div>
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- <h4 class="ui header">Password (stored in clear text)</h4>
- </div>
- </div>
- </div>
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>addic7ed</label>
- </div>
- %for provider in settings_providers:
- % if provider[0] == 'addic7ed':
- % addic7ed_username = provider[2]
- % addic7ed_password = provider[3]
- % end
- %end
- <div class="five wide column">
- <div class="ui fluid input">
- <input name="settings_addic7ed_username" type="text" value="{{addic7ed_username if addic7ed_username != None else ''}}">
- </div>
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- <input name="settings_addic7ed_password" type="password" value="{{addic7ed_password if addic7ed_password != None else ''}}">
- </div>
- </div>
- </div>
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>legendastv</label>
- </div>
- %for provider in settings_providers:
- % if provider[0] == 'legendastv':
- % legendastv_username = provider[2]
- % legendastv_password = provider[3]
- % end
- %end
- <div class="five wide column">
- <div class="ui fluid input">
- <input name="settings_legendastv_username" type="text" value="{{legendastv_username if legendastv_username != None else ''}}">
- </div>
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- <input name="settings_legendastv_password" type="password" value="{{legendastv_password if legendastv_password != None else ''}}">
- </div>
- </div>
- </div>
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>opensubtitles</label>
- </div>
- %for provider in settings_providers:
- % if provider[0] == 'opensubtitles':
- % opensubtitles_username = provider[2]
- % opensubtitles_password = provider[3]
- % end
- %end
- <div class="five wide column">
- <div class="ui fluid input">
- <input name="settings_opensubtitles_username" type="text" value="{{opensubtitles_username if opensubtitles_username != None else ''}}">
- </div>
- </div>
- <div class="five wide column">
- <div class="ui fluid input">
- <input name="settings_opensubtitles_password" type="password" value="{{opensubtitles_password if opensubtitles_password != None else ''}}">
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="ui dividing header">Subtitles languages</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Single language</label>
- </div>
- <div class="one wide column">
- <div id="settings_single_language" class="ui toggle checkbox" data-single-language={{settings_general[7]}}>
- <input name="settings_general_single_language" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Download a single subtitles file and don't add the language code to the filename." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Enabled languages</label>
- </div>
- <div class="eleven wide column">
- <div class='field'>
- <select name="settings_subliminal_languages" id="settings_languages" multiple="" class="ui fluid selection dropdown">
- <option value="">Languages</option>
- %enabled_languages = []
- %for language in settings_languages:
- <option value="{{language[1]}}">{{language[2]}}</option>
- %if language[3] == True:
- % enabled_languages.append(str(language[1]))
- %end
- %end
- </select>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui dividing header">Series default settings</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Default enabled</label>
- </div>
- <div class="one wide column">
- <div class="nine wide column">
- <div id="settings_serie_default_enabled_div" class="ui toggle checkbox" data-enabled="{{settings_general[15]}}">
- <input name="settings_serie_default_enabled" id="settings_serie_default_enabled" type="checkbox">
- <label></label>
- </div>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Apply only to series added to Bazarr after enabling this option." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Languages</label>
- </div>
- <div class="eleven wide column">
- <div class='field'>
- <select name="settings_serie_default_languages" id="settings_serie_default_languages" multiple="" class="ui fluid selection dropdown">
- %if settings_general[7] is False:
- <option value="">Languages</option>
- %else:
- <option value="None">None</option>
- %end
- </select>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Hearing-impaired</label>
- </div>
- <div class="eleven wide column">
- <div class="nine wide column">
- <div id="settings_serie_default_hi_div" class="ui toggle checkbox" data-hi="{{settings_general[17]}}">
- <input name="settings_serie_default_hi" id="settings_serie_default_hi" type="checkbox">
- <label></label>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
-
- <div class="ui dividing header">Movies default settings</div>
- <div class="twelve wide column">
- <div class="ui grid">
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>Default enabled</label>
- </div>
- <div class="one wide column">
- <div class="nine wide column">
- <div id="settings_movie_default_enabled_div" class="ui toggle checkbox" data-enabled="{{settings_general[18]}}">
- <input name="settings_movie_default_enabled" id="settings_movie_default_enabled" type="checkbox">
- <label></label>
- </div>
- </div>
- </div>
- <div class="collapsed column">
- <div class="collapsed center aligned column">
- <div class="ui basic icon" data-tooltip="Apply only to movies added to Bazarr after enabling this option." data-inverted="">
- <i class="help circle large icon"></i>
- </div>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div id="movie_default_languages_label" class="right aligned four wide column">
- <label>Languages</label>
- </div>
- <div class="eleven wide column">
- <div class='field'>
- <select name="settings_movie_default_languages" id="settings_movie_default_languages" multiple="" class="ui fluid selection dropdown">
- %if settings_general[7] is False:
- <option value="">Languages</option>
- %else:
- <option value="None">None</option>
- %end
- </select>
- </div>
- </div>
- </div>
-
- <div class="middle aligned row">
- <div id="movie_default_hi_label" class="right aligned four wide column">
- <label>Hearing-impaired</label>
- </div>
- <div class="eleven wide column">
- <div class="nine wide column">
- <div id="settings_movie_default_hi_div" class="ui toggle checkbox" data-hi="{{settings_general[20]}}">
- <input name="settings_movie_default_hi" id="settings_movie_default_hi" type="checkbox">
- <label></label>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- <div class="ui bottom attached tab segment" data-tab="notifier">
- <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div>
- <div class="ui dividing header">Notifications settings</div>
- <div class="twelve wide column">
- <div class="ui info message">
- <p>Thanks to caronc for his work on <a href="https://github.com/caronc/apprise" target="_blank">apprise</a> on which is based the notifications system.</p>
- </div>
- <div class="ui info message">
- <p>Please follow instructions on his <a href="https://github.com/caronc/apprise/wiki" target="_blank">wiki</a> to configure your notifications providers.</p>
- </div>
- <div class="ui grid">
- %for notifier in settings_notifier:
- <div class="middle aligned row">
- <div class="right aligned four wide column">
- <label>{{notifier[0]}}</label>
- </div>
- <div class="one wide column">
- <div id="settings_notifier_{{notifier[0]}}_enabled" class="notifier_enabled ui toggle checkbox" data-notifier-url-div="settings_notifier_{{notifier[0]}}_url_div" data-enabled={{notifier[2]}}>
- <input name="settings_notifier_{{notifier[0]}}_enabled" type="checkbox">
- <label></label>
- </div>
- </div>
- <div class="eight wide column">
- <div class='field'>
- <div id="settings_notifier_{{notifier[0]}}_url_div" class="ui fluid input">
- <input name="settings_notifier_{{notifier[0]}}_url" type="text" value="{{notifier[1] if notifier[1] != None else ''}}">
- </div>
- </div>
- </div>
- </div>
- %end
- </div>
- </div>
- </div>
- </form>
- </div>
- % include('footer.tpl')
- </body>
-</html>
-
-
-<script>
-
- % from get_argv import no_update
- % if no_update is True:
- $("#div_update").hide();
- % end
-
- $('.menu .item')
- .tab()
- ;
-
- $('a:not(.tabs), button:not(.cancel, .test)').click(function(){
- $('#loader').addClass('active');
- })
-
- $('a[target="_blank"]').click(function(){
- $('#loader').removeClass('active');
- })
-
- if ($('#sonarr_ssl_div').data("ssl") == "True") {
- $("#sonarr_ssl_div").checkbox('check');
- } else {
- $("#sonarr_ssl_div").checkbox('uncheck');
- }
-
- if ($('#radarr_ssl_div').data("ssl") == "True") {
- $("#radarr_ssl_div").checkbox('check');
- } else {
- $("#radarr_ssl_div").checkbox('uncheck');
- }
-
- if ($('#settings_automatic_div').data("automatic") == "True") {
- $("#settings_automatic_div").checkbox('check');
- } else {
- $("#settings_automatic_div").checkbox('uncheck');
- }
-
- if ($('#settings_single_language').data("single-language") == "True") {
- $("#settings_single_language").checkbox('check');
- } else {
- $("#settings_single_language").checkbox('uncheck');
- }
-
- if ($('#settings_scenename').data("scenename") == "True") {
- $("#settings_scenename").checkbox('check');
- } else {
- $("#settings_scenename").checkbox('uncheck');
- }
-
- if ($('#settings_embedded').data("embedded") == "True") {
- $("#settings_embedded").checkbox('check');
- } else {
- $("#settings_embedded").checkbox('uncheck');
- }
-
- if ($('#settings_only_monitored').data("monitored") == "True") {
- $("#settings_only_monitored").checkbox('check');
- } else {
- $("#settings_only_monitored").checkbox('uncheck');
- }
-
- if ($('#settings_adaptive_searching').data("adaptive") == "True") {
- $("#settings_adaptive_searching").checkbox('check');
- } else {
- $("#settings_adaptive_searching").checkbox('uncheck');
- }
-
- if ($('#settings_use_postprocessing').data("postprocessing") == "True") {
- $("#settings_use_postprocessing").checkbox('check');
- $("#settings_general_postprocessing_cmd_div").removeClass('disabled');
- } else {
- $("#settings_use_postprocessing").checkbox('uncheck');
- $("#settings_general_postprocessing_cmd_div").addClass('disabled');
- }
-
- $("#settings_use_postprocessing").change(function(i, obj) {
- if ($("#settings_use_postprocessing").checkbox('is checked')) {
- $("#settings_general_postprocessing_cmd_div").removeClass('disabled');
- } else {
- $("#settings_general_postprocessing_cmd_div").addClass('disabled');
- }
- });
-
- if ($('#settings_use_sonarr').data("enabled") == "True") {
- $("#settings_use_sonarr").checkbox('check');
- $("#sonarr_tab").removeClass('disabled');
- } else {
- $("#settings_use_sonarr").checkbox('uncheck');
- $("#sonarr_tab").addClass('disabled');
- }
-
- $('#settings_use_sonarr').checkbox({
- onChecked: function() {
- $("#sonarr_tab").removeClass('disabled');
- $('#sonarr_validated').checkbox('uncheck');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- },
- onUnchecked: function() {
- $("#sonarr_tab").addClass('disabled');
- }
- });
-
- if ($('#settings_use_radarr').data("enabled") == "True") {
- $("#settings_use_radarr").checkbox('check');
- $("#radarr_tab").removeClass('disabled');
- } else {
- $("#settings_use_radarr").checkbox('uncheck');
- $("#radarr_tab").addClass('disabled');
- }
-
- $('#settings_use_radarr').checkbox({
- onChecked: function() {
- $("#radarr_tab").removeClass('disabled');
- $('#sonarr_validated').checkbox('uncheck');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- },
- onUnchecked: function() {
- $("#radarr_tab").addClass('disabled');
- }
- });
-
- if ($('#settings_auth_type').val() == "None") {
- $('.auth_option').hide();
- };
-
- $('#settings_auth_type').dropdown('setting', 'onChange', function(){
- if ($('#settings_auth_type').val() == "None") {
- $('.auth_option').hide();
- }
- else {
- $('.auth_option').show();
- };
- });
-
- $('#settings_languages').dropdown('setting', 'onAdd', function(val, txt){
- $("#settings_serie_default_languages").append(
- $("<option></option>").attr("value", val).text(txt)
- )
- $("#settings_movie_default_languages").append(
- $("<option></option>").attr("value", val).text(txt)
- )
- });
-
- $('#settings_languages').dropdown('setting', 'onRemove', function(val, txt){
- $("#settings_serie_default_languages").dropdown('remove selected', val);
- $("#settings_serie_default_languages option[value='" + val + "']").remove();
-
- $("#settings_movie_default_languages").dropdown('remove selected', val);
- $("#settings_movie_default_languages option[value='" + val + "']").remove();
- });
-
- if ($('#settings_serie_default_enabled_div').data("enabled") == "True") {
- $("#settings_serie_default_enabled_div").checkbox('check');
- } else {
- $("#settings_serie_default_enabled_div").checkbox('uncheck');
- }
-
- if ($('#settings_serie_default_enabled_div').data("enabled") == "True") {
- $("#settings_serie_default_languages").removeClass('disabled');
- $("#settings_serie_default_hi_div").removeClass('disabled');
- } else {
- $("#settings_serie_default_languages").addClass('disabled');
- $("#settings_serie_default_hi_div").addClass('disabled');
- }
-
- $('#settings_serie_default_enabled_div').checkbox({
- onChecked: function() {
- $("#settings_serie_default_languages").parent().removeClass('disabled');
- $("#settings_serie_default_hi_div").removeClass('disabled');
- },
- onUnchecked: function() {
- $("#settings_serie_default_languages").parent().addClass('disabled');
- $("#settings_serie_default_hi_div").addClass('disabled');
- }
- });
-
- if ($('#settings_serie_default_hi_div').data("hi") == "True") {
- $("#settings_serie_default_hi_div").checkbox('check');
- } else {
- $("#settings_serie_default_hi_div").checkbox('uncheck');
- }
-
- if ($('#settings_movie_default_enabled_div').data("enabled") == "True") {
- $("#settings_movie_default_enabled_div").checkbox('check');
- } else {
- $("#settings_movie_default_enabled_div").checkbox('uncheck');
- }
-
- if ($('#settings_movie_default_enabled_div').data("enabled") == "True") {
- $("#settings_movie_default_languages").removeClass('disabled');
- $("#settings_movie_default_hi_div").removeClass('disabled');
- } else {
- $("#settings_movie_default_languages").addClass('disabled');
- $("#settings_movie_default_hi_div").addClass('disabled');
- }
-
- $('#settings_movie_default_enabled_div').checkbox({
- onChecked: function() {
- $("#settings_movie_default_languages").parent().removeClass('disabled');
- $("#settings_movie_default_hi_div").removeClass('disabled');
- },
- onUnchecked: function() {
- $("#settings_movie_default_languages").parent().addClass('disabled');
- $("#settings_movie_default_hi_div").addClass('disabled');
- }
- });
-
- if ($('#settings_movie_default_hi_div').data("hi") == "True") {
- $("#settings_movie_default_hi_div").checkbox('check');
- } else {
- $("#settings_movie_default_hi_div").checkbox('uncheck');
- }
-
- if ($("#settings_single_language").checkbox('is checked')) {
- $("#settings_serie_default_languages").parent().removeClass('multiple');
- $("#settings_serie_default_languages").removeAttr('multiple');
- $("#settings_movie_default_languages").parent().removeClass('multiple');
- $("#settings_movie_default_languages").removeAttr('multiple');
- } else {
- $("#settings_serie_default_languages").parent().addClass('multiple');
- $("#settings_serie_default_languages").attr('multiple');
- $("#settings_movie_default_languages").parent().addClass('multiple');
- $("#settings_movie_default_languages").attr('multiple');
- }
-
- $("#settings_single_language").change(function(i, obj) {
- if ($("#settings_single_language").checkbox('is checked')) {
- $("#settings_serie_default_languages").dropdown('clear');
- $("#settings_movie_default_languages").dropdown('clear');
- $("#settings_serie_default_languages").prepend("<option value='None' selected='selected'>None</option>");
- $("#settings_movie_default_languages").prepend("<option value='None' selected='selected'>None</option>");
- $("#settings_serie_default_languages").parent().removeClass('multiple');
- $("#settings_serie_default_languages").removeAttr('multiple');
- $("#settings_movie_default_languages").parent().removeClass('multiple');
- $("#settings_movie_default_languages").removeAttr('multiple');
- } else {
- $("#settings_serie_default_languages").dropdown('clear');
- $("#settings_movie_default_languages").dropdown('clear');
- $("#settings_serie_default_languages option[value='None']").remove();
- $("#settings_movie_default_languages option[value='None']").remove();
- $("#settings_serie_default_languages").parent().addClass('multiple');
- $("#settings_serie_default_languages").attr('multiple');
- $("#settings_movie_default_languages").parent().addClass('multiple');
- $("#settings_movie_default_languages").attr('multiple');
- }
- });
-
- $('.notifier_enabled').each(function(i, obj) {
- if ($(this).data("enabled") == 1) {
- $(this).checkbox('check');
- $('[id=\"' + $(this).data("notifier-url-div") + '\"]').removeClass('disabled');
- } else {
- $(this).checkbox('uncheck');
- $('[id=\"' + $(this).data("notifier-url-div") + '\"]').addClass('disabled');
- }
- });
-
- $('.notifier_enabled').change(function(i, obj) {
- if ($(this).checkbox('is checked')) {
- $('[id=\"' + $(this).data("notifier-url-div") + '\"]').removeClass('disabled');
- } else {
- $('[id=\"' + $(this).data("notifier-url-div") + '\"]').addClass('disabled');
- }
- });
-
-
- $('#settings_loglevel').dropdown('clear');
- $('#settings_loglevel').dropdown('set selected','{{!settings_general[4]}}');
- $('#settings_page_size').dropdown('clear');
- $('#settings_page_size').dropdown('set selected','{{!settings_general[21]}}');
- $('#settings_providers').dropdown('clear');
- $('#settings_providers').dropdown('set selected',{{!enabled_providers}});
- $('#settings_languages').dropdown('clear');
- $('#settings_languages').dropdown('set selected',{{!enabled_languages}});
- $('#settings_branch').dropdown('clear');
- $('#settings_branch').dropdown('set selected','{{!settings_general[5]}}');
- $('#settings_sonarr_sync').dropdown('clear');
- $('#settings_sonarr_sync').dropdown('set selected','{{!settings_sonarr[5]}}');
- $('#settings_radarr_sync').dropdown('clear');
- $('#settings_radarr_sync').dropdown('set selected','{{!settings_radarr[5]}}');
-
- $('#settings_loglevel').dropdown();
- $('#settings_providers').dropdown();
- $('#settings_languages').dropdown();
- $('#settings_serie_default_languages').dropdown();
- $('#settings_movie_default_languages').dropdown();
- %if settings_general[16] is not None:
- $('#settings_serie_default_languages').dropdown('set selected',{{!settings_general[16]}});
- %end
- %if settings_general[19] is not None:
- $('#settings_movie_default_languages').dropdown('set selected',{{!settings_general[19]}});
- %end
- $('#settings_auth_type').dropdown('clear');
- $('#settings_auth_type').dropdown('set selected','{{!settings_auth[0]}}');
- $('#settings_branch').dropdown();
- $('#settings_sonarr_sync').dropdown();
- $('#settings_radarr_sync').dropdown();
-</script>
-
-<script>
- // form validation
- $('#settings_form')
- .form({
- fields: {
- settings_general_ip : {
- rules : [
- {
- type : 'regExp[/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/]'
- },
- {
- type : 'empty'
- }
- ]
- },
- settings_general_port : {
- rules : [
- {
- type : 'integer[1..65535]'
- },
- {
- type : 'empty'
- }
- ]
- },
- settings_auth_password : {
- depends: 'settings_auth_username',
- rules : [
- {
- type : 'empty',
- prompt : 'This field must have a value and you must type it again if you change your username.'
- }
- ]
- },
- sonarr_validated_checkbox : {
- depends: 'settings_general_use_sonarr',
- rules : [
- {
- type : 'checked'
- }
- ]
- },
- settings_sonarr_ip : {
- depends: 'settings_general_use_sonarr',
- rules : [
- {
- type : 'empty'
- }
- ]
- },
- settings_sonarr_port : {
- depends: 'settings_general_use_sonarr',
- rules : [
- {
- type : 'integer[1..65535]'
- },
- {
- type : 'empty'
- }
- ]
- },
- settings_sonarr_apikey : {
- depends: 'settings_general_use_sonarr',
- rules : [
- {
- type : 'exactLength[32]'
- },
- {
- type : 'empty'
- }
- ]
- },
- radarr_validated_checkbox : {
- depends: 'settings_general_use_radarr',
- rules : [
- {
- type : 'checked'
- }
- ]
- },
- settings_radarr_ip : {
- depends: 'settings_general_use_radarr',
- rules : [
- {
- type : 'empty'
- }
- ]
- },
- settings_radarr_port : {
- depends: 'settings_general_use_radarr',
- rules : [
- {
- type : 'integer[1..65535]'
- },
- {
- type : 'empty'
- }
- ]
- },
- settings_radarr_apikey : {
- depends: 'settings_general_use_radarr',
- rules : [
- {
- type : 'exactLength[32]'
- },
- {
- type : 'empty'
- }
- ]
- },
- settings_subliminal_providers : {
- rules : [
- {
- type : 'minCount[1]'
- },
- {
- type : 'empty'
- }
- ]
- },
- settings_subliminal_languages : {
- rules : [
- {
- type : 'minCount[1]'
- },
- {
- type : 'empty'
- }
- ]
- }
- },
- inline : true,
- on : 'blur',
- onFailure: function(){
- $('#form_validation_error').show();
- $('.submit').addClass('disabled');
- return false;
- },
- onSuccess: function(){
- $('#form_validation_error').hide();
- $('.submit').removeClass('disabled');
- $('#loader').addClass('active');
- }
- })
- ;
-
- $('#settings_providers').dropdown('setting', 'onChange', function(){
- $('.form').form('validate field', 'settings_subliminal_providers');
- });
- $('#settings_languages').dropdown('setting', 'onChange', function(){
- $('.form').form('validate field', 'settings_subliminal_languages');
- });
-
- $('.submit').click(function() {
- alert('Settings saved.');
- })
-
- $( document ).ready(function() {
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- });
-
- $('#settings_form').focusout(function() {
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- })
-
- $('#settings_auth_username').keyup(function() {
- $('#settings_auth_password').val('');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- })
-
- $('#sonarr_validate').click(function() {
- if ($('#sonarr_ssl_div').checkbox('is checked')) {
- protocol = 'https';
- } else {
- protocol = 'http';
- }
- sonarr_url = $('#settings_sonarr_ip').val() + ":" + $('#settings_sonarr_port').val() + "/" + $('#settings_sonarr_baseurl').val().replace(/^\/|\/$/g, '') + "/api/system/status?apikey=" + $('#settings_sonarr_apikey').val();
-
- $.getJSON("{{base_url}}test_url/" + protocol + "/" + encodeURIComponent(sonarr_url), function (data) {
- if (data.status) {
- $('#sonarr_validated').checkbox('check');
- $('#sonarr_validation_result').text('Test successful: Sonarr v' + data.version).css('color', 'green');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- } else {
- $('#sonarr_validated').checkbox('uncheck');
- $('#sonarr_validation_result').text('Test failed').css('color', 'red');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- }
- });
- })
-
- $('.sonarr_config').keyup(function() {
- $('#sonarr_validated').checkbox('uncheck');
- $('#sonarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- })
-
- $('#settings_sonarr_ssl').change(function() {
- $('#sonarr_validated').checkbox('uncheck');
- $('#sonarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- })
-
- $("#sonarr_validated").checkbox('check');
-
- $('#radarr_validate').click(function() {
- if ($('#radarr_ssl_div').checkbox('is checked')) {
- protocol = 'https';
- } else {
- protocol = 'http';
- }
- radarr_url = $('#settings_radarr_ip').val() + ":" + $('#settings_radarr_port').val() + "/" + $('#settings_radarr_baseurl').val().replace(/^\/|\/$/g, '') + "/api/system/status?apikey=" + $('#settings_radarr_apikey').val();
-
- $.getJSON("{{base_url}}test_url/" + protocol + "/" + encodeURIComponent(radarr_url), function (data) {
- if (data.status) {
- $('#radarr_validated').checkbox('check');
- $('#radarr_validation_result').text('Test successful: Radarr v' + data.version).css('color', 'green');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- } else {
- $('#radarr_validated').checkbox('uncheck');
- $('#radarr_validation_result').text('Test failed').css('color', 'red');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- }
- });
- })
-
- $('.radarr_config').keyup(function() {
- $('#radarr_validated').checkbox('uncheck');
- $('#radarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- })
-
- $('#settings_radarr_ssl').change(function() {
- $('#radarr_validated').checkbox('uncheck');
- $('#radarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red');
- $('.form').form('validate form');
- $('#loader').removeClass('active');
- })
-
- $("#radarr_validated").checkbox('check');
-</script>
+<html> + <head> + <!DOCTYPE html> + <script src="{{base_url}}static/jquery/jquery-latest.min.js"></script> + <script src="{{base_url}}static/semantic/semantic.min.js"></script> + <script src="{{base_url}}static/jquery/tablesort.js"></script> + <link rel="stylesheet" href="{{base_url}}static/semantic/semantic.min.css"> + + <link rel="apple-touch-icon" sizes="120x120" href="{{base_url}}static/apple-touch-icon.png"> + <link rel="icon" type="image/png" sizes="32x32" href="{{base_url}}static/favicon-32x32.png"> + <link rel="icon" type="image/png" sizes="16x16" href="{{base_url}}static/favicon-16x16.png"> + <link rel="manifest" href="{{base_url}}static/manifest.json"> + <link rel="mask-icon" href="{{base_url}}static/safari-pinned-tab.svg" color="#5bbad5"> + <link rel="shortcut icon" href="{{base_url}}static/favicon.ico"> + <meta name="msapplication-config" content="{{base_url}}static/browserconfig.xml"> + <meta name="theme-color" content="#ffffff"> + + <title>Settings - Bazarr</title> + + <style> + body { + background-color: #272727; + } + #fondblanc { + background-color: #ffffff; + border-radius: 0px; + box-shadow: 0px 0px 5px 5px #ffffff; + margin-top: 32px; + margin-bottom: 3em; + padding: 1em; + } + .ui.tabular.menu > .disabled.item { + opacity: 0.45 !important; + pointer-events: none !important; + } + </style> + </head> + <body> + <div id='loader' class="ui page dimmer"> + <div class="ui indeterminate text loader">Loading...</div> + </div> + % include('menu.tpl') + + <div id="fondblanc" class="ui container"> + <form name="settings_form" id="settings_form" action="{{base_url}}save_settings" method="post" class="ui form" autocomplete="off"> + <div id="form_validation_error" class="ui error message"> + <p>Some fields are in error and you can't save settings until you have corrected them. Be sure to check in every tabs.</p> + </div> + <div class="ui top attached tabular menu"> + <a class="tabs item active" data-tab="general">General</a> + <a class="tabs item" id="sonarr_tab" data-tab="sonarr">Sonarr</a> + <a class="tabs item" id="radarr_tab" data-tab="radarr">Radarr</a> + <a class="tabs item" data-tab="subliminal">Subliminal</a> + <a class="tabs item" data-tab="notifier">Notifications</a> + </div> + <div class="ui bottom attached tab segment active" data-tab="general"> + <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div> + <div class="ui dividing header">Start-Up</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Listening IP address</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input name="settings_general_ip" type="text" value="{{settings_general[0]}}"> + </div> + </div> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted=""> + <i class="yellow warning sign icon"></i> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Valid IP4 address or '0.0.0.0' for all interfaces" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Listening port</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input name="settings_general_port" type="text" value="{{settings_general[1]}}"> + </div> + </div> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted=""> + <i class="yellow warning sign icon"></i> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Valid TCP port (default: 6767)" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Base URL</label> + </div> + <div class="five wide column"> + <div class="ui fluid input"> + %if settings_general[2] == None: + % base_url = "/" + %else: + % base_url = settings_general[2] + %end + <input name="settings_general_baseurl" type="text" value="{{base_url}}"> + </div> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted=""> + <i class="yellow warning sign icon"></i> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="For reverse proxy support, default is '/'" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Log Level</label> + </div> + <div class="five wide column"> + <select name="settings_general_loglevel" id="settings_loglevel" class="ui fluid selection dropdown"> + <option value="">Log Level</option> + <option value="DEBUG">Debug</option> + <option value="INFO">Info</option> + <option value="WARNING">Warning</option> + <option value="ERROR">Error</option> + <option value="CRITICAL">Critical</option> + </select> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted=""> + <i class="yellow warning sign icon"></i> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Debug logging should only be enabled temporarily" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Page size</label> + </div> + <div class="five wide column"> + <select name="settings_page_size" id="settings_page_size" class="ui fluid selection dropdown"> + <option value="">Page Size</option> + <option value="-1">Unlimited</option> + <option value="25">25</option> + <option value="50">50</option> + <option value="100">100</option> + <option value="250">250</option> + <option value="500">500</option> + <option value="1000">1000</option> + </select> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="How many items to show in a list." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + </div> + + <div class="ui dividing header">Proxy settings</div> + <div class="twelve wide column"> + <div class="ui grid"> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Proxy type</label> + </div> + <div class="five wide column"> + <select name="settings_proxy_type" id="settings_proxy_type" class="ui fluid selection dropdown"> + <option value="None">None</option> + <option value="http">HTTP(S)</option> + <option value="socks4">Socks4</option> + <option value="socks5">Socks5</option> + </select> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted=""> + <i class="yellow warning sign icon"></i> + </div> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Type of your proxy." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="proxy_option middle aligned row"> + <div class="right aligned four wide column"> + <label>Hostname</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_proxy_url" name="settings_proxy_url" type="text" value="{{settings_proxy[1]}}"> + </div> + </div> + </div> + </div> + + <div class="proxy_option middle aligned row"> + <div class="right aligned four wide column"> + <label>Port</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_proxy_port" name="settings_proxy_port" type="text" value="{{settings_proxy[2]}}"> + </div> + </div> + </div> + </div> + + <div class="proxy_option middle aligned row"> + <div class="right aligned four wide column"> + <label>Username</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_proxy_username" name="settings_proxy_username" type="text" value="{{settings_proxy[3]}}"> + </div> + </div> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="UYou only need to enter a username and password if one is required. Leave them blank otherwise" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="proxy_option middle aligned row"> + <div class="right aligned four wide column"> + <label>Password</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_proxy_password" name="settings_proxy_password" type="password" value="{{settings_proxy[4]}}"> + </div> + </div> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="You only need to enter a username and password if one is required. Leave them blank otherwise" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + + </div> + + <div class="proxy_option middle aligned row"> + <div class="right aligned four wide column"> + <label>Ignored Addresses</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_proxy_exclude" name="settings_proxy_exclude" type="text" value="{{settings_proxy[5]}}"> + </div> + </div> + </div> + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Use ',' as a separator, and '*.' as a wildcard for subdomains" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + + </div> + </div> + </div> + + <div class="ui dividing header">Security settings</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Authentication</label> + </div> + <div class="five wide column"> + <select name="settings_auth_type" id="settings_auth_type" class="ui fluid selection dropdown"> + <option value="None">None</option> + <option value="basic">Basic (Browser Popup)</option> + <option value="form">Forms (Login Page)</option> + </select> + <label></label> + </div> + + + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Requires restart to take effect" data-inverted=""> + <i class="yellow warning sign icon"></i> + </div> + </div> + + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Require Username and Password to access Bazarr." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="auth_option middle aligned row"> + <div class="right aligned four wide column"> + <label>Username</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_auth_username" name="settings_auth_username" type="text" autocomplete="nope" value="{{settings_auth[1]}}"> + </div> + </div> + </div> + </div> + + <div class="auth_option middle aligned row"> + <div class="right aligned four wide column"> + <label>Password</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_auth_password" name="settings_auth_password" type="password" autocomplete="new-password" value="{{settings_auth[2]}}"> + </div> + </div> + </div> + + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Authentication send username and password in clear over the network. You should add SSL encryption trough a reverse proxy." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + </div> + </div> + + <div class="ui dividing header">Integration settings</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Use Sonarr</label> + </div> + <div class="one wide column"> + <div id="settings_use_sonarr" class="ui toggle checkbox" data-enabled={{settings_general[12]}}> + <input name="settings_general_use_sonarr" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Enable Sonarr integration." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Use Radarr</label> + </div> + <div class="one wide column"> + <div id="settings_use_radarr" class="ui toggle checkbox" data-enabled={{settings_general[13]}}> + <input name="settings_general_use_radarr" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Enable Radarr integration." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + </div> + </div> + + <div class="ui dividing header">Path Mappings for shows</div> + <div class="twelve wide column"> + <div class="ui grid"> + %import ast + %if settings_general[3] is not None: + % path_substitutions = ast.literal_eval(settings_general[3]) + %else: + % path_substitutions = [] + %end + <div class="middle aligned row"> + <div class="right aligned four wide column"> + + </div> + <div class="two wide column"> + <div class="ui fluid input"> + <h4 class="ui header"> + Path for Sonarr: + </h4> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Root path to the directory Sonarr accesses." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + <div class="two wide center aligned column"> + + </div> + <div class="two wide column"> + <div class="ui fluid input"> + <h4 class="ui header"> + Path for Bazarr: + </h4> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Path that Bazarr should use to access the same directory remotely." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + %for x in range(0, 5): + % path = [] + % try: + % path = path_substitutions[x] + % except IndexError: + % path = ["", ""] + % end + <div class="middle aligned row"> + <div class="right aligned four wide column"> + + </div> + <div class="four wide column"> + <div class="ui fluid input"> + <input name="settings_general_sourcepath" type="text" value="{{path[0]}}"> + </div> + </div> + <div class="center aligned column"> + <i class="arrow circle right icon"></i> + </div> + <div class="four wide column"> + <div class="ui fluid input"> + <input name="settings_general_destpath" type="text" value="{{path[1]}}"> + </div> + </div> + </div> + %end + </div> + </div> + + <div class="ui dividing header">Path Mappings for movies</div> + <div class="twelve wide column"> + <div class="ui grid"> + %import ast + %if settings_general[14] is not None: + % path_substitutions_movie = ast.literal_eval(settings_general[14]) + %else: + % path_substitutions_movie = [] + %end + <div class="middle aligned row"> + <div class="right aligned four wide column"> + + </div> + <div class="two wide column"> + <div class="ui fluid input"> + <h4 class="ui header"> + Path for Radarr: + </h4> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Root path to the directory Radarr accesses." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + <div class="two wide center aligned column"> + + </div> + <div class="two wide column"> + <div class="ui fluid input"> + <h4 class="ui header"> + Path for Bazarr: + </h4> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Path that Bazarr should use to access the same directory remotely." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + %for x in range(0, 5): + % path_movie = [] + % try: + % path_movie = path_substitutions_movie[x] + % except IndexError: + % path_movie = ["", ""] + % end + <div class="middle aligned row"> + <div class="right aligned four wide column"> + + </div> + <div class="four wide column"> + <div class="ui fluid input"> + <input name="settings_general_sourcepath_movie" type="text" value="{{path_movie[0]}}"> + </div> + </div> + <div class="center aligned column"> + <i class="arrow circle right icon"></i> + </div> + <div class="four wide column"> + <div class="ui fluid input"> + <input name="settings_general_destpath_movie" type="text" value="{{path_movie[1]}}"> + </div> + </div> + </div> + %end + </div> + </div> + + <div class="ui dividing header">Post-processing</div> + <div class="twelve wide column"> + <div class="ui orange message"> + <p>Be aware that the execution of post-processing command will prevent the user interface from being accessible until completion when downloading subtitles in interactive mode (meaning you'll see a loader during post-processing).</p> + </div> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Use post-processing</label> + </div> + <div class="one wide column"> + <div id="settings_use_postprocessing" class="ui toggle checkbox" data-postprocessing={{settings_general[10]}}> + <input name="settings_general_use_postprocessing" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Enable the post-processing execution after downloading a subtitles." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Post-processing command</label> + </div> + <div class="five wide column"> + <div id="settings_general_postprocessing_cmd_div" class="ui fluid input"> + <input name="settings_general_postprocessing_cmd" type="text" value="{{settings_general[11] if settings_general[11] != None else ''}}"> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Variables you can use in your command (include the double curly brace):</label> + </div> + <div class="ten wide column"> + <div class="ui list"> + <div class="item"> + <div class="header">{{directory}}</div> + The full path of the episode file parent directory. + </div> + <div class="item"> + <div class="header">{{episode}}</div> + The full path of the episode file. + </div> + <div class="item"> + <div class="header">{{episode_name}}</div> + The filename of the episode without parent directory or extension. + </div> + <div class="item"> + <div class="header">{{subtitles}}</div> + The full path of the subtitles file. + </div> + <div class="item"> + <div class="header">{{subtitles_language}}</div> + The language of the subtitles file. + </div> + <div class="item"> + <div class="header">{{subtitles_language_code2}}</div> + The 2-letter ISO-639 language code of the subtitles language. + </div> + <div class="item"> + <div class="header">{{subtitles_language_code3}}</div> + The 3-letter ISO-639 language code of the subtitles language. + </div> + </div> + </div> + </div> + </div> + </div> + + <div id="div_update" > + <div class="ui dividing header">Updates</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Branch</label> + </div> + <div class="five wide column"> + <select name="settings_general_branch" id="settings_branch" class="ui fluid selection dropdown"> + <option value="">Branch</option> + <option value="master">master</option> + <option value="development">development</option> + </select> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Only select development branch if you want to live on the edge." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Automatic</label> + </div> + <div class="one wide column"> + <div id="settings_automatic_div" class="ui toggle checkbox" data-automatic={{settings_general[6]}}> + <input name="settings_general_automatic" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Automatically download and install updates. You will still be able to install from System: Tasks" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="ui bottom attached tab segment" data-tab="sonarr"> + <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div> + <div class="ui dividing header">Connection settings</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Settings validation:</label> + </div> + <div class="two wide column"> + <button id="sonarr_validate" class="test ui blue button" type="button"> + Test + </button> + </div> + <div class="seven wide column"> + <div id="sonarr_validated" class="ui read-only checkbox"> + <input id="sonarr_validated_checkbox" type="checkbox"> + <label id="sonarr_validation_result">Not tested recently</label> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Hostname or IP address</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_sonarr_ip" name="settings_sonarr_ip" class="sonarr_config" type="text" value="{{settings_sonarr[0]}}"> + </div> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Hostname or IP4 address of Sonarr" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Listening port</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_sonarr_port" name="settings_sonarr_port" class="sonarr_config" type="text" value="{{settings_sonarr[1]}}"> + </div> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="TCP port of Sonarr" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Base URL</label> + </div> + <div class="five wide column"> + <div class="ui fluid input"> + <input id="settings_sonarr_baseurl" name="settings_sonarr_baseurl" class="sonarr_config" type="text" value="{{settings_sonarr[2]}}"> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Base URL for Sonarr (default: '/')" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>SSL enabled</label> + </div> + <div class="one wide column"> + <div id="sonarr_ssl_div" class="ui toggle checkbox" data-ssl={{settings_sonarr[3]}}> + <input id="settings_sonarr_ssl" name="settings_sonarr_ssl" type="checkbox"> + <label></label> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>API key</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_sonarr_apikey" name="settings_sonarr_apikey" class="sonarr_config" type="text" value="{{settings_sonarr[4]}}"> + </div> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="API key for Sonarr (32 alphanumeric characters)" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + </div> + + <div class="ui dividing header">Synchronization</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Full sync frequency</label> + </div> + <div class="five wide column"> + <div class='field'> + <select name="settings_sonarr_sync" id="settings_sonarr_sync" class="ui fluid selection dropdown"> + <option value="Manually">Manually</option> + <option value="Daily">Daily (at 4am)</option> + <option value="Weekly">Weekly (sunday at 4am)</option> + </select> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="ui bottom attached tab segment" data-tab="radarr"> + <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div> + <div class="ui dividing header">Connection settings</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Settings validation:</label> + </div> + <div class="two wide column"> + <button id="radarr_validate" class="test ui blue button" type="button"> + Test + </button> + </div> + <div class="seven wide column"> + <div id="radarr_validated" class="ui read-only checkbox"> + <input id="radarr_validated_checkbox" type="checkbox"> + <label id="radarr_validation_result">Not tested recently</label> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Hostname or IP address</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_radarr_ip" name="settings_radarr_ip" type="text" class="radarr_config" value="{{settings_radarr[0]}}"> + </div> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Hostname or IP4 address of Radarr" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Listening port</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_radarr_port" name="settings_radarr_port" type="text" class="radarr_config" value="{{settings_radarr[1]}}"> + </div> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="TCP port of Radarr" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Base URL</label> + </div> + <div class="five wide column"> + <div class="ui fluid input"> + <input id="settings_radarr_baseurl" name="settings_radarr_baseurl" type="text" class="radarr_config" value="{{settings_radarr[2]}}"> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Base URL for Radarr (default: '/')" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>SSL enabled</label> + </div> + <div class="one wide column"> + <div id="radarr_ssl_div" class="ui toggle checkbox" data-ssl={{settings_radarr[3]}}> + <input id="settings_radarr_ssl" name="settings_radarr_ssl" type="checkbox"> + <label></label> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>API key</label> + </div> + <div class="five wide column"> + <div class='field'> + <div class="ui fluid input"> + <input id="settings_radarr_apikey" name="settings_radarr_apikey" type="text" class="radarr_config" value="{{settings_radarr[4]}}"> + </div> + </div> + </div> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="API key for Radarr (32 alphanumeric characters)" data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + </div> + + <div class="ui dividing header">Synchronization</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Full sync frequency</label> + </div> + <div class="five wide column"> + <div class='field'> + <select name="settings_radarr_sync" id="settings_radarr_sync" class="ui fluid selection dropdown"> + <option value="Manually">Manually</option> + <option value="Daily">Daily (at 5am)</option> + <option value="Weekly">Weekly (sunday at 5am)</option> + </select> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="ui bottom attached tab segment" data-tab="subliminal"> + <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div> + <br><br><br> + <div class="ui container"> + <div class="ui info message"> + <p>Thanks to Diaoul for his work on <a href="https://github.com/Diaoul/subliminal" target="_blank">Subliminal</a> on which Bazarr is based.</p> + </div> + </div> + <div class="ui dividing header">Subtitles options</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Use scene name when available</label> + </div> + <div class="one wide column"> + <div id="settings_scenename" class="ui toggle checkbox" data-scenename={{settings_general[9]}}> + <input name="settings_general_scenename" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Use the scene name from Sonarr/Radarr if available to circumvent usage of episode file renaming." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Minimum score for episodes</label> + </div> + <div class="two wide column"> + <div class='field'> + <div class="ui input"> + <input name="settings_general_minimum_score" type="number" min="0" max="100" step="5" onkeydown="return false" value="{{settings_general[8]}}"> + </div> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Minimum score for an episode subtitle to be downloaded (0 to 100)." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Minimum score for movies</label> + </div> + <div class="two wide column"> + <div class='field'> + <div class="ui input"> + <input name="settings_general_minimum_score_movies" type="number" min="0" max="100" step="5" onkeydown="return false" value="{{settings_general[22]}}"> + </div> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Minimum score for a movie subtitle to be downloaded (0 to 100)." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Use embedded subtitles</label> + </div> + <div class="one wide column"> + <div id="settings_embedded" class="ui toggle checkbox" data-embedded={{settings_general[23]}}> + <input name="settings_general_embedded" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Use embedded subtitles in media files when determining missing ones." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Download only monitored</label> + </div> + <div class="one wide column"> + <div id="settings_only_monitored" class="ui toggle checkbox" data-monitored={{settings_general[24]}}> + <input name="settings_general_only_monitored" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Automatic download of subtitles will happen only for monitored episodes/movies in Sonarr/Radarr." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Adaptive searching</label> + </div> + <div class="one wide column"> + <div id="settings_adaptive_searching" class="ui toggle checkbox" data-adaptive={{settings_general[25]}}> + <input name="settings_general_adaptive_searching" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="When searching for subtitles, Bazarr will search less frequently after sometime to limit call to providers." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="ui dividing header">Subtitles providers</div> + <div class="twelve wide column"> + <div class="ui orange message"> + <p>Be aware that the more providers you enable, the longer it will take everytime you search for a subtitles.</p> + </div> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Enabled providers</label> + </div> + <div class="eleven wide column"> + <div class='field'> + <select name="settings_subliminal_providers" id="settings_providers" multiple="" class="ui fluid selection dropdown"> + <option value="">Providers</option> + %enabled_providers = [] + %for provider in settings_providers: + <option value="{{provider[0]}}">{{provider[0]}}</option> + %if provider[1] == True: + % enabled_providers.append(str(provider[0])) + %end + %end + </select> + </div> + </div> + </div> + </div> + </div> + <div class="ui dividing header">Providers authentication (optional)</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + + </div> + <div class="five wide column"> + <div class="ui fluid input"> + <h4 class="ui header">Username</h4> + </div> + </div> + <div class="five wide column"> + <div class="ui fluid input"> + <h4 class="ui header">Password (stored in clear text)</h4> + </div> + </div> + </div> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>addic7ed</label> + </div> + %for provider in settings_providers: + % if provider[0] == 'addic7ed': + % addic7ed_username = provider[2] + % addic7ed_password = provider[3] + % end + %end + <div class="five wide column"> + <div class="ui fluid input"> + <input name="settings_addic7ed_username" type="text" value="{{addic7ed_username if addic7ed_username != None else ''}}"> + </div> + </div> + <div class="five wide column"> + <div class="ui fluid input"> + <input name="settings_addic7ed_password" type="password" value="{{addic7ed_password if addic7ed_password != None else ''}}"> + </div> + </div> + </div> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>legendastv</label> + </div> + %for provider in settings_providers: + % if provider[0] == 'legendastv': + % legendastv_username = provider[2] + % legendastv_password = provider[3] + % end + %end + <div class="five wide column"> + <div class="ui fluid input"> + <input name="settings_legendastv_username" type="text" value="{{legendastv_username if legendastv_username != None else ''}}"> + </div> + </div> + <div class="five wide column"> + <div class="ui fluid input"> + <input name="settings_legendastv_password" type="password" value="{{legendastv_password if legendastv_password != None else ''}}"> + </div> + </div> + </div> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>opensubtitles</label> + </div> + %for provider in settings_providers: + % if provider[0] == 'opensubtitles': + % opensubtitles_username = provider[2] + % opensubtitles_password = provider[3] + % end + %end + <div class="five wide column"> + <div class="ui fluid input"> + <input name="settings_opensubtitles_username" type="text" value="{{opensubtitles_username if opensubtitles_username != None else ''}}"> + </div> + </div> + <div class="five wide column"> + <div class="ui fluid input"> + <input name="settings_opensubtitles_password" type="password" value="{{opensubtitles_password if opensubtitles_password != None else ''}}"> + </div> + </div> + </div> + </div> + </div> + <div class="ui dividing header">Subtitles languages</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Single language</label> + </div> + <div class="one wide column"> + <div id="settings_single_language" class="ui toggle checkbox" data-single-language={{settings_general[7]}}> + <input name="settings_general_single_language" type="checkbox"> + <label></label> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Download a single subtitles file and don't add the language code to the filename." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Enabled languages</label> + </div> + <div class="eleven wide column"> + <div class='field'> + <select name="settings_subliminal_languages" id="settings_languages" multiple="" class="ui fluid selection dropdown"> + <option value="">Languages</option> + %enabled_languages = [] + %for language in settings_languages: + <option value="{{language[1]}}">{{language[2]}}</option> + %if language[3] == True: + % enabled_languages.append(str(language[1])) + %end + %end + </select> + </div> + </div> + </div> + </div> + </div> + + <div class="ui dividing header">Series default settings</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Default enabled</label> + </div> + <div class="one wide column"> + <div class="nine wide column"> + <div id="settings_serie_default_enabled_div" class="ui toggle checkbox" data-enabled="{{settings_general[15]}}"> + <input name="settings_serie_default_enabled" id="settings_serie_default_enabled" type="checkbox"> + <label></label> + </div> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Apply only to series added to Bazarr after enabling this option." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Languages</label> + </div> + <div class="eleven wide column"> + <div class='field'> + <select name="settings_serie_default_languages" id="settings_serie_default_languages" multiple="" class="ui fluid selection dropdown"> + %if settings_general[7] is False: + <option value="">Languages</option> + %else: + <option value="None">None</option> + %end + </select> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Hearing-impaired</label> + </div> + <div class="eleven wide column"> + <div class="nine wide column"> + <div id="settings_serie_default_hi_div" class="ui toggle checkbox" data-hi="{{settings_general[17]}}"> + <input name="settings_serie_default_hi" id="settings_serie_default_hi" type="checkbox"> + <label></label> + </div> + </div> + </div> + </div> + </div> + </div> + + <div class="ui dividing header">Movies default settings</div> + <div class="twelve wide column"> + <div class="ui grid"> + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>Default enabled</label> + </div> + <div class="one wide column"> + <div class="nine wide column"> + <div id="settings_movie_default_enabled_div" class="ui toggle checkbox" data-enabled="{{settings_general[18]}}"> + <input name="settings_movie_default_enabled" id="settings_movie_default_enabled" type="checkbox"> + <label></label> + </div> + </div> + </div> + <div class="collapsed column"> + <div class="collapsed center aligned column"> + <div class="ui basic icon" data-tooltip="Apply only to movies added to Bazarr after enabling this option." data-inverted=""> + <i class="help circle large icon"></i> + </div> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div id="movie_default_languages_label" class="right aligned four wide column"> + <label>Languages</label> + </div> + <div class="eleven wide column"> + <div class='field'> + <select name="settings_movie_default_languages" id="settings_movie_default_languages" multiple="" class="ui fluid selection dropdown"> + %if settings_general[7] is False: + <option value="">Languages</option> + %else: + <option value="None">None</option> + %end + </select> + </div> + </div> + </div> + + <div class="middle aligned row"> + <div id="movie_default_hi_label" class="right aligned four wide column"> + <label>Hearing-impaired</label> + </div> + <div class="eleven wide column"> + <div class="nine wide column"> + <div id="settings_movie_default_hi_div" class="ui toggle checkbox" data-hi="{{settings_general[20]}}"> + <input name="settings_movie_default_hi" id="settings_movie_default_hi" type="checkbox"> + <label></label> + </div> + </div> + </div> + </div> + </div> + </div> + </div> + <div class="ui bottom attached tab segment" data-tab="notifier"> + <div class="ui container"><button class="submit ui blue right floated button" type="submit" value="Submit" form="settings_form">Save</button></div> + <div class="ui dividing header">Notifications settings</div> + <div class="twelve wide column"> + <div class="ui info message"> + <p>Thanks to caronc for his work on <a href="https://github.com/caronc/apprise" target="_blank">apprise</a> on which is based the notifications system.</p> + </div> + <div class="ui info message"> + <p>Please follow instructions on his <a href="https://github.com/caronc/apprise/wiki" target="_blank">wiki</a> to configure your notifications providers.</p> + </div> + <div class="ui grid"> + %for notifier in settings_notifier: + <div class="middle aligned row"> + <div class="right aligned four wide column"> + <label>{{notifier[0]}}</label> + </div> + <div class="one wide column"> + <div id="settings_notifier_{{notifier[0]}}_enabled" class="notifier_enabled ui toggle checkbox" data-notifier-url-div="settings_notifier_{{notifier[0]}}_url_div" data-enabled={{notifier[2]}}> + <input name="settings_notifier_{{notifier[0]}}_enabled" type="checkbox"> + <label></label> + </div> + </div> + <div class="eight wide column"> + <div class='field'> + <div id="settings_notifier_{{notifier[0]}}_url_div" class="ui fluid input"> + <input name="settings_notifier_{{notifier[0]}}_url" type="text" value="{{notifier[1] if notifier[1] != None else ''}}"> + </div> + </div> + </div> + </div> + %end + </div> + </div> + </div> + </form> + </div> + % include('footer.tpl') + </body> +</html> + + +<script> + + % from get_argv import no_update + % if no_update is True: + $("#div_update").hide(); + % end + + $('.menu .item') + .tab() + ; + + $('a:not(.tabs), button:not(.cancel, .test)').click(function(){ + $('#loader').addClass('active'); + }) + + $('a[target="_blank"]').click(function(){ + $('#loader').removeClass('active'); + }) + + if ($('#sonarr_ssl_div').data("ssl") == "True") { + $("#sonarr_ssl_div").checkbox('check'); + } else { + $("#sonarr_ssl_div").checkbox('uncheck'); + } + + if ($('#radarr_ssl_div').data("ssl") == "True") { + $("#radarr_ssl_div").checkbox('check'); + } else { + $("#radarr_ssl_div").checkbox('uncheck'); + } + + if ($('#settings_automatic_div').data("automatic") == "True") { + $("#settings_automatic_div").checkbox('check'); + } else { + $("#settings_automatic_div").checkbox('uncheck'); + } + + if ($('#settings_single_language').data("single-language") == "True") { + $("#settings_single_language").checkbox('check'); + } else { + $("#settings_single_language").checkbox('uncheck'); + } + + if ($('#settings_scenename').data("scenename") == "True") { + $("#settings_scenename").checkbox('check'); + } else { + $("#settings_scenename").checkbox('uncheck'); + } + + if ($('#settings_embedded').data("embedded") == "True") { + $("#settings_embedded").checkbox('check'); + } else { + $("#settings_embedded").checkbox('uncheck'); + } + + if ($('#settings_only_monitored').data("monitored") == "True") { + $("#settings_only_monitored").checkbox('check'); + } else { + $("#settings_only_monitored").checkbox('uncheck'); + } + + if ($('#settings_adaptive_searching').data("adaptive") == "True") { + $("#settings_adaptive_searching").checkbox('check'); + } else { + $("#settings_adaptive_searching").checkbox('uncheck'); + } + + if ($('#settings_use_postprocessing').data("postprocessing") == "True") { + $("#settings_use_postprocessing").checkbox('check'); + $("#settings_general_postprocessing_cmd_div").removeClass('disabled'); + } else { + $("#settings_use_postprocessing").checkbox('uncheck'); + $("#settings_general_postprocessing_cmd_div").addClass('disabled'); + } + + $("#settings_use_postprocessing").change(function(i, obj) { + if ($("#settings_use_postprocessing").checkbox('is checked')) { + $("#settings_general_postprocessing_cmd_div").removeClass('disabled'); + } else { + $("#settings_general_postprocessing_cmd_div").addClass('disabled'); + } + }); + + if ($('#settings_use_sonarr').data("enabled") == "True") { + $("#settings_use_sonarr").checkbox('check'); + $("#sonarr_tab").removeClass('disabled'); + } else { + $("#settings_use_sonarr").checkbox('uncheck'); + $("#sonarr_tab").addClass('disabled'); + } + + $('#settings_use_sonarr').checkbox({ + onChecked: function() { + $("#sonarr_tab").removeClass('disabled'); + $('#sonarr_validated').checkbox('uncheck'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }, + onUnchecked: function() { + $("#sonarr_tab").addClass('disabled'); + } + }); + + if ($('#settings_use_radarr').data("enabled") == "True") { + $("#settings_use_radarr").checkbox('check'); + $("#radarr_tab").removeClass('disabled'); + } else { + $("#settings_use_radarr").checkbox('uncheck'); + $("#radarr_tab").addClass('disabled'); + } + + $('#settings_use_radarr').checkbox({ + onChecked: function() { + $("#radarr_tab").removeClass('disabled'); + $('#sonarr_validated').checkbox('uncheck'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }, + onUnchecked: function() { + $("#radarr_tab").addClass('disabled'); + } + }); + + if ($('#settings_auth_type').val() == "None") { + $('.auth_option').hide(); + }; + + $('#settings_auth_type').dropdown('setting', 'onChange', function(){ + if ($('#settings_auth_type').val() == "None") { + $('.auth_option').hide(); + } + else { + $('.auth_option').show(); + }; + }); + + $('#settings_languages').dropdown('setting', 'onAdd', function(val, txt){ + $("#settings_serie_default_languages").append( + $("<option></option>").attr("value", val).text(txt) + ) + $("#settings_movie_default_languages").append( + $("<option></option>").attr("value", val).text(txt) + ) + }); + + $('#settings_languages').dropdown('setting', 'onRemove', function(val, txt){ + $("#settings_serie_default_languages").dropdown('remove selected', val); + $("#settings_serie_default_languages option[value='" + val + "']").remove(); + + $("#settings_movie_default_languages").dropdown('remove selected', val); + $("#settings_movie_default_languages option[value='" + val + "']").remove(); + }); + + if ($('#settings_serie_default_enabled_div').data("enabled") == "True") { + $("#settings_serie_default_enabled_div").checkbox('check'); + } else { + $("#settings_serie_default_enabled_div").checkbox('uncheck'); + } + + if ($('#settings_serie_default_enabled_div').data("enabled") == "True") { + $("#settings_serie_default_languages").removeClass('disabled'); + $("#settings_serie_default_hi_div").removeClass('disabled'); + } else { + $("#settings_serie_default_languages").addClass('disabled'); + $("#settings_serie_default_hi_div").addClass('disabled'); + } + + $('#settings_serie_default_enabled_div').checkbox({ + onChecked: function() { + $("#settings_serie_default_languages").parent().removeClass('disabled'); + $("#settings_serie_default_hi_div").removeClass('disabled'); + }, + onUnchecked: function() { + $("#settings_serie_default_languages").parent().addClass('disabled'); + $("#settings_serie_default_hi_div").addClass('disabled'); + } + }); + + if ($('#settings_serie_default_hi_div').data("hi") == "True") { + $("#settings_serie_default_hi_div").checkbox('check'); + } else { + $("#settings_serie_default_hi_div").checkbox('uncheck'); + } + + if ($('#settings_movie_default_enabled_div').data("enabled") == "True") { + $("#settings_movie_default_enabled_div").checkbox('check'); + } else { + $("#settings_movie_default_enabled_div").checkbox('uncheck'); + } + + if ($('#settings_movie_default_enabled_div').data("enabled") == "True") { + $("#settings_movie_default_languages").removeClass('disabled'); + $("#settings_movie_default_hi_div").removeClass('disabled'); + } else { + $("#settings_movie_default_languages").addClass('disabled'); + $("#settings_movie_default_hi_div").addClass('disabled'); + } + + $('#settings_movie_default_enabled_div').checkbox({ + onChecked: function() { + $("#settings_movie_default_languages").parent().removeClass('disabled'); + $("#settings_movie_default_hi_div").removeClass('disabled'); + }, + onUnchecked: function() { + $("#settings_movie_default_languages").parent().addClass('disabled'); + $("#settings_movie_default_hi_div").addClass('disabled'); + } + }); + + if ($('#settings_movie_default_hi_div').data("hi") == "True") { + $("#settings_movie_default_hi_div").checkbox('check'); + } else { + $("#settings_movie_default_hi_div").checkbox('uncheck'); + } + + if ($("#settings_single_language").checkbox('is checked')) { + $("#settings_serie_default_languages").parent().removeClass('multiple'); + $("#settings_serie_default_languages").removeAttr('multiple'); + $("#settings_movie_default_languages").parent().removeClass('multiple'); + $("#settings_movie_default_languages").removeAttr('multiple'); + } else { + $("#settings_serie_default_languages").parent().addClass('multiple'); + $("#settings_serie_default_languages").attr('multiple'); + $("#settings_movie_default_languages").parent().addClass('multiple'); + $("#settings_movie_default_languages").attr('multiple'); + } + + $("#settings_single_language").change(function(i, obj) { + if ($("#settings_single_language").checkbox('is checked')) { + $("#settings_serie_default_languages").dropdown('clear'); + $("#settings_movie_default_languages").dropdown('clear'); + $("#settings_serie_default_languages").prepend("<option value='None' selected='selected'>None</option>"); + $("#settings_movie_default_languages").prepend("<option value='None' selected='selected'>None</option>"); + $("#settings_serie_default_languages").parent().removeClass('multiple'); + $("#settings_serie_default_languages").removeAttr('multiple'); + $("#settings_movie_default_languages").parent().removeClass('multiple'); + $("#settings_movie_default_languages").removeAttr('multiple'); + } else { + $("#settings_serie_default_languages").dropdown('clear'); + $("#settings_movie_default_languages").dropdown('clear'); + $("#settings_serie_default_languages option[value='None']").remove(); + $("#settings_movie_default_languages option[value='None']").remove(); + $("#settings_serie_default_languages").parent().addClass('multiple'); + $("#settings_serie_default_languages").attr('multiple'); + $("#settings_movie_default_languages").parent().addClass('multiple'); + $("#settings_movie_default_languages").attr('multiple'); + } + }); + + $('.notifier_enabled').each(function(i, obj) { + if ($(this).data("enabled") == 1) { + $(this).checkbox('check'); + $('[id=\"' + $(this).data("notifier-url-div") + '\"]').removeClass('disabled'); + } else { + $(this).checkbox('uncheck'); + $('[id=\"' + $(this).data("notifier-url-div") + '\"]').addClass('disabled'); + } + }); + + $('.notifier_enabled').change(function(i, obj) { + if ($(this).checkbox('is checked')) { + $('[id=\"' + $(this).data("notifier-url-div") + '\"]').removeClass('disabled'); + } else { + $('[id=\"' + $(this).data("notifier-url-div") + '\"]').addClass('disabled'); + } + }); + + + $('#settings_loglevel').dropdown('clear'); + $('#settings_loglevel').dropdown('set selected','{{!settings_general[4]}}'); + $('#settings_page_size').dropdown('clear'); + $('#settings_page_size').dropdown('set selected','{{!settings_general[21]}}'); + $('#settings_proxy_type').dropdown('clear'); + $('#settings_proxy_type').dropdown('set selected','{{!settings_proxy[0]}}'); + $('#settings_providers').dropdown('clear'); + $('#settings_providers').dropdown('set selected',{{!enabled_providers}}); + $('#settings_languages').dropdown('clear'); + $('#settings_languages').dropdown('set selected',{{!enabled_languages}}); + $('#settings_branch').dropdown('clear'); + $('#settings_branch').dropdown('set selected','{{!settings_general[5]}}'); + $('#settings_sonarr_sync').dropdown('clear'); + $('#settings_sonarr_sync').dropdown('set selected','{{!settings_sonarr[5]}}'); + $('#settings_radarr_sync').dropdown('clear'); + $('#settings_radarr_sync').dropdown('set selected','{{!settings_radarr[5]}}'); + + $('#settings_loglevel').dropdown(); + $('#settings_providers').dropdown(); + $('#settings_languages').dropdown(); + $('#settings_serie_default_languages').dropdown(); + $('#settings_movie_default_languages').dropdown(); + %if settings_general[16] is not None: + $('#settings_serie_default_languages').dropdown('set selected',{{!settings_general[16]}}); + %end + %if settings_general[19] is not None: + $('#settings_movie_default_languages').dropdown('set selected',{{!settings_general[19]}}); + %end + $('#settings_auth_type').dropdown('clear'); + $('#settings_auth_type').dropdown('set selected','{{!settings_auth[0]}}'); + $('#settings_branch').dropdown(); + $('#settings_sonarr_sync').dropdown(); + $('#settings_radarr_sync').dropdown(); +</script> + +<script> + // form validation + $('#settings_form') + .form({ + fields: { + settings_general_ip : { + rules : [ + { + type : 'regExp[/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/]' + }, + { + type : 'empty' + } + ] + }, + settings_general_port : { + rules : [ + { + type : 'integer[1..65535]' + }, + { + type : 'empty' + } + ] + }, + settings_auth_password : { + depends: 'settings_auth_username', + rules : [ + { + type : 'empty', + prompt : 'This field must have a value and you must type it again if you change your username.' + } + ] + }, + sonarr_validated_checkbox : { + depends: 'settings_general_use_sonarr', + rules : [ + { + type : 'checked' + } + ] + }, + settings_sonarr_ip : { + depends: 'settings_general_use_sonarr', + rules : [ + { + type : 'empty' + } + ] + }, + settings_sonarr_port : { + depends: 'settings_general_use_sonarr', + rules : [ + { + type : 'integer[1..65535]' + }, + { + type : 'empty' + } + ] + }, + settings_sonarr_apikey : { + depends: 'settings_general_use_sonarr', + rules : [ + { + type : 'exactLength[32]' + }, + { + type : 'empty' + } + ] + }, + radarr_validated_checkbox : { + depends: 'settings_general_use_radarr', + rules : [ + { + type : 'checked' + } + ] + }, + settings_radarr_ip : { + depends: 'settings_general_use_radarr', + rules : [ + { + type : 'empty' + } + ] + }, + settings_radarr_port : { + depends: 'settings_general_use_radarr', + rules : [ + { + type : 'integer[1..65535]' + }, + { + type : 'empty' + } + ] + }, + settings_radarr_apikey : { + depends: 'settings_general_use_radarr', + rules : [ + { + type : 'exactLength[32]' + }, + { + type : 'empty' + } + ] + }, + settings_subliminal_providers : { + rules : [ + { + type : 'minCount[1]' + }, + { + type : 'empty' + } + ] + }, + settings_subliminal_languages : { + rules : [ + { + type : 'minCount[1]' + }, + { + type : 'empty' + } + ] + } + }, + inline : true, + on : 'blur', + onFailure: function(){ + $('#form_validation_error').show(); + $('.submit').addClass('disabled'); + return false; + }, + onSuccess: function(){ + $('#form_validation_error').hide(); + $('.submit').removeClass('disabled'); + $('#loader').addClass('active'); + } + }) + ; + + if ($('#settings_proxy_type').val() == "None") { + $('.proxy_option').hide(); + $('#settings_form').form('remove rule', 'settings_proxy_url', 'empty') + $('#settings_form').form('remove rule', 'settings_proxy_port', 'empty') + $('#settings_form').form('remove rule', 'settings_proxy_port', 'integer[1..65535]') + } + else { + $('#settings_form').form('add rule', 'settings_proxy_url', 'empty') + $('#settings_form').form('add rule', 'settings_proxy_port', 'empty') + $('#settings_form').form('add rule', 'settings_proxy_port', 'integer[1..65535]') + }; + + $('#settings_proxy_type').dropdown('setting', 'onChange', function(){ + if ($('#settings_proxy_type').val() == "None") { + $('.proxy_option').hide(); + $('#settings_form').form('remove rule', 'settings_proxy_url', 'empty') + $('#settings_form').form('remove rule', 'settings_proxy_port', 'empty') + $('#settings_form').form('remove rule', 'settings_proxy_port', 'integer[1..65535]') + } + else { + $('.proxy_option').show(); + $('#settings_form').form('add rule', 'settings_proxy_url', 'empty') + $('#settings_form').form('add rule', 'settings_proxy_port', 'empty') + $('#settings_form').form('add rule', 'settings_proxy_port', 'integer[1..65535]') + }; + }); + + $('#settings_providers').dropdown('setting', 'onChange', function(){ + $('.form').form('validate field', 'settings_subliminal_providers'); + }); + $('#settings_languages').dropdown('setting', 'onChange', function(){ + $('.form').form('validate field', 'settings_subliminal_languages'); + }); + + $('.submit').click(function() { + alert('Settings saved.'); + }) + + $( document ).ready(function() { + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }); + + $('#settings_form').focusout(function() { + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }) + + $('#settings_auth_username').keyup(function() { + $('#settings_auth_password').val(''); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }) + + $('#sonarr_validate').click(function() { + if ($('#sonarr_ssl_div').checkbox('is checked')) { + protocol = 'https'; + } else { + protocol = 'http'; + } + sonarr_url = $('#settings_sonarr_ip').val() + ":" + $('#settings_sonarr_port').val() + "/" + $('#settings_sonarr_baseurl').val().replace(/^\/|\/$/g, '') + "/api/system/status?apikey=" + $('#settings_sonarr_apikey').val(); + + $.getJSON("{{base_url}}test_url/" + protocol + "/" + encodeURIComponent(sonarr_url), function (data) { + if (data.status) { + $('#sonarr_validated').checkbox('check'); + $('#sonarr_validation_result').text('Test successful: Sonarr v' + data.version).css('color', 'green'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + } else { + $('#sonarr_validated').checkbox('uncheck'); + $('#sonarr_validation_result').text('Test failed').css('color', 'red'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + } + }); + }) + + $('.sonarr_config').keyup(function() { + $('#sonarr_validated').checkbox('uncheck'); + $('#sonarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }) + + $('#settings_sonarr_ssl').change(function() { + $('#sonarr_validated').checkbox('uncheck'); + $('#sonarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }) + + $("#sonarr_validated").checkbox('check'); + + $('#radarr_validate').click(function() { + if ($('#radarr_ssl_div').checkbox('is checked')) { + protocol = 'https'; + } else { + protocol = 'http'; + } + radarr_url = $('#settings_radarr_ip').val() + ":" + $('#settings_radarr_port').val() + "/" + $('#settings_radarr_baseurl').val().replace(/^\/|\/$/g, '') + "/api/system/status?apikey=" + $('#settings_radarr_apikey').val(); + + $.getJSON("{{base_url}}test_url/" + protocol + "/" + encodeURIComponent(radarr_url), function (data) { + if (data.status) { + $('#radarr_validated').checkbox('check'); + $('#radarr_validation_result').text('Test successful: Radarr v' + data.version).css('color', 'green'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + } else { + $('#radarr_validated').checkbox('uncheck'); + $('#radarr_validation_result').text('Test failed').css('color', 'red'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + } + }); + }) + + $('.radarr_config').keyup(function() { + $('#radarr_validated').checkbox('uncheck'); + $('#radarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }) + + $('#settings_radarr_ssl').change(function() { + $('#radarr_validated').checkbox('uncheck'); + $('#radarr_validation_result').text('You must test your Sonarr connection settings before saving settings.').css('color', 'red'); + $('.form').form('validate form'); + $('#loader').removeClass('active'); + }) + + $("#radarr_validated").checkbox('check'); +</script> |