def update(self): self.path_mapping_series = [ x for x in get_array_from(settings.general.path_mappings) if x[0] != x[1] ] self.path_mapping_movies = [ x for x in get_array_from(settings.general.path_mappings_movie) if x[0] != x[1] ]
def get_exclusion_clause(type): where_clause = '' if type == 'series': tagsList = ast.literal_eval(settings.sonarr.excluded_tags) for tag in tagsList: where_clause += ' AND table_shows.tags NOT LIKE "%\'' + tag + '\'%"' else: tagsList = ast.literal_eval(settings.radarr.excluded_tags) for tag in tagsList: where_clause += ' AND table_movies.tags NOT LIKE "%\'' + tag + '\'%"' if type == 'series': monitoredOnly = settings.sonarr.getboolean('only_monitored') if monitoredOnly: where_clause += ' AND table_episodes.monitored = "True"' else: monitoredOnly = settings.radarr.getboolean('only_monitored') if monitoredOnly: where_clause += ' AND table_movies.monitored = "True"' if type == 'series': typesList = get_array_from(settings.sonarr.excluded_series_types) for type in typesList: where_clause += ' AND table_shows.seriesType != "' + type + '"' return where_clause
def get_exclusion_clause(exclusion_type): where_clause = [] if exclusion_type == 'series': tagsList = ast.literal_eval(settings.sonarr.excluded_tags) for tag in tagsList: where_clause.append(~(TableShows.tags.contains("\'" + tag + "\'"))) else: tagsList = ast.literal_eval(settings.radarr.excluded_tags) for tag in tagsList: where_clause.append(~(TableMovies.tags.contains("\'" + tag + "\'"))) if exclusion_type == 'series': monitoredOnly = settings.sonarr.getboolean('only_monitored') if monitoredOnly: where_clause.append((TableEpisodes.monitored == 'True')) else: monitoredOnly = settings.radarr.getboolean('only_monitored') if monitoredOnly: where_clause.append((TableMovies.monitored == 'True')) if exclusion_type == 'series': typesList = get_array_from(settings.sonarr.excluded_series_types) for item in typesList: where_clause.append((TableShows.seriesType != item)) exclude_season_zero = settings.sonarr.getboolean('exclude_season_zero') if exclude_season_zero: where_clause.append((TableEpisodes.season != 0)) return where_clause
def get_providers(): providers_list = [] existing_providers = provider_registry.names() providers = [ x for x in get_array_from(settings.general.enabled_providers) if x in existing_providers ] for provider in providers: reason, until, throttle_desc = tp.get(provider, (None, None, None)) providers_list.append(provider) if reason: now = datetime.datetime.now() if now < until: logging.debug("Not using %s until %s, because of: %s", provider, until.strftime("%y/%m/%d %H:%M"), reason) providers_list.remove(provider) else: logging.info("Using %s again after %s, (disabled because: %s)", provider, throttle_desc, reason) del tp[provider] set_throttled_providers(str(tp)) # if forced only is enabled: # fixme: Prepared for forced only implementation to remove providers with don't support forced only subtitles # for provider in providers_list: # if provider in PROVIDERS_FORCED_OFF: # providers_list.remove(provider) if not providers_list: providers_list = None return providers_list
def update_throttled_provider(): changed = False existing_providers = provider_registry.names() providers_list = [x for x in get_array_from(settings.general.enabled_providers) if x in existing_providers] for provider in list(tp): if provider not in providers_list: del tp[provider] settings.general.throtteled_providers = str(tp) changed = True reason, until, throttle_desc = tp.get(provider, (None, None, None)) if reason: now = datetime.datetime.now() if now < until: pass else: logging.info("Using %s again after %s, (disabled because: %s)", provider, throttle_desc, reason) del tp[provider] set_throttled_providers(str(tp)) reason, until, throttle_desc = tp.get(provider, (None, None, None)) if reason: now = datetime.datetime.now() if now >= until: logging.info("Using %s again after %s, (disabled because: %s)", provider, throttle_desc, reason) del tp[provider] set_throttled_providers(str(tp)) event_stream(type='badges')
def list_throttled_providers(): update_throttled_provider() throttled_providers = [] providers = get_array_from(settings.general.enabled_providers) for provider in providers: reason, until, throttle_desc = tp.get(provider, (None, None, None)) throttled_providers.append([provider, reason, pretty.date(until)]) return throttled_providers
def list_throttled_providers(): update_throttled_provider() throttled_providers = [] existing_providers = provider_registry.names() providers = [x for x in get_array_from(settings.general.enabled_providers) if x in existing_providers] for provider in providers: reason, until, throttle_desc = tp.get(provider, (None, None, None)) throttled_providers.append([provider, reason, pretty.date(until)]) return throttled_providers
def manual_upload_subtitle(path, language, forced, hi, title, scene_name, media_type, subtitle, audio_language): logging.debug('BAZARR Manually uploading subtitles for this file: ' + path) single = settings.general.getboolean('single_language') use_postprocessing = settings.general.getboolean('use_postprocessing') postprocessing_cmd = settings.general.postprocessing_cmd chmod = int(settings.general.chmod, 8) if not sys.platform.startswith( 'win') and settings.general.getboolean('chmod_enabled') else None language = alpha3_from_alpha2(language) custom = CustomLanguage.from_value(language, "alpha3") if custom is None: lang_obj = Language(language) else: lang_obj = custom.subzero_language() if forced: lang_obj = Language.rebuild(lang_obj, forced=True) sub = Subtitle( lang_obj, mods=get_array_from(settings.general.subzero_mods) ) sub.content = subtitle.read() if not sub.is_valid(): logging.exception('BAZARR Invalid subtitle file: ' + subtitle.filename) sub.mods = None if settings.general.getboolean('utf8_encode'): sub.set_encoding("utf-8") saved_subtitles = [] try: saved_subtitles = save_subtitles(path, [sub], single=single, tags=None, # fixme directory=get_target_folder(path), chmod=chmod, # formats=("srt", "vtt") path_decoder=force_unicode) except Exception: logging.exception('BAZARR Error saving Subtitles file to disk for this file:' + path) return if len(saved_subtitles) < 1: logging.exception('BAZARR Error saving Subtitles file to disk for this file:' + path) return subtitle_path = saved_subtitles[0].storage_path if hi: modifier_string = " HI" elif forced: modifier_string = " forced" else: modifier_string = "" message = language_from_alpha3(language) + modifier_string + " Subtitles manually uploaded." if hi: modifier_code = ":hi" elif forced: modifier_code = ":forced" else: modifier_code = "" uploaded_language_code3 = language + modifier_code uploaded_language = language_from_alpha3(language) + modifier_string uploaded_language_code2 = alpha2_from_alpha3(language) + modifier_code audio_language_code2 = alpha2_from_language(audio_language) audio_language_code3 = alpha3_from_language(audio_language) if media_type == 'series': episode_metadata = TableEpisodes.select(TableEpisodes.sonarrSeriesId, TableEpisodes.sonarrEpisodeId) \ .where(TableEpisodes.path == path_mappings.path_replace_reverse(path)) \ .dicts() \ .get_or_none() if not episode_metadata: return series_id = episode_metadata['sonarrSeriesId'] episode_id = episode_metadata['sonarrEpisodeId'] sync_subtitles(video_path=path, srt_path=subtitle_path, srt_lang=uploaded_language_code2, media_type=media_type, percent_score=100, sonarr_series_id=episode_metadata['sonarrSeriesId'], forced=forced, sonarr_episode_id=episode_metadata['sonarrEpisodeId']) else: movie_metadata = TableMovies.select(TableMovies.radarrId) \ .where(TableMovies.path == path_mappings.path_replace_reverse_movie(path)) \ .dicts() \ .get_or_none() if not movie_metadata: return series_id = "" episode_id = movie_metadata['radarrId'] sync_subtitles(video_path=path, srt_path=subtitle_path, srt_lang=uploaded_language_code2, media_type=media_type, percent_score=100, radarr_id=movie_metadata['radarrId'], forced=forced) if use_postprocessing: command = pp_replace(postprocessing_cmd, path, subtitle_path, uploaded_language, uploaded_language_code2, uploaded_language_code3, audio_language, audio_language_code2, audio_language_code3, forced, 100, "1", "manual", series_id, episode_id, hi=hi) postprocessing(command, path) if media_type == 'series': reversed_path = path_mappings.path_replace_reverse(path) reversed_subtitles_path = path_mappings.path_replace_reverse(subtitle_path) notify_sonarr(episode_metadata['sonarrSeriesId']) event_stream(type='series', action='update', payload=episode_metadata['sonarrSeriesId']) event_stream(type='episode-wanted', action='delete', payload=episode_metadata['sonarrEpisodeId']) else: reversed_path = path_mappings.path_replace_reverse_movie(path) reversed_subtitles_path = path_mappings.path_replace_reverse_movie(subtitle_path) notify_radarr(movie_metadata['radarrId']) event_stream(type='movie', action='update', payload=movie_metadata['radarrId']) event_stream(type='movie-wanted', action='delete', payload=movie_metadata['radarrId']) return message, reversed_path, reversed_subtitles_path
def manual_download_subtitle(path, audio_language, hi, forced, subtitle, provider, sceneName, title, media_type, profile_id): logging.debug('BAZARR Manually downloading Subtitles for this file: ' + path) if settings.general.getboolean('utf8_encode'): os.environ["SZ_KEEP_ENCODING"] = "" else: os.environ["SZ_KEEP_ENCODING"] = "True" subtitle = pickle.loads(codecs.decode(subtitle.encode(), "base64")) if hi == 'True': subtitle.language.hi = True else: subtitle.language.hi = False if forced == 'True': subtitle.language.forced = True else: subtitle.language.forced = False subtitle.mods = get_array_from(settings.general.subzero_mods) video = get_video(force_unicode(path), title, sceneName, providers={provider}, media_type=media_type) if video: try: if provider: download_subtitles([subtitle], _get_pool(media_type, profile_id)) logging.debug( 'BAZARR Subtitles file downloaded for this file:' + path) else: logging.info("BAZARR All providers are throttled") return None except Exception: logging.exception( 'BAZARR Error downloading Subtitles for this file ' + path) return None else: if not subtitle.is_valid(): logging.exception( 'BAZARR No valid Subtitles file found for this file: ' + path) return try: chmod = int(settings.general.chmod, 8) if not sys.platform.startswith( 'win') and settings.general.getboolean( 'chmod_enabled') else None saved_subtitles = save_subtitles( video.original_path, [subtitle], single=settings.general.getboolean('single_language'), tags=None, # fixme directory=get_target_folder(path), chmod=chmod, # formats=("srt", "vtt") path_decoder=force_unicode) except Exception: logging.exception( 'BAZARR Error saving Subtitles file to disk for this file:' + path) return else: if saved_subtitles: _, max_score, _ = _get_scores(media_type) for saved_subtitle in saved_subtitles: processed_subtitle = process_subtitle( subtitle=saved_subtitle, media_type=media_type, audio_language=audio_language, is_upgrade=False, is_manual=True, path=path, max_score=max_score) if processed_subtitle: return processed_subtitle else: logging.debug( f"BAZARR unable to process this subtitles: {subtitle}" ) continue else: logging.error( "BAZARR Tried to manually download a Subtitles for file: " + path + " but we weren't able to do (probably throttled by " + str(subtitle.provider_name) + ". Please retry later or select a Subtitles from another provider." ) return None subliminal.region.backend.sync() logging.debug('BAZARR Ended manually downloading Subtitles for file: ' + path)
def generate_subtitles(path, languages, audio_language, sceneName, title, media_type, forced_minimum_score=None, is_upgrade=False, profile_id=None): if not languages: return None logging.debug('BAZARR Searching subtitles for this file: ' + path) if settings.general.getboolean('utf8_encode'): os.environ["SZ_KEEP_ENCODING"] = "" else: os.environ["SZ_KEEP_ENCODING"] = "True" pool = _get_pool(media_type, profile_id) providers = pool.providers language_set = _get_language_obj(languages=languages) hi_required = any([x.hi for x in language_set]) forced_required = any([x.forced for x in language_set]) _set_forced_providers(forced_required=forced_required, pool=pool) video = get_video(force_unicode(path), title, sceneName, providers=providers, media_type=media_type) if video: handler = series_score if media_type == "series" else movie_score minimum_score = settings.general.minimum_score minimum_score_movie = settings.general.minimum_score_movie min_score, max_score, scores = _get_scores(media_type, minimum_score_movie, minimum_score) if providers: if forced_minimum_score: min_score = int(forced_minimum_score) + 1 downloaded_subtitles = download_best_subtitles(videos={video}, languages=language_set, pool_instance=pool, min_score=int(min_score), hearing_impaired=hi_required, compute_score=compute_score, throttle_time=None, # fixme score_obj=handler) else: downloaded_subtitles = None logging.info("BAZARR All providers are throttled") return None subz_mods = get_array_from(settings.general.subzero_mods) saved_any = False if downloaded_subtitles: for video, subtitles in downloaded_subtitles.items(): if not subtitles: continue for s in subtitles: s.mods = subz_mods try: fld = get_target_folder(path) chmod = int(settings.general.chmod, 8) if not sys.platform.startswith( 'win') and settings.general.getboolean('chmod_enabled') else None saved_subtitles = save_subtitles(video.original_path, subtitles, single=settings.general.getboolean('single_language'), tags=None, # fixme directory=fld, chmod=chmod, # formats=("srt", "vtt") path_decoder=force_unicode ) except Exception as e: logging.exception( 'BAZARR Error saving Subtitles file to disk for this file:' + path + ': ' + repr(e)) pass else: saved_any = True for subtitle in saved_subtitles: processed_subtitle = process_subtitle(subtitle=subtitle, media_type=media_type, audio_language=audio_language, is_upgrade=is_upgrade, is_manual=False, path=path, max_score=max_score) if not processed_subtitle: logging.debug(f"BAZARR unable to process this subtitles: {subtitle}") continue yield processed_subtitle if not saved_any: logging.debug('BAZARR No Subtitles were found for this file: ' + path) return None subliminal.region.backend.sync() logging.debug('BAZARR Ended searching Subtitles for file: ' + path)