Merge branch 'halali' into development

# Conflicts:
#	bazarr/get_subtitle.py
This commit is contained in:
Louis Vézina 2019-04-22 21:13:37 -04:00
commit db189c7773
7 changed files with 95 additions and 56 deletions

View File

@ -50,9 +50,10 @@ def sync_episodes():
# Close database connection
c.close()
for seriesId in seriesIdList:
notifications.write(msg='Getting episodes data for this show: ' + seriesId[1], queue='get_episodes')
seriesIdListLength = len(seriesIdList)
for i, seriesId in enumerate(seriesIdList, 1):
notifications.write(msg='Getting episodes data from Sonarr...', queue='get_episodes', item=i, length=seriesIdListLength)
# Get episodes data for a series from Sonarr
url_sonarr_api_episode = url_sonarr + "/api/episode?seriesId=" + str(seriesId[0]) + "&apikey=" + apikey_sonarr
try:
@ -159,8 +160,6 @@ def sync_episodes():
else:
logging.debug("BAZARR More than 5 episodes were added during this sync then we wont search for subtitles.")
notifications.write(msg='Episodes sync from Sonarr ended.', queue='get_episodes')
def SonarrFormatAudioCodec(audioCodec):
if audioCodec == 'AC-3': return 'AC3'

View File

@ -14,7 +14,6 @@ from get_subtitle import movies_download_subtitles
def update_movies():
notifications.write(msg="Update movies list from Radarr is running...", queue='get_movies')
logging.debug('BAZARR Starting movie sync from Radarr.')
apikey_radarr = settings.radarr.apikey
movie_default_enabled = settings.general.getboolean('movie_default_enabled')
@ -50,9 +49,11 @@ def update_movies():
current_movies_radarr = []
movies_to_update = []
movies_to_add = []
for movie in r.json():
notifications.write(msg="Getting data for this movie: " + movie['title'], queue='get_movies')
moviesIdListLength = len(r.json())
for i, movie in enumerate(r.json(), 1):
notifications.write(msg="Getting movies data from Radarr...", queue='get_movies', item=i,
length=moviesIdListLength)
if movie['hasFile'] is True:
if 'movieFile' in movie:
if movie["path"] != None and movie['movieFile']['relativePath'] != None:
@ -196,8 +197,6 @@ def update_movies():
logging.debug("BAZARR More than 5 movies were added during this sync then we wont search for subtitles.")
logging.debug('BAZARR All movies synced from Radarr into database.')
notifications.write(msg="Update movies list from Radarr is ended.", queue='get_movies')
def get_profile_list():

View File

@ -52,9 +52,10 @@ def update_series():
current_shows_sonarr = []
series_to_update = []
series_to_add = []
for show in r.json():
notifications.write(msg="Getting series data for this show: " + show['title'], queue='get_series')
seriesListLength = len(r.json())
for i, show in enumerate(r.json(), 1):
notifications.write(msg="Getting series data from Sonarr...", queue='get_series', item=i, length=seriesListLength)
try:
overview = unicode(show['overview'])
except:
@ -126,8 +127,6 @@ def update_series():
c.executemany('DELETE FROM table_shows WHERE tvdbId = ?', deleted_items)
db.commit()
db.close()
notifications.write(msg="Update series list from Sonarr is ended.", queue='get_series')
def get_profile_list():

View File

@ -351,7 +351,6 @@ def manual_download_subtitle(path, language, hi, subtitle, provider, providers_a
return None
else:
if not subtitle.is_valid():
notifications.write(msg='No valid subtitles file found for this file: ' + path, queue='get_subtitle')
logging.exception('BAZARR No valid subtitles file found for this file: ' + path)
return
logging.debug('BAZARR Subtitles file downloaded for this file:' + path)
@ -448,10 +447,12 @@ def series_download_subtitles(no):
providers_list = get_providers()
providers_auth = get_providers_auth()
for episode in episodes_details:
count_episodes_details = len(episodes_details)
for i, episode in enumerate(episodes_details, 1):
for language in ast.literal_eval(episode[1]):
if language is not None:
notifications.write(msg='Searching for ' + str(language_from_alpha2(language)) + ' subtitles for this episode: ' + path_replace(episode[0]), queue='get_subtitle')
notifications.write(msg='Searching for series subtitles...', queue='get_subtitle', item=i, length=count_episodes_details)
result = download_subtitle(path_replace(episode[0]), str(alpha3_from_alpha2(language)),
series_details[0], providers_list, providers_auth, str(episode[3]),
series_details[1], 'series')
@ -466,7 +467,8 @@ def series_download_subtitles(no):
send_notifications(no, episode[2], message)
list_missing_subtitles(no)
notifications.write(msg='Searching completed. Please reload the page.', type='success', duration='permanent', button='refresh', queue='get_subtitle')
if count_episodes_details:
notifications.write(msg='Searching completed. Please reload the page.', type='success', duration='permanent', button='refresh', queue='get_subtitle')
def episode_download_subtitles(no):
@ -517,9 +519,11 @@ def movies_download_subtitles(no):
providers_list = get_providers()
providers_auth = get_providers_auth()
for language in ast.literal_eval(movie[1]):
count_movie = len(ast.literal_eval(movie[1]))
for i, language in enumerate(ast.literal_eval(movie[1]), 1):
if language is not None:
notifications.write(msg='Searching for ' + str(language_from_alpha2(language)) + ' subtitles for this movie: ' + path_replace_movie(movie[0]), queue='get_subtitle')
notifications.write(msg='Searching for movies subtitles', queue='get_subtitle', item=i, length=count_movie)
result = download_subtitle(path_replace_movie(movie[0]), str(alpha3_from_alpha2(language)), movie[4],
providers_list, providers_auth, str(movie[3]), movie[5], 'movie')
if result is not None:
@ -533,10 +537,11 @@ def movies_download_subtitles(no):
send_notifications_movie(no, message)
list_missing_subtitles_movies(no)
notifications.write(msg='Searching completed. Please reload the page.', type='success', duration='permanent', button='refresh', queue='get_subtitle')
if count_movie:
notifications.write(msg='Searching completed. Please reload the page.', type='success', duration='permanent', button='refresh', queue='get_subtitle')
def wanted_download_subtitles(path):
def wanted_download_subtitles(path, l, count_episodes):
conn_db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c_db = conn_db.cursor()
episodes_details = c_db.execute(
@ -570,8 +575,7 @@ def wanted_download_subtitles(path):
for i in range(len(attempt)):
if attempt[i][0] == language:
if search_active(attempt[i][1]):
notifications.write(
msg='Searching ' + str(language_from_alpha2(language)) + ' subtitles for this episode: ' + path, queue='get_subtitle')
notifications.write(msg='Searching for series subtitles...', queue='get_subtitle', item=l, length=count_episodes)
result = download_subtitle(path_replace(episode[0]), str(alpha3_from_alpha2(language)),
episode[4], providers_list, providers_auth, str(episode[5]),
episode[7], 'series')
@ -590,7 +594,7 @@ def wanted_download_subtitles(path):
'BAZARR Search is not active for episode ' + episode[0] + ' Language: ' + attempt[i][0])
def wanted_download_subtitles_movie(path):
def wanted_download_subtitles_movie(path, l, count_movies):
conn_db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c_db = conn_db.cursor()
movies_details = c_db.execute(
@ -623,8 +627,7 @@ def wanted_download_subtitles_movie(path):
for i in range(len(attempt)):
if attempt[i][0] == language:
if search_active(attempt[i][1]) is True:
notifications.write(
msg='Searching ' + str(language_from_alpha2(language)) + ' subtitles for this movie: ' + path, queue='get_subtitle')
notifications.write(msg='Searching for movies subtitles...', queue='get_subtitle', item=l, length=count_movies)
result = download_subtitle(path_replace_movie(movie[0]), str(alpha3_from_alpha2(language)),
movie[4], providers_list, providers_auth, str(movie[5]), movie[7],
'movie')
@ -671,18 +674,20 @@ def wanted_search_missing_subtitles():
providers = get_providers()
if settings.general.getboolean('use_sonarr'):
if providers:
for episode in episodes:
wanted_download_subtitles(episode[0])
count_episodes= len(episodes)
for i, episode in enumerate(episodes, 1):
wanted_download_subtitles(episode[0], i, count_episodes)
else:
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle')
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle', duration='long')
logging.info("BAZARR All providers are throttled")
if settings.general.getboolean('use_radarr'):
if providers:
for movie in movies:
wanted_download_subtitles_movie(movie[0])
count_movies = len(movies)
for i, movie in enumerate(movies, 1):
wanted_download_subtitles_movie(movie[0], i, count_movies)
else:
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle')
notifications.write(msg='BAZARR All providers are throttled', queue='get_subtitle', duration='long')
logging.info("BAZARR All providers are throttled")
logging.info('BAZARR Finished searching for missing subtitles. Check histories for more information.')
@ -793,13 +798,13 @@ def upgrade_subtitles():
episodes_to_upgrade = []
if settings.general.getboolean('use_sonarr'):
for episode in episodes_list:
if os.path.exists(path_replace(episode[0])) and int(episode[2]) < 360:
if os.path.exists(path_replace(episode[0])) and int(episode[2]) < 357:
episodes_to_upgrade.append(episode)
movies_to_upgrade = []
if settings.general.getboolean('use_radarr'):
for movie in movies_list:
if os.path.exists(path_replace_movie(movie[0])) and int(movie[2]) < 120:
if os.path.exists(path_replace_movie(movie[0])) and int(movie[2]) < 117:
movies_to_upgrade.append(movie)
providers_list = get_providers()
@ -811,8 +816,8 @@ def upgrade_subtitles():
if settings.general.getboolean('use_sonarr'):
for i, episode in enumerate(episodes_to_upgrade, 1):
if episode[1] in ast.literal_eval(str(episode[9])):
notifications.write(msg='Upgrading series subtitles : ' + str(i) + '/' + str(count_episode_to_upgrade),
queue='get_subtitle', duration='long')
notifications.write(msg='Upgrading series subtitles...',
queue='upgrade_subtitle', item=i, length=count_episode_to_upgrade)
result = download_subtitle(path_replace(episode[0]), str(alpha3_from_alpha2(episode[1])),
episode[3], providers_list, providers_auth, str(episode[4]),
episode[5], 'series', forced_minimum_score=int(episode[2]), is_upgrade=True)
@ -829,8 +834,8 @@ def upgrade_subtitles():
if settings.general.getboolean('use_radarr'):
for i, movie in enumerate(movies_to_upgrade, 1):
if movie[1] in ast.literal_eval(str(movie[8])):
notifications.write(msg='Upgrading movie subtitles : ' + str(i) + '/' + str(count_movie_to_upgrade),
queue='get_subtitle', duration='long')
notifications.write(msg='Upgrading movie subtitles...',
queue='upgrade_subtitle', item=i, length=count_movie_to_upgrade)
result = download_subtitle(path_replace_movie(movie[0]), str(alpha3_from_alpha2(movie[1])),
movie[3], providers_list, providers_auth, str(movie[4]),
movie[5], 'movie', forced_minimum_score=int(movie[2]), is_upgrade=True)

View File

@ -30,7 +30,7 @@ def store_subtitles(file):
logging.debug('BAZARR started subtitles indexing for this file: ' + file)
actual_subtitles = []
if os.path.exists(file):
notifications.write(msg='Analyzing this file for subtitles: ' + file, queue='list_subtitles')
# notifications.write(msg='Analyzing this file for subtitles: ' + file, queue='list_subtitles')
if settings.general.getboolean('use_embedded_subs'):
if os.path.splitext(file)[1] == '.mkv':
logging.debug("BAZARR is trying to index embedded subtitles.")
@ -116,7 +116,7 @@ def store_subtitles_movie(file):
logging.debug('BAZARR started subtitles indexing for this file: ' + file)
actual_subtitles = []
if os.path.exists(file):
notifications.write(msg='Analyzing this file for subtitles: ' + file, queue='list_subtitles')
# notifications.write(msg='Analyzing this file for subtitles: ' + file, queue='list_subtitles')
if settings.general.getboolean('use_embedded_subs'):
if os.path.splitext(file)[1] == '.mkv':
logging.debug("BAZARR is trying to index embedded subtitles.")
@ -298,8 +298,11 @@ def series_full_scan_subtitles():
c_db = conn_db.cursor()
episodes = c_db.execute("SELECT path FROM table_episodes").fetchall()
c_db.close()
count_episodes = len(episodes)
for episode in episodes:
for i, episode in enumerate(episodes, 1):
notifications.write(msg='Updating all episodes subtitles from disk...',
queue='list_subtitles_series', item=i, length=count_episodes)
store_subtitles(path_replace(episode[0]))
gc.collect()
@ -310,8 +313,11 @@ def movies_full_scan_subtitles():
c_db = conn_db.cursor()
movies = c_db.execute("SELECT path FROM table_movies").fetchall()
c_db.close()
count_movies = len(movies)
for movie in movies:
for i, movie in enumerate(movies, 1):
notifications.write(msg='Updating all movies subtitles from disk...',
queue='list_subtitles_movies', item=i, length=count_movies)
store_subtitles_movie(path_replace_movie(movie[0]))
gc.collect()

View File

@ -10,7 +10,7 @@ class Notify:
def __init__(self):
self.queue = deque(maxlen=10)
def write(self, msg, type='info', duration='temporary', button='null', queue='main'):
def write(self, msg, type='info', duration='temporary', button='null', queue='main', item=0, length=0):
"""
:param msg: The message to display.
:type msg: str
@ -19,12 +19,16 @@ class Notify:
:param duration: The duration of the notification that can be: temporary, permanent
:type duration: str
:param button: The kind of button desired that can be: null, refresh, restart
:type duration: str
:type button: str
:param queue: The name of the notification queue to use. Default is 'main'
:type duration: str
:param item: The number of the item for progress bar
:type item: int
:param length: The length of the group of item for progress bar
:type length: int
"""
self.queue.append(json.dumps([msg, type, duration, button, queue]))
self.queue.append(json.dumps([msg, type, duration, button, queue, item, length]))
def read(self):
"""

View File

@ -31,6 +31,14 @@
.searchicon {
color: white !important;
}
.ui.progress .bar>.progress {
right: auto;
left: .5em;
color: black !important;
}
.ui.disabled.progress.notification_progress {
opacity: unset !important;
}
div.disabled { pointer-events: none; }
button.disabled { pointer-events: none; }
@ -324,17 +332,27 @@
var notificationTimeout;
var timeout;
var killer;
var item = {};
var length = {};
function doNotificationsAjax() {
$.ajax({
url: url_notifications,
success: function (data) {
if (data !== "") {
data = JSON.parse(data);
var msg = data[0];
var type = data[1];
var duration = data[2];
var button = data[3];
var queue = data[4];
data = JSON.parse(data);
var msg = data[0];
var type = data[1];
var duration = data[2];
var button = data[3];
var queue = data[4];
var item = data[5];
var length = data[6];
if (length === 0) {
var message = msg;
} else {
var message = msg + '<p><div class="ui disabled progress notification_progress" data-value=' + item + ' data-total=' + length + ' style="margin-bottom: -0.25em"><div class="bar"><div class="progress"></div></div></div>'
}
if (duration === 'temporary') {
timeout = 3000;
@ -357,7 +375,7 @@
}
new Noty({
text: msg,
text: message,
progressBar: false,
animation: {
open: null,
@ -370,8 +388,17 @@
timeout: timeout,
killer: killer,
buttons: button,
force: true
force: false
}).show();
$('.notification_progress').progress({
duration : 0,
autoSuccess: false,
label: 'ratio',
text: {
ratio: '{value} / {total}'
}
});
}
},
complete: function (data) {