This commit is contained in:
Louis Vézina 2020-02-12 23:16:22 -05:00
parent 15a755a645
commit bfa438df7c
23 changed files with 267 additions and 456 deletions

View File

@ -1,8 +1,6 @@
# coding=utf-8
from __future__ import absolute_import
import six.moves.cPickle as pickle
import base64
import pickle
import random
import platform
import os

View File

@ -7,7 +7,6 @@ import pretty
import time
from operator import itemgetter
from get_args import args
from config import settings, base_url
from init import *
@ -17,7 +16,8 @@ from helper import path_replace, path_replace_reverse, path_replace_movie, path_
from get_languages import language_from_alpha3, language_from_alpha2, alpha2_from_alpha3, alpha2_from_language, \
alpha3_from_language, alpha3_from_alpha2
from get_subtitle import download_subtitle, series_download_subtitles, movies_download_subtitles, \
manual_search, manual_download_subtitle, manual_upload_subtitle
manual_search, manual_download_subtitle, manual_upload_subtitle, wanted_search_missing_subtitles_series, \
wanted_search_missing_subtitles_movies
from notifier import send_notifications, send_notifications_movie
from list_subtitles import store_subtitles, store_subtitles_movie, series_scan_subtitles, movies_scan_subtitles, \
list_missing_subtitles, list_missing_subtitles_movies
@ -1029,6 +1029,18 @@ class WantedMovies(Resource):
return jsonify(draw=draw, recordsTotal=row_count, recordsFiltered=row_count, data=data)
class SearchWantedSeries(Resource):
def get(self):
wanted_search_missing_subtitles_series()
return '', 200
class SearchWantedMovies(Resource):
def get(self):
wanted_search_missing_subtitles_movies()
return '', 200
api.add_resource(Badges, '/badges')
api.add_resource(Languages, '/languages')
@ -1060,3 +1072,5 @@ api.add_resource(HistoryMovies, '/history_movies')
api.add_resource(WantedSeries, '/wanted_series')
api.add_resource(WantedMovies, '/wanted_movies')
api.add_resource(SearchWantedSeries, '/search_wanted_series')
api.add_resource(SearchWantedMovies, '/search_wanted_movies')

View File

@ -1,5 +1,4 @@
# coding=utf-8
from __future__ import absolute_import
import os
import logging
import json

View File

@ -1,5 +1,4 @@
# coding=utf-8
from __future__ import absolute_import
import os
from simpleconfigparser import simpleconfigparser

View File

@ -1,6 +1,5 @@
import os
from sqlite3worker import Sqlite3Worker
from six import string_types
from get_args import args
from helper import path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie

View File

@ -1,10 +1,7 @@
from __future__ import absolute_import
import enzyme
from enzyme.exceptions import MalformedMKVError
import logging
import os
import subprocess
import locale
from utils import get_binary
from pyprobe.pyprobe import VideoFileParser

View File

@ -1,5 +1,4 @@
# coding=utf-8
from __future__ import absolute_import
import os
import argparse

View File

@ -1,13 +1,9 @@
# coding=utf-8
from __future__ import absolute_import
import os
import requests
import logging
import re
from queueconfig import notifications
from database import database, dict_converter
from get_args import args
from config import settings, url_sonarr
from helper import path_replace
from list_subtitles import list_missing_subtitles, store_subtitles, series_full_scan_subtitles

View File

@ -1,10 +1,7 @@
# coding=utf-8
from __future__ import absolute_import
import os
import pycountry
from get_args import args
from subzero.language import Language
from database import database

View File

@ -1,13 +1,10 @@
# coding=utf-8
from __future__ import absolute_import
import os
import six
import requests
import logging
from queueconfig import notifications
from get_args import args
from config import settings, url_radarr
from helper import path_replace_movie
from utils import get_radarr_version
@ -77,7 +74,7 @@ def update_movies():
if movie["path"] != None and movie['movieFile']['relativePath'] != None:
try:
overview = six.text_type(movie['overview'])
overview = str(movie['overview'])
except:
overview = ""
try:
@ -131,19 +128,19 @@ def update_movies():
audioCodec = None
# Add movies in radarr to current movies list
current_movies_radarr.append(six.text_type(movie['tmdbId']))
current_movies_radarr.append(str(movie['tmdbId']))
if six.text_type(movie['tmdbId']) in current_movies_db_list:
if str(movie['tmdbId']) in current_movies_db_list:
movies_to_update.append({'radarrId': int(movie["id"]),
'title': movie["title"],
'path': movie["path"] + separator + movie['movieFile']['relativePath'],
'tmdbId': six.text_type(movie["tmdbId"]),
'tmdbId': str(movie["tmdbId"]),
'poster': poster,
'fanart': fanart,
'audio_language': profile_id_to_language(movie['qualityProfileId'], audio_profiles),
'sceneName': sceneName,
'monitored': six.text_type(bool(movie['monitored'])),
'year': six.text_type(movie['year']),
'monitored': str(bool(movie['monitored'])),
'year': str(movie['year']),
'sortTitle': movie['sortTitle'],
'alternativeTitles': alternativeTitles,
'format': format,
@ -158,7 +155,7 @@ def update_movies():
movies_to_add.append({'radarrId': int(movie["id"]),
'title': movie["title"],
'path': movie["path"] + separator + movie['movieFile']['relativePath'],
'tmdbId': six.text_type(movie["tmdbId"]),
'tmdbId': str(movie["tmdbId"]),
'languages': movie_default_language,
'subtitles': '[]',
'hearing_impaired': movie_default_hi,
@ -167,9 +164,9 @@ def update_movies():
'fanart': fanart,
'audio_language': profile_id_to_language(movie['qualityProfileId'], audio_profiles),
'sceneName': sceneName,
'monitored': six.text_type(bool(movie['monitored'])),
'monitored': str(bool(movie['monitored'])),
'sortTitle': movie['sortTitle'],
'year': six.text_type(movie['year']),
'year': str(movie['year']),
'alternativeTitles': alternativeTitles,
'format': format,
'resolution': resolution,
@ -182,7 +179,7 @@ def update_movies():
movies_to_add.append({'radarrId': int(movie["id"]),
'title': movie["title"],
'path': movie["path"] + separator + movie['movieFile']['relativePath'],
'tmdbId': six.text_type(movie["tmdbId"]),
'tmdbId': str(movie["tmdbId"]),
'languages': None,
'subtitles': '[]',
'hearing_impaired': None,
@ -191,9 +188,9 @@ def update_movies():
'fanart': fanart,
'audio_language': profile_id_to_language(movie['qualityProfileId'], audio_profiles),
'sceneName': sceneName,
'monitored': six.text_type(bool(movie['monitored'])),
'monitored': str(bool(movie['monitored'])),
'sortTitle': movie['sortTitle'],
'year': six.text_type(movie['year']),
'year': str(movie['year']),
'alternativeTitles': alternativeTitles,
'format': format,
'resolution': resolution,

View File

@ -1,11 +1,8 @@
# coding=utf-8
from __future__ import absolute_import
from __future__ import print_function
import os
import requests
import logging
import six
from queueconfig import notifications
from config import settings, url_sonarr
@ -108,7 +105,7 @@ def update_series():
'fanart': fanart,
'audio_language': audio_language,
'sortTitle': show['sortTitle'],
'year': six.text_type(show['year']),
'year': str(show['year']),
'alternateTitles': alternate_titles,
'forced': serie_default_forced})
else:
@ -121,7 +118,7 @@ def update_series():
'fanart': fanart,
'audio_language': audio_language,
'sortTitle': show['sortTitle'],
'year': six.text_type(show['year']),
'year': str(show['year']),
'alternateTitles': alternate_titles})
# Remove old series from DB

View File

@ -1,19 +1,15 @@
# coding=utf-8
from __future__ import absolute_import
import os
import sys
import ast
import logging
import subprocess
import time
import six.moves.cPickle as pickle
import pickle
import codecs
import types
import re
import subliminal
import platform
import operator
from datetime import datetime, timedelta
from subzero.language import Language
from subzero.video import parse_video
@ -31,15 +27,11 @@ from list_subtitles import store_subtitles, list_missing_subtitles, store_subtit
from utils import history_log, history_log_movie, get_binary
from notifier import send_notifications, send_notifications_movie
from get_providers import get_providers, get_providers_auth, provider_throttle, provider_pool
from get_args import args
from queueconfig import notifications
from pyprobe.pyprobe import VideoFileParser
from database import database, dict_mapper
from analytics import track_event
import six
from six.moves import range
from functools import reduce
from locale import getpreferredencoding
@ -189,7 +181,7 @@ def download_subtitle(path, language, hi, forced, providers, providers_auth, sce
saved_any = False
if downloaded_subtitles:
for video, subtitles in six.iteritems(downloaded_subtitles):
for video, subtitles in downloaded_subtitles.items():
if not subtitles:
continue
@ -225,10 +217,10 @@ def download_subtitle(path, language, hi, forced, providers, providers_auth, sce
else:
action = "downloaded"
if video.used_scene_name:
message = downloaded_language + is_forced_string + " subtitles " + action + " from " + downloaded_provider + " with a score of " + six.text_type(
message = downloaded_language + is_forced_string + " subtitles " + action + " from " + downloaded_provider + " with a score of " + str(
round(subtitle.score * 100 / max_score, 2)) + "% using this scene name: " + sceneName
else:
message = downloaded_language + is_forced_string + " subtitles " + action + " from " + downloaded_provider + " with a score of " + six.text_type(
message = downloaded_language + is_forced_string + " subtitles " + action + " from " + downloaded_provider + " with a score of " + str(
round(subtitle.score * 100 / max_score, 2)) + "% using filename guessing."
if use_postprocessing is True:
@ -426,7 +418,7 @@ def manual_download_subtitle(path, language, hi, forced, subtitle, provider, pro
downloaded_path = saved_subtitle.storage_path
logging.debug('BAZARR Subtitles file saved to disk: ' + downloaded_path)
is_forced_string = " forced" if subtitle.language.forced else ""
message = downloaded_language + is_forced_string + " Subtitles downloaded from " + downloaded_provider + " with a score of " + six.text_type(
message = downloaded_language + is_forced_string + " Subtitles downloaded from " + downloaded_provider + " with a score of " + str(
score) + "% using manual search."
if use_postprocessing is True:
@ -680,7 +672,7 @@ def wanted_download_subtitles(path, l, count_episodes):
for episode in episodes_details:
attempt = episode['failedAttempts']
if type(attempt) == six.text_type:
if type(attempt) == str:
attempt = ast.literal_eval(attempt)
for language in ast.literal_eval(episode['missing_subtitles']):
if attempt is None:
@ -692,7 +684,7 @@ def wanted_download_subtitles(path, l, count_episodes):
attempt.append([language, time.time()])
database.execute("UPDATE table_episodes SET failedAttempts=? WHERE sonarrEpisodeId=?",
(six.text_type(attempt), episode['sonarrEpisodeId']))
(str(attempt), episode['sonarrEpisodeId']))
for i in range(len(attempt)):
if attempt[i][0] == language:
@ -733,7 +725,7 @@ def wanted_download_subtitles_movie(path, l, count_movies):
for movie in movies_details:
attempt = movie['failedAttempts']
if type(attempt) == six.text_type:
if type(attempt) == str:
attempt = ast.literal_eval(attempt)
for language in ast.literal_eval(movie['missing_subtitles']):
if attempt is None:
@ -745,7 +737,7 @@ def wanted_download_subtitles_movie(path, l, count_movies):
attempt.append([language, time.time()])
database.execute("UPDATE table_movies SET failedAttempts=? WHERE radarrId=?",
(six.text_type(attempt), movie['radarrId']))
(str(attempt), movie['radarrId']))
for i in range(len(attempt)):
if attempt[i][0] == language:
@ -776,53 +768,52 @@ def wanted_download_subtitles_movie(path, l, count_movies):
'BAZARR Search is not active for this Movie ' + movie['path'] + ' Language: ' + attempt[i][0])
def wanted_search_missing_subtitles():
if settings.general.getboolean('use_sonarr'):
if settings.sonarr.getboolean('only_monitored'):
monitored_only_query_string_sonarr = ' AND monitored = "True"'
def wanted_search_missing_subtitles_series():
if settings.sonarr.getboolean('only_monitored'):
monitored_only_query_string_sonarr = ' AND monitored = "True"'
else:
monitored_only_query_string_sonarr = ""
episodes = database.execute("SELECT path FROM table_episodes WHERE missing_subtitles != '[]'" +
monitored_only_query_string_sonarr)
# path_replace
dict_mapper.path_replace(episodes)
count_episodes = len(episodes)
for i, episode in enumerate(episodes, 1):
providers = get_providers()
if providers:
wanted_download_subtitles(episode['path'], i, count_episodes)
else:
monitored_only_query_string_sonarr = ""
episodes = database.execute("SELECT path FROM table_episodes WHERE missing_subtitles != '[]'" +
monitored_only_query_string_sonarr)
# path_replace
dict_mapper.path_replace(episodes)
count_episodes = len(episodes)
for i, episode in enumerate(episodes, 1):
providers = get_providers()
if providers:
wanted_download_subtitles(episode['path'], i, count_episodes)
else:
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle', duration='long')
logging.info("BAZARR All providers are throttled")
return
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle', duration='long')
logging.info("BAZARR All providers are throttled")
return
if settings.general.getboolean('use_radarr'):
if settings.radarr.getboolean('only_monitored'):
monitored_only_query_string_radarr = ' AND monitored = "True"'
logging.info('BAZARR Finished searching for missing Series Subtitles. Check History for more information.')
def wanted_search_missing_subtitles_movies():
if settings.radarr.getboolean('only_monitored'):
monitored_only_query_string_radarr = ' AND monitored = "True"'
else:
monitored_only_query_string_radarr = ""
movies = database.execute("SELECT path FROM table_movies WHERE missing_subtitles != '[]'" +
monitored_only_query_string_radarr)
# path_replace
dict_mapper.path_replace_movie(movies)
count_movies = len(movies)
for i, movie in enumerate(movies, 1):
providers = get_providers()
if providers:
wanted_download_subtitles_movie(movie['path'], i, count_movies)
else:
monitored_only_query_string_radarr = ""
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle', duration='long')
logging.info("BAZARR All providers are throttled")
return
movies = database.execute("SELECT path FROM table_movies WHERE missing_subtitles != '[]'" +
monitored_only_query_string_radarr)
# path_replace
dict_mapper.path_replace_movie(movies)
count_movies = len(movies)
for i, movie in enumerate(movies, 1):
providers = get_providers()
if providers:
wanted_download_subtitles_movie(movie['path'], i, count_movies)
else:
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle', duration='long')
logging.info("BAZARR All providers are throttled")
return
logging.info('BAZARR Finished searching for missing Subtitles. Check History for more information.')
notifications.write(msg='Searching completed. Please reload the page.', type='success', duration='permanent',
button='refresh', queue='get_subtitle')
logging.info('BAZARR Finished searching for missing Movies Subtitles. Check History for more information.')
def search_active(timestamp):

View File

@ -1,5 +1,4 @@
# coding=utf-8
from __future__ import absolute_import
import ast
import os
import re

View File

@ -1,6 +1,5 @@
# coding=utf-8
from __future__ import absolute_import, print_function
import os
import time
import rarfile
@ -53,8 +52,7 @@ import logging
# create random api_key if there's none in config.ini
if not settings.auth.apikey:
from binascii import hexlify
from six import text_type
settings.auth.apikey = text_type(hexlify(os.urandom(16)))
settings.auth.apikey = str(hexlify(os.urandom(16)))
with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle:
settings.write(handle)

View File

@ -1,6 +1,5 @@
# coding=utf-8
from __future__ import absolute_import
import gc
import os
import logging
@ -23,7 +22,6 @@ from helper import path_replace, path_replace_movie, path_replace_reverse, \
from queueconfig import notifications
from embedded_subs_reader import embedded_subs_reader
from websocket_handler import event_stream
import six
gc.enable()
@ -68,7 +66,7 @@ def store_subtitles(original_path, reversed_path):
logging.exception("BAZARR unable to index external subtitles.")
pass
else:
for subtitle, language in six.iteritems(subtitles):
for subtitle, language in subtitles.items():
subtitle_path = get_external_subtitles_path(reversed_path, subtitle)
if str(os.path.splitext(subtitle)[0]).lower().endswith(tuple(brazilian_portuguese)):
logging.debug("BAZARR external subtitles detected: " + "pb")
@ -143,7 +141,7 @@ def store_subtitles_movie(original_path, reversed_path):
logging.exception("BAZARR unable to index external subtitles.")
pass
else:
for subtitle, language in six.iteritems(subtitles):
for subtitle, language in subtitles.items():
subtitle_path = get_external_subtitles_path(reversed_path, subtitle)
if str(os.path.splitext(subtitle)[0]).lower().endswith(tuple(brazilian_portuguese)):
logging.debug("BAZARR external subtitles detected: " + "pb")
@ -187,7 +185,7 @@ def list_missing_subtitles(no=None, epno=None):
"FROM table_episodes LEFT JOIN table_shows "
"on table_episodes.sonarrSeriesId = table_shows.sonarrSeriesId" +
episodes_subtitles_clause)
if isinstance(episodes_subtitles, six.string_types):
if isinstance(episodes_subtitles, str):
logging.error("BAZARR list missing subtitles query to DB returned this instead of rows: " + episodes_subtitles)
return
@ -249,7 +247,7 @@ def list_missing_subtitles_movies(no=None):
movies_subtitles = database.execute("SELECT radarrId, subtitles, languages, forced FROM table_movies" +
movies_subtitles_clause)
if isinstance(movies_subtitles, six.string_types):
if isinstance(movies_subtitles, str):
logging.error("BAZARR list missing subtitles query to DB returned this instead of rows: " + movies_subtitles)
return
@ -367,7 +365,7 @@ def get_external_subtitles_path(file, subtitle):
def guess_external_subtitles(dest_folder, subtitles):
for subtitle, language in six.iteritems(subtitles):
for subtitle, language in subtitles.items():
if not language:
subtitle_path = os.path.join(dest_folder, subtitle)
if os.path.exists(subtitle_path) and os.path.splitext(subtitle_path)[1] in core.SUBTITLE_EXTENSIONS:

View File

@ -1,13 +1,10 @@
# coding=utf-8
from __future__ import absolute_import
import os
import logging
import re
import types
import platform
import warnings
import six
from logging.handlers import TimedRotatingFileHandler
from get_args import args
@ -119,7 +116,7 @@ class ArgsFilteringFilter(logging.Filter):
if isinstance(record.args, (list, tuple)):
final_args = []
for arg in record.args:
if not isinstance(arg, six.string_types):
if not isinstance(arg, str):
final_args.append(arg)
continue
@ -127,7 +124,7 @@ class ArgsFilteringFilter(logging.Filter):
record.args = type(record.args)(final_args)
elif isinstance(record.args, dict):
for key, arg in record.args.items():
if not isinstance(arg, six.string_types):
if not isinstance(arg, str):
continue
record.args[key] = func(arg)

View File

@ -11,22 +11,13 @@ import sys
import libs
import io
import six
from six.moves import zip
from functools import reduce
import itertools
import operator
import pretty
import math
import ast
import hashlib
import six.moves.urllib.request, six.moves.urllib.parse, six.moves.urllib.error
import warnings
import queueconfig
import platform
import apprise
import operator
from get_args import args
@ -41,9 +32,8 @@ from notifier import update_notifier
from cherrypy.wsgiserver import CherryPyWSGIServer
from io import BytesIO
from six import text_type
from datetime import timedelta, datetime
from urllib.parse import unquote
from datetime import datetime
from get_languages import load_language_in_db, language_from_alpha3, language_from_alpha2, alpha2_from_alpha3
from flask import make_response, request, redirect, abort, render_template, Response, session, flash, url_for, \
send_file, stream_with_context
@ -53,16 +43,9 @@ from get_series import *
from get_episodes import *
from get_movies import *
from list_subtitles import store_subtitles, store_subtitles_movie, series_scan_subtitles, movies_scan_subtitles, \
list_missing_subtitles, list_missing_subtitles_movies
from get_subtitle import download_subtitle, series_download_subtitles, movies_download_subtitles, \
manual_search, manual_download_subtitle, manual_upload_subtitle
from utils import history_log, history_log_movie, get_sonarr_version, get_radarr_version
from helper import path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie
from scheduler import Scheduler
from notifier import send_notifications, send_notifications_movie
from subliminal_patch.extensions import provider_registry as provider_manager
from subliminal_patch.core import SUBTITLE_EXTENSIONS
from functools import wraps
from app import create_app, socketio
@ -202,7 +185,7 @@ def doShutdown():
except Exception as e:
logging.error('BAZARR Cannot create bazarr.stop file.')
else:
stop_file.write(six.text_type(''))
stop_file.write(str(''))
stop_file.close()
sys.exit(0)
return ''
@ -223,7 +206,7 @@ def restart():
logging.error('BAZARR Cannot create bazarr.restart file.')
else:
logging.info('Bazarr is being restarted...')
restart_file.write(six.text_type(''))
restart_file.write(str(''))
restart_file.close()
sys.exit(0)
return ''
@ -293,20 +276,20 @@ def save_wizard():
else:
settings_upgrade_manual = 'True'
settings.general.ip = text_type(settings_general_ip)
settings.general.port = text_type(settings_general_port)
settings.general.base_url = text_type(settings_general_baseurl)
settings.general.path_mappings = text_type(settings_general_pathmapping)
settings.general.single_language = text_type(settings_general_single_language)
settings.general.use_sonarr = text_type(settings_general_use_sonarr)
settings.general.use_radarr = text_type(settings_general_use_radarr)
settings.general.path_mappings_movie = text_type(settings_general_pathmapping_movie)
settings.general.subfolder = text_type(settings_subfolder)
settings.general.subfolder_custom = text_type(settings_subfolder_custom)
settings.general.use_embedded_subs = text_type(settings_general_embedded)
settings.general.upgrade_subs = text_type(settings_upgrade_subs)
settings.general.days_to_upgrade_subs = text_type(settings_days_to_upgrade_subs)
settings.general.upgrade_manual = text_type(settings_upgrade_manual)
settings.general.ip = str(settings_general_ip)
settings.general.port = str(settings_general_port)
settings.general.base_url = str(settings_general_baseurl)
settings.general.path_mappings = str(settings_general_pathmapping)
settings.general.single_language = str(settings_general_single_language)
settings.general.use_sonarr = str(settings_general_use_sonarr)
settings.general.use_radarr = str(settings_general_use_radarr)
settings.general.path_mappings_movie = str(settings_general_pathmapping_movie)
settings.general.subfolder = str(settings_subfolder)
settings.general.subfolder_custom = str(settings_subfolder_custom)
settings.general.use_embedded_subs = str(settings_general_embedded)
settings.general.upgrade_subs = str(settings_upgrade_subs)
settings.general.days_to_upgrade_subs = str(settings_days_to_upgrade_subs)
settings.general.upgrade_manual = str(settings_upgrade_manual)
settings_sonarr_ip = request.form.get('settings_sonarr_ip')
settings_sonarr_port = request.form.get('settings_sonarr_port')
@ -323,12 +306,12 @@ def save_wizard():
else:
settings_sonarr_only_monitored = 'True'
settings.sonarr.ip = text_type(settings_sonarr_ip)
settings.sonarr.port = text_type(settings_sonarr_port)
settings.sonarr.base_url = text_type(settings_sonarr_baseurl)
settings.sonarr.ssl = text_type(settings_sonarr_ssl)
settings.sonarr.apikey = text_type(settings_sonarr_apikey)
settings.sonarr.only_monitored = text_type(settings_sonarr_only_monitored)
settings.sonarr.ip = str(settings_sonarr_ip)
settings.sonarr.port = str(settings_sonarr_port)
settings.sonarr.base_url = str(settings_sonarr_baseurl)
settings.sonarr.ssl = str(settings_sonarr_ssl)
settings.sonarr.apikey = str(settings_sonarr_apikey)
settings.sonarr.only_monitored = str(settings_sonarr_only_monitored)
settings_radarr_ip = request.form.get('settings_radarr_ip')
settings_radarr_port = request.form.get('settings_radarr_port')
@ -345,12 +328,12 @@ def save_wizard():
else:
settings_radarr_only_monitored = 'True'
settings.radarr.ip = text_type(settings_radarr_ip)
settings.radarr.port = text_type(settings_radarr_port)
settings.radarr.base_url = text_type(settings_radarr_baseurl)
settings.radarr.ssl = text_type(settings_radarr_ssl)
settings.radarr.apikey = text_type(settings_radarr_apikey)
settings.radarr.only_monitored = text_type(settings_radarr_only_monitored)
settings.radarr.ip = str(settings_radarr_ip)
settings.radarr.port = str(settings_radarr_port)
settings.radarr.base_url = str(settings_radarr_baseurl)
settings.radarr.ssl = str(settings_radarr_ssl)
settings.radarr.apikey = str(settings_radarr_apikey)
settings.radarr.only_monitored = str(settings_radarr_only_monitored)
settings_subliminal_providers = request.form.getlist('settings_subliminal_providers')
settings.general.enabled_providers = u'' if not settings_subliminal_providers else ','.join(
@ -382,7 +365,7 @@ def save_wizard():
settings.addic7ed.username = request.form.get('settings_addic7ed_username') or ''
settings.addic7ed.password = request.form.get('settings_addic7ed_password') or ''
settings.addic7ed.random_agents = text_type(settings_addic7ed_random_agents) or ''
settings.addic7ed.random_agents = str(settings_addic7ed_random_agents) or ''
settings.assrt.token = request.form.get('settings_assrt_token') or ''
settings.legendasdivx.username = request.form.get('settings_legendasdivx_username') or ''
settings.legendasdivx.password = request.form.get('settings_legendasdivx_password') or ''
@ -390,9 +373,9 @@ def save_wizard():
settings.legendastv.password = request.form.get('settings_legendastv_password') or ''
settings.opensubtitles.username = request.form.get('settings_opensubtitles_username') or ''
settings.opensubtitles.password = request.form.get('settings_opensubtitles_password') or ''
settings.opensubtitles.vip = text_type(settings_opensubtitles_vip)
settings.opensubtitles.ssl = text_type(settings_opensubtitles_ssl)
settings.opensubtitles.skip_wrong_fps = text_type(settings_opensubtitles_skip_wrong_fps)
settings.opensubtitles.vip = str(settings_opensubtitles_vip)
settings.opensubtitles.ssl = str(settings_opensubtitles_ssl)
settings.opensubtitles.skip_wrong_fps = str(settings_opensubtitles_skip_wrong_fps)
settings.xsubs.username = request.form.get('settings_xsubs_username') or ''
settings.xsubs.password = request.form.get('settings_xsubs_password') or ''
settings.napisy24.username = request.form.get('settings_napisy24_username') or ''
@ -415,41 +398,41 @@ def save_wizard():
settings_serie_default_enabled = 'False'
else:
settings_serie_default_enabled = 'True'
settings.general.serie_default_enabled = text_type(settings_serie_default_enabled)
settings.general.serie_default_enabled = str(settings_serie_default_enabled)
settings_serie_default_languages = str(request.form.getlist('settings_serie_default_languages'))
if settings_serie_default_languages == "['None']":
settings_serie_default_languages = 'None'
settings.general.serie_default_language = text_type(settings_serie_default_languages)
settings.general.serie_default_language = str(settings_serie_default_languages)
settings_serie_default_hi = request.form.get('settings_serie_default_hi')
if settings_serie_default_hi is None:
settings_serie_default_hi = 'False'
else:
settings_serie_default_hi = 'True'
settings.general.serie_default_hi = text_type(settings_serie_default_hi)
settings.general.serie_default_hi = str(settings_serie_default_hi)
settings_movie_default_enabled = request.form.get('settings_movie_default_enabled')
if settings_movie_default_enabled is None:
settings_movie_default_enabled = 'False'
else:
settings_movie_default_enabled = 'True'
settings.general.movie_default_enabled = text_type(settings_movie_default_enabled)
settings.general.movie_default_enabled = str(settings_movie_default_enabled)
settings_movie_default_languages = str(request.form.getlist('settings_movie_default_languages'))
if settings_movie_default_languages == "['None']":
settings_movie_default_languages = 'None'
settings.general.movie_default_language = text_type(settings_movie_default_languages)
settings.general.movie_default_language = str(settings_movie_default_languages)
settings_movie_default_hi = request.form.get('settings_movie_default_hi')
if settings_movie_default_hi is None:
settings_movie_default_hi = 'False'
else:
settings_movie_default_hi = 'True'
settings.general.movie_default_hi = text_type(settings_movie_default_hi)
settings.general.movie_default_hi = str(settings_movie_default_hi)
settings_movie_default_forced = str(request.form.get('settings_movie_default_forced'))
settings.general.movie_default_forced = text_type(settings_movie_default_forced)
settings.general.movie_default_forced = str(settings_movie_default_forced)
with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle:
settings.write(handle)
@ -579,23 +562,6 @@ def movie(no):
return render_template('movie.html', id=str(no))
@app.route('/scan_disk_movie/<int:no>', methods=['GET'])
@login_required
def scan_disk_movie(no):
movies_scan_subtitles(no)
return '', 200
@app.route('/search_missing_subtitles_movie/<int:no>', methods=['GET'])
@login_required
def search_missing_subtitles_movie(no):
ref = request.environ['HTTP_REFERER']
scheduler.add_job(movies_download_subtitles, args=[no], name=('movies_download_subtitles_' + str(no)))
redirect(ref)
@app.route('/historyseries/')
@login_required
def historyseries():
@ -620,16 +586,6 @@ def wantedmovies():
return render_template('wantedmovies.html')
@app.route('/wanted_search_missing_subtitles')
@login_required
def wanted_search_missing_subtitles_list():
ref = request.environ['HTTP_REFERER']
scheduler.add_job(wanted_search_missing_subtitles, name='manual_wanted_search_missing_subtitles')
redirect(ref)
@app.route('/settings/')
@login_required
def _settings():
@ -765,47 +721,47 @@ def save_settings():
settings_death_by_captcha_username = request.form.get('settings_death_by_captcha_username')
settings_death_by_captcha_password = request.form.get('settings_death_by_captcha_password')
before = (six.text_type(settings.general.ip), int(settings.general.port), six.text_type(settings.general.base_url),
six.text_type(settings.general.path_mappings), six.text_type(settings.general.getboolean('use_sonarr')),
six.text_type(settings.general.getboolean('use_radarr')), six.text_type(settings.general.path_mappings_movie))
after = (six.text_type(settings_general_ip), int(settings_general_port), six.text_type(settings_general_baseurl),
six.text_type(settings_general_pathmapping), six.text_type(settings_general_use_sonarr),
six.text_type(settings_general_use_radarr), six.text_type(settings_general_pathmapping_movie))
before = (str(settings.general.ip), int(settings.general.port), str(settings.general.base_url),
str(settings.general.path_mappings), str(settings.general.getboolean('use_sonarr')),
str(settings.general.getboolean('use_radarr')), str(settings.general.path_mappings_movie))
after = (str(settings_general_ip), int(settings_general_port), str(settings_general_baseurl),
str(settings_general_pathmapping), str(settings_general_use_sonarr),
str(settings_general_use_radarr), str(settings_general_pathmapping_movie))
settings.general.ip = text_type(settings_general_ip)
settings.general.port = text_type(settings_general_port)
settings.general.base_url = text_type(settings_general_baseurl)
settings.general.path_mappings = text_type(settings_general_pathmapping)
settings.general.debug = text_type(settings_general_debug)
settings.general.chmod_enabled = text_type(settings_general_chmod_enabled)
settings.general.chmod = text_type(settings_general_chmod)
settings.general.branch = text_type(settings_general_branch)
settings.general.auto_update = text_type(settings_general_automatic)
settings.general.update_restart = text_type(settings_general_update_restart)
settings.analytics.enabled = text_type(settings_analytics_enabled)
settings.general.single_language = text_type(settings_general_single_language)
settings.general.minimum_score = text_type(settings_general_minimum_score)
settings.general.wanted_search_frequency = text_type(settings_general_wanted_search_frequency)
settings.general.use_scenename = text_type(settings_general_scenename)
settings.general.use_postprocessing = text_type(settings_general_use_postprocessing)
settings.general.postprocessing_cmd = text_type(settings_general_postprocessing_cmd)
settings.general.use_sonarr = text_type(settings_general_use_sonarr)
settings.general.use_radarr = text_type(settings_general_use_radarr)
settings.general.path_mappings_movie = text_type(settings_general_pathmapping_movie)
settings.general.page_size = text_type(settings_page_size)
settings.general.subfolder = text_type(settings_subfolder)
settings.general.ip = str(settings_general_ip)
settings.general.port = str(settings_general_port)
settings.general.base_url = str(settings_general_baseurl)
settings.general.path_mappings = str(settings_general_pathmapping)
settings.general.debug = str(settings_general_debug)
settings.general.chmod_enabled = str(settings_general_chmod_enabled)
settings.general.chmod = str(settings_general_chmod)
settings.general.branch = str(settings_general_branch)
settings.general.auto_update = str(settings_general_automatic)
settings.general.update_restart = str(settings_general_update_restart)
settings.analytics.enabled = str(settings_analytics_enabled)
settings.general.single_language = str(settings_general_single_language)
settings.general.minimum_score = str(settings_general_minimum_score)
settings.general.wanted_search_frequency = str(settings_general_wanted_search_frequency)
settings.general.use_scenename = str(settings_general_scenename)
settings.general.use_postprocessing = str(settings_general_use_postprocessing)
settings.general.postprocessing_cmd = str(settings_general_postprocessing_cmd)
settings.general.use_sonarr = str(settings_general_use_sonarr)
settings.general.use_radarr = str(settings_general_use_radarr)
settings.general.path_mappings_movie = str(settings_general_pathmapping_movie)
settings.general.page_size = str(settings_page_size)
settings.general.subfolder = str(settings_subfolder)
if settings.general.subfolder == 'current':
settings.general.subfolder_custom = ''
else:
settings.general.subfolder_custom = text_type(settings_subfolder_custom)
settings.general.upgrade_subs = text_type(settings_upgrade_subs)
settings.general.upgrade_frequency = text_type(settings_upgrade_subs_frequency)
settings.general.days_to_upgrade_subs = text_type(settings_days_to_upgrade_subs)
settings.general.upgrade_manual = text_type(settings_upgrade_manual)
settings.general.anti_captcha_provider = text_type(settings_anti_captcha_provider)
settings.anticaptcha.anti_captcha_key = text_type(settings_anti_captcha_key)
settings.deathbycaptcha.username = text_type(settings_death_by_captcha_username)
settings.deathbycaptcha.password = text_type(settings_death_by_captcha_password)
settings.general.subfolder_custom = str(settings_subfolder_custom)
settings.general.upgrade_subs = str(settings_upgrade_subs)
settings.general.upgrade_frequency = str(settings_upgrade_subs_frequency)
settings.general.days_to_upgrade_subs = str(settings_days_to_upgrade_subs)
settings.general.upgrade_manual = str(settings_upgrade_manual)
settings.general.anti_captcha_provider = str(settings_anti_captcha_provider)
settings.anticaptcha.anti_captcha_key = str(settings_anti_captcha_key)
settings.deathbycaptcha.username = str(settings_death_by_captcha_username)
settings.deathbycaptcha.password = str(settings_death_by_captcha_password)
# set anti-captcha provider and key
if settings.general.anti_captcha_provider == 'anti-captcha':
@ -818,12 +774,12 @@ def save_settings():
else:
os.environ["ANTICAPTCHA_CLASS"] = ''
settings.general.minimum_score_movie = text_type(settings_general_minimum_score_movies)
settings.general.use_embedded_subs = text_type(settings_general_embedded)
settings.general.utf8_encode = text_type(settings_general_utf8_encode)
settings.general.ignore_pgs_subs = text_type(settings_general_ignore_pgs)
settings.general.adaptive_searching = text_type(settings_general_adaptive_searching)
settings.general.multithreading = text_type(settings_general_multithreading)
settings.general.minimum_score_movie = str(settings_general_minimum_score_movies)
settings.general.use_embedded_subs = str(settings_general_embedded)
settings.general.utf8_encode = str(settings_general_utf8_encode)
settings.general.ignore_pgs_subs = str(settings_general_ignore_pgs)
settings.general.adaptive_searching = str(settings_general_adaptive_searching)
settings.general.multithreading = str(settings_general_multithreading)
if after != before:
configured()
@ -835,22 +791,22 @@ def save_settings():
settings_proxy_password = request.form.get('settings_proxy_password')
settings_proxy_exclude = request.form.get('settings_proxy_exclude')
before_proxy_password = (six.text_type(settings.proxy.type), six.text_type(settings.proxy.exclude))
before_proxy_password = (str(settings.proxy.type), str(settings.proxy.exclude))
if before_proxy_password[0] != settings_proxy_type:
configured()
if before_proxy_password[1] == settings_proxy_password:
settings.proxy.type = text_type(settings_proxy_type)
settings.proxy.url = text_type(settings_proxy_url)
settings.proxy.port = text_type(settings_proxy_port)
settings.proxy.username = text_type(settings_proxy_username)
settings.proxy.exclude = text_type(settings_proxy_exclude)
settings.proxy.type = str(settings_proxy_type)
settings.proxy.url = str(settings_proxy_url)
settings.proxy.port = str(settings_proxy_port)
settings.proxy.username = str(settings_proxy_username)
settings.proxy.exclude = str(settings_proxy_exclude)
else:
settings.proxy.type = text_type(settings_proxy_type)
settings.proxy.url = text_type(settings_proxy_url)
settings.proxy.port = text_type(settings_proxy_port)
settings.proxy.username = text_type(settings_proxy_username)
settings.proxy.password = text_type(settings_proxy_password)
settings.proxy.exclude = text_type(settings_proxy_exclude)
settings.proxy.type = str(settings_proxy_type)
settings.proxy.url = str(settings_proxy_url)
settings.proxy.port = str(settings_proxy_port)
settings.proxy.username = str(settings_proxy_username)
settings.proxy.password = str(settings_proxy_password)
settings.proxy.exclude = str(settings_proxy_exclude)
settings_auth_type = request.form.get('settings_auth_type')
settings_auth_username = request.form.get('settings_auth_username')
@ -859,11 +815,11 @@ def save_settings():
if settings.auth.type != settings_auth_type:
configured()
if settings.auth.password == settings_auth_password:
settings.auth.type = text_type(settings_auth_type)
settings.auth.username = text_type(settings_auth_username)
settings.auth.type = str(settings_auth_type)
settings.auth.username = str(settings_auth_username)
else:
settings.auth.type = text_type(settings_auth_type)
settings.auth.username = text_type(settings_auth_username)
settings.auth.type = str(settings_auth_type)
settings.auth.username = str(settings_auth_username)
settings.auth.password = hashlib.md5(settings_auth_password.encode('utf-8')).hexdigest()
settings.auth.apikey = request.form.get('settings_auth_apikey')
@ -885,15 +841,15 @@ def save_settings():
settings_sonarr_sync_day = request.form.get('settings_sonarr_sync_day')
settings_sonarr_sync_hour = request.form.get('settings_sonarr_sync_hour')
settings.sonarr.ip = text_type(settings_sonarr_ip)
settings.sonarr.port = text_type(settings_sonarr_port)
settings.sonarr.base_url = text_type(settings_sonarr_baseurl)
settings.sonarr.ssl = text_type(settings_sonarr_ssl)
settings.sonarr.apikey = text_type(settings_sonarr_apikey)
settings.sonarr.only_monitored = text_type(settings_sonarr_only_monitored)
settings.sonarr.full_update = text_type(settings_sonarr_sync)
settings.sonarr.full_update_day = text_type(settings_sonarr_sync_day)
settings.sonarr.full_update_hour = text_type(settings_sonarr_sync_hour)
settings.sonarr.ip = str(settings_sonarr_ip)
settings.sonarr.port = str(settings_sonarr_port)
settings.sonarr.base_url = str(settings_sonarr_baseurl)
settings.sonarr.ssl = str(settings_sonarr_ssl)
settings.sonarr.apikey = str(settings_sonarr_apikey)
settings.sonarr.only_monitored = str(settings_sonarr_only_monitored)
settings.sonarr.full_update = str(settings_sonarr_sync)
settings.sonarr.full_update_day = str(settings_sonarr_sync_day)
settings.sonarr.full_update_hour = str(settings_sonarr_sync_hour)
settings_radarr_ip = request.form.get('settings_radarr_ip')
settings_radarr_port = request.form.get('settings_radarr_port')
@ -913,15 +869,15 @@ def save_settings():
settings_radarr_sync_day = request.form.get('settings_radarr_sync_day')
settings_radarr_sync_hour = request.form.get('settings_radarr_sync_hour')
settings.radarr.ip = text_type(settings_radarr_ip)
settings.radarr.port = text_type(settings_radarr_port)
settings.radarr.base_url = text_type(settings_radarr_baseurl)
settings.radarr.ssl = text_type(settings_radarr_ssl)
settings.radarr.apikey = text_type(settings_radarr_apikey)
settings.radarr.only_monitored = text_type(settings_radarr_only_monitored)
settings.radarr.full_update = text_type(settings_radarr_sync)
settings.radarr.full_update_day = text_type(settings_radarr_sync_day)
settings.radarr.full_update_hour = text_type(settings_radarr_sync_hour)
settings.radarr.ip = str(settings_radarr_ip)
settings.radarr.port = str(settings_radarr_port)
settings.radarr.base_url = str(settings_radarr_baseurl)
settings.radarr.ssl = str(settings_radarr_ssl)
settings.radarr.apikey = str(settings_radarr_apikey)
settings.radarr.only_monitored = str(settings_radarr_only_monitored)
settings.radarr.full_update = str(settings_radarr_sync)
settings.radarr.full_update_day = str(settings_radarr_sync_day)
settings.radarr.full_update_hour = str(settings_radarr_sync_hour)
settings_subliminal_providers = request.form.getlist('settings_subliminal_providers')
settings.general.enabled_providers = u'' if not settings_subliminal_providers else ','.join(
@ -953,7 +909,7 @@ def save_settings():
settings.addic7ed.username = request.form.get('settings_addic7ed_username')
settings.addic7ed.password = request.form.get('settings_addic7ed_password')
settings.addic7ed.random_agents = text_type(settings_addic7ed_random_agents)
settings.addic7ed.random_agents = str(settings_addic7ed_random_agents)
settings.assrt.token = request.form.get('settings_assrt_token')
settings.legendasdivx.username = request.form.get('settings_legendasdivx_username')
settings.legendasdivx.password = request.form.get('settings_legendasdivx_password')
@ -961,9 +917,9 @@ def save_settings():
settings.legendastv.password = request.form.get('settings_legendastv_password')
settings.opensubtitles.username = request.form.get('settings_opensubtitles_username')
settings.opensubtitles.password = request.form.get('settings_opensubtitles_password')
settings.opensubtitles.vip = text_type(settings_opensubtitles_vip)
settings.opensubtitles.ssl = text_type(settings_opensubtitles_ssl)
settings.opensubtitles.skip_wrong_fps = text_type(settings_opensubtitles_skip_wrong_fps)
settings.opensubtitles.vip = str(settings_opensubtitles_vip)
settings.opensubtitles.ssl = str(settings_opensubtitles_ssl)
settings.opensubtitles.skip_wrong_fps = str(settings_opensubtitles_skip_wrong_fps)
settings.xsubs.username = request.form.get('settings_xsubs_username')
settings.xsubs.password = request.form.get('settings_xsubs_password')
settings.napisy24.username = request.form.get('settings_napisy24_username')
@ -984,44 +940,44 @@ def save_settings():
settings_serie_default_enabled = 'False'
else:
settings_serie_default_enabled = 'True'
settings.general.serie_default_enabled = text_type(settings_serie_default_enabled)
settings.general.serie_default_enabled = str(settings_serie_default_enabled)
settings_serie_default_languages = str(request.form.getlist('settings_serie_default_languages'))
if settings_serie_default_languages == "['None']":
settings_serie_default_languages = 'None'
settings.general.serie_default_language = text_type(settings_serie_default_languages)
settings.general.serie_default_language = str(settings_serie_default_languages)
settings_serie_default_hi = request.form.get('settings_serie_default_hi')
if settings_serie_default_hi is None:
settings_serie_default_hi = 'False'
else:
settings_serie_default_hi = 'True'
settings.general.serie_default_hi = text_type(settings_serie_default_hi)
settings.general.serie_default_hi = str(settings_serie_default_hi)
settings_serie_default_forced = str(request.form.get('settings_serie_default_forced'))
settings.general.serie_default_forced = text_type(settings_serie_default_forced)
settings.general.serie_default_forced = str(settings_serie_default_forced)
settings_movie_default_enabled = request.form.get('settings_movie_default_enabled')
if settings_movie_default_enabled is None:
settings_movie_default_enabled = 'False'
else:
settings_movie_default_enabled = 'True'
settings.general.movie_default_enabled = text_type(settings_movie_default_enabled)
settings.general.movie_default_enabled = str(settings_movie_default_enabled)
settings_movie_default_languages = str(request.form.getlist('settings_movie_default_languages'))
if settings_movie_default_languages == "['None']":
settings_movie_default_languages = 'None'
settings.general.movie_default_language = text_type(settings_movie_default_languages)
settings.general.movie_default_language = str(settings_movie_default_languages)
settings_movie_default_hi = request.form.get('settings_movie_default_hi')
if settings_movie_default_hi is None:
settings_movie_default_hi = 'False'
else:
settings_movie_default_hi = 'True'
settings.general.movie_default_hi = text_type(settings_movie_default_hi)
settings.general.movie_default_hi = str(settings_movie_default_hi)
settings_movie_default_forced = str(request.form.get('settings_movie_default_forced'))
settings.general.movie_default_forced = text_type(settings_movie_default_forced)
settings.general.movie_default_forced = str(settings_movie_default_forced)
with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle:
settings.write(handle)
@ -1113,161 +1069,6 @@ def execute_task(taskid):
return '', 200
@app.route('/remove_subtitles_movie', methods=['POST'])
@login_required
def remove_subtitles_movie():
moviePath = request.form.get('moviePath')
language = request.form.get('language')
subtitlesPath = request.form.get('subtitlesPath')
radarrId = request.form.get('radarrId')
try:
os.remove(subtitlesPath)
result = language_from_alpha3(language) + " subtitles deleted from disk."
history_log_movie(0, radarrId, result, language=alpha2_from_alpha3(language))
except OSError as e:
logging.exception('BAZARR cannot delete subtitles file: ' + subtitlesPath)
store_subtitles_movie(path_replace_reverse_movie(moviePath), moviePath)
@app.route('/get_subtitle_movie', methods=['POST'])
@login_required
def get_subtitle_movie():
ref = request.environ['HTTP_REFERER']
moviePath = request.form.get('moviePath')
sceneName = request.form.get('sceneName')
if sceneName == "null":
sceneName = "None"
language = request.form.get('language')
hi = request.form.get('hi').capitalize()
forced = request.form.get('forced').capitalize()
radarrId = request.form.get('radarrId')
title = request.form.get('title')
providers_list = get_providers()
providers_auth = get_providers_auth()
try:
result = download_subtitle(moviePath, language, hi, forced, providers_list, providers_auth, sceneName, title,
'movie')
if result is not None:
message = result[0]
path = result[1]
forced = result[5]
language_code = result[2] + ":forced" if forced else result[2]
provider = result[3]
score = result[4]
history_log_movie(1, radarrId, message, path, language_code, provider, score)
send_notifications_movie(radarrId, message)
store_subtitles_movie(path, moviePath)
redirect(ref)
except OSError:
pass
@app.route('/manual_search_movie', methods=['POST'])
@login_required
def manual_search_movie_json():
moviePath = request.form.get('moviePath')
sceneName = request.form.get('sceneName')
if sceneName == "null":
sceneName = "None"
language = request.form.get('language')
hi = request.form.get('hi').capitalize()
forced = request.form.get('forced').capitalize()
title = request.form.get('title')
providers_list = get_providers()
providers_auth = get_providers_auth()
data = manual_search(moviePath, language, hi, forced, providers_list, providers_auth, sceneName, title, 'movie')
return dict(data=data)
@app.route('/manual_get_subtitle_movie', methods=['POST'])
@login_required
def manual_get_subtitle_movie():
ref = request.environ['HTTP_REFERER']
moviePath = request.form.get('moviePath')
sceneName = request.form.get('sceneName')
if sceneName == "null":
sceneName = "None"
language = request.form.get('language')
hi = request.form.get('hi').capitalize()
forced = request.form.get('forced').capitalize()
selected_provider = request.form.get('provider')
subtitle = request.form.get('subtitle')
radarrId = request.form.get('radarrId')
title = request.form.get('title')
providers_auth = get_providers_auth()
try:
result = manual_download_subtitle(moviePath, language, hi, forced, subtitle, selected_provider, providers_auth,
sceneName, title, 'movie')
if result is not None:
message = result[0]
path = result[1]
forced = result[5]
language_code = result[2] + ":forced" if forced else result[2]
provider = result[3]
score = result[4]
history_log_movie(2, radarrId, message, path, language_code, provider, score)
send_notifications_movie(radarrId, message)
store_subtitles_movie(path, moviePath)
redirect(ref)
except OSError:
pass
@app.route('/manual_upload_subtitle_movie', methods=['POST'])
@login_required
def perform_manual_upload_subtitle_movie():
ref = request.environ['HTTP_REFERER']
moviePath = request.form.get('moviePath')
sceneName = request.form.get('sceneName')
if sceneName == "null":
sceneName = "None"
language = request.form.get('language')
forced = True if request.form.get('forced') == '1' else False
upload = request.files.get('upload')
radarrId = request.form.get('radarrId')
title = request.form.get('title')
_, ext = os.path.splitext(upload.filename)
if ext not in SUBTITLE_EXTENSIONS:
raise ValueError('A subtitle of an invalid format was uploaded.')
try:
result = manual_upload_subtitle(path=moviePath,
language=language,
forced=forced,
title=title,
scene_name=sceneName,
media_type='series',
subtitle=upload)
if result is not None:
message = result[0]
path = result[1]
language_code = language + ":forced" if forced else language
provider = "manual"
score = 120
history_log_movie(4, radarrId, message, path, language_code, provider, score)
send_notifications_movie(radarrId, message)
store_subtitles_movie(path, moviePath)
redirect(ref)
except OSError:
pass
def configured():
database.execute("UPDATE system SET configured = 1")
@ -1336,7 +1137,7 @@ def api_movies_history():
@login_required
def test_url(protocol, url):
url = six.moves.urllib.parse.unquote(url)
url = unquote(url)
try:
result = requests.get(protocol + "://" + url, allow_redirects=False, verify=False).json()['version']
except:
@ -1349,7 +1150,7 @@ def test_url(protocol, url):
@login_required
def test_notification(protocol, provider):
provider = six.moves.urllib.parse.unquote(provider)
provider = unquote(provider)
apobj = apprise.Apprise()
apobj.add(protocol + "://" + provider)

View File

@ -1,6 +1,5 @@
# coding=utf-8
from __future__ import absolute_import
import apprise
import logging

View File

@ -1,4 +1,3 @@
from __future__ import absolute_import
from collections import deque
import json

View File

@ -1,11 +1,10 @@
# coding=utf-8
from __future__ import absolute_import
from get_episodes import sync_episodes, update_all_episodes
from get_movies import update_movies, update_all_movies
from get_series import update_series
from config import settings
from get_subtitle import wanted_search_missing_subtitles, upgrade_subtitles
from get_subtitle import wanted_search_missing_subtitles_series, wanted_search_missing_subtitles_movies, upgrade_subtitles
from utils import cache_maintenance
from get_args import args
if not args.no_update:
@ -211,10 +210,15 @@ class Scheduler:
id='update_release', name='Update Release Info', replace_existing=True)
def __search_wanted_subtitles_task(self):
if settings.general.getboolean('use_sonarr') or settings.general.getboolean('use_radarr'):
if settings.general.getboolean('use_sonarr'):
self.aps_scheduler.add_job(
wanted_search_missing_subtitles, IntervalTrigger(hours=int(settings.general.wanted_search_frequency)),
max_instances=1, coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles',
wanted_search_missing_subtitles_series, IntervalTrigger(hours=int(settings.general.wanted_search_frequency)),
max_instances=1, coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles_series',
name='Search for wanted Subtitles', replace_existing=True)
if settings.general.getboolean('use_radarr'):
self.aps_scheduler.add_job(
wanted_search_missing_subtitles_movies, IntervalTrigger(hours=int(settings.general.wanted_search_frequency)),
max_instances=1, coalesce=True, misfire_grace_time=15, id='wanted_search_missing_subtitles_movies',
name='Search for wanted Subtitles', replace_existing=True)
def __upgrade_subtitles_task(self):

View File

@ -1,6 +1,5 @@
# coding=utf-8
from __future__ import absolute_import
import os
import time
import platform

View File

@ -3,7 +3,10 @@
{% block title %}Wanted (Movies) - Bazarr{% endblock %}
{% block bcleft %}
<button class="btn btn-outline" id="search_button">
<div><i class="fas fa-search align-top text-themecolor text-center font-20" aria-hidden="true"></i></div>
<div class="align-bottom text-themecolor small text-center">Search All</div>
</button>
{% endblock bcleft %}
{% block bcright %}
@ -61,6 +64,20 @@
]
});
$('#search_button').on('click', function(e){
e.preventDefault();
$.ajax({
url: "{{ url_for('api.searchwantedmovies') }}",
type: 'GET',
beforeSend: function() {
$('#search_button').find("i").addClass('fa-spin');
},
complete: function() {
$('#search_button').find("i").removeClass('fa-spin');
}
});
});
$('#wanted_movies').on('click', '.get_subtitle', function(e){
$(this).tooltip('dispose');
e.preventDefault();

View File

@ -3,7 +3,10 @@
{% block title %}Wanted (Series) - Bazarr{% endblock %}
{% block bcleft %}
<button class="btn btn-outline" id="search_button">
<div><i class="fas fa-search align-top text-themecolor text-center font-20" aria-hidden="true"></i></div>
<div class="align-bottom text-themecolor small text-center">Search All</div>
</button>
{% endblock bcleft %}
{% block bcright %}
@ -65,6 +68,20 @@
]
});
$('#search_button').on('click', function(e){
e.preventDefault();
$.ajax({
url: "{{ url_for('api.searchwantedseries') }}",
type: 'GET',
beforeSend: function() {
$('#search_button').find("i").addClass('fa-spin');
},
complete: function() {
$('#search_button').find("i").removeClass('fa-spin');
}
});
});
$('#wanted_series').on('click', '.get_subtitle', function(e){
$(this).tooltip('dispose');
e.preventDefault();