diff --git a/bazarr/app/config.py b/bazarr/app/config.py index bf128c6f8..ecda2829b 100644 --- a/bazarr/app/config.py +++ b/bazarr/app/config.py @@ -290,6 +290,9 @@ class Validator(OriginalValidator): Validator('subsync.subsync_movie_threshold', must_exist=True, default=70, is_type_of=int, gte=0, lte=100), Validator('subsync.debug', must_exist=True, default=False, is_type_of=bool), Validator('subsync.force_audio', must_exist=True, default=False, is_type_of=bool), + Validator('subsync.checker', must_exist=True, default={}, is_type_of=dict), + Validator('subsync.checker.blacklisted_providers', must_exist=True, default=[], is_type_of=list), + Validator('subsync.checker.blacklisted_languages', must_exist=True, default=[], is_type_of=list), # series_scores section Validator('series_scores.hash', must_exist=True, default=359, is_type_of=int), @@ -774,3 +777,31 @@ def configure_proxy_func(): def get_scores(): settings = get_settings() return {"movie": settings["movie_scores"], "episode": settings["series_scores"]} + + +def sync_checker(subtitle): + " This function can be extended with settings. It only takes a Subtitle argument" + + logging.debug("Checker data [%s] for %s", settings.subsync.checker, subtitle) + + bl_providers = settings.subsync.checker.blacklisted_providers + + # TODO + # bl_languages = settings.subsync.checker.blacklisted_languages + + verdicts = set() + + # You can add more inner checkers. The following is a verfy basic one for providers, + # but you can make your own functions, etc to handle more complex stuff. You have + # subtitle data to compare. + + verdicts.add(subtitle.provider_name not in bl_providers) + + met = False not in verdicts + + if met is True: + logging.debug("BAZARR Sync checker passed.") + return True + else: + logging.debug("BAZARR Sync checker not passed. Won't sync.") + return False diff --git a/bazarr/subtitles/processing.py b/bazarr/subtitles/processing.py index 9325d1904..d7c03ca6e 100644 --- a/bazarr/subtitles/processing.py +++ b/bazarr/subtitles/processing.py @@ -3,7 +3,7 @@ import logging -from app.config import settings +from app.config import settings, sync_checker as _defaul_sync_checker from utilities.path_mappings import path_mappings from utilities.post_processing import pp_replace, set_chmod from languages.get_languages import alpha2_from_alpha3, alpha2_from_language, alpha3_from_language, language_from_alpha3 @@ -69,6 +69,9 @@ def process_subtitle(subtitle, media_type, audio_language, path, max_score, is_u message = (f"{downloaded_language}{modifier_string} subtitles {action} from {downloaded_provider} with a score of " f"{percent_score}%.") + sync_checker = _defaul_sync_checker + logging.debug("Sync checker: %s", sync_checker) + if media_type == 'series': episode_metadata = database.execute( select(TableEpisodes.sonarrSeriesId, TableEpisodes.sonarrEpisodeId) @@ -80,12 +83,13 @@ def process_subtitle(subtitle, media_type, audio_language, path, max_score, is_u episode_id = episode_metadata.sonarrEpisodeId from .sync import sync_subtitles - sync_subtitles(video_path=path, srt_path=downloaded_path, - forced=subtitle.language.forced, - srt_lang=downloaded_language_code2, media_type=media_type, - percent_score=percent_score, - sonarr_series_id=episode_metadata.sonarrSeriesId, - sonarr_episode_id=episode_metadata.sonarrEpisodeId) + if sync_checker(subtitle) is True: + sync_subtitles(video_path=path, srt_path=downloaded_path, + forced=subtitle.language.forced, + srt_lang=downloaded_language_code2, media_type=media_type, + percent_score=percent_score, + sonarr_series_id=episode_metadata.sonarrSeriesId, + sonarr_episode_id=episode_metadata.sonarrEpisodeId) else: movie_metadata = database.execute( select(TableMovies.radarrId) @@ -97,11 +101,12 @@ def process_subtitle(subtitle, media_type, audio_language, path, max_score, is_u episode_id = movie_metadata.radarrId from .sync import sync_subtitles - sync_subtitles(video_path=path, srt_path=downloaded_path, - forced=subtitle.language.forced, - srt_lang=downloaded_language_code2, media_type=media_type, - percent_score=percent_score, - radarr_id=movie_metadata.radarrId) + if sync_checker(subtitle) is True: + sync_subtitles(video_path=path, srt_path=downloaded_path, + forced=subtitle.language.forced, + srt_lang=downloaded_language_code2, media_type=media_type, + percent_score=percent_score, + radarr_id=movie_metadata.radarrId) if use_postprocessing is True: command = pp_replace(postprocessing_cmd, path, downloaded_path, downloaded_language, downloaded_language_code2,