mirror of https://github.com/morpheus65535/bazarr
Merge branch 'halali' into development
# Conflicts: # bazarr/get_subtitle.py
This commit is contained in:
commit
db189c7773
|
@ -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'
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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():
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue