bazarr/bazarr/subtitles/wanted/movies.py

113 lines
4.1 KiB
Python

# coding=utf-8
# fmt: off
import ast
import logging
import operator
from functools import reduce
from utilities.path_mappings import path_mappings
from subtitles.indexer.movies import store_subtitles_movie
from radarr.history import history_log_movie
from app.notifier import send_notifications_movie
from app.get_providers import get_providers
from app.database import get_exclusion_clause, get_audio_profile_languages, TableMovies, database, update, select
from app.event_handler import event_stream, show_progress, hide_progress
from ..adaptive_searching import is_search_active, updateFailedAttempts
from ..download import generate_subtitles
def _wanted_movie(movie):
audio_language_list = get_audio_profile_languages(movie.audio_language)
if len(audio_language_list) > 0:
audio_language = audio_language_list[0]['name']
else:
audio_language = 'None'
languages = []
for language in ast.literal_eval(movie.missing_subtitles):
if is_search_active(desired_language=language, attempt_string=movie.failedAttempts):
database.execute(
update(TableMovies)
.values(failedAttempts=updateFailedAttempts(desired_language=language,
attempt_string=movie.failedAttempts))
.where(TableMovies.radarrId == movie.radarrId))
hi_ = "True" if language.endswith(':hi') else "False"
forced_ = "True" if language.endswith(':forced') else "False"
languages.append((language.split(":")[0], hi_, forced_))
else:
logging.info(f"BAZARR Search is throttled by adaptive search for this movie {movie.path} and "
f"language: {language}")
for result in generate_subtitles(path_mappings.path_replace_movie(movie.path),
languages,
audio_language,
str(movie.sceneName),
movie.title,
'movie',
check_if_still_required=True):
if result:
store_subtitles_movie(movie.path, path_mappings.path_replace_movie(movie.path))
history_log_movie(1, movie.radarrId, result)
event_stream(type='movie-wanted', action='delete', payload=movie.radarrId)
send_notifications_movie(movie.radarrId, result.message)
def wanted_download_subtitles_movie(radarr_id):
movies_details = database.execute(
select(TableMovies.path,
TableMovies.missing_subtitles,
TableMovies.radarrId,
TableMovies.audio_language,
TableMovies.sceneName,
TableMovies.failedAttempts,
TableMovies.title)
.where(TableMovies.radarrId == radarr_id)) \
.all()
for movie in movies_details:
providers_list = get_providers()
if providers_list:
_wanted_movie(movie)
else:
logging.info("BAZARR All providers are throttled")
break
def wanted_search_missing_subtitles_movies():
conditions = [(TableMovies.missing_subtitles != '[]')]
conditions += get_exclusion_clause('movie')
movies = database.execute(
select(TableMovies.radarrId,
TableMovies.tags,
TableMovies.monitored,
TableMovies.title)
.where(reduce(operator.and_, conditions))) \
.all()
count_movies = len(movies)
for i, movie in enumerate(movies):
show_progress(id='wanted_movies_progress',
header='Searching subtitles...',
name=movie.title,
value=i,
count=count_movies)
providers = get_providers()
if providers:
wanted_download_subtitles_movie(movie.radarrId)
else:
logging.info("BAZARR All providers are throttled")
break
hide_progress(id='wanted_movies_progress')
logging.info('BAZARR Finished searching for missing Movies Subtitles. Check History for more information.')