mirror of https://github.com/morpheus65535/bazarr
WIP
This commit is contained in:
parent
15a755a645
commit
bfa438df7c
|
@ -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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# coding=utf-8
|
||||
from __future__ import absolute_import
|
||||
import os
|
||||
import logging
|
||||
import json
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# coding=utf-8
|
||||
from __future__ import absolute_import
|
||||
import os
|
||||
|
||||
from simpleconfigparser import simpleconfigparser
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# coding=utf-8
|
||||
from __future__ import absolute_import
|
||||
import os
|
||||
import argparse
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
# coding=utf-8
|
||||
from __future__ import absolute_import
|
||||
import ast
|
||||
import os
|
||||
import re
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
463
bazarr/main.py
463
bazarr/main.py
|
@ -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)
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# coding=utf-8
|
||||
|
||||
from __future__ import absolute_import
|
||||
import apprise
|
||||
import logging
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
from __future__ import absolute_import
|
||||
from collections import deque
|
||||
import json
|
||||
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
# coding=utf-8
|
||||
|
||||
from __future__ import absolute_import
|
||||
import os
|
||||
import time
|
||||
import platform
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue