diff --git a/bazarr/event_handler.py b/bazarr/event_handler.py index 5c7d54691..c50abe72a 100644 --- a/bazarr/event_handler.py +++ b/bazarr/event_handler.py @@ -23,9 +23,9 @@ def show_message(msg): event_stream(type="message", payload=msg) -def show_progress(name, percent): - event_stream(type="progress", payload={"name": name, "percent": percent}) +def show_progress(id, name, value, count): + event_stream(type="progress", payload={"id": id, "name": name, "value": value, "count": count}) -def hide_progress(name): - event_stream(type="progress", action="delete", payload={"name": name, "percent": 0}) +def hide_progress(id, delay=3): + event_stream(type="progress", action="delete", payload={"id": id, "delay": delay}) diff --git a/bazarr/get_episodes.py b/bazarr/get_episodes.py index 850ca9d12..c0eaf3a7e 100644 --- a/bazarr/get_episodes.py +++ b/bazarr/get_episodes.py @@ -9,7 +9,7 @@ from config import settings, url_sonarr from helper import path_mappings from list_subtitles import store_subtitles, series_full_scan_subtitles from get_subtitle import episode_download_subtitles -from event_handler import event_stream +from event_handler import event_stream, show_progress, hide_progress headers = {"User-Agent": os.environ["SZ_USER_AGENT"]} @@ -36,7 +36,13 @@ def sync_episodes(): # Get sonarrId for each series from database seriesIdList = get_series_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr) - for seriesId in seriesIdList: + series_count = len(seriesIdList) + for i, seriesId in enumerate(seriesIdList, 1): + show_progress(id='episodes_progress', + name='Syncing episodes of {}...'.format(seriesId['title']), + value=i, + count=series_count) + # Get episodes data for a series from Sonarr episodes = get_episodes_from_sonarr_api(url=url_sonarr(), apikey_sonarr=apikey_sonarr, series_id=seriesId['sonarrSeriesId']) @@ -57,6 +63,8 @@ def sync_episodes(): else: episodes_to_add.append(episodeParser(episode)) + hide_progress(id='episodes_progress') + # Remove old episodes from DB removed_episodes = list(set(current_episodes_db_list) - set(current_episodes_sonarr)) diff --git a/bazarr/get_movies.py b/bazarr/get_movies.py index 1eb1e02f5..9f7aea8b2 100644 --- a/bazarr/get_movies.py +++ b/bazarr/get_movies.py @@ -12,7 +12,7 @@ from get_rootfolder import check_radarr_rootfolder from get_subtitle import movies_download_subtitles from database import database, dict_converter, get_exclusion_clause -from event_handler import event_stream +from event_handler import event_stream, show_progress, hide_progress headers = {"User-Agent": os.environ["SZ_USER_AGENT"]} @@ -60,7 +60,14 @@ def update_movies(): altered_movies = [] # Build new and updated movies - for movie in movies: + movies_count = len(movies) + for i, movie in enumerate(movies, 1): + show_progress(id='movies_progress', + name='Syncing movies...', + value = i, + count = movies_count) + + if movie['hasFile'] is True: if 'movieFile' in movie: if movie['movieFile']['size'] > 20480: @@ -80,6 +87,8 @@ def update_movies(): movie_default_profile=movie_default_profile, audio_profiles=audio_profiles)) + hide_progress(id='movies_progress') + # Remove old movies from DB removed_movies = list(set(current_movies_db_list) - set(current_movies_radarr)) diff --git a/bazarr/get_series.py b/bazarr/get_series.py index 6dbc96014..a0dea56fc 100644 --- a/bazarr/get_series.py +++ b/bazarr/get_series.py @@ -10,7 +10,7 @@ from get_rootfolder import check_sonarr_rootfolder from database import database, dict_converter from utils import get_sonarr_version from helper import path_mappings -from event_handler import event_stream +from event_handler import event_stream, show_progress, hide_progress headers = {"User-Agent": os.environ["SZ_USER_AGENT"]} @@ -47,7 +47,13 @@ def update_series(): series_to_update = [] series_to_add = [] - for show in series: + series_count = len(series) + for i, show in enumerate(series, 1): + show_progress(id='series_progress', + name='Syncing series...', + value=i, + count=series_count) + # Add shows in Sonarr to current shows list current_shows_sonarr.append(show['id']) @@ -60,6 +66,8 @@ def update_series(): tags_dict=tagsDict, serie_default_profile=serie_default_profile, audio_profiles=audio_profiles)) + hide_progress(id='series_progress') + # Remove old series from DB removed_series = list(set(current_shows_db_list) - set(current_shows_sonarr)) diff --git a/bazarr/get_subtitle.py b/bazarr/get_subtitle.py index bceb1d432..0d08bee0e 100644 --- a/bazarr/get_subtitle.py +++ b/bazarr/get_subtitle.py @@ -33,7 +33,7 @@ from subsyncer import subsync from guessit import guessit from database import database, dict_mapper, get_exclusion_clause, get_profiles_list, get_audio_profile_languages, \ get_desired_languages -from event_handler import event_stream +from event_handler import event_stream, show_progress, hide_progress from embedded_subs_reader import parse_video_metadata from analytics import track_event @@ -761,6 +761,11 @@ def series_download_subtitles(no): for i, episode in enumerate(episodes_details, 1): if providers_list: + show_progress(id='series_search_progress_{}'.format(no), + name='Searching missing subtitles for {}...'.format(episode['title']), + value=i, + count=count_episodes_details) + for language in ast.literal_eval(episode['missing_subtitles']): if language is not None: audio_language_list = get_audio_profile_languages(episode_id=episode['sonarrEpisodeId']) @@ -801,6 +806,8 @@ def series_download_subtitles(no): logging.info("BAZARR All providers are throttled") break + hide_progress(id='series_search_progress_{}'.format(no)) + def episode_download_subtitles(no): episodes_details = database.execute("SELECT table_episodes.path, table_episodes.missing_subtitles, monitored, " @@ -879,6 +886,11 @@ def movies_download_subtitles(no): for i, language in enumerate(ast.literal_eval(movie['missing_subtitles']), 1): if providers_list: + show_progress(id='movie_search_progress_{}'.format(no), + name='Searching missing subtitles for {}...'.format(movie['title']), + value=i, + count=count_movie) + if language is not None: audio_language_list = get_audio_profile_languages(movie_id=movie['radarrId']) if len(audio_language_list) > 0: @@ -917,8 +929,10 @@ def movies_download_subtitles(no): logging.info("BAZARR All providers are throttled") break + hide_progress(id='movie_search_progress_{}'.format(no)) -def wanted_download_subtitles(path, l, count_episodes): + +def wanted_download_subtitles(path): episodes_details = database.execute("SELECT table_episodes.path, table_episodes.missing_subtitles, " "table_episodes.sonarrEpisodeId, table_episodes.sonarrSeriesId, " "table_episodes.audio_language, table_episodes.scene_name," @@ -991,7 +1005,7 @@ def wanted_download_subtitles(path, l, count_episodes): 0]) -def wanted_download_subtitles_movie(path, l, count_movies): +def wanted_download_subtitles_movie(path): movies_details = database.execute( "SELECT path, missing_subtitles, radarrId, audio_language, sceneName, " "failedAttempts, title FROM table_movies WHERE path = ? " @@ -1062,39 +1076,55 @@ def wanted_download_subtitles_movie(path, l, count_movies): def wanted_search_missing_subtitles_series(): episodes = database.execute("SELECT table_episodes.path, table_shows.tags, table_episodes.monitored, " - "table_shows.seriesType FROM table_episodes INNER JOIN table_shows on " - "table_shows.sonarrSeriesId = table_episodes.sonarrSeriesId WHERE missing_subtitles != " - "'[]'" + get_exclusion_clause('series')) + "table_shows.title, table_episodes.season, table_episodes.episode, table_episodes.title" + " as episodeTitle, table_shows.seriesType FROM table_episodes INNER JOIN table_shows on" + " table_shows.sonarrSeriesId = table_episodes.sonarrSeriesId WHERE missing_subtitles !=" + " '[]'" + get_exclusion_clause('series')) # path_replace dict_mapper.path_replace(episodes) count_episodes = len(episodes) for i, episode in enumerate(episodes, 1): + show_progress(id='wanted_episodes_progress', + name='Searching subtitles for {0} - S{1:02d}E{2:02d} - {3}...'.format(episode['title'], + episode['season'], + episode['episode'], + episode['episodeTitle']), + value=i, + count=count_episodes) + providers = get_providers() if providers: - wanted_download_subtitles(episode['path'], i, count_episodes) + wanted_download_subtitles(episode['path']) else: logging.info("BAZARR All providers are throttled") return + hide_progress(id='wanted_episodes_progress') logging.info('BAZARR Finished searching for missing Series Subtitles. Check History for more information.') def wanted_search_missing_subtitles_movies(): - movies = database.execute("SELECT path, tags, monitored FROM table_movies WHERE missing_subtitles != '[]'" + + movies = database.execute("SELECT path, tags, monitored, title FROM table_movies WHERE missing_subtitles != '[]'" + get_exclusion_clause('movie')) # path_replace dict_mapper.path_replace_movie(movies) count_movies = len(movies) for i, movie in enumerate(movies, 1): + show_progress(id='wanted_movies_progress', + name='Searching subtitles for {0}...'.format(movie['title']), + value=i, + count=count_movies) + providers = get_providers() if providers: - wanted_download_subtitles_movie(movie['path'], i, count_movies) + wanted_download_subtitles_movie(movie['path']) else: logging.info("BAZARR All providers are throttled") return + hide_progress(id='wanted_movies_progress') logging.info('BAZARR Finished searching for missing Movies Subtitles. Check History for more information.') @@ -1313,6 +1343,11 @@ def upgrade_subtitles(): if settings.general.getboolean('use_sonarr'): for i, episode in enumerate(episodes_to_upgrade, 1): + show_progress(id='upgrade_episodes_progress', + name='Upgrading subtitles for {0}...'.format(episode['title']), + value=i, + count=count_episode_to_upgrade) + providers = get_providers() if not providers: logging.info("BAZARR All providers are throttled") @@ -1367,8 +1402,15 @@ def upgrade_subtitles(): language_code, provider, score, subs_id, subs_path) send_notifications(episode['sonarrSeriesId'], episode['sonarrEpisodeId'], message) + hide_progress('upgrade_episodes_progress') + if settings.general.getboolean('use_radarr'): for i, movie in enumerate(movies_to_upgrade, 1): + show_progress(id='upgrade_movies_progress', + name='Upgrading subtitles for {0}...'.format(movie['title']), + value=i, + count=count_movie_to_upgrade) + providers = get_providers() if not providers: logging.info("BAZARR All providers are throttled") @@ -1426,6 +1468,8 @@ def upgrade_subtitles(): history_log_movie(3, movie['radarrId'], message, path, language_code, provider, score, subs_id, subs_path) send_notifications_movie(movie['radarrId'], message) + hide_progress(id='upgrade_movies_progress') + logging.info('BAZARR Finished searching for Subtitles to upgrade. Check History for more information.') diff --git a/bazarr/list_subtitles.py b/bazarr/list_subtitles.py index 69cb17251..65fed2f60 100644 --- a/bazarr/list_subtitles.py +++ b/bazarr/list_subtitles.py @@ -15,7 +15,7 @@ from config import settings from helper import path_mappings, get_subtitle_destination_folder from embedded_subs_reader import embedded_subs_reader -from event_handler import event_stream +from event_handler import event_stream, show_progress, hide_progress from charamel import Detector gc.enable() @@ -481,8 +481,15 @@ def list_missing_subtitles_movies(no=None, epno=None, send_event=True): def series_full_scan_subtitles(): episodes = database.execute("SELECT path FROM table_episodes") + count_episodes = len(episodes) for i, episode in enumerate(episodes, 1): + show_progress(id='episodes_disk_scan', + name='Performing a full disk scan for episodes subtitles...', + value=i, + count=count_episodes) store_subtitles(episode['path'], path_mappings.path_replace(episode['path'])) + + hide_progress(id='episodes_disk_scan') gc.collect() @@ -490,9 +497,16 @@ def series_full_scan_subtitles(): def movies_full_scan_subtitles(): movies = database.execute("SELECT path FROM table_movies") + count_movies = len(movies) for i, movie in enumerate(movies, 1): + show_progress(id='movies_disk_scan', + name='Performing a full disk scan for movies subtitles...', + value=i, + count=count_movies) store_subtitles_movie(movie['path'], path_mappings.path_replace_movie(movie['path'])) - + + hide_progress(id='movies_disk_scan') + gc.collect()