mirror of
https://github.com/morpheus65535/bazarr.git
synced 2025-04-24 06:37:16 -04:00
Move settings from Database to Config file (#126)
* Move settings from Database to Config file
* Delete unused config and forgot upload init
* Fix
* Update get_subtitles and fix provider auth
* Revert "Update get_subtitles and fix provider auth"
This reverts commit c904bf6b5a
.
* Update get_sebtitles
* more fixes
* Update requirements
This commit is contained in:
parent
9b11324c85
commit
db2378943f
28 changed files with 2199 additions and 1970 deletions
|
@ -1,6 +1,6 @@
|
|||
from get_argv import config_dir
|
||||
|
||||
from get_general_settings import get_general_settings
|
||||
from get_settings import get_general_settings
|
||||
|
||||
import os
|
||||
import logging
|
||||
|
@ -44,6 +44,6 @@ def check_and_apply_update():
|
|||
def updated():
|
||||
conn = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
c = conn.cursor()
|
||||
c.execute("UPDATE table_settings_general SET updated = 1")
|
||||
c.execute("UPDATE system SET updated = 1")
|
||||
conn.commit()
|
||||
c.close()
|
|
@ -9,19 +9,15 @@ CREATE TABLE "table_shows" (
|
|||
`overview` TEXT,
|
||||
`poster` TEXT,
|
||||
`fanart` TEXT,
|
||||
`audio_language` "text",
|
||||
`sortTitle` "text",
|
||||
PRIMARY KEY(`tvdbId`)
|
||||
);
|
||||
CREATE TABLE "table_settings_sonarr" (
|
||||
`ip` TEXT NOT NULL,
|
||||
`port` INTEGER NOT NULL,
|
||||
`base_url` TEXT,
|
||||
`ssl` INTEGER,
|
||||
`apikey` TEXT
|
||||
);
|
||||
INSERT INTO `table_settings_sonarr` (ip,port,base_url,ssl,apikey) VALUES ('127.0.0.1',8989,'/','False',Null);
|
||||
CREATE TABLE "table_settings_providers" (
|
||||
`name` TEXT NOT NULL UNIQUE,
|
||||
`enabled` INTEGER,
|
||||
`username` "text",
|
||||
`password` "text",
|
||||
PRIMARY KEY(`name`)
|
||||
);
|
||||
CREATE TABLE "table_settings_languages" (
|
||||
|
@ -31,25 +27,6 @@ CREATE TABLE "table_settings_languages" (
|
|||
`enabled` INTEGER,
|
||||
PRIMARY KEY(`code3`)
|
||||
);
|
||||
CREATE TABLE "table_settings_general" (
|
||||
`ip` TEXT NOT NULL,
|
||||
`port` INTEGER NOT NULL,
|
||||
`base_url` TEXT,
|
||||
`path_mapping` TEXT,
|
||||
`log_level` TEXT,
|
||||
`branch` TEXT,
|
||||
`auto_update` INTEGER,
|
||||
`configured` INTEGER,
|
||||
`updated` INTEGER,
|
||||
`single_language` TEXT,
|
||||
`minimum_score` TEXT,
|
||||
`use_scenename` TEXT,
|
||||
`use_postprocessing` TEXT,
|
||||
`postprocessing_cmd` TEXT,
|
||||
`use_sonarr` TEXT,
|
||||
`use_radarr` TEXT
|
||||
);
|
||||
INSERT INTO `table_settings_general` (ip,port,base_url,path_mapping,log_level, branch, auto_update, configured, updated, single_language, minimum_score, use_scenename, use_postprocessing, postprocessing_cmd, use_sonarr, use_radarr) VALUES ('0.0.0.0',6767,'/',Null,'INFO','master','True',0,0,'False','0','False','False',Null,'False','False');
|
||||
CREATE TABLE "table_history" (
|
||||
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
||||
`action` INTEGER NOT NULL,
|
||||
|
@ -66,6 +43,36 @@ CREATE TABLE "table_episodes" (
|
|||
`season` INTEGER NOT NULL,
|
||||
`episode` INTEGER NOT NULL,
|
||||
`subtitles` TEXT,
|
||||
`missing_subtitles` TEXT
|
||||
`missing_subtitles` TEXT,
|
||||
`scene_name` TEXT,
|
||||
`monitored` TEXT
|
||||
);
|
||||
CREATE TABLE "table_movies" (
|
||||
`tmdbId` TEXT NOT NULL UNIQUE,
|
||||
`title` TEXT NOT NULL,
|
||||
`path` TEXT NOT NULL UNIQUE,
|
||||
`languages` TEXT,
|
||||
`subtitles` TEXT,
|
||||
`missing_subtitles` TEXT,
|
||||
`hearing_impaired` TEXT,
|
||||
`radarrId` INTEGER NOT NULL UNIQUE,
|
||||
`overview` TEXT,
|
||||
`poster` TEXT,
|
||||
`fanart` TEXT,
|
||||
`audio_language` "text",
|
||||
`sceneName` TEXT,
|
||||
`monitored` TEXT, PRIMARY KEY(`tmdbId`)
|
||||
);
|
||||
CREATE TABLE "table_history_movie" (
|
||||
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
|
||||
`action` INTEGER NOT NULL,
|
||||
`radarrId` INTEGER NOT NULL,
|
||||
`timestamp` INTEGER NOT NULL,
|
||||
`description` TEXT NOT NULL
|
||||
);
|
||||
CREATE TABLE "system" (
|
||||
`configured` TEXT,
|
||||
`updated` TEXT
|
||||
);
|
||||
INSERT INTO `system` (configured, updated) VALUES ('0', '0');
|
||||
COMMIT;
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
from get_argv import config_dir
|
||||
|
||||
import sqlite3
|
||||
import os
|
||||
|
||||
def get_auth_settings():
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
c = db.cursor()
|
||||
|
||||
c.execute('''SELECT * FROM table_settings_auth''')
|
||||
config_auth = c.fetchone()
|
||||
|
||||
# Close database connection
|
||||
db.close()
|
||||
|
||||
auth_enabled = config_auth[0]
|
||||
auth_username = config_auth[1]
|
||||
auth_password = config_auth[2]
|
||||
|
||||
return [auth_enabled, auth_username, auth_password]
|
|
@ -5,7 +5,7 @@ import sqlite3
|
|||
import requests
|
||||
import logging
|
||||
|
||||
from get_general_settings import path_replace
|
||||
from get_settings import path_replace
|
||||
from list_subtitles import list_missing_subtitles, store_subtitles, series_full_scan_subtitles, movies_full_scan_subtitles
|
||||
|
||||
def update_all_episodes():
|
||||
|
@ -21,9 +21,9 @@ def update_all_movies():
|
|||
logging.info('All missing movie subtitles updated in database.')
|
||||
|
||||
def sync_episodes():
|
||||
from get_sonarr_settings import get_sonarr_settings
|
||||
url_sonarr = get_sonarr_settings()[0]
|
||||
apikey_sonarr = get_sonarr_settings()[2]
|
||||
from get_settings import get_sonarr_settings
|
||||
url_sonarr = get_sonarr_settings()[6]
|
||||
apikey_sonarr = get_sonarr_settings()[4]
|
||||
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
|
|
|
@ -1,140 +0,0 @@
|
|||
from get_argv import config_dir
|
||||
|
||||
import sqlite3
|
||||
import os
|
||||
import ast
|
||||
import re
|
||||
|
||||
def get_general_settings():
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
c = db.cursor()
|
||||
|
||||
# Get general settings from database table
|
||||
c.execute("SELECT * FROM table_settings_general")
|
||||
general_settings = c.fetchone()
|
||||
|
||||
# Close database connection
|
||||
db.close()
|
||||
|
||||
ip = general_settings[0]
|
||||
port = general_settings[1]
|
||||
base_url = general_settings[2]
|
||||
if base_url == None:
|
||||
base_url = "/"
|
||||
if base_url.startswith("/") == False:
|
||||
base_url = "/" + base_url
|
||||
if base_url.endswith("/") == False:
|
||||
base_url = base_url + "/"
|
||||
|
||||
if general_settings[3] is None:
|
||||
path_mappings = []
|
||||
else:
|
||||
path_mappings = ast.literal_eval(general_settings[3])
|
||||
log_level = general_settings[4]
|
||||
branch = general_settings[5]
|
||||
automatic = general_settings[6]
|
||||
single_language = general_settings[9]
|
||||
minimum_score = general_settings[10]
|
||||
use_scenename = general_settings[11]
|
||||
use_postprocessing = general_settings[12]
|
||||
postprocessing_cmd = general_settings[13]
|
||||
use_sonarr = general_settings[14]
|
||||
use_radarr = general_settings[15]
|
||||
if general_settings[16] is None:
|
||||
path_mappings_movie = []
|
||||
else:
|
||||
path_mappings_movie = ast.literal_eval(general_settings[16])
|
||||
serie_default_enabled = general_settings[17]
|
||||
serie_default_language = general_settings[18]
|
||||
serie_default_hi = general_settings[19]
|
||||
movie_default_enabled = general_settings[20]
|
||||
movie_default_language = general_settings[21]
|
||||
movie_default_hi = general_settings[22]
|
||||
page_size = general_settings[23]
|
||||
minimum_score_movie = general_settings[24]
|
||||
use_embedded_subs = general_settings[25]
|
||||
only_monitored = general_settings[26]
|
||||
|
||||
return [ip, port, base_url, path_mappings, log_level, branch, automatic, single_language, minimum_score, use_scenename, use_postprocessing, postprocessing_cmd, use_sonarr, use_radarr, path_mappings_movie, serie_default_enabled, serie_default_language, serie_default_hi, movie_default_enabled,movie_default_language, movie_default_hi, page_size, minimum_score_movie, use_embedded_subs, only_monitored]
|
||||
|
||||
def path_replace(path):
|
||||
for path_mapping in path_mappings:
|
||||
if path_mapping[0] in path:
|
||||
path = path.replace(path_mapping[0], path_mapping[1])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def path_replace_reverse(path):
|
||||
for path_mapping in path_mappings:
|
||||
if path_mapping[1] in path:
|
||||
path = path.replace(path_mapping[1], path_mapping[0])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def path_replace_movie(path):
|
||||
for path_mapping in path_mappings_movie:
|
||||
if path_mapping[0] in path:
|
||||
path = path.replace(path_mapping[0], path_mapping[1])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def path_replace_reverse_movie(path):
|
||||
for path_mapping in path_mappings_movie:
|
||||
if path_mapping[1] in path:
|
||||
path = path.replace(path_mapping[1], path_mapping[0])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def pp_replace(pp_command, episode, subtitles, language, language_code2, language_code3):
|
||||
pp_command = pp_command.replace('{{directory}}', os.path.dirname(episode))
|
||||
pp_command = pp_command.replace('{{episode}}', episode)
|
||||
pp_command = pp_command.replace('{{episode_name}}', os.path.splitext(os.path.basename(episode))[0])
|
||||
pp_command = pp_command.replace('{{subtitles}}', subtitles)
|
||||
pp_command = pp_command.replace('{{subtitles_language}}', language)
|
||||
pp_command = pp_command.replace('{{subtitles_language_code2}}', language_code2)
|
||||
pp_command = pp_command.replace('{{subtitles_language_code3}}', language_code3)
|
||||
return pp_command
|
||||
|
||||
result = get_general_settings()
|
||||
ip = result[0]
|
||||
port = result[1]
|
||||
base_url = result[2]
|
||||
path_mappings = result[3]
|
||||
log_level = result[4]
|
||||
branch = result[5]
|
||||
automatic = result[6]
|
||||
single_language = result[7]
|
||||
minimum_score = result[8]
|
||||
use_scenename = result[9]
|
||||
use_processing = result[10]
|
||||
postprocessing_cmd = result[11]
|
||||
use_sonarr = result[12]
|
||||
use_radarr = result[13]
|
||||
path_mappings_movie = result[14]
|
||||
serie_default_enabled = result[15]
|
||||
serie_default_language = result[16]
|
||||
serie_default_hi = result[17]
|
||||
movie_default_enabled = result[18]
|
||||
movie_default_language = result[19]
|
||||
movie_default_hi = result[20]
|
||||
page_size = result[21]
|
||||
minimum_score_movie = result[22]
|
||||
use_embedded_subs = result[23]
|
||||
only_monitored = result[24]
|
|
@ -5,14 +5,14 @@ import sqlite3
|
|||
import requests
|
||||
import logging
|
||||
|
||||
from get_general_settings import get_general_settings, path_replace_movie
|
||||
from get_settings import get_general_settings, path_replace_movie
|
||||
from list_subtitles import store_subtitles_movie, list_missing_subtitles_movies
|
||||
|
||||
def update_movies():
|
||||
from get_radarr_settings import get_radarr_settings
|
||||
url_radarr = get_radarr_settings()[0]
|
||||
# url_radarr_short = get_radarr_settings()[1]
|
||||
apikey_radarr = get_radarr_settings()[2]
|
||||
from get_settings import get_radarr_settings
|
||||
url_radarr = get_radarr_settings()[6]
|
||||
# url_radarr_short = get_radarr_settings()[7]
|
||||
apikey_radarr = get_radarr_settings()[4]
|
||||
movie_default_enabled = get_general_settings()[18]
|
||||
movie_default_language = get_general_settings()[19]
|
||||
movie_default_hi = get_general_settings()[20]
|
||||
|
@ -80,10 +80,10 @@ def update_movies():
|
|||
|
||||
# Update or insert movies list in database table
|
||||
try:
|
||||
if movie_default_enabled == 'True':
|
||||
c.execute('''INSERT INTO table_movies(title, path, tmdbId, languages,`hearing_impaired`, radarrId, overview, poster, fanart, `audio_language`, sceneName, monitored) VALUES (?,?,?,?,?, ?, ?, ?, ?, ?, ?, ?)''', (movie["title"], movie["path"] + separator + movie['movieFile']['relativePath'], movie["tmdbId"], movie_default_language, movie_default_hi, movie["id"], overview, poster, fanart, profile_id_to_language(movie['qualityProfileId']), sceneName, unicode(bool(movie['monitored']))))
|
||||
if movie_default_enabled is True:
|
||||
c.execute('''INSERT INTO table_movies(title, path, tmdbId, languages, subtitles,`hearing_impaired`, radarrId, overview, poster, fanart, `audio_language`, sceneName, monitored) VALUES (?,?,?,?,?, ?, ?, ?, ?, ?, ?, ?, ?)''', (movie["title"], movie["path"] + separator + movie['movieFile']['relativePath'], movie["tmdbId"], movie_default_language, '[]', movie_default_hi, movie["id"], overview, poster, fanart, profile_id_to_language(movie['qualityProfileId']), sceneName, unicode(bool(movie['monitored']))))
|
||||
else:
|
||||
c.execute('''INSERT INTO table_movies(title, path, tmdbId, languages,`hearing_impaired`, radarrId, overview, poster, fanart, `audio_language`, sceneName, monitored) VALUES (?,?,?,(SELECT languages FROM table_movies WHERE tmdbId = ?),(SELECT `hearing_impaired` FROM table_movies WHERE tmdbId = ?), ?, ?, ?, ?, ?, ?, ?)''', (movie["title"], movie["path"] + separator + movie['movieFile']['relativePath'], movie["tmdbId"], movie["tmdbId"], movie["tmdbId"], movie["id"], overview, poster, fanart, profile_id_to_language(movie['qualityProfileId']), sceneName, unicode(bool(movie['monitored']))))
|
||||
c.execute('''INSERT INTO table_movies(title, path, tmdbId, languages, subtitles,`hearing_impaired`, radarrId, overview, poster, fanart, `audio_language`, sceneName, monitored) VALUES (?,?,?,(SELECT languages FROM table_movies WHERE tmdbId = ?), '[]',(SELECT `hearing_impaired` FROM table_movies WHERE tmdbId = ?), ?, ?, ?, ?, ?, ?, ?)''', (movie["title"], movie["path"] + separator + movie['movieFile']['relativePath'], movie["tmdbId"], movie["tmdbId"], movie["tmdbId"], movie["id"], overview, poster, fanart, profile_id_to_language(movie['qualityProfileId']), sceneName, unicode(bool(movie['monitored']))))
|
||||
except:
|
||||
c.execute('''UPDATE table_movies SET title = ?, path = ?, tmdbId = ?, radarrId = ?, overview = ?, poster = ?, fanart = ?, `audio_language` = ?, sceneName = ?, monitored = ? WHERE tmdbid = ?''', (movie["title"],movie["path"] + separator + movie['movieFile']['relativePath'],movie["tmdbId"],movie["id"],overview,poster,fanart,profile_id_to_language(movie['qualityProfileId']),sceneName,unicode(bool(movie['monitored'])),movie["tmdbId"]))
|
||||
|
||||
|
@ -108,10 +108,10 @@ def update_movies():
|
|||
list_missing_subtitles_movies()
|
||||
|
||||
def get_profile_list():
|
||||
from get_radarr_settings import get_radarr_settings
|
||||
url_radarr = get_radarr_settings()[0]
|
||||
# url_radarr_short = get_radarr_settings()[1]
|
||||
apikey_radarr = get_radarr_settings()[2]
|
||||
from get_settings import get_radarr_settings
|
||||
url_radarr = get_radarr_settings()[6]
|
||||
# url_radarr_short = get_radarr_settings()[7]
|
||||
apikey_radarr = get_radarr_settings()[4]
|
||||
|
||||
# Get profiles data from radarr
|
||||
global profiles_list
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
from get_argv import config_dir
|
||||
|
||||
import sqlite3
|
||||
import os
|
||||
import ast
|
||||
|
||||
def get_radarr_settings():
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
c = db.cursor()
|
||||
|
||||
# Get Radarr API URL from database config table
|
||||
c.execute('''SELECT * FROM table_settings_radarr''')
|
||||
config_radarr = c.fetchone()
|
||||
|
||||
# Close database connection
|
||||
db.close()
|
||||
|
||||
# Build radarr URL
|
||||
ip_radarr = config_radarr[0]
|
||||
port_radarr = str(config_radarr[1])
|
||||
baseurl_radarr = config_radarr[2]
|
||||
ssl_radarr = config_radarr[3]
|
||||
apikey_radarr = config_radarr[4]
|
||||
full_update = config_radarr[5]
|
||||
|
||||
if ssl_radarr == 1:
|
||||
protocol_radarr = "https"
|
||||
else:
|
||||
protocol_radarr = "http"
|
||||
|
||||
if baseurl_radarr == None:
|
||||
baseurl_radarr = "/"
|
||||
if baseurl_radarr.startswith("/") == False:
|
||||
baseurl_radarr = "/" + baseurl_radarr
|
||||
if baseurl_radarr.endswith("/"):
|
||||
baseurl_radarr = baseurl_radarr[:-1]
|
||||
|
||||
url_radarr = protocol_radarr + "://" + ip_radarr + ":" + port_radarr + baseurl_radarr
|
||||
url_radarr_short = protocol_radarr + "://" + ip_radarr + ":" + port_radarr
|
||||
|
||||
return [url_radarr, url_radarr_short, apikey_radarr, full_update]
|
|
@ -5,13 +5,13 @@ import sqlite3
|
|||
import requests
|
||||
import logging
|
||||
|
||||
from get_general_settings import get_general_settings
|
||||
from get_settings import get_general_settings
|
||||
from list_subtitles import list_missing_subtitles
|
||||
|
||||
def update_series():
|
||||
from get_sonarr_settings import get_sonarr_settings
|
||||
url_sonarr = get_sonarr_settings()[0]
|
||||
apikey_sonarr = get_sonarr_settings()[2]
|
||||
from get_settings import get_sonarr_settings
|
||||
url_sonarr = get_sonarr_settings()[6]
|
||||
apikey_sonarr = get_sonarr_settings()[4]
|
||||
serie_default_enabled = get_general_settings()[15]
|
||||
serie_default_language = get_general_settings()[16]
|
||||
serie_default_hi = get_general_settings()[17]
|
||||
|
@ -64,7 +64,7 @@ def update_series():
|
|||
|
||||
# Update or insert shows list in database table
|
||||
try:
|
||||
if serie_default_enabled == 'True':
|
||||
if serie_default_enabled is True:
|
||||
c.execute('''INSERT INTO table_shows(title, path, tvdbId, languages,`hearing_impaired`, sonarrSeriesId, overview, poster, fanart, `audio_language`, sortTitle) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''', (show["title"], show["path"], show["tvdbId"], serie_default_language, serie_default_hi, show["id"], overview, poster, fanart, profile_id_to_language(show['qualityProfileId']), show['sortTitle']))
|
||||
list_missing_subtitles(show["id"])
|
||||
else:
|
||||
|
@ -86,10 +86,10 @@ def update_series():
|
|||
db.close()
|
||||
|
||||
def get_profile_list():
|
||||
from get_sonarr_settings import get_sonarr_settings
|
||||
url_sonarr = get_sonarr_settings()[0]
|
||||
# url_sonarr_short = get_sonarr_settings()[1]
|
||||
apikey_sonarr = get_sonarr_settings()[2]
|
||||
from get_settings import get_sonarr_settings
|
||||
url_sonarr = get_sonarr_settings()[6]
|
||||
# url_sonarr_short = get_sonarr_settings()[5]
|
||||
apikey_sonarr = get_sonarr_settings()[4]
|
||||
|
||||
# Get profiles data from Sonarr
|
||||
error = False
|
||||
|
|
416
get_settings.py
Normal file
416
get_settings.py
Normal file
|
@ -0,0 +1,416 @@
|
|||
from get_argv import config_dir
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
import ast
|
||||
from configparser import ConfigParser
|
||||
|
||||
config_file = os.path.normpath(os.path.join(config_dir, 'config/config.ini'))
|
||||
|
||||
def get_general_settings():
|
||||
cfg = ConfigParser()
|
||||
try:
|
||||
with open(config_file, 'r') as f:
|
||||
cfg.read_file(f)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if cfg.has_section('general'):
|
||||
if cfg.has_option('general', 'ip'):
|
||||
ip = cfg.get('general', 'ip')
|
||||
else:
|
||||
ip = '0.0.0.0'
|
||||
|
||||
if cfg.has_option('general', 'port'):
|
||||
port = cfg.get('general', 'port')
|
||||
else:
|
||||
port = '6767'
|
||||
|
||||
if cfg.has_option('general', 'base_url'):
|
||||
base_url = cfg.get('general', 'base_url')
|
||||
else:
|
||||
base_url = '/'
|
||||
|
||||
if cfg.has_option('general', 'path_mappings'):
|
||||
path_mappings = cfg.get('general', 'path_mappings')
|
||||
else:
|
||||
path_mappings = []
|
||||
|
||||
if cfg.has_option('general', 'log_level'):
|
||||
log_level = cfg.get('general', 'log_level')
|
||||
else:
|
||||
log_level = 'INFO'
|
||||
|
||||
if cfg.has_option('general', 'branch'):
|
||||
branch = cfg.get('general', 'branch')
|
||||
else:
|
||||
branch = 'master'
|
||||
|
||||
if cfg.has_option('general', 'auto_update'):
|
||||
auto_update = cfg.getboolean('general', 'auto_update')
|
||||
else:
|
||||
auto_update = True
|
||||
|
||||
if cfg.has_option('general', 'single_language'):
|
||||
single_language = cfg.getboolean('general', 'single_language')
|
||||
else:
|
||||
single_language = False
|
||||
|
||||
if cfg.has_option('general', 'minimum_score'):
|
||||
minimum_score = cfg.get('general', 'minimum_score')
|
||||
else:
|
||||
minimum_score = '100'
|
||||
|
||||
if cfg.has_option('general', 'use_scenename'):
|
||||
use_scenename = cfg.getboolean('general', 'use_scenename')
|
||||
else:
|
||||
use_scenename = False
|
||||
|
||||
if cfg.has_option('general', 'use_postprocessing'):
|
||||
use_postprocessing = cfg.getboolean('general', 'use_postprocessing')
|
||||
else:
|
||||
use_postprocessing = False
|
||||
|
||||
if cfg.has_option('general', 'postprocessing_cmd'):
|
||||
postprocessing_cmd = cfg.get('general', 'postprocessing_cmd')
|
||||
else:
|
||||
postprocessing_cmd = ''
|
||||
|
||||
if cfg.has_option('general', 'use_sonarr'):
|
||||
use_sonarr = cfg.getboolean('general', 'use_sonarr')
|
||||
else:
|
||||
use_sonarr = False
|
||||
|
||||
if cfg.has_option('general', 'use_radarr'):
|
||||
use_radarr = cfg.getboolean('general', 'use_radarr')
|
||||
else:
|
||||
use_radarr = False
|
||||
|
||||
if cfg.has_option('general', 'path_mappings_movie'):
|
||||
path_mappings_movie = cfg.get('general', 'path_mappings_movie')
|
||||
else:
|
||||
path_mappings_movie = []
|
||||
|
||||
if cfg.has_option('general', 'serie_default_enabled'):
|
||||
serie_default_enabled = cfg.getboolean('general', 'serie_default_enabled')
|
||||
else:
|
||||
serie_default_enabled = False
|
||||
|
||||
if cfg.has_option('general', 'serie_default_language'):
|
||||
serie_default_language = cfg.get('general', 'serie_default_language')
|
||||
else:
|
||||
serie_default_language = []
|
||||
|
||||
if cfg.has_option('general', 'serie_default_hi'):
|
||||
serie_default_hi = cfg.getboolean('general', 'serie_default_hi')
|
||||
else:
|
||||
serie_default_hi = False
|
||||
|
||||
if cfg.has_option('general', 'movie_default_enabled'):
|
||||
movie_default_enabled = cfg.getboolean('general', 'movie_default_enabled')
|
||||
else:
|
||||
movie_default_enabled = False
|
||||
|
||||
if cfg.has_option('general', 'movie_default_language'):
|
||||
movie_default_language = cfg.get('general', 'movie_default_language')
|
||||
else:
|
||||
movie_default_language = []
|
||||
|
||||
if cfg.has_option('general', 'movie_default_hi'):
|
||||
movie_default_hi = cfg.getboolean('general', 'movie_default_hi')
|
||||
else:
|
||||
movie_default_hi = False
|
||||
|
||||
if cfg.has_option('general', 'page_size'):
|
||||
page_size = cfg.get('general', 'page_size')
|
||||
else:
|
||||
page_size = '25'
|
||||
|
||||
if cfg.has_option('general', 'minimum_score_movie'):
|
||||
minimum_score_movie = cfg.get('general', 'minimum_score_movie')
|
||||
else:
|
||||
minimum_score_movie = '100'
|
||||
|
||||
if cfg.has_option('general', 'use_embedded_subs'):
|
||||
use_embedded_subs = cfg.getboolean('general', 'use_embedded_subs')
|
||||
else:
|
||||
use_embedded_subs = False
|
||||
|
||||
if cfg.has_option('general', 'only_monitored'):
|
||||
only_monitored = cfg.getboolean('general', 'only_monitored')
|
||||
else:
|
||||
only_monitored = False
|
||||
|
||||
else:
|
||||
ip = '0.0.0.0'
|
||||
port = '6768'
|
||||
base_url = '/'
|
||||
path_mappings = []
|
||||
log_level = 'INFO'
|
||||
branch = 'master'
|
||||
auto_update = True
|
||||
single_language = False
|
||||
minimum_score = '100'
|
||||
use_scenename = False
|
||||
use_postprocessing = False
|
||||
postprocessing_cmd = False
|
||||
use_sonarr = False
|
||||
use_radarr = False
|
||||
path_mappings_movie = []
|
||||
serie_default_enabled = False
|
||||
serie_default_language = []
|
||||
serie_default_hi = False
|
||||
movie_default_enabled = False
|
||||
movie_default_language = []
|
||||
movie_default_hi = False
|
||||
page_size = '25'
|
||||
minimum_score_movie = '100'
|
||||
use_embedded_subs = False
|
||||
only_monitored = False
|
||||
|
||||
return [ip, port, base_url, path_mappings, log_level, branch, auto_update, single_language, minimum_score, use_scenename, use_postprocessing, postprocessing_cmd, use_sonarr, use_radarr, path_mappings_movie, serie_default_enabled, serie_default_language, serie_default_hi, movie_default_enabled,movie_default_language, movie_default_hi, page_size, minimum_score_movie, use_embedded_subs, only_monitored]
|
||||
|
||||
|
||||
def get_auth_settings():
|
||||
cfg = ConfigParser()
|
||||
try:
|
||||
with open(config_file, 'r') as f:
|
||||
cfg.read_file(f)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if cfg.has_section('auth'):
|
||||
if cfg.has_option('auth', 'enabled'):
|
||||
enabled = cfg.getboolean('auth', 'enabled')
|
||||
else:
|
||||
enabled = False
|
||||
|
||||
if cfg.has_option('auth', 'username'):
|
||||
username = cfg.get('auth', 'username')
|
||||
else:
|
||||
username = ''
|
||||
|
||||
if cfg.has_option('auth', 'password'):
|
||||
password = cfg.get('auth', 'password')
|
||||
else:
|
||||
password = ''
|
||||
else:
|
||||
enabled = False
|
||||
username = ''
|
||||
password = ''
|
||||
|
||||
return [enabled, username, password]
|
||||
|
||||
|
||||
def get_sonarr_settings():
|
||||
cfg = ConfigParser()
|
||||
try:
|
||||
with open(config_file, 'r') as f:
|
||||
cfg.read_file(f)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if cfg.has_section('sonarr'):
|
||||
if cfg.has_option('sonarr', 'ip'):
|
||||
ip = cfg.get('sonarr', 'ip')
|
||||
else:
|
||||
ip = '127.0.0.1'
|
||||
|
||||
if cfg.has_option('sonarr', 'port'):
|
||||
port = cfg.get('sonarr', 'port')
|
||||
else:
|
||||
port = '8989'
|
||||
|
||||
if cfg.has_option('sonarr', 'base_url'):
|
||||
base_url = cfg.get('sonarr', 'base_url')
|
||||
else:
|
||||
base_url = '/'
|
||||
|
||||
if cfg.has_option('sonarr', 'ssl'):
|
||||
ssl = cfg.get('sonarr', 'ssl')
|
||||
else:
|
||||
ssl = False
|
||||
|
||||
if cfg.has_option('sonarr', 'apikey'):
|
||||
apikey = cfg.get('sonarr', 'apikey')
|
||||
else:
|
||||
apikey = ''
|
||||
|
||||
if cfg.has_option('sonarr', 'full_update'):
|
||||
full_update = cfg.get('sonarr', 'full_update')
|
||||
else:
|
||||
full_update = 'Dayly'
|
||||
else:
|
||||
ip = '127.0.0.1'
|
||||
port = '8989'
|
||||
base_url = '/'
|
||||
ssl = False
|
||||
apikey = ''
|
||||
full_update = 'Daily'
|
||||
|
||||
if ssl == 1:
|
||||
protocol_sonarr = "https"
|
||||
else:
|
||||
protocol_sonarr = "http"
|
||||
|
||||
if base_url == None:
|
||||
base_url = "/"
|
||||
if base_url.startswith("/") == False:
|
||||
base_url = "/" + base_url
|
||||
if base_url.endswith("/"):
|
||||
base_url = base_url[:-1]
|
||||
|
||||
url_sonarr = protocol_sonarr + "://" + ip + ":" + port + base_url
|
||||
url_sonarr_short = protocol_sonarr + "://" + ip + ":" + port
|
||||
|
||||
|
||||
|
||||
return [ip, port, base_url, ssl, apikey, full_update, url_sonarr, url_sonarr_short]
|
||||
|
||||
|
||||
def get_radarr_settings():
|
||||
cfg = ConfigParser()
|
||||
try:
|
||||
with open(config_file, 'r') as f:
|
||||
cfg.read_file(f)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if cfg.has_section('radarr'):
|
||||
if cfg.has_option('radarr', 'ip'):
|
||||
ip = cfg.get('radarr', 'ip')
|
||||
else:
|
||||
ip = '127.0.0.1'
|
||||
|
||||
if cfg.has_option('radarr', 'port'):
|
||||
port = cfg.get('radarr', 'port')
|
||||
else:
|
||||
port = '7878'
|
||||
|
||||
if cfg.has_option('radarr', 'base_url'):
|
||||
base_url = cfg.get('radarr', 'base_url')
|
||||
else:
|
||||
base_url = '/'
|
||||
|
||||
if cfg.has_option('radarr', 'ssl'):
|
||||
ssl = cfg.get('radarr', 'ssl')
|
||||
else:
|
||||
ssl = False
|
||||
|
||||
if cfg.has_option('radarr', 'apikey'):
|
||||
apikey = cfg.get('radarr', 'apikey')
|
||||
else:
|
||||
apikey = ''
|
||||
|
||||
if cfg.has_option('radarr', 'full_update'):
|
||||
full_update = cfg.get('radarr', 'full_update')
|
||||
else:
|
||||
full_update = 'Dayly'
|
||||
else:
|
||||
ip = '127.0.0.1'
|
||||
port = '8989'
|
||||
base_url = '/'
|
||||
ssl = False
|
||||
apikey = ''
|
||||
full_update = 'Daily'
|
||||
|
||||
if ssl == 1:
|
||||
protocol_radarr = "https"
|
||||
else:
|
||||
protocol_radarr = "http"
|
||||
|
||||
if base_url is None:
|
||||
base_url = "/"
|
||||
if base_url.startswith("/") is False:
|
||||
base_url = "/" + base_url
|
||||
if base_url.endswith("/"):
|
||||
base_url = base_url[:-1]
|
||||
|
||||
url_radarr = protocol_radarr + "://" + ip + ":" + port + base_url
|
||||
url_radarr_short = protocol_radarr + "://" + ip + ":" + port
|
||||
|
||||
return [ip, port, base_url, ssl, apikey, full_update, url_radarr , url_radarr_short]
|
||||
|
||||
|
||||
|
||||
def path_replace(path):
|
||||
for path_mapping in path_mappings:
|
||||
if path_mapping[0] in path:
|
||||
path = path.replace(path_mapping[0], path_mapping[1])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def path_replace_reverse(path):
|
||||
for path_mapping in path_mappings:
|
||||
if path_mapping[1] in path:
|
||||
path = path.replace(path_mapping[1], path_mapping[0])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def path_replace_movie(path):
|
||||
for path_mapping in path_mappings_movie:
|
||||
if path_mapping[0] in path:
|
||||
path = path.replace(path_mapping[0], path_mapping[1])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def path_replace_reverse_movie(path):
|
||||
for path_mapping in path_mappings_movie:
|
||||
if path_mapping[1] in path:
|
||||
path = path.replace(path_mapping[1], path_mapping[0])
|
||||
if path.startswith('\\\\') or re.match(r'^[a-zA-Z]:\\', path):
|
||||
path = path.replace('/', '\\')
|
||||
elif path.startswith('/'):
|
||||
path = path.replace('\\', '/')
|
||||
break
|
||||
return path
|
||||
|
||||
def pp_replace(pp_command, episode, subtitles, language, language_code2, language_code3):
|
||||
pp_command = pp_command.replace('{{directory}}', os.path.dirname(episode))
|
||||
pp_command = pp_command.replace('{{episode}}', episode)
|
||||
pp_command = pp_command.replace('{{episode_name}}', os.path.splitext(os.path.basename(episode))[0])
|
||||
pp_command = pp_command.replace('{{subtitles}}', subtitles)
|
||||
pp_command = pp_command.replace('{{subtitles_language}}', language)
|
||||
pp_command = pp_command.replace('{{subtitles_language_code2}}', language_code2)
|
||||
pp_command = pp_command.replace('{{subtitles_language_code3}}', language_code3)
|
||||
return pp_command
|
||||
|
||||
result = get_general_settings()
|
||||
ip = result[0]
|
||||
port = result[1]
|
||||
base_url = result[2]
|
||||
path_mappings = ast.literal_eval(result[3])
|
||||
log_level = result[4]
|
||||
branch = result[5]
|
||||
automatic = result[6]
|
||||
single_language = result[7]
|
||||
minimum_score = result[8]
|
||||
use_scenename = result[9]
|
||||
use_processing = result[10]
|
||||
postprocessing_cmd = result[11]
|
||||
use_sonarr = result[12]
|
||||
use_radarr = result[13]
|
||||
path_mappings_movie = ast.literal_eval(result[14])
|
||||
serie_default_enabled = result[15]
|
||||
serie_default_language = result[16]
|
||||
serie_default_hi = result[17]
|
||||
movie_default_enabled = result[18]
|
||||
movie_default_language = result[19]
|
||||
movie_default_hi = result[20]
|
||||
page_size = result[21]
|
||||
minimum_score_movie = result[22]
|
||||
use_embedded_subs = result[23]
|
||||
only_monitored = result[24]
|
|
@ -1,42 +0,0 @@
|
|||
from get_argv import config_dir
|
||||
|
||||
import sqlite3
|
||||
import os
|
||||
import ast
|
||||
|
||||
def get_sonarr_settings():
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
c = db.cursor()
|
||||
|
||||
# Get Sonarr API URL from database config table
|
||||
c.execute('''SELECT * FROM table_settings_sonarr''')
|
||||
config_sonarr = c.fetchone()
|
||||
|
||||
# Close database connection
|
||||
db.close()
|
||||
|
||||
# Build Sonarr URL
|
||||
ip_sonarr = config_sonarr[0]
|
||||
port_sonarr = str(config_sonarr[1])
|
||||
baseurl_sonarr = config_sonarr[2]
|
||||
ssl_sonarr = config_sonarr[3]
|
||||
apikey_sonarr = config_sonarr[4]
|
||||
full_update = config_sonarr[5]
|
||||
|
||||
if ssl_sonarr == 1:
|
||||
protocol_sonarr = "https"
|
||||
else:
|
||||
protocol_sonarr = "http"
|
||||
|
||||
if baseurl_sonarr == None:
|
||||
baseurl_sonarr = "/"
|
||||
if baseurl_sonarr.startswith("/") == False:
|
||||
baseurl_sonarr = "/" + baseurl_sonarr
|
||||
if baseurl_sonarr.endswith("/"):
|
||||
baseurl_sonarr = baseurl_sonarr[:-1]
|
||||
|
||||
url_sonarr = protocol_sonarr + "://" + ip_sonarr + ":" + port_sonarr + baseurl_sonarr
|
||||
url_sonarr_short = protocol_sonarr + "://" + ip_sonarr + ":" + port_sonarr
|
||||
|
||||
return [url_sonarr, url_sonarr_short, apikey_sonarr, full_update]
|
|
@ -9,7 +9,7 @@ from babelfish import Language
|
|||
from subliminal import region, scan_video, Video, download_best_subtitles, compute_score, save_subtitles
|
||||
from get_languages import language_from_alpha3, alpha2_from_alpha3, alpha3_from_alpha2
|
||||
from bs4 import UnicodeDammit
|
||||
from get_general_settings import get_general_settings, pp_replace, path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie
|
||||
from get_settings import get_general_settings, pp_replace, path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie
|
||||
from list_subtitles import store_subtitles, list_missing_subtitles, store_subtitles_movie, list_missing_subtitles_movies
|
||||
from utils import history_log, history_log_movie
|
||||
from notifier import send_notifications, send_notifications_movie
|
||||
|
@ -34,7 +34,7 @@ def download_subtitle(path, language, hi, providers, providers_auth, sceneName,
|
|||
lang_obj = Language(language)
|
||||
|
||||
try:
|
||||
if sceneName is None or use_scenename == "False":
|
||||
if sceneName is None or use_scenename is False:
|
||||
used_sceneName = False
|
||||
video = scan_video(path)
|
||||
else:
|
||||
|
@ -61,7 +61,7 @@ def download_subtitle(path, language, hi, providers, providers_auth, sceneName,
|
|||
score = round(float(compute_score(best_subtitle, video)) / type_of_score * 100, 2)
|
||||
if used_sceneName == True:
|
||||
video = scan_video(path)
|
||||
if single == 'True':
|
||||
if single is True:
|
||||
result = save_subtitles(video, [best_subtitle], single=True, encoding='utf-8')
|
||||
else:
|
||||
result = save_subtitles(video, [best_subtitle], encoding='utf-8')
|
||||
|
@ -79,7 +79,7 @@ def download_subtitle(path, language, hi, providers, providers_auth, sceneName,
|
|||
else:
|
||||
message = downloaded_language + " subtitles downloaded from " + downloaded_provider + " with a score of " + unicode(score) + "% using filename guessing."
|
||||
|
||||
if use_postprocessing == "True":
|
||||
if use_postprocessing is True:
|
||||
command = pp_replace(postprocessing_cmd, path, downloaded_path, downloaded_language, downloaded_language_code2, downloaded_language_code3)
|
||||
try:
|
||||
if os.name == 'nt':
|
||||
|
@ -109,7 +109,7 @@ def download_subtitle(path, language, hi, providers, providers_auth, sceneName,
|
|||
return message
|
||||
|
||||
def series_download_subtitles(no):
|
||||
if get_general_settings()[24] == "True":
|
||||
if get_general_settings()[24] is True:
|
||||
monitored_only_query_string = ' AND monitored = "True"'
|
||||
else:
|
||||
monitored_only_query_string = ""
|
||||
|
@ -257,7 +257,7 @@ def wanted_search_missing_subtitles():
|
|||
db.create_function("path_substitution_movie", 1, path_replace_movie)
|
||||
c = db.cursor()
|
||||
|
||||
if get_general_settings()[24] == "True":
|
||||
if get_general_settings()[24] is True:
|
||||
monitored_only_query_string = ' AND monitored = "True"'
|
||||
else:
|
||||
monitored_only_query_string = ""
|
||||
|
@ -272,11 +272,11 @@ def wanted_search_missing_subtitles():
|
|||
|
||||
integration = get_general_settings()
|
||||
|
||||
if integration[12] == "True":
|
||||
if integration[12] is True:
|
||||
for episode in episodes:
|
||||
wanted_download_subtitles(episode[0])
|
||||
|
||||
if integration[13] == "True":
|
||||
if integration[13] is True:
|
||||
for movie in movies:
|
||||
wanted_download_subtitles_movie(movie[0])
|
||||
|
||||
|
|
220
init.py
Normal file
220
init.py
Normal file
|
@ -0,0 +1,220 @@
|
|||
import os
|
||||
import sqlite3
|
||||
import logging
|
||||
|
||||
from configparser import ConfigParser
|
||||
from get_argv import config_dir
|
||||
|
||||
# Check if config_dir exist
|
||||
if os.path.exists(config_dir) is False:
|
||||
# Create config_dir directory tree
|
||||
try:
|
||||
os.mkdir(os.path.join(config_dir))
|
||||
logging.debug("Created data directory")
|
||||
except OSError:
|
||||
logging.exception("The configuration directory doesn't exist and Bazarr cannot create it (permission issue?).")
|
||||
exit(2)
|
||||
|
||||
if os.path.exists(os.path.join(config_dir, 'config')) is False:
|
||||
os.mkdir(os.path.join(config_dir, 'config'))
|
||||
logging.debug("Created config folder")
|
||||
if os.path.exists(os.path.join(config_dir, 'db')) is False:
|
||||
os.mkdir(os.path.join(config_dir, 'db'))
|
||||
logging.debug("Created db folder")
|
||||
if os.path.exists(os.path.join(config_dir, 'log')) is False:
|
||||
os.mkdir(os.path.join(config_dir, 'log'))
|
||||
logging.debug("Created log folder")
|
||||
|
||||
config_file = os.path.normpath(os.path.join(config_dir, 'config/config.ini'))
|
||||
|
||||
# if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) is True and os.path.exists(config_file) is False:
|
||||
try:
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(os.path.dirname(__file__), 'data/db/bazarr.db'), timeout=30)
|
||||
c = db.cursor()
|
||||
|
||||
# Get general settings from database table
|
||||
c.execute("SELECT * FROM table_settings_general")
|
||||
general_settings = c.fetchone()
|
||||
c.execute('''SELECT * FROM table_settings_auth''')
|
||||
auth_settings = c.fetchone()
|
||||
c.execute('''SELECT * FROM table_settings_sonarr''')
|
||||
sonarr_settings = c.fetchone()
|
||||
c.execute('''SELECT * FROM table_settings_radarr''')
|
||||
radarr_settings = c.fetchone()
|
||||
|
||||
c.execute("DROP TABLE table_settings_general")
|
||||
c.execute("DROP TABLE table_settings_auth")
|
||||
c.execute("DROP TABLE table_settings_sonarr")
|
||||
c.execute("DROP TABLE table_settings_radarr")
|
||||
|
||||
# Close database connection
|
||||
db.close()
|
||||
|
||||
cfg = ConfigParser()
|
||||
|
||||
section = 'general'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'ip', str(general_settings[0]))
|
||||
cfg.set(section, 'port', str(general_settings[1]))
|
||||
cfg.set(section, 'base_url', general_settings[2])
|
||||
cfg.set(section, 'path_mappings', general_settings[3])
|
||||
cfg.set(section, 'log_level', general_settings[4])
|
||||
cfg.set(section, 'branch', general_settings[5])
|
||||
cfg.set(section, 'auto_update', general_settings[6])
|
||||
cfg.set(section, 'single_language', general_settings[9])
|
||||
cfg.set(section, 'minimum_score', general_settings[10])
|
||||
cfg.set(section, 'use_scenename', general_settings[11])
|
||||
cfg.set(section, 'use_postprocessing', general_settings[12])
|
||||
cfg.set(section, 'postprocessing_cmd', general_settings[13])
|
||||
cfg.set(section, 'use_sonarr', general_settings[14])
|
||||
cfg.set(section, 'use_radarr', general_settings[15])
|
||||
cfg.set(section, 'path_mappings_movie', general_settings[16])
|
||||
cfg.set(section, 'serie_default_enabled', general_settings[17])
|
||||
cfg.set(section, 'serie_default_language', general_settings[18])
|
||||
cfg.set(section, 'serie_default_hi', general_settings[19])
|
||||
cfg.set(section, 'movie_default_enabled', general_settings[20])
|
||||
cfg.set(section, 'movie_default_language', general_settings[21])
|
||||
cfg.set(section, 'movie_default_hi', general_settings[22])
|
||||
cfg.set(section, 'page_size', general_settings[23])
|
||||
cfg.set(section, 'minimum_score_movie', general_settings[24])
|
||||
cfg.set(section, 'use_embedded_subs', general_settings[25])
|
||||
cfg.set(section, 'only_monitored', general_settings[26])
|
||||
|
||||
section = 'auth'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'enabled', auth_settings[0])
|
||||
cfg.set(section, 'username', auth_settings[1])
|
||||
cfg.set(section, 'password', auth_settings[2])
|
||||
|
||||
section = 'sonarr'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'ip', sonarr_settings[0])
|
||||
cfg.set(section, 'port', str(sonarr_settings[1]))
|
||||
cfg.set(section, 'base_url', sonarr_settings[2])
|
||||
cfg.set(section, 'ssl', sonarr_settings[3])
|
||||
cfg.set(section, 'apikey', sonarr_settings[4])
|
||||
cfg.set(section, 'full_update', sonarr_settings[5])
|
||||
|
||||
section = 'radarr'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'ip', radarr_settings[0])
|
||||
cfg.set(section, 'port', str(radarr_settings[1]))
|
||||
cfg.set(section, 'base_url', radarr_settings[2])
|
||||
cfg.set(section, 'ssl', radarr_settings[3])
|
||||
cfg.set(section, 'apikey', radarr_settings[4])
|
||||
cfg.set(section, 'full_update', radarr_settings[5])
|
||||
|
||||
with open(config_file, 'w+') as configfile:
|
||||
cfg.write(configfile)
|
||||
|
||||
|
||||
logging.info('Config file succesfully migrated from database')
|
||||
|
||||
except sqlite3.OperationalError:
|
||||
# if not os.path.exists(config_file):
|
||||
if os.path.exists(config_file) is False:
|
||||
cfg = ConfigParser()
|
||||
|
||||
section = 'general'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'ip', "0.0.0.0")
|
||||
cfg.set(section, 'port', "6767")
|
||||
cfg.set(section, 'base_url', "/")
|
||||
cfg.set(section, 'path_mappings', '[]')
|
||||
cfg.set(section, 'log_level', "INFO")
|
||||
cfg.set(section, 'branch', "master")
|
||||
cfg.set(section, 'auto_update', "True")
|
||||
cfg.set(section, 'single_language', "False")
|
||||
cfg.set(section, 'minimum_score', "100")
|
||||
cfg.set(section, 'use_scenename', "False")
|
||||
cfg.set(section, 'use_postprocessing', "False")
|
||||
cfg.set(section, 'postprocessing_cmd', "False")
|
||||
cfg.set(section, 'use_sonarr', "False")
|
||||
cfg.set(section, 'use_radarr', "False")
|
||||
cfg.set(section, 'path_mappings_movie', '[]')
|
||||
cfg.set(section, 'serie_default_enabled', "False")
|
||||
cfg.set(section, 'serie_default_language', '')
|
||||
cfg.set(section, 'serie_default_hi', "False")
|
||||
cfg.set(section, 'movie_default_enabled', "False")
|
||||
cfg.set(section, 'movie_default_language', '')
|
||||
cfg.set(section, 'movie_default_hi', "False")
|
||||
cfg.set(section, 'page_size', "25")
|
||||
cfg.set(section, 'minimum_score_movie', "100")
|
||||
cfg.set(section, 'use_embedded_subs', "False")
|
||||
cfg.set(section, 'only_monitored', "False")
|
||||
|
||||
section = 'auth'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'enabled', "False")
|
||||
cfg.set(section, 'username', "")
|
||||
cfg.set(section, 'password', "")
|
||||
|
||||
section = 'sonarr'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'ip', "127.0.0.1")
|
||||
cfg.set(section, 'port', "8989")
|
||||
cfg.set(section, 'base_url', "/")
|
||||
cfg.set(section, 'ssl', "False")
|
||||
cfg.set(section, 'apikey', "")
|
||||
cfg.set(section, 'full_update', "Daily")
|
||||
|
||||
section = 'radarr'
|
||||
|
||||
if not cfg.has_section(section):
|
||||
cfg.add_section(section)
|
||||
|
||||
cfg.set(section, 'ip', "127.0.0.1")
|
||||
cfg.set(section, 'port', "7878")
|
||||
cfg.set(section, 'base_url', "/")
|
||||
cfg.set(section, 'ssl', "False")
|
||||
cfg.set(section, 'apikey', "")
|
||||
cfg.set(section, 'full_update', "Daily")
|
||||
|
||||
|
||||
with open(config_file, 'w+') as configfile:
|
||||
cfg.write(configfile)
|
||||
|
||||
logging.info('Config file created successfully')
|
||||
try:
|
||||
# Get SQL script from file
|
||||
fd = open(os.path.join(os.path.dirname(__file__), 'create_db.sql'), 'r')
|
||||
script = fd.read()
|
||||
|
||||
# Close SQL script file
|
||||
fd.close()
|
||||
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
c = db.cursor()
|
||||
|
||||
# Execute script and commit change to database
|
||||
c.executescript(script)
|
||||
|
||||
# Close database connection
|
||||
db.close()
|
||||
|
||||
logging.info('Database created successfully')
|
||||
except:
|
||||
pass
|
50
init_db.py
50
init_db.py
|
@ -1,50 +0,0 @@
|
|||
from get_argv import config_dir
|
||||
|
||||
import os
|
||||
import sqlite3
|
||||
import logging
|
||||
|
||||
# Check if config_dir exist
|
||||
if os.path.exists(config_dir) == True:
|
||||
pass
|
||||
else:
|
||||
# Create config_dir directory tree
|
||||
try:
|
||||
os.mkdir(os.path.join(config_dir))
|
||||
except OSError:
|
||||
logging.exception("The configuration directory doesn't exist and Bazarr cannot create it (permission issue?).")
|
||||
exit(2)
|
||||
|
||||
# Check if database exist
|
||||
if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
||||
pass
|
||||
else:
|
||||
# Create data directory tree
|
||||
try:
|
||||
os.mkdir(os.path.join(config_dir, 'db'))
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
try:
|
||||
os.mkdir(os.path.join(config_dir, 'log'))
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
# Get SQL script from file
|
||||
fd = open(os.path.join(os.path.dirname(__file__), 'create_db.sql'), 'r')
|
||||
script = fd.read()
|
||||
|
||||
# Close SQL script file
|
||||
fd.close()
|
||||
|
||||
# Open database connection
|
||||
db = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
c = db.cursor()
|
||||
|
||||
# Execute script and commit change to database
|
||||
c.executescript(script)
|
||||
|
||||
# Close database connection
|
||||
db.close()
|
||||
|
||||
logging.info('Database created successfully')
|
|
@ -12,7 +12,7 @@ import langdetect
|
|||
from bs4 import UnicodeDammit
|
||||
from itertools import islice
|
||||
|
||||
from get_general_settings import path_replace_reverse, path_replace, path_replace_reverse_movie, path_replace_movie, get_general_settings
|
||||
from get_settings import path_replace_reverse, path_replace, path_replace_reverse_movie, path_replace_movie, get_general_settings
|
||||
from get_languages import alpha2_from_alpha3
|
||||
|
||||
gc.enable()
|
||||
|
@ -143,7 +143,7 @@ def list_missing_subtitles(*no):
|
|||
desired_subtitles = []
|
||||
missing_subtitles = []
|
||||
if episode_subtitles[1] != None:
|
||||
if use_embedded_subs == "True":
|
||||
if use_embedded_subs is True:
|
||||
actual_subtitles = ast.literal_eval(episode_subtitles[1])
|
||||
else:
|
||||
actual_subtitles_temp = ast.literal_eval(episode_subtitles[1])
|
||||
|
@ -190,7 +190,7 @@ def list_missing_subtitles_movies(*no):
|
|||
desired_subtitles = []
|
||||
missing_subtitles = []
|
||||
if movie_subtitles[1] != None:
|
||||
if use_embedded_subs == "True":
|
||||
if use_embedded_subs is True:
|
||||
actual_subtitles = ast.literal_eval(movie_subtitles[1])
|
||||
else:
|
||||
actual_subtitles_temp = ast.literal_eval(movie_subtitles[1])
|
||||
|
|
|
@ -17,6 +17,7 @@ requests>=2.18.4
|
|||
tzlocal>=1.5.1
|
||||
urllib3<1.23,>=1.21.1
|
||||
waitress>=1.1.0
|
||||
configparser==3.5.0
|
||||
|
||||
#Subliminal requirements
|
||||
click>=6.7
|
||||
|
|
17
scheduler.py
17
scheduler.py
|
@ -1,9 +1,6 @@
|
|||
from get_argv import no_update
|
||||
|
||||
from get_general_settings import automatic
|
||||
from get_sonarr_settings import get_sonarr_settings
|
||||
from get_radarr_settings import get_radarr_settings
|
||||
from get_general_settings import get_general_settings
|
||||
from get_settings import get_general_settings, automatic, get_radarr_settings, get_sonarr_settings
|
||||
from get_series import update_series
|
||||
from get_episodes import update_all_episodes, update_all_movies, sync_episodes
|
||||
from get_movies import update_movies
|
||||
|
@ -20,7 +17,7 @@ integration = get_general_settings()
|
|||
|
||||
|
||||
def sonarr_full_update():
|
||||
full_update = get_sonarr_settings()[3]
|
||||
full_update = get_sonarr_settings()[5]
|
||||
if full_update == "Daily":
|
||||
scheduler.add_job(update_all_episodes, 'cron', hour=4, max_instances=1, coalesce=True, misfire_grace_time=15, id='update_all_episodes', name='Update all episodes subtitles from disk', replace_existing=True)
|
||||
elif full_update == "Weekly":
|
||||
|
@ -29,7 +26,7 @@ def sonarr_full_update():
|
|||
scheduler.add_job(update_all_episodes, 'cron', year='2100', hour=4, max_instances=1, coalesce=True, misfire_grace_time=15, id='update_all_episodes', name='Update all episodes subtitles from disk', replace_existing=True)
|
||||
|
||||
def radarr_full_update():
|
||||
full_update = get_radarr_settings()[3]
|
||||
full_update = get_radarr_settings()[5]
|
||||
if full_update == "Daily":
|
||||
scheduler.add_job(update_all_movies, 'cron', hour=5, max_instances=1, coalesce=True, misfire_grace_time=15, id='update_all_movies', name='Update all movies subtitles from disk', replace_existing=True)
|
||||
elif full_update == "Weekly":
|
||||
|
@ -47,19 +44,19 @@ else:
|
|||
scheduler = BackgroundScheduler()
|
||||
|
||||
if no_update is False:
|
||||
if automatic == 'True':
|
||||
if automatic is True:
|
||||
scheduler.add_job(check_and_apply_update, 'interval', hours=6, max_instances=1, coalesce=True, misfire_grace_time=15, id='update_bazarr', name='Update bazarr from source on Github')
|
||||
else:
|
||||
scheduler.add_job(check_and_apply_update, 'cron', year='2100', hour=4, id='update_bazarr', name='Update bazarr from source on Github')
|
||||
|
||||
if integration[12] == "True":
|
||||
if integration[12] is True:
|
||||
scheduler.add_job(update_series, 'interval', minutes=1, max_instances=1, coalesce=True, misfire_grace_time=15, id='update_series', name='Update series list from Sonarr')
|
||||
scheduler.add_job(sync_episodes, 'interval', minutes=5, max_instances=1, coalesce=True, misfire_grace_time=15, id='sync_episodes', name='Sync episodes with Sonarr')
|
||||
|
||||
if integration[13] == "True":
|
||||
if integration[13] is True:
|
||||
scheduler.add_job(update_movies, 'interval', minutes=5, max_instances=1, coalesce=True, misfire_grace_time=15, id='update_movies', name='Update movies list from Radarr')
|
||||
|
||||
if integration[12] == "True" or integration[13] == "True":
|
||||
if integration[12] is True or integration[13] is True:
|
||||
scheduler.add_job(wanted_search_missing_subtitles, 'interval', hours=3, max_instances=1, coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles', name='Search for wanted subtitles')
|
||||
|
||||
sonarr_full_update()
|
||||
|
|
152
update_db.py
152
update_db.py
|
@ -29,19 +29,6 @@ if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
|||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "configured" "integer"')
|
||||
c.execute('alter table table_settings_general add column "updated" "integer"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "single_language" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET single_language="False"')
|
||||
|
||||
try:
|
||||
c.execute('CREATE TABLE `table_settings_notifier` (`name` TEXT, `url` TEXT, `enabled` INTEGER);')
|
||||
except:
|
||||
|
@ -51,51 +38,11 @@ if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
|||
for provider in providers:
|
||||
c.execute('INSERT INTO `table_settings_notifier` (name, enabled) VALUES (?, ?);', (provider,'0'))
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "minimum_score" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET minimum_score="0"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "use_scenename" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET use_scenename="True"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "use_postprocessing" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET use_postprocessing="False"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "postprocessing_cmd" "text"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_sonarr add column "full_update" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_sonarr SET full_update="Daily"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_shows add column "sortTitle" "text"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('CREATE TABLE "table_settings_radarr" ( `ip` TEXT NOT NULL, `port` INTEGER NOT NULL, `base_url` TEXT, `ssl` INTEGER, `apikey` TEXT , "full_update" TEXT)')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('INSERT INTO `table_settings_radarr` (ip, port, base_url, ssl, apikey, full_update) VALUES ("127.0.0.1", "7878", "/", "False", Null, "Daily")')
|
||||
|
||||
try:
|
||||
c.execute('CREATE TABLE "table_movies" ( `tmdbId` TEXT NOT NULL UNIQUE, `title` TEXT NOT NULL, `path` TEXT NOT NULL UNIQUE, `languages` TEXT, `subtitles` TEXT, `missing_subtitles` TEXT, `hearing_impaired` TEXT, `radarrId` INTEGER NOT NULL UNIQUE, `overview` TEXT, `poster` TEXT, `fanart` TEXT, "audio_language" "text", `sceneName` TEXT, PRIMARY KEY(`tmdbId`) )')
|
||||
except:
|
||||
|
@ -106,73 +53,6 @@ if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
|||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "use_sonarr" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET use_sonarr="True"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "use_radarr" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET use_radarr="False"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "path_mapping_movie" "text"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "serie_default_enabled" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET serie_default_enabled="False"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "serie_default_languages" "text"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "serie_default_hi" "text"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "movie_default_enabled" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET movie_default_enabled="False"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "movie_default_languages" "text"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "movie_default_hi" "text"')
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "page_size" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET page_size="25"')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "minimum_score_movie" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET minimum_score_movie="0"')
|
||||
|
||||
try:
|
||||
c.execute('DELETE FROM table_settings_notifier WHERE rowid > 24') #Modify this if we add more notification provider
|
||||
rows = c.execute('SELECT name FROM table_settings_notifier WHERE name = "Discord"').fetchall()
|
||||
|
@ -184,25 +64,11 @@ if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
|||
pass
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "use_embedded_subs" "text"')
|
||||
c.execute('CREATE TABLE `system` ( `configured` TEXT, `updated` TEXT)')
|
||||
c.execute('INSERT INTO `system` (configured, updated) VALUES (?, ?);', ('0', '0'))
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET use_embedded_subs="True"')
|
||||
|
||||
try:
|
||||
c.execute('CREATE TABLE `table_settings_auth` ( `enabled` TEXT, `username` TEXT, `password` TEXT);')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('INSERT INTO `table_settings_auth` (enabled, username, password) VALUES ("False", "", "")')
|
||||
|
||||
try:
|
||||
c.execute('alter table table_settings_general add column "only_monitored" "text"')
|
||||
except:
|
||||
pass
|
||||
else:
|
||||
c.execute('UPDATE table_settings_general SET only_monitored="False"')
|
||||
|
||||
# Commit change to db
|
||||
db.commit()
|
||||
|
@ -214,11 +80,11 @@ if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
|||
pass
|
||||
else:
|
||||
from scheduler import execute_now
|
||||
from get_general_settings import get_general_settings
|
||||
from get_settings import get_general_settings
|
||||
integration = get_general_settings()
|
||||
if integration[12] == "True":
|
||||
if integration[12] is True:
|
||||
execute_now('sync_episodes')
|
||||
if integration[13] == "True":
|
||||
if integration[13] is True:
|
||||
execute_now('update_movies')
|
||||
|
||||
|
||||
|
@ -229,9 +95,9 @@ if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
|||
pass
|
||||
else:
|
||||
from scheduler import execute_now
|
||||
from get_general_settings import get_general_settings
|
||||
from get_settings import get_general_settings
|
||||
integration = get_general_settings()
|
||||
if integration[12] == "True":
|
||||
if integration[12] is True:
|
||||
execute_now('sync_episodes')
|
||||
|
||||
try:
|
||||
|
@ -241,9 +107,9 @@ if os.path.exists(os.path.join(config_dir, 'db/bazarr.db')) == True:
|
|||
pass
|
||||
else:
|
||||
from scheduler import execute_now
|
||||
from get_general_settings import get_general_settings
|
||||
from get_settings import get_general_settings
|
||||
integration = get_general_settings()
|
||||
if integration[13] == "True":
|
||||
if integration[13] is True:
|
||||
execute_now('update_movies')
|
||||
|
||||
db.close()
|
|
@ -75,7 +75,7 @@
|
|||
<body>
|
||||
%import ast
|
||||
%from get_languages import *
|
||||
%from get_general_settings import *
|
||||
%from get_settings import *
|
||||
%single_language = get_general_settings()[7]
|
||||
<div style="display: none;"><img src="{{base_url}}image_proxy{{details[3]}}"></div>
|
||||
<div id='loader' class="ui page dimmer">
|
||||
|
@ -159,7 +159,7 @@
|
|||
%for episode in season:
|
||||
<tr>
|
||||
<td class="collapsing">
|
||||
%if episode[9] == "True":
|
||||
%if episode[9] is True:
|
||||
<span data-tooltip="Episode monitored in Sonarr"><i class="bookmark icon"></i></span>
|
||||
%else:
|
||||
<span data-tooltip="Episode unmonitored in Sonarr"><i class="bookmark outline icon"></i></span>
|
||||
|
@ -248,9 +248,9 @@
|
|||
<label>Subtitles languages</label>
|
||||
</div>
|
||||
<div class="nine wide column">
|
||||
<select name="languages" id="series_languages" {{!'multiple="" ' if single_language == 'False' else ''}} class="ui fluid selection dropdown">
|
||||
<select name="languages" id="series_languages" {{!'multiple="" ' if single_language is False else ''}} class="ui fluid selection dropdown">
|
||||
<option value="">Languages</option>
|
||||
%if single_language == 'True':
|
||||
%if single_language is True:
|
||||
<option value="None">None</option>
|
||||
%end
|
||||
%for language in languages:
|
||||
|
|
|
@ -51,18 +51,12 @@
|
|||
|
||||
% from get_argv import config_dir
|
||||
% import os
|
||||
% import sqlite3
|
||||
% from get_settings import get_general_settings
|
||||
|
||||
% conn = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
% c = conn.cursor()
|
||||
|
||||
% integration = c.execute("SELECT use_sonarr, use_radarr FROM table_settings_general").fetchone()
|
||||
|
||||
% c.close()
|
||||
<div id="fondblanc" class="ui container">
|
||||
<div class="ui top attached tabular menu">
|
||||
<a id="series_tab" class="tabs item active" data-enabled="{{integration[0]}}" data-tab="series">Series</a>
|
||||
<a id="movies_tab" class="tabs item" data-enabled="{{integration[1]}}" data-tab="movies">Movies</a>
|
||||
<a id="series_tab" class="tabs item active" data-enabled="{{get_general_settings()[12]}}" data-tab="series">Series</a>
|
||||
<a id="movies_tab" class="tabs item" data-enabled="{{get_general_settings()[13]}}" data-tab="movies">Movies</a>
|
||||
</div>
|
||||
<div class="ui bottom attached tab segment" data-tab="series">
|
||||
<div class="content">
|
||||
|
|
|
@ -25,9 +25,9 @@
|
|||
|
||||
% import os
|
||||
% import sqlite3
|
||||
% from get_general_settings import *
|
||||
% from get_settings import get_general_settings
|
||||
|
||||
%if get_general_settings()[24] == "True":
|
||||
%if get_general_settings()[24] is True:
|
||||
% monitored_only_query_string = ' AND monitored = "True"'
|
||||
%else:
|
||||
% monitored_only_query_string = ""
|
||||
|
@ -37,7 +37,6 @@
|
|||
% c = conn.cursor()
|
||||
% wanted_series = c.execute("SELECT COUNT(*) FROM table_episodes WHERE missing_subtitles != '[]'" + monitored_only_query_string).fetchone()
|
||||
% wanted_movies = c.execute("SELECT COUNT(*) FROM table_movies WHERE missing_subtitles != '[]'" + monitored_only_query_string).fetchone()
|
||||
% integration = c.execute("SELECT use_sonarr, use_radarr FROM table_settings_general").fetchone()
|
||||
|
||||
<div id="divmenu" class="ui container">
|
||||
<div class="ui grid">
|
||||
|
@ -52,13 +51,13 @@
|
|||
<div class="sixteen wide column">
|
||||
<div class="ui inverted borderless labeled icon massive menu six item">
|
||||
<div class="ui container">
|
||||
% if integration[0] == "True":
|
||||
% if get_general_settings()[12] is True:
|
||||
<a class="item" href="{{base_url}}series">
|
||||
<i class="play icon"></i>
|
||||
Series
|
||||
</a>
|
||||
% end
|
||||
% if integration[1] == "True":
|
||||
% if get_general_settings()[13] is True:
|
||||
<a class="item" href="{{base_url}}movies">
|
||||
<i class="film icon"></i>
|
||||
Movies
|
||||
|
@ -70,12 +69,12 @@
|
|||
</a>
|
||||
<a class="item" href="{{base_url}}wanted">
|
||||
<i class="warning sign icon">
|
||||
% if integration[0] == "True":
|
||||
% if get_general_settings()[12] is True:
|
||||
<div class="floating ui tiny yellow label" style="left:90% !important;top:0.5em !important;">
|
||||
{{wanted_series[0]}}
|
||||
</div>
|
||||
% end
|
||||
% if integration[1] == "True":
|
||||
% if get_general_settings()[13] is True:
|
||||
<div class="floating ui tiny green label" style="left:90% !important;top:3em !important;">
|
||||
{{wanted_movies[0]}}
|
||||
</div>
|
||||
|
@ -116,14 +115,14 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
% restart_required = c.execute("SELECT updated, configured FROM table_settings_general").fetchone()
|
||||
% restart_required = c.execute("SELECT configured, updated FROM system").fetchone()
|
||||
% c.close()
|
||||
|
||||
% if restart_required[0] == 1 and restart_required[1] == 1:
|
||||
% if restart_required[1] == '1' and restart_required[0] == '1':
|
||||
<div class='ui center aligned grid'><div class='fifteen wide column'><div class="ui red message">Bazarr need to be restarted to apply last update and changes to general settings.</div></div></div>
|
||||
% elif restart_required[0] == 1:
|
||||
% elif restart_required[1] == '1':
|
||||
<div class='ui center aligned grid'><div class='fifteen wide column'><div class="ui red message">Bazarr need to be restarted to apply last update.</div></div></div>
|
||||
% elif restart_required[1] == 1:
|
||||
% elif restart_required[0] == '1':
|
||||
<div class='ui center aligned grid'><div class='fifteen wide column'><div class="ui red message">Bazarr need to be restarted to apply changes to general settings.</div></div></div>
|
||||
% end
|
||||
</body>
|
||||
|
|
|
@ -66,7 +66,7 @@
|
|||
<body>
|
||||
%import ast
|
||||
%from get_languages import *
|
||||
%from get_general_settings import *
|
||||
%from get_settings import *
|
||||
%single_language = get_general_settings()[7]
|
||||
<div style="display: none;"><img src="{{base_url}}image_proxy_movies{{details[3]}}"></div>
|
||||
<div id='loader' class="ui page dimmer">
|
||||
|
@ -92,7 +92,7 @@
|
|||
<button id="config" class="ui button" data-tooltip="Edit movie" data-inverted="" data-tmdbid="{{details[5]}}" data-title="{{details[0]}}" data-poster="{{details[2]}}" data-audio="{{details[6]}}" data-languages="{{!subs_languages_list}}" data-hearing-impaired="{{details[4]}}"><i class="ui inverted large compact configure icon"></i></button>
|
||||
</div>
|
||||
<h2>
|
||||
%if details[13] == "True":
|
||||
%if details[13] is True:
|
||||
<span data-tooltip="Movie monitored in Radarr"><i class="bookmark icon"></i></span>
|
||||
%else:
|
||||
<span data-tooltip="Movie unmonitored in Radarr"><i class="bookmark outline icon"></i></span>
|
||||
|
@ -201,7 +201,7 @@
|
|||
<label>Subtitles languages</label>
|
||||
</div>
|
||||
<div class="nine wide column">
|
||||
<select name="languages" id="movie_languages" {{!'multiple="" ' if single_language == 'False' else ''}} class="ui fluid selection dropdown">
|
||||
<select name="languages" id="movie_languages" {{!'multiple="" ' if single_language is False else ''}} class="ui fluid selection dropdown">
|
||||
<option value="">Languages</option>
|
||||
%for language in languages:
|
||||
<option value="{{language[0]}}">{{language[1]}}</option>
|
||||
|
|
|
@ -174,7 +174,7 @@
|
|||
<label>Subtitles languages</label>
|
||||
</div>
|
||||
<div class="nine wide column">
|
||||
<select name="languages" id="movies_languages" {{!'multiple="" ' if single_language == 'False' else ''}}class="ui fluid selection dropdown">
|
||||
<select name="languages" id="movies_languages" {{!'multiple="" ' if single_language is False else ''}}class="ui fluid selection dropdown">
|
||||
<option value="">Languages</option>
|
||||
%for language in languages:
|
||||
<option value="{{language[0]}}">{{language[1]}}</option>
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
<div class="fields">
|
||||
<div class="eight wide field">
|
||||
<label style='color: white;'>Subtitles languages</label>
|
||||
<select name="languages" {{!'multiple="" ' if single_language == 'False' else ''}}class="select ui disabled selection dropdown">
|
||||
<select name="languages" {{!'multiple="" ' if single_language is False else ''}}class="select ui disabled selection dropdown">
|
||||
<option value="">No change</option>
|
||||
<option value="None">None</option>
|
||||
%for language in languages:
|
||||
|
|
|
@ -190,9 +190,9 @@
|
|||
<label>Subtitles languages</label>
|
||||
</div>
|
||||
<div class="nine wide column">
|
||||
<select name="languages" id="series_languages" {{!'multiple="" ' if single_language == 'False' else ''}}class="ui fluid selection dropdown">
|
||||
<select name="languages" id="series_languages" {{!'multiple="" ' if single_language is False else ''}}class="ui fluid selection dropdown">
|
||||
<option value="">Languages</option>
|
||||
%if single_language == 'True':
|
||||
%if single_language is True:
|
||||
<option value="None">None</option>
|
||||
%end
|
||||
%for language in languages:
|
||||
|
|
|
@ -102,7 +102,7 @@
|
|||
<div class="fields">
|
||||
<div class="eight wide field">
|
||||
<label style='color: white;'>Subtitles languages</label>
|
||||
<select name="languages" {{!'multiple="" ' if single_language == 'False' else ''}}class="select ui disabled selection dropdown">
|
||||
<select name="languages" {{!'multiple="" ' if single_language is False else ''}}class="select ui disabled selection dropdown">
|
||||
<option value="">No change</option>
|
||||
<option value="None">None</option>
|
||||
%for language in languages:
|
||||
|
|
|
@ -259,7 +259,7 @@
|
|||
<label>Use Sonarr</label>
|
||||
</div>
|
||||
<div class="one wide column">
|
||||
<div id="settings_use_sonarr" class="ui toggle checkbox" data-enabled={{settings_general[14]}}>
|
||||
<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>
|
||||
|
@ -278,7 +278,7 @@
|
|||
<label>Use Radarr</label>
|
||||
</div>
|
||||
<div class="one wide column">
|
||||
<div id="settings_use_radarr" class="ui toggle checkbox" data-enabled={{settings_general[15]}}>
|
||||
<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>
|
||||
|
@ -372,8 +372,8 @@
|
|||
<div class="twelve wide column">
|
||||
<div class="ui grid">
|
||||
%import ast
|
||||
%if settings_general[16] is not None:
|
||||
% path_substitutions_movie = ast.literal_eval(settings_general[16])
|
||||
%if settings_general[14] is not None:
|
||||
% path_substitutions_movie = ast.literal_eval(settings_general[14])
|
||||
%else:
|
||||
% path_substitutions_movie = []
|
||||
%end
|
||||
|
@ -453,7 +453,7 @@
|
|||
<label>Use post-processing</label>
|
||||
</div>
|
||||
<div class="one wide column">
|
||||
<div id="settings_use_postprocessing" class="ui toggle checkbox" data-postprocessing={{settings_general[12]}}>
|
||||
<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>
|
||||
|
@ -473,7 +473,7 @@
|
|||
</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[13] if settings_general[13] != None else ''}}">
|
||||
<input name="settings_general_postprocessing_cmd" type="text" value="{{settings_general[11] if settings_general[11] != None else ''}}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -798,7 +798,7 @@
|
|||
<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[11]}}>
|
||||
<div id="settings_scenename" class="ui toggle checkbox" data-scenename={{settings_general[9]}}>
|
||||
<input name="settings_general_scenename" type="checkbox">
|
||||
<label></label>
|
||||
</div>
|
||||
|
@ -819,7 +819,7 @@
|
|||
<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[10]}}">
|
||||
<input name="settings_general_minimum_score" type="number" min="0" max="100" step="5" onkeydown="return false" value="{{settings_general[8]}}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -839,7 +839,7 @@
|
|||
<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[24]}}">
|
||||
<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>
|
||||
|
@ -857,7 +857,7 @@
|
|||
<label>Use embedded subtitles</label>
|
||||
</div>
|
||||
<div class="one wide column">
|
||||
<div id="settings_embedded" class="ui toggle checkbox" data-embedded={{settings_general[25]}}>
|
||||
<div id="settings_embedded" class="ui toggle checkbox" data-embedded={{settings_general[23]}}>
|
||||
<input name="settings_general_embedded" type="checkbox">
|
||||
<label></label>
|
||||
</div>
|
||||
|
@ -876,7 +876,7 @@
|
|||
<label>Download only monitored</label>
|
||||
</div>
|
||||
<div class="one wide column">
|
||||
<div id="settings_only_monitored" class="ui toggle checkbox" data-monitored={{settings_general[26]}}>
|
||||
<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>
|
||||
|
@ -1009,7 +1009,7 @@
|
|||
<label>Single language</label>
|
||||
</div>
|
||||
<div class="one wide column">
|
||||
<div id="settings_single_language" class="ui toggle checkbox" data-single-language={{settings_general[9]}}>
|
||||
<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>
|
||||
|
@ -1054,7 +1054,7 @@
|
|||
</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[17]}}">
|
||||
<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>
|
||||
|
@ -1076,7 +1076,7 @@
|
|||
<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[9] == 'False':
|
||||
%if settings_general[7] is False:
|
||||
<option value="">Languages</option>
|
||||
%else:
|
||||
<option value="None">None</option>
|
||||
|
@ -1092,7 +1092,7 @@
|
|||
</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[19]}}">
|
||||
<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>
|
||||
|
@ -1111,7 +1111,7 @@
|
|||
</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[20]}}">
|
||||
<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>
|
||||
|
@ -1133,7 +1133,7 @@
|
|||
<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[9] == 'False':
|
||||
%if settings_general[7] is False:
|
||||
<option value="">Languages</option>
|
||||
%else:
|
||||
<option value="None">None</option>
|
||||
|
@ -1149,7 +1149,7 @@
|
|||
</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[22]}}">
|
||||
<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>
|
||||
|
@ -1466,7 +1466,7 @@
|
|||
$('#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[23]}}');
|
||||
$('#settings_page_size').dropdown('set selected','{{!settings_general[21]}}');
|
||||
$('#settings_providers').dropdown('clear');
|
||||
$('#settings_providers').dropdown('set selected',{{!enabled_providers}});
|
||||
$('#settings_languages').dropdown('clear');
|
||||
|
@ -1483,11 +1483,11 @@
|
|||
$('#settings_languages').dropdown();
|
||||
$('#settings_serie_default_languages').dropdown();
|
||||
$('#settings_movie_default_languages').dropdown();
|
||||
%if settings_general[18] is not None:
|
||||
$('#settings_serie_default_languages').dropdown('set selected',{{!settings_general[18]}});
|
||||
%if settings_general[16] is not None:
|
||||
$('#settings_serie_default_languages').dropdown('set selected',{{!settings_general[16]}});
|
||||
%end
|
||||
%if settings_general[21] is not None:
|
||||
$('#settings_movie_default_languages').dropdown('set selected',{{!settings_general[21]}});
|
||||
%if settings_general[19] is not None:
|
||||
$('#settings_movie_default_languages').dropdown('set selected',{{!settings_general[19]}});
|
||||
%end
|
||||
$('#settings_branch').dropdown();
|
||||
$('#settings_sonarr_sync').dropdown();
|
||||
|
|
|
@ -48,9 +48,9 @@
|
|||
|
||||
% import os
|
||||
% import sqlite3
|
||||
% from get_general_settings import *
|
||||
% from get_settings import get_general_settings
|
||||
|
||||
%if get_general_settings()[24] == "True":
|
||||
%if get_general_settings()[24] is True:
|
||||
% monitored_only_query_string = ' AND monitored = "True"'
|
||||
%else:
|
||||
% monitored_only_query_string = ""
|
||||
|
@ -68,22 +68,15 @@
|
|||
% include('menu.tpl')
|
||||
|
||||
% import os
|
||||
% import sqlite3
|
||||
|
||||
% conn = sqlite3.connect(os.path.join(config_dir, 'db/bazarr.db'), timeout=30)
|
||||
% c = conn.cursor()
|
||||
|
||||
% integration = c.execute("SELECT use_sonarr, use_radarr FROM table_settings_general").fetchone()
|
||||
|
||||
% c.close()
|
||||
<div id="fondblanc" class="ui container">
|
||||
<div class="ui top attached tabular menu">
|
||||
<a id="series_tab" class="tabs item active" data-enabled="{{integration[0]}}" data-tab="series">Series
|
||||
<a id="series_tab" class="tabs item active" data-enabled="{{get_general_settings()[12]}}" data-tab="series">Series
|
||||
<div class="ui tiny yellow label">
|
||||
{{wanted_series[0]}}
|
||||
</div>
|
||||
</a>
|
||||
<a id="movies_tab" class="tabs item" data-enabled="{{integration[1]}}" data-tab="movies">Movies
|
||||
<a id="movies_tab" class="tabs item" data-enabled="{{get_general_settings()[13]}}" data-tab="movies">Movies
|
||||
<div class="ui tiny green label">
|
||||
{{wanted_movies[0]}}
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue