mirror of
https://github.com/morpheus65535/bazarr.git
synced 2024-09-20 15:35:58 +08:00
Hearing impaired (#1102)
This commit is contained in:
parent
35ee6fb6f6
commit
5658a7a359
123
bazarr/api.py
123
bazarr/api.py
|
@ -506,7 +506,13 @@ class Episodes(Resource):
|
|||
subs[0] = {"name": language_from_alpha2(subtitle[0]),
|
||||
"code2": subtitle[0],
|
||||
"code3": alpha3_from_alpha2(subtitle[0]),
|
||||
"forced": True if len(subtitle) > 1 else False}
|
||||
"forced": False,
|
||||
"hi": False}
|
||||
if len(subtitle) > 1:
|
||||
subs[0].update({
|
||||
"forced": True if subtitle[1] == 'forced' else False,
|
||||
"hi": True if subtitle[1] == 'hi' else False
|
||||
})
|
||||
|
||||
if settings.general.getboolean('embedded_subs_show_desired'):
|
||||
item['subtitles'] = [x for x in item['subtitles'] if
|
||||
|
@ -522,7 +528,13 @@ class Episodes(Resource):
|
|||
item['missing_subtitles'][i] = {"name": language_from_alpha2(subtitle[0]),
|
||||
"code2": subtitle[0],
|
||||
"code3": alpha3_from_alpha2(subtitle[0]),
|
||||
"forced": True if len(subtitle) > 1 else False}
|
||||
"forced": False,
|
||||
"hi": False}
|
||||
if len(subtitle) > 1:
|
||||
item['missing_subtitles'][i].update({
|
||||
"forced": True if subtitle[1] == 'forced' else False,
|
||||
"hi": True if subtitle[1] == 'hi' else False
|
||||
})
|
||||
else:
|
||||
item.update({"missing_subtitles": []})
|
||||
|
||||
|
@ -544,6 +556,7 @@ class EpisodesSubtitlesDelete(Resource):
|
|||
episodePath = request.form.get('episodePath')
|
||||
language = request.form.get('language')
|
||||
forced = request.form.get('forced')
|
||||
hi = request.form.get('hi')
|
||||
subtitlesPath = request.form.get('subtitlesPath')
|
||||
sonarrSeriesId = request.form.get('sonarrSeriesId')
|
||||
sonarrEpisodeId = request.form.get('sonarrEpisodeId')
|
||||
|
@ -551,6 +564,7 @@ class EpisodesSubtitlesDelete(Resource):
|
|||
result = delete_subtitles(media_type='series',
|
||||
language=language,
|
||||
forced=forced,
|
||||
hi=hi,
|
||||
media_path=episodePath,
|
||||
subtitles_path=subtitlesPath,
|
||||
sonarr_series_id=sonarrSeriesId,
|
||||
|
@ -586,7 +600,12 @@ class EpisodesSubtitlesDownload(Resource):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -655,7 +674,12 @@ class EpisodesSubtitlesManualDownload(Resource):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -705,7 +729,10 @@ class EpisodesSubtitlesUpload(Resource):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
subs_path = result[2]
|
||||
language_code = language + ":forced" if forced else language
|
||||
if forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = "manual"
|
||||
score = 360
|
||||
history_log(4, sonarrSeriesId, sonarrEpisodeId, message, path, language_code, provider, score, subtitles_path=subs_path)
|
||||
|
@ -755,7 +782,8 @@ class EpisodesHistory(Resource):
|
|||
item['language'] = {"name": language_from_alpha2(language[0]),
|
||||
"code2": language[0],
|
||||
"code3": alpha3_from_alpha2(language[0]),
|
||||
"forced": True if len(language) > 1 else False}
|
||||
"forced": True if item['language'].endswith(':forced') else False,
|
||||
"hi": True if item['language'].endswith(':hi') else False}
|
||||
if item['score']:
|
||||
item['score'] = str(round((int(item['score']) * 100 / 360), 2)) + "%"
|
||||
|
||||
|
@ -874,7 +902,13 @@ class Movies(Resource):
|
|||
"name": language_from_alpha2(language[0]),
|
||||
"code2": language[0],
|
||||
"code3": alpha3_from_alpha2(language[0]),
|
||||
"forced": True if len(language) > 1 else False}
|
||||
"forced": False,
|
||||
"hi": False}
|
||||
if len(language) > 1:
|
||||
item['subtitles'][i].update({
|
||||
"forced": True if language[1] == 'forced' else False,
|
||||
"hi": True if language[1] == 'hi' else False
|
||||
})
|
||||
|
||||
if settings.general.getboolean('embedded_subs_show_desired'):
|
||||
desired_lang_list = []
|
||||
|
@ -894,7 +928,13 @@ class Movies(Resource):
|
|||
item['missing_subtitles'][i] = {"name": language_from_alpha2(language[0]),
|
||||
"code2": language[0],
|
||||
"code3": alpha3_from_alpha2(language[0]),
|
||||
"forced": True if len(language) > 1 else False}
|
||||
"forced": False,
|
||||
"hi": False}
|
||||
if len(language) > 1:
|
||||
item['missing_subtitles'][i].update({
|
||||
"forced": True if language[1] == 'forced' else False,
|
||||
"hi": True if language[1] == 'hi' else False
|
||||
})
|
||||
else:
|
||||
item.update({"missing_subtitles": []})
|
||||
|
||||
|
@ -1034,12 +1074,14 @@ class MovieSubtitlesDelete(Resource):
|
|||
moviePath = request.form.get('moviePath')
|
||||
language = request.form.get('language')
|
||||
forced = request.form.get('forced')
|
||||
hi = request.form.get('hi')
|
||||
subtitlesPath = request.form.get('subtitlesPath')
|
||||
radarrId = request.form.get('radarrId')
|
||||
|
||||
result = delete_subtitles(media_type='movie',
|
||||
language=language,
|
||||
forced=forced,
|
||||
hi=hi,
|
||||
media_path=moviePath,
|
||||
subtitles_path=subtitlesPath,
|
||||
radarr_id=radarrId)
|
||||
|
@ -1073,7 +1115,12 @@ class MovieSubtitlesDownload(Resource):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -1141,7 +1188,12 @@ class MovieSubtitlesManualDownload(Resource):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -1190,7 +1242,10 @@ class MovieSubtitlesUpload(Resource):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
subs_path = result[2]
|
||||
language_code = language + ":forced" if forced else language
|
||||
if forced:
|
||||
language_code = language + ":forced"
|
||||
else:
|
||||
language_code = language
|
||||
provider = "manual"
|
||||
score = 120
|
||||
history_log_movie(4, radarrId, message, path, language_code, provider, score, subtitles_path=subs_path)
|
||||
|
@ -1240,7 +1295,8 @@ class MovieHistory(Resource):
|
|||
item['language'] = {"name": language_from_alpha2(language[0]),
|
||||
"code2": language[0],
|
||||
"code3": alpha3_from_alpha2(language[0]),
|
||||
"forced": True if len(language) > 1 else False}
|
||||
"forced": True if item['language'].endswith(':forced') else False,
|
||||
"hi": True if item['language'].endswith(':hi') else False}
|
||||
if item['score']:
|
||||
item['score'] = str(round((int(item['score']) * 100 / 120), 2)) + "%"
|
||||
|
||||
|
@ -1371,7 +1427,8 @@ class HistorySeries(Resource):
|
|||
item['language'] = {"name": language_from_alpha2(splitted_language[0]),
|
||||
"code2": splitted_language[0],
|
||||
"code3": alpha3_from_alpha2(splitted_language[0]),
|
||||
"forced": True if len(splitted_language) > 1 else False}
|
||||
"forced": True if item['language'].endswith(':forced') else False,
|
||||
"hi": True if item['language'].endswith(':hi') else False}
|
||||
|
||||
# Make timestamp pretty
|
||||
if item['timestamp']:
|
||||
|
@ -1594,7 +1651,13 @@ class WantedSeries(Resource):
|
|||
item['missing_subtitles'][i] = {"name": language_from_alpha2(splitted_subs[0]),
|
||||
"code2": splitted_subs[0],
|
||||
"code3": alpha3_from_alpha2(splitted_subs[0]),
|
||||
"forced": True if len(splitted_subs) > 1 else False}
|
||||
"forced": False,
|
||||
"hi": False}
|
||||
if len(splitted_subs) > 1:
|
||||
item['missing_subtitles'][i].update({
|
||||
"forced": True if splitted_subs[1] == 'forced' else False,
|
||||
"hi": True if splitted_subs[1] == 'hi' else False
|
||||
})
|
||||
else:
|
||||
item.update({"missing_subtitles": []})
|
||||
|
||||
|
@ -1632,7 +1695,13 @@ class WantedMovies(Resource):
|
|||
item['missing_subtitles'][i] = {"name": language_from_alpha2(splitted_subs[0]),
|
||||
"code2": splitted_subs[0],
|
||||
"code3": alpha3_from_alpha2(splitted_subs[0]),
|
||||
"forced": True if len(splitted_subs) > 1 else False}
|
||||
"forced": False,
|
||||
"hi": False}
|
||||
if len(splitted_subs) > 1:
|
||||
item['missing_subtitles'][i].update({
|
||||
"forced": True if splitted_subs[1] == 'forced' else False,
|
||||
"hi": True if splitted_subs[1] == 'hi' else False
|
||||
})
|
||||
else:
|
||||
item.update({"missing_subtitles": []})
|
||||
|
||||
|
@ -1688,7 +1757,8 @@ class BlacklistSeries(Resource):
|
|||
item['language'] = {"name": language_from_alpha2(language[0]),
|
||||
"code2": language[0],
|
||||
"code3": alpha3_from_alpha2(language[0]),
|
||||
"forced": True if len(language) > 1 else False}
|
||||
"forced": True if item['language'].endswith(':forced') else False,
|
||||
"hi": True if item['language'].endswith(':hi') else False}
|
||||
|
||||
return jsonify(draw=draw, recordsTotal=row_count, recordsFiltered=row_count, data=data)
|
||||
|
||||
|
@ -1702,7 +1772,13 @@ class BlacklistEpisodeSubtitlesAdd(Resource):
|
|||
subs_id = request.form.get('subs_id')
|
||||
language = request.form.get('language')
|
||||
forced = request.form.get('forced')
|
||||
language_str = language + ':forced' if forced == 'true' else language
|
||||
hi = request.form.get('hi')
|
||||
if hi == 'true':
|
||||
language_str = language + ':hi'
|
||||
elif forced == 'true':
|
||||
language_str = language + ':forced'
|
||||
else:
|
||||
language_str = language
|
||||
media_path = request.form.get('video_path')
|
||||
subtitles_path = request.form.get('subtitles_path')
|
||||
|
||||
|
@ -1714,6 +1790,7 @@ class BlacklistEpisodeSubtitlesAdd(Resource):
|
|||
delete_subtitles(media_type='series',
|
||||
language=alpha3_from_alpha2(language),
|
||||
forced=forced,
|
||||
hi=hi,
|
||||
media_path=path_mappings.path_replace(media_path),
|
||||
subtitles_path=path_mappings.path_replace(subtitles_path),
|
||||
sonarr_series_id=sonarr_series_id,
|
||||
|
@ -1766,7 +1843,8 @@ class BlacklistMovies(Resource):
|
|||
item['language'] = {"name": language_from_alpha2(language[0]),
|
||||
"code2": language[0],
|
||||
"code3": alpha3_from_alpha2(language[0]),
|
||||
"forced": True if len(language) > 1 else False}
|
||||
"forced": True if item['language'].endswith(':forced') else False,
|
||||
"hi": True if item['language'].endswith(':hi') else False}
|
||||
|
||||
return jsonify(draw=draw, recordsTotal=row_count, recordsFiltered=row_count, data=data)
|
||||
|
||||
|
@ -1779,7 +1857,13 @@ class BlacklistMovieSubtitlesAdd(Resource):
|
|||
subs_id = request.form.get('subs_id')
|
||||
language = request.form.get('language')
|
||||
forced = request.form.get('forced')
|
||||
language_str = language + ':forced' if forced == 'true' else language
|
||||
hi = request.form.get('hi')
|
||||
if hi == 'true':
|
||||
language_str = language + ':hi'
|
||||
elif forced == 'true':
|
||||
language_str = language + ':forced'
|
||||
else:
|
||||
language_str = language
|
||||
media_path = request.form.get('video_path')
|
||||
subtitles_path = request.form.get('subtitles_path')
|
||||
|
||||
|
@ -1790,6 +1874,7 @@ class BlacklistMovieSubtitlesAdd(Resource):
|
|||
delete_subtitles(media_type='movie',
|
||||
language=alpha3_from_alpha2(language),
|
||||
forced=forced,
|
||||
hi=hi,
|
||||
media_path=path_mappings.path_replace_movie(media_path),
|
||||
subtitles_path=path_mappings.path_replace_movie(subtitles_path),
|
||||
radarr_id=radarr_id)
|
||||
|
|
|
@ -14,8 +14,8 @@ class EmbeddedSubsReader:
|
|||
self.ffprobe = get_binary("ffprobe")
|
||||
|
||||
subtitles_list = []
|
||||
|
||||
if self.ffprobe:
|
||||
toto = False
|
||||
if self.ffprobe and toto:
|
||||
api.initialize({'provider': 'ffmpeg', 'ffmpeg': self.ffprobe})
|
||||
data = api.know(file)
|
||||
|
||||
|
@ -23,9 +23,11 @@ class EmbeddedSubsReader:
|
|||
for detected_language in data['subtitle']:
|
||||
if 'language' in detected_language:
|
||||
language = detected_language['language'].alpha3
|
||||
forced = detected_language['forced'] if 'forced' in detected_language else None
|
||||
forced = detected_language['forced'] if 'forced' in detected_language else False
|
||||
hearing_impaired = detected_language['hearing_impaired'] if 'hearing_impaired' in \
|
||||
detected_language else False
|
||||
codec = detected_language['format'] if 'format' in detected_language else None
|
||||
subtitles_list.append([language, forced, codec])
|
||||
subtitles_list.append([language, forced, hearing_impaired, codec])
|
||||
else:
|
||||
continue
|
||||
else:
|
||||
|
@ -37,7 +39,12 @@ class EmbeddedSubsReader:
|
|||
logging.error('BAZARR cannot analyze this MKV with our built-in MKV parser, you should install ffmpeg: ' + file)
|
||||
else:
|
||||
for subtitle_track in mkv.subtitle_tracks:
|
||||
subtitles_list.append([subtitle_track.language, subtitle_track.forced, subtitle_track.codec_id])
|
||||
hearing_impaired = False
|
||||
if subtitle_track.name:
|
||||
if 'sdh' in subtitle_track.name.lower():
|
||||
hearing_impaired = True
|
||||
subtitles_list.append([subtitle_track.language, subtitle_track.forced, hearing_impaired,
|
||||
subtitle_track.codec_id])
|
||||
|
||||
return subtitles_list
|
||||
|
||||
|
|
|
@ -131,10 +131,14 @@ def download_subtitle(path, language, audio_language, hi, forced, providers, pro
|
|||
lang_obj = Language('por', 'BR')
|
||||
if forced == "True":
|
||||
lang_obj = Language.rebuild(lang_obj, forced=True)
|
||||
if hi == "force HI":
|
||||
lang_obj = Language.rebuild(lang_obj, hi=True)
|
||||
else:
|
||||
lang_obj = Language(l)
|
||||
if forced == "True":
|
||||
lang_obj = Language.rebuild(lang_obj, forced=True)
|
||||
if hi == "force HI":
|
||||
lang_obj = Language.rebuild(lang_obj, hi=True)
|
||||
language_set.add(lang_obj)
|
||||
|
||||
minimum_score = settings.general.minimum_score
|
||||
|
@ -215,14 +219,19 @@ def download_subtitle(path, language, audio_language, hi, forced, providers, pro
|
|||
audio_language_code2 = alpha2_from_language(audio_language)
|
||||
audio_language_code3 = alpha3_from_language(audio_language)
|
||||
downloaded_path = subtitle.storage_path
|
||||
is_forced_string = " forced" if subtitle.language.forced else ""
|
||||
if subtitle.language.hi:
|
||||
modifier_string = " HI"
|
||||
elif subtitle.language.forced:
|
||||
modifier_string = " forced"
|
||||
else:
|
||||
modifier_string = ""
|
||||
logging.debug('BAZARR Subtitles file saved to disk: ' + downloaded_path)
|
||||
if is_upgrade:
|
||||
action = "upgraded"
|
||||
else:
|
||||
action = "downloaded"
|
||||
percent_score = round(subtitle.score * 100 / max_score, 2)
|
||||
message = downloaded_language + is_forced_string + " subtitles " + action + " from " + \
|
||||
message = downloaded_language + modifier_string + " subtitles " + action + " from " + \
|
||||
downloaded_provider + " with a score of " + str(percent_score) + "%."
|
||||
|
||||
if media_type == 'series':
|
||||
|
@ -278,7 +287,7 @@ def download_subtitle(path, language, audio_language, hi, forced, providers, pro
|
|||
track_event(category=downloaded_provider, action=action, label=downloaded_language)
|
||||
|
||||
return message, reversed_path, downloaded_language_code2, downloaded_provider, subtitle.score, \
|
||||
subtitle.language.forced, subtitle.id, reversed_subtitles_path
|
||||
subtitle.language.forced, subtitle.id, reversed_subtitles_path, subtitle.language.hi
|
||||
|
||||
if not saved_any:
|
||||
logging.debug('BAZARR No Subtitles were found for this file: ' + path)
|
||||
|
@ -312,6 +321,7 @@ def manual_search(path, language, hi, forced, providers, providers_auth, sceneNa
|
|||
|
||||
for lang in ast.literal_eval(language):
|
||||
lang = alpha3_from_alpha2(lang)
|
||||
|
||||
if lang == 'pob':
|
||||
lang_obj = Language('por', 'BR')
|
||||
if forced == "True":
|
||||
|
@ -320,8 +330,13 @@ def manual_search(path, language, hi, forced, providers, providers_auth, sceneNa
|
|||
lang_obj = Language(lang)
|
||||
if forced == "True":
|
||||
lang_obj = Language.rebuild(lang_obj, forced=True)
|
||||
|
||||
language_set.add(lang_obj)
|
||||
|
||||
if forced != "True":
|
||||
lang_obj_hi = Language.rebuild(lang_obj, hi=True)
|
||||
language_set.add(lang_obj_hi)
|
||||
|
||||
minimum_score = settings.general.minimum_score
|
||||
minimum_score_movie = settings.general.minimum_score_movie
|
||||
use_postprocessing = settings.general.getboolean('use_postprocessing')
|
||||
|
@ -394,8 +409,8 @@ def manual_search(path, language, hi, forced, providers, providers_auth, sceneNa
|
|||
subtitles_list.append(
|
||||
dict(score=round((score / max_score * 100), 2),
|
||||
orig_score=score,
|
||||
score_without_hash=score_without_hash,
|
||||
language=str(s.language), hearing_impaired=str(s.hearing_impaired),
|
||||
score_without_hash=score_without_hash, forced=str(s.language.forced),
|
||||
language=str(s.language.basename), hearing_impaired=str(s.hearing_impaired),
|
||||
provider=s.provider_name,
|
||||
subtitle=codecs.encode(pickle.dumps(s.make_picklable()), "base64").decode(),
|
||||
url=s.page_link, matches=list(matches), dont_matches=list(not_matched),
|
||||
|
@ -477,8 +492,13 @@ def manual_download_subtitle(path, language, audio_language, hi, forced, subtitl
|
|||
audio_language_code3 = alpha3_from_language(audio_language)
|
||||
downloaded_path = saved_subtitle.storage_path
|
||||
logging.debug('BAZARR Subtitles file saved to disk: ' + downloaded_path)
|
||||
is_forced_string = " forced" if subtitle.language.forced else ""
|
||||
message = downloaded_language + is_forced_string + " subtitles downloaded from " + \
|
||||
if subtitle.language.hi:
|
||||
modifier_string = " HI"
|
||||
elif subtitle.language.forced:
|
||||
modifier_string = " forced"
|
||||
else:
|
||||
modifier_string = ""
|
||||
message = downloaded_language + modifier_string + " subtitles downloaded from " + \
|
||||
downloaded_provider + " with a score of " + str(score) + "% using manual search."
|
||||
|
||||
if media_type == 'series':
|
||||
|
@ -533,7 +553,7 @@ def manual_download_subtitle(path, language, audio_language, hi, forced, subtitl
|
|||
label=downloaded_language)
|
||||
|
||||
return message, reversed_path, downloaded_language_code2, downloaded_provider, subtitle.score, \
|
||||
subtitle.language.forced, subtitle.id, reversed_subtitles_path
|
||||
subtitle.language.forced, subtitle.id, reversed_subtitles_path, subtitle.language.hi
|
||||
else:
|
||||
logging.error(
|
||||
"BAZARR Tried to manually download a Subtitles for file: " + path + " but we weren't able to do (probably throttled by " + str(
|
||||
|
@ -668,7 +688,7 @@ def series_download_subtitles(no):
|
|||
str(alpha3_from_alpha2(language.split(':')[0])),
|
||||
episode['audio_language'],
|
||||
series_details['hearing_impaired'],
|
||||
"True" if len(language.split(':')) > 1 else "False",
|
||||
"True" if language.endswith(':forced') else "False",
|
||||
providers_list,
|
||||
providers_auth,
|
||||
str(episode['scene_name']),
|
||||
|
@ -678,7 +698,12 @@ def series_download_subtitles(no):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -715,7 +740,7 @@ def episode_download_subtitles(no):
|
|||
str(alpha3_from_alpha2(language.split(':')[0])),
|
||||
episode['audio_language'],
|
||||
episode['hearing_impaired'],
|
||||
"True" if len(language.split(':')) > 1 else "False",
|
||||
"True" if language.endswith(':forced') else "False",
|
||||
providers_list,
|
||||
providers_auth,
|
||||
str(episode['scene_name']),
|
||||
|
@ -725,7 +750,12 @@ def episode_download_subtitles(no):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -764,7 +794,7 @@ def movies_download_subtitles(no):
|
|||
str(alpha3_from_alpha2(language.split(':')[0])),
|
||||
movie['audio_language'],
|
||||
movie['hearing_impaired'],
|
||||
"True" if len(language.split(':')) > 1 else "False",
|
||||
"True" if language.endswith(':forced') else "False",
|
||||
providers_list,
|
||||
providers_auth,
|
||||
str(movie['sceneName']),
|
||||
|
@ -774,7 +804,12 @@ def movies_download_subtitles(no):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -823,7 +858,7 @@ def wanted_download_subtitles(path, l, count_episodes):
|
|||
str(alpha3_from_alpha2(language.split(':')[0])),
|
||||
episode['audio_language'],
|
||||
episode['hearing_impaired'],
|
||||
"True" if len(language.split(':')) > 1 else "False",
|
||||
"True" if language.endswith(':forced') else "False",
|
||||
providers_list,
|
||||
providers_auth,
|
||||
str(episode['scene_name']),
|
||||
|
@ -833,7 +868,12 @@ def wanted_download_subtitles(path, l, count_episodes):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -880,7 +920,7 @@ def wanted_download_subtitles_movie(path, l, count_movies):
|
|||
str(alpha3_from_alpha2(language.split(':')[0])),
|
||||
movie['audio_language'],
|
||||
movie['hearing_impaired'],
|
||||
"True" if len(language.split(':')) > 1 else "False",
|
||||
"True" if language.endswith(':forced') else "False",
|
||||
providers_list,
|
||||
providers_auth,
|
||||
str(movie['sceneName']),
|
||||
|
@ -890,7 +930,12 @@ def wanted_download_subtitles_movie(path, l, count_movies):
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
@ -1172,7 +1217,12 @@ def upgrade_subtitles():
|
|||
message = result[0]
|
||||
path = result[1]
|
||||
forced = result[5]
|
||||
language_code = result[2] + ":forced" if forced else result[2]
|
||||
if result[8]:
|
||||
language_code = result[2] + ":hi"
|
||||
elif forced:
|
||||
language_code = result[2] + ":forced"
|
||||
else:
|
||||
language_code = result[2]
|
||||
provider = result[3]
|
||||
score = result[4]
|
||||
subs_id = result[6]
|
||||
|
|
|
@ -4,6 +4,7 @@ import gc
|
|||
import os
|
||||
import logging
|
||||
import ast
|
||||
import re
|
||||
from guess_language import guess_language
|
||||
from subliminal_patch import core, search_external_subtitles
|
||||
from subzero.language import Language
|
||||
|
@ -20,6 +21,7 @@ import chardet
|
|||
gc.enable()
|
||||
|
||||
|
||||
|
||||
def store_subtitles(original_path, reversed_path):
|
||||
logging.debug('BAZARR started subtitles indexing for this file: ' + reversed_path)
|
||||
actual_subtitles = []
|
||||
|
@ -28,7 +30,7 @@ def store_subtitles(original_path, reversed_path):
|
|||
logging.debug("BAZARR is trying to index embedded subtitles.")
|
||||
try:
|
||||
subtitle_languages = embedded_subs_reader.list_languages(reversed_path)
|
||||
for subtitle_language, subtitle_forced, subtitle_codec in subtitle_languages:
|
||||
for subtitle_language, subtitle_forced, subtitle_hi, subtitle_codec in subtitle_languages:
|
||||
try:
|
||||
if (settings.general.getboolean("ignore_pgs_subs") and subtitle_codec.lower() == "pgs") or \
|
||||
(settings.general.getboolean("ignore_vobsub_subs") and subtitle_codec.lower() ==
|
||||
|
@ -40,6 +42,8 @@ def store_subtitles(original_path, reversed_path):
|
|||
lang = str(alpha2_from_alpha3(subtitle_language))
|
||||
if subtitle_forced:
|
||||
lang = lang + ":forced"
|
||||
if subtitle_hi:
|
||||
lang = lang + ":hi"
|
||||
logging.debug("BAZARR embedded subtitles detected: " + lang)
|
||||
actual_subtitles.append([lang, None])
|
||||
except:
|
||||
|
@ -72,12 +76,12 @@ def store_subtitles(original_path, reversed_path):
|
|||
logging.debug("BAZARR external subtitles detected: " + "pb:forced")
|
||||
actual_subtitles.append(
|
||||
[str("pb:forced"), path_mappings.path_replace_reverse(subtitle_path)])
|
||||
elif not language:
|
||||
elif not language.basename:
|
||||
continue
|
||||
elif str(language) != 'und':
|
||||
logging.debug("BAZARR external subtitles detected: " + str(language))
|
||||
actual_subtitles.append(
|
||||
[str(language), path_mappings.path_replace_reverse(subtitle_path)])
|
||||
elif str(language.basename) != 'und':
|
||||
logging.debug("BAZARR external subtitles detected: " + str(language.basename))
|
||||
actual_subtitles.append([str(language.basename + (':hi' if language.hi else '')),
|
||||
path_mappings.path_replace_reverse(subtitle_path)])
|
||||
|
||||
database.execute("UPDATE table_episodes SET subtitles=? WHERE path=?",
|
||||
(str(actual_subtitles), original_path))
|
||||
|
@ -106,7 +110,7 @@ def store_subtitles_movie(original_path, reversed_path):
|
|||
logging.debug("BAZARR is trying to index embedded subtitles.")
|
||||
try:
|
||||
subtitle_languages = embedded_subs_reader.list_languages(reversed_path)
|
||||
for subtitle_language, subtitle_forced, subtitle_codec in subtitle_languages:
|
||||
for subtitle_language, subtitle_forced, subtitle_hi, subtitle_codec in subtitle_languages:
|
||||
try:
|
||||
if (settings.general.getboolean("ignore_pgs_subs") and subtitle_codec.lower() == "pgs") or \
|
||||
(settings.general.getboolean("ignore_vobsub_subs") and subtitle_codec.lower() ==
|
||||
|
@ -118,6 +122,8 @@ def store_subtitles_movie(original_path, reversed_path):
|
|||
lang = str(alpha2_from_alpha3(subtitle_language))
|
||||
if subtitle_forced:
|
||||
lang = lang + ':forced'
|
||||
if subtitle_hi:
|
||||
lang = lang + ':hi'
|
||||
logging.debug("BAZARR embedded subtitles detected: " + lang)
|
||||
actual_subtitles.append([lang, None])
|
||||
except:
|
||||
|
@ -147,11 +153,12 @@ def store_subtitles_movie(original_path, reversed_path):
|
|||
elif str(os.path.splitext(subtitle)[0]).lower().endswith(tuple(brazilian_portuguese_forced)):
|
||||
logging.debug("BAZARR external subtitles detected: " + "pb:forced")
|
||||
actual_subtitles.append([str("pb:forced"), path_mappings.path_replace_reverse_movie(subtitle_path)])
|
||||
elif not language:
|
||||
elif not language.basename:
|
||||
continue
|
||||
elif str(language) != 'und':
|
||||
logging.debug("BAZARR external subtitles detected: " + str(language))
|
||||
actual_subtitles.append([str(language), path_mappings.path_replace_reverse_movie(subtitle_path)])
|
||||
elif str(language.basename) != 'und':
|
||||
logging.debug("BAZARR external subtitles detected: " + str(language.basename))
|
||||
actual_subtitles.append([str(language) + (':hi' if language.hi else ''),
|
||||
path_mappings.path_replace_reverse_movie(subtitle_path)])
|
||||
|
||||
database.execute("UPDATE table_movies SET subtitles=? WHERE path=?",
|
||||
(str(actual_subtitles), original_path))
|
||||
|
@ -179,8 +186,8 @@ def list_missing_subtitles(no=None, epno=None, send_event=True):
|
|||
else:
|
||||
episodes_subtitles_clause = ""
|
||||
episodes_subtitles = database.execute("SELECT table_shows.sonarrSeriesId, table_episodes.sonarrEpisodeId, "
|
||||
"table_episodes.subtitles, table_shows.languages, table_shows.forced "
|
||||
"FROM table_episodes LEFT JOIN table_shows "
|
||||
"table_episodes.subtitles, table_shows.languages, table_shows.forced, "
|
||||
"table_shows.hearing_impaired FROM table_episodes LEFT JOIN table_shows "
|
||||
"on table_episodes.sonarrSeriesId = table_shows.sonarrSeriesId" +
|
||||
episodes_subtitles_clause)
|
||||
if isinstance(episodes_subtitles, str):
|
||||
|
@ -205,8 +212,16 @@ def list_missing_subtitles(no=None, epno=None, send_event=True):
|
|||
actual_subtitles.append(subtitle)
|
||||
if episode_subtitles['languages'] is not None:
|
||||
desired_subtitles = ast.literal_eval(episode_subtitles['languages'])
|
||||
if episode_subtitles['forced'] == "True" and desired_subtitles is not None:
|
||||
for i, desired_subtitle in enumerate(desired_subtitles):
|
||||
if desired_subtitles:
|
||||
desired_subtitles_enum = enumerate(desired_subtitles)
|
||||
else:
|
||||
desired_subtitles_enum = None
|
||||
|
||||
if episode_subtitles['hearing_impaired'] == "True" and desired_subtitles is not None:
|
||||
for i, desired_subtitle in desired_subtitles_enum:
|
||||
desired_subtitles[i] = desired_subtitle + ":hi"
|
||||
elif episode_subtitles['forced'] == "True" and desired_subtitles is not None:
|
||||
for i, desired_subtitle in desired_subtitles_enum:
|
||||
desired_subtitles[i] = desired_subtitle + ":forced"
|
||||
elif episode_subtitles['forced'] == "Both" and desired_subtitles is not None:
|
||||
for desired_subtitle in desired_subtitles:
|
||||
|
@ -226,6 +241,10 @@ def list_missing_subtitles(no=None, epno=None, send_event=True):
|
|||
else:
|
||||
actual_subtitles_list.append(item[0])
|
||||
missing_subtitles = list(set(desired_subtitles) - set(actual_subtitles_list))
|
||||
if episode_subtitles['hearing_impaired'] == "False":
|
||||
for item in missing_subtitles:
|
||||
if item in actual_subtitles_list or (item + ':hi') in actual_subtitles_list:
|
||||
missing_subtitles.remove(item)
|
||||
missing_subtitles_global.append(tuple([str(missing_subtitles), episode_subtitles['sonarrEpisodeId'],
|
||||
episode_subtitles['sonarrSeriesId']]))
|
||||
|
||||
|
@ -245,8 +264,8 @@ def list_missing_subtitles_movies(no=None, send_event=True):
|
|||
else:
|
||||
movies_subtitles_clause = ""
|
||||
|
||||
movies_subtitles = database.execute("SELECT radarrId, subtitles, languages, forced FROM table_movies" +
|
||||
movies_subtitles_clause)
|
||||
movies_subtitles = database.execute("SELECT radarrId, subtitles, languages, forced, hearing_impaired FROM "
|
||||
"table_movies" + movies_subtitles_clause)
|
||||
if isinstance(movies_subtitles, str):
|
||||
logging.error("BAZARR list missing subtitles query to DB returned this instead of rows: " + movies_subtitles)
|
||||
return
|
||||
|
@ -269,8 +288,16 @@ def list_missing_subtitles_movies(no=None, send_event=True):
|
|||
actual_subtitles.append(subtitle)
|
||||
if movie_subtitles['languages'] is not None:
|
||||
desired_subtitles = ast.literal_eval(movie_subtitles['languages'])
|
||||
if movie_subtitles['forced'] == "True" and desired_subtitles is not None:
|
||||
for i, desired_subtitle in enumerate(desired_subtitles):
|
||||
if desired_subtitles:
|
||||
desired_subtitles_enum = enumerate(desired_subtitles)
|
||||
else:
|
||||
desired_subtitles_enum = None
|
||||
|
||||
if movie_subtitles['hearing_impaired'] == "True" and desired_subtitles is not None:
|
||||
for i, desired_subtitle in desired_subtitles_enum:
|
||||
desired_subtitles[i] = desired_subtitle + ":hi"
|
||||
elif movie_subtitles['forced'] == "True" and desired_subtitles is not None:
|
||||
for i, desired_subtitle in desired_subtitles_enum:
|
||||
desired_subtitles[i] = desired_subtitle + ":forced"
|
||||
elif movie_subtitles['forced'] == "Both" and desired_subtitles is not None:
|
||||
for desired_subtitle in desired_subtitles:
|
||||
|
@ -289,6 +316,10 @@ def list_missing_subtitles_movies(no=None, send_event=True):
|
|||
else:
|
||||
actual_subtitles_list.append(item[0])
|
||||
missing_subtitles = list(set(desired_subtitles) - set(actual_subtitles_list))
|
||||
if movie_subtitles['hearing_impaired'] == "False":
|
||||
for item in missing_subtitles:
|
||||
if item in actual_subtitles_list or (item + ':hi') in actual_subtitles_list:
|
||||
missing_subtitles.remove(item)
|
||||
missing_subtitles_global.append(tuple([str(missing_subtitles), movie_subtitles['radarrId']]))
|
||||
|
||||
for missing_subtitles_item in missing_subtitles_global:
|
||||
|
@ -397,4 +428,32 @@ def guess_external_subtitles(dest_folder, subtitles):
|
|||
subtitles[subtitle] = Language.rebuild(Language.fromietf(detected_language))
|
||||
except:
|
||||
pass
|
||||
|
||||
# Detect hearing-impaired external subtitles not identified in filename
|
||||
if not language.hi:
|
||||
subtitle_path = os.path.join(dest_folder, subtitle)
|
||||
|
||||
with open(subtitle_path, 'rb') as f:
|
||||
text = f.read()
|
||||
|
||||
try:
|
||||
guess = chardet.detect(text)
|
||||
logging.debug('BAZARR detected encoding %r', guess)
|
||||
text = text.decode(guess["encoding"])
|
||||
except (UnicodeDecodeError, TypeError):
|
||||
logging.exception("BAZARR subtitles file doesn't seems to be text based. Skipping this file: " +
|
||||
subtitle_path)
|
||||
else:
|
||||
TAG = r"(?:\s*{\\[iusb][0-1]}\s*)*"
|
||||
music = re.compile(r'[-\s>~]*[*¶♫♪]+\s*.+|.+\s*[*¶♫♪]+\s*')
|
||||
caps = re.compile(r'[A-ZÀ-Ž&+]{5,}')
|
||||
brackets = re.compile(r'-?%(t)s["\']*[([][^([)\]]+?(?=[A-zÀ-ž"\'.]{3,})[^([)\]]+[)\]]["\']*[\s:]*%(t)s'
|
||||
% {"t": TAG})
|
||||
|
||||
HI_list = [music, caps, brackets]
|
||||
|
||||
for item in HI_list:
|
||||
if bool(re.search(item, text)):
|
||||
subtitles[subtitle] = Language.rebuild(subtitles[subtitle], hi=True)
|
||||
break
|
||||
return subtitles
|
||||
|
|
|
@ -215,13 +215,20 @@ def notify_radarr(radarr_id):
|
|||
logging.debug('BAZARR notify Radarr')
|
||||
|
||||
|
||||
def delete_subtitles(media_type, language, forced, media_path, subtitles_path, sonarr_series_id=None,
|
||||
def delete_subtitles(media_type, language, forced, hi, media_path, subtitles_path, sonarr_series_id=None,
|
||||
sonarr_episode_id=None, radarr_id=None):
|
||||
if not subtitles_path.endswith('.srt'):
|
||||
logging.error('BAZARR can only delete .srt files.')
|
||||
return False
|
||||
language_log = alpha2_from_alpha3(language) + ':forced' if forced in [True, 'true'] else alpha2_from_alpha3(language)
|
||||
language_string = language_from_alpha3(language) + ' forced' if forced in [True, 'true'] else language_from_alpha3(language)
|
||||
if hi in [True, 'true', 'True']:
|
||||
language_log = alpha2_from_alpha3(language) + ':hi'
|
||||
language_string = language_from_alpha3(language) + ' HI'
|
||||
elif forced in [True, 'true', 'True']:
|
||||
language_log = alpha2_from_alpha3(language) + ':forced'
|
||||
language_string = language_from_alpha3(language) + ' forced'
|
||||
else:
|
||||
language_log = alpha2_from_alpha3(language)
|
||||
language_string = language_from_alpha3(language)
|
||||
result = language_string + " subtitles deleted from disk."
|
||||
|
||||
if media_type == 'series':
|
||||
|
|
|
@ -352,7 +352,7 @@ class SZProviderPool(ProviderPool):
|
|||
|
||||
for s in subtitles:
|
||||
# get the matches
|
||||
if s.language not in languages:
|
||||
if s.language.basename not in languages:
|
||||
logger.debug("%r: Skipping, language not searched for", s)
|
||||
continue
|
||||
|
||||
|
@ -381,12 +381,12 @@ class SZProviderPool(ProviderPool):
|
|||
break
|
||||
|
||||
# stop when all languages are downloaded
|
||||
if set(s.language for s in downloaded_subtitles) == languages:
|
||||
if set(s.language.basename for s in downloaded_subtitles) == languages:
|
||||
logger.debug('All languages downloaded')
|
||||
break
|
||||
|
||||
# check downloaded languages
|
||||
if subtitle.language in set(s.language for s in downloaded_subtitles):
|
||||
if subtitle.language in set(s.language.basename for s in downloaded_subtitles):
|
||||
logger.debug('%r: Skipping subtitle: already downloaded', subtitle.language)
|
||||
continue
|
||||
|
||||
|
@ -615,19 +615,24 @@ def _search_external_subtitles(path, languages=None, only_one=False, scandir_gen
|
|||
subtitles[p] = None
|
||||
continue
|
||||
|
||||
# extract potential forced/normal/default tag
|
||||
# extract potential forced/normal/default/hi tag
|
||||
# fixme: duplicate from subtitlehelpers
|
||||
split_tag = p_root.rsplit('.', 1)
|
||||
adv_tag = None
|
||||
if len(split_tag) > 1:
|
||||
adv_tag = split_tag[1].lower()
|
||||
if adv_tag in ['forced', 'normal', 'default', 'embedded', 'embedded-forced', 'custom']:
|
||||
if adv_tag in ['forced', 'normal', 'default', 'embedded', 'embedded-forced', 'custom', 'hi', 'cc', 'sdh']:
|
||||
p_root = split_tag[0]
|
||||
|
||||
forced = False
|
||||
if adv_tag:
|
||||
forced = "forced" in adv_tag
|
||||
|
||||
hi = False
|
||||
if adv_tag:
|
||||
hi_tag = ["hi", "cc", "sdh"]
|
||||
hi = any(i for i in hi_tag if i in adv_tag)
|
||||
|
||||
# remove possible language code for matching
|
||||
p_root_bare = ENDSWITH_LANGUAGECODE_RE.sub(
|
||||
lambda m: "" if str(m.group(1)).lower() in FULL_LANGUAGE_LIST else m.group(0), p_root)
|
||||
|
@ -649,6 +654,7 @@ def _search_external_subtitles(path, languages=None, only_one=False, scandir_gen
|
|||
try:
|
||||
language = Language.fromietf(language_code)
|
||||
language.forced = forced
|
||||
language.hi = hi
|
||||
except (ValueError, LanguageReverseError):
|
||||
logger.error('Cannot parse language code %r', language_code)
|
||||
language_code = None
|
||||
|
@ -656,7 +662,7 @@ def _search_external_subtitles(path, languages=None, only_one=False, scandir_gen
|
|||
language_code = None
|
||||
|
||||
if not language and not language_code and only_one:
|
||||
language = Language.rebuild(list(languages)[0], forced=forced)
|
||||
language = Language.rebuild(list(languages)[0], forced=forced, hi=hi)
|
||||
|
||||
subtitles[p] = language
|
||||
|
||||
|
@ -801,7 +807,7 @@ def download_best_subtitles(videos, languages, min_score=0, hearing_impaired=Fal
|
|||
return downloaded_subtitles
|
||||
|
||||
|
||||
def get_subtitle_path(video_path, language=None, extension='.srt', forced_tag=False, tags=None):
|
||||
def get_subtitle_path(video_path, language=None, extension='.srt', forced_tag=False, hi_tag=False, tags=None):
|
||||
"""Get the subtitle path using the `video_path` and `language`.
|
||||
|
||||
:param str video_path: path to the video.
|
||||
|
@ -817,6 +823,10 @@ def get_subtitle_path(video_path, language=None, extension='.srt', forced_tag=Fa
|
|||
if forced_tag:
|
||||
tags.append("forced")
|
||||
|
||||
# fixme when we'll be ready to add .hi to filename when saving a subtitles
|
||||
# elif hi_tag:
|
||||
# tags.append("hi")
|
||||
|
||||
if language:
|
||||
subtitle_root += '.' + str(language.basename)
|
||||
|
||||
|
@ -858,13 +868,13 @@ def save_subtitles(file_path, subtitles, single=False, directory=None, chmod=Non
|
|||
continue
|
||||
|
||||
# check language
|
||||
if subtitle.language in set(s.language for s in saved_subtitles):
|
||||
if subtitle.language in set(s.language.basename for s in saved_subtitles):
|
||||
logger.debug('Skipping subtitle %r: language already saved', subtitle)
|
||||
continue
|
||||
|
||||
# create subtitle path
|
||||
subtitle_path = get_subtitle_path(file_path, None if single else subtitle.language,
|
||||
forced_tag=subtitle.language.forced, tags=tags)
|
||||
forced_tag=subtitle.language.forced, hi_tag=subtitle.language.hi, tags=tags)
|
||||
if directory is not None:
|
||||
subtitle_path = os.path.join(directory, os.path.split(subtitle_path)[1])
|
||||
|
||||
|
|
|
@ -63,6 +63,7 @@ class Addic7edProvider(_Addic7edProvider):
|
|||
'heb', 'hrv', 'hun', 'hye', 'ind', 'ita', 'jpn', 'kor', 'mkd', 'msa', 'nld', 'nor', 'pol', 'por', 'ron', 'rus',
|
||||
'slk', 'slv', 'spa', 'sqi', 'srp', 'swe', 'tha', 'tur', 'ukr', 'vie', 'zho'
|
||||
]} | {Language.fromietf(l) for l in ["sr-Latn", "sr-Cyrl"]}
|
||||
languages.update(set(Language.rebuild(l, hi=True) for l in languages))
|
||||
|
||||
USE_ADDICTED_RANDOM_AGENTS = False
|
||||
hearing_impaired_verifiable = True
|
||||
|
@ -381,6 +382,10 @@ class Addic7edProvider(_Addic7edProvider):
|
|||
version = cells[4].text
|
||||
download_link = cells[9].a['href'][1:]
|
||||
|
||||
# set subtitle language to hi if it's hearing_impaired
|
||||
if hearing_impaired:
|
||||
language = Language.rebuild(language, hi=True)
|
||||
|
||||
subtitle = self.subtitle_class(language, hearing_impaired, page_link, series, season, episode, title,
|
||||
year,
|
||||
version, download_link)
|
||||
|
|
|
@ -109,6 +109,7 @@ class OpenSubtitlesProvider(ProviderRetryMixin, _OpenSubtitlesProvider):
|
|||
|
||||
languages = {Language.fromopensubtitles(l) for l in language_converters['szopensubtitles'].codes}
|
||||
languages.update(set(Language.rebuild(l, forced=True) for l in languages))
|
||||
languages.update(set(Language.rebuild(l, hi=True) for l in languages))
|
||||
|
||||
def __init__(self, username=None, password=None, use_tag_search=False, only_foreign=False, also_foreign=False,
|
||||
skip_wrong_fps=True, is_vip=False, use_ssl=True, timeout=15):
|
||||
|
@ -313,6 +314,10 @@ class OpenSubtitlesProvider(ProviderRetryMixin, _OpenSubtitlesProvider):
|
|||
elif (also_foreign or only_foreign) and foreign_parts_only:
|
||||
language = Language.rebuild(language, forced=True)
|
||||
|
||||
# set subtitle language to hi if it's hearing_impaired
|
||||
if hearing_impaired:
|
||||
language = Language.rebuild(language, hi=True)
|
||||
|
||||
if language not in languages:
|
||||
continue
|
||||
|
||||
|
|
|
@ -107,6 +107,7 @@ class PodnapisiProvider(_PodnapisiProvider, ProviderSubtitleArchiveMixin):
|
|||
languages = ({Language('por', 'BR'), Language('srp', script='Latn'), Language('srp', script='Cyrl')} |
|
||||
{Language.fromalpha2(l) for l in language_converters['alpha2'].codes})
|
||||
languages.update(set(Language.rebuild(l, forced=True) for l in languages))
|
||||
languages.update(set(Language.rebuild(l, hi=True) for l in languages))
|
||||
|
||||
server_url = 'https://podnapisi.net/subtitles/'
|
||||
only_foreign = False
|
||||
|
@ -204,6 +205,10 @@ class PodnapisiProvider(_PodnapisiProvider, ProviderSubtitleArchiveMixin):
|
|||
elif also_foreign and foreign:
|
||||
_language = Language.rebuild(_language, forced=True)
|
||||
|
||||
# set subtitle language to hi if it's hearing_impaired
|
||||
if hearing_impaired:
|
||||
_language = Language.rebuild(_language, hi=True)
|
||||
|
||||
if language != _language:
|
||||
continue
|
||||
|
||||
|
|
|
@ -119,6 +119,7 @@ class SubsceneProvider(Provider, ProviderSubtitleArchiveMixin):
|
|||
subtitle_class = SubsceneSubtitle
|
||||
languages = supported_languages
|
||||
languages.update(set(Language.rebuild(l, forced=True) for l in languages))
|
||||
languages.update(set(Language.rebuild(l, hi=True) for l in languages))
|
||||
|
||||
session = None
|
||||
skip_wrong_fps = False
|
||||
|
@ -278,6 +279,10 @@ class SubsceneProvider(Provider, ProviderSubtitleArchiveMixin):
|
|||
if self.only_foreign:
|
||||
subtitle.language = Language.rebuild(subtitle.language, forced=True)
|
||||
|
||||
# set subtitle language to hi if it's hearing_impaired
|
||||
if subtitle.hearing_impaired:
|
||||
subtitle.language = Language.rebuild(subtitle.language, hi=True)
|
||||
|
||||
subtitles.append(subtitle)
|
||||
logger.debug('Found subtitle %r', subtitle)
|
||||
|
||||
|
|
|
@ -95,6 +95,7 @@ class YifySubtitlesProvider(Provider):
|
|||
]
|
||||
|
||||
languages = {Language(l, c) for (_, l, c) in YifyLanguages}
|
||||
languages.update(set(Language.rebuild(l, hi=True) for l in languages))
|
||||
server_urls = ['https://yifysubtitles.org', 'https://www.yifysubtitles.com']
|
||||
video_types = (Movie,)
|
||||
|
||||
|
@ -125,6 +126,11 @@ class YifySubtitlesProvider(Provider):
|
|||
|
||||
_, l, c = next(x for x in self.YifyLanguages if x[0] == sub_lang)
|
||||
lang = Language(l, c)
|
||||
|
||||
# set subtitle language to hi if it's hearing_impaired
|
||||
if hi:
|
||||
lang = Language.rebuild(lang, hi=True)
|
||||
|
||||
if languages & {lang}:
|
||||
return [YifySubtitle(lang, page_link, release, uploader, sub_link, rating, hi)]
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ from pysubs2 import SSAStyle
|
|||
from pysubs2.subrip import parse_tags, MAX_REPRESENTABLE_TIME
|
||||
from pysubs2.time import ms_to_times
|
||||
from subzero.modification import SubtitleModifications
|
||||
from subzero.language import Language
|
||||
from subliminal import Subtitle as Subtitle_
|
||||
from subliminal.subtitle import Episode, Movie, sanitize_release_group, get_equivalent_release_groups
|
||||
from subliminal_patch.utils import sanitize
|
||||
|
@ -62,6 +63,10 @@ class Subtitle(Subtitle_):
|
|||
_is_valid = False
|
||||
|
||||
def __init__(self, language, hearing_impaired=False, page_link=None, encoding=None, mods=None):
|
||||
# set subtitle language to hi if it's hearing_impaired
|
||||
if hearing_impaired:
|
||||
language = Language.rebuild(language, hi=True)
|
||||
|
||||
super(Subtitle, self).__init__(language, hearing_impaired=hearing_impaired, page_link=page_link,
|
||||
encoding=encoding)
|
||||
self.mods = mods
|
||||
|
|
|
@ -62,6 +62,7 @@ def wrap_forced(f):
|
|||
args = args[1:]
|
||||
s = args.pop(0)
|
||||
forced = None
|
||||
hi = None
|
||||
if isinstance(s, (str,)):
|
||||
base, forced = s.split(":") if ":" in s else (s, False)
|
||||
else:
|
||||
|
@ -70,6 +71,7 @@ def wrap_forced(f):
|
|||
instance = f(cls, base, *args, **kwargs)
|
||||
if isinstance(instance, Language):
|
||||
instance.forced = forced == "forced"
|
||||
instance.hi = hi == "hi"
|
||||
return instance
|
||||
|
||||
return inner
|
||||
|
@ -77,16 +79,18 @@ def wrap_forced(f):
|
|||
|
||||
class Language(Language_):
|
||||
forced = False
|
||||
hi = False
|
||||
|
||||
def __init__(self, language, country=None, script=None, unknown=None, forced=False):
|
||||
def __init__(self, language, country=None, script=None, unknown=None, forced=False, hi=False):
|
||||
self.forced = forced
|
||||
self.hi = hi
|
||||
super(Language, self).__init__(language, country=country, script=script, unknown=unknown)
|
||||
|
||||
def __getstate__(self):
|
||||
return self.alpha3, self.country, self.script, self.forced
|
||||
return self.alpha3, self.country, self.script, self.hi, self.forced
|
||||
|
||||
def __setstate__(self, state):
|
||||
self.alpha3, self.country, self.script, self.forced = state
|
||||
def __setstate__(self, forced):
|
||||
self.alpha3, self.country, self.script, self.hi, self.forced = forced
|
||||
|
||||
def __hash__(self):
|
||||
return hash(str(self))
|
||||
|
@ -99,7 +103,8 @@ class Language(Language_):
|
|||
return (self.alpha3 == other.alpha3 and
|
||||
self.country == other.country and
|
||||
self.script == other.script and
|
||||
bool(self.forced) == bool(other.forced))
|
||||
bool(self.forced) == bool(other.forced) and
|
||||
bool(self.hi) == bool(other.hi))
|
||||
|
||||
def __str__(self):
|
||||
return super(Language, self).__str__() + (":forced" if self.forced else "")
|
||||
|
@ -112,12 +117,13 @@ class Language(Language_):
|
|||
ret = super(Language, self).__getattr__(name)
|
||||
if isinstance(ret, Language):
|
||||
ret.forced = self.forced
|
||||
ret.hi = self.hi
|
||||
return ret
|
||||
|
||||
@classmethod
|
||||
def rebuild(cls, instance, **replkw):
|
||||
state = instance.__getstate__()
|
||||
attrs = ("country", "script", "forced")
|
||||
attrs = ("country", "script", "hi", "forced")
|
||||
language = state[0]
|
||||
kwa = dict(list(zip(attrs, state[1:])))
|
||||
kwa.update(replkw)
|
||||
|
|
|
@ -53,7 +53,13 @@
|
|||
{
|
||||
data: 'language',
|
||||
render: function (value) {
|
||||
return value.name + ((value.forced) ? ' forced' : '')
|
||||
var language_string = '';
|
||||
if (value.hi) {
|
||||
language_string = ' HI';
|
||||
} else if (value.forced) {
|
||||
language_string = ' forced';
|
||||
}
|
||||
return value.name + language_string;
|
||||
}
|
||||
},
|
||||
{data: "provider"},
|
||||
|
|
|
@ -57,7 +57,13 @@
|
|||
{
|
||||
data: 'language',
|
||||
render: function (value) {
|
||||
return value.name + ((value.forced) ? ' forced' : '')
|
||||
var language_string = '';
|
||||
if (value.hi) {
|
||||
language_string = ' HI';
|
||||
} else if (value.forced) {
|
||||
language_string = ' forced';
|
||||
}
|
||||
return value.name + language_string;
|
||||
}
|
||||
},
|
||||
{data: "provider"},
|
||||
|
|
|
@ -595,10 +595,18 @@
|
|||
}
|
||||
|
||||
function appendFunc(value) {
|
||||
if (value[1] === null) {
|
||||
languages = languages + '<span class="badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value[0].name + ((value[0].forced) ? ' forced' : '') + '">' + value[0].code2 + ((value[0].forced) ? ':forced' : '') + '</span> ';
|
||||
if (value[0].forced) {
|
||||
var advtag = ':forced';
|
||||
} else if (value[0].hi) {
|
||||
var advtag = ':HI';
|
||||
} else {
|
||||
languages = languages + '<a href="" class="remove_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value[0].name + ((value[0].forced) ? ' forced' : '') + '" data-episodePath="' + data.mapped_path + '" data-language="' + value[0].code3 + '" data-forced="' + value[0].forced + '" data-subtitlesPath="' + value[1] + '" data-sonarrEpisodeId=' + data.sonarrEpisodeId + '>' + value[0].code2 + ((value[0].forced) ? ':forced' : '') + ' <i class="far fa-trash-alt"></i></a> ';
|
||||
var advtag = '';
|
||||
}
|
||||
|
||||
if (value[1] === null) {
|
||||
languages = languages + '<span class="badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value[0].name + advtag + '">' + value[0].code2 + advtag + '</span> ';
|
||||
} else {
|
||||
languages = languages + '<a href="" class="remove_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value[0].name + advtag + '" data-episodePath="' + data.mapped_path + '" data-language="' + value[0].code3 + '" data-forced="' + value[0].forced + '" data-hi="' + value[0].hi + '" data-subtitlesPath="' + value[1] + '" data-sonarrEpisodeId=' + data.sonarrEpisodeId + '>' + value[0].code2 + advtag + ' <i class="far fa-trash-alt"></i></a> ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -615,7 +623,15 @@
|
|||
}
|
||||
|
||||
function appendFunc(value) {
|
||||
languages = languages + '<a href="" class="get_subtitle badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value.name + ((value.forced) ? ' forced' : '') + '" data-episodepath="' + data.mapped_path + '" data-scenename="' + data.scene_name + '" data-title="' + data.title + '" data-language="' + value.code3 + '" data-hi="' + seriesDetails.hearing_impaired + '" data-forced="' + value.forced + '" data-sonarrepisodeid=' + data.sonarrEpisodeId + '>' + value.code2 + ((value.forced) ? ':forced' : '') + ' <i class="fas fa-search"></i></a> ';
|
||||
if (value.forced) {
|
||||
var advtag = ':forced';
|
||||
} else if (value.hi) {
|
||||
var advtag = ':HI';
|
||||
} else {
|
||||
var advtag = '';
|
||||
}
|
||||
|
||||
languages = languages + '<a href="" class="get_subtitle badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value.name + advtag + '" data-episodepath="' + data.mapped_path + '" data-scenename="' + data.scene_name + '" data-title="' + data.title + '" data-language="' + value.code3 + '" data-hi="' + seriesDetails.hearing_impaired + '" data-forced="' + value.forced + '" data-sonarrepisodeid=' + data.sonarrEpisodeId + '>' + value.code2 + advtag + ' <i class="fas fa-search"></i></a> ';
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -661,6 +677,7 @@
|
|||
episodePath: $(this).attr("data-episodePath"),
|
||||
language: $(this).attr("data-language"),
|
||||
forced: $(this).attr("data-forced"),
|
||||
hi: $(this).attr("data-hi"),
|
||||
subtitlesPath: $(this).attr("data-subtitlesPath"),
|
||||
sonarrSeriesId: seriesDetails['sonarrSeriesId'],
|
||||
sonarrEpisodeId: $(this).attr("data-sonarrEpisodeId"),
|
||||
|
@ -768,6 +785,9 @@
|
|||
}
|
||||
|
||||
let text = '<div class="badge badge-secondary" style="margin:1px;">' + lng.toUpperCase() + '</div>';
|
||||
if (data.forced == "True") {
|
||||
text += '<div class="badge badge-dark" style="margin:1px;">Forced</div>';
|
||||
}
|
||||
if (data.hearing_impaired == "True") {
|
||||
text += '<div class="badge badge-dark" style="margin:1px;">HI</div>';
|
||||
}
|
||||
|
@ -1094,7 +1114,13 @@
|
|||
data: 'language',
|
||||
render: function (value) {
|
||||
if (value) {
|
||||
return value.name + ((value.forced) ? ' forced' : '')
|
||||
var language_string = '';
|
||||
if (value.hi) {
|
||||
language_string = ' HI';
|
||||
} else if (value.forced) {
|
||||
language_string = ' forced';
|
||||
}
|
||||
return value.name + language_string;
|
||||
} else {
|
||||
return '<i>undefined</i>'
|
||||
}
|
||||
|
@ -1107,7 +1133,7 @@
|
|||
data: null,
|
||||
render: function (data) {
|
||||
if (data.subs_id && data.subtitles_path && !data.blacklisted) {
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-sonarrSeriesId="' + data.sonarrSeriesId + '" data-sonarrEpisodeId="' + data.sonarrEpisodeId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.video_path + '" data-subtitles_path="' + data.mapped_subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-sonarrSeriesId="' + data.sonarrSeriesId + '" data-sonarrEpisodeId="' + data.sonarrEpisodeId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-hi="' + data.language.hi + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.video_path + '" data-subtitles_path="' + data.mapped_subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
@ -1133,7 +1159,8 @@
|
|||
language: $(this).attr('data-language'),
|
||||
forced: $(this).attr('data-forced'),
|
||||
video_path: $(this).attr('data-video_path'),
|
||||
subtitles_path: $(this).attr('data-subtitles_path')
|
||||
subtitles_path: $(this).attr('data-subtitles_path'),
|
||||
hi: $(this).attr('data-hi')
|
||||
};
|
||||
var cell = $(this).parent();
|
||||
$.ajax({
|
||||
|
|
|
@ -80,7 +80,7 @@
|
|||
data: null,
|
||||
render: function (data) {
|
||||
if (data.subs_id && data.subtitles_path && !data.blacklisted) {
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-radarrid="' + data.radarrId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.video_path + '" data-subtitles_path="' + data.subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-radarrid="' + data.radarrId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-hi="' + data.language.hi + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.video_path + '" data-subtitles_path="' + data.subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
@ -98,6 +98,7 @@
|
|||
subs_id: $(this).attr('data-subs_id'),
|
||||
language: $(this).attr('data-language'),
|
||||
forced: $(this).attr('data-forced'),
|
||||
hi: $(this).attr('data-hi'),
|
||||
video_path: $(this).attr('data-video_path'),
|
||||
subtitles_path: $(this).attr('data-subtitles_path')
|
||||
};
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
data: null,
|
||||
render: function (data) {
|
||||
if (data.subs_id && data.subtitles_path && !data.blacklisted) {
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-sonarrSeriesId="' + data.sonarrSeriesId + '" data-sonarrEpisodeId="' + data.sonarrEpisodeId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.path + '" data-subtitles_path="' + data.mapped_subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-sonarrSeriesId="' + data.sonarrSeriesId + '" data-sonarrEpisodeId="' + data.sonarrEpisodeId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-hi="' + data.language.hi + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.path + '" data-subtitles_path="' + data.mapped_subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
@ -103,6 +103,7 @@
|
|||
subs_id: $(this).attr('data-subs_id'),
|
||||
language: $(this).attr('data-language'),
|
||||
forced: $(this).attr('data-forced'),
|
||||
hi: $(this).attr('data-hi'),
|
||||
video_path: $(this).attr('data-video_path'),
|
||||
subtitles_path: $(this).attr('data-subtitles_path')
|
||||
};
|
||||
|
|
|
@ -520,6 +520,7 @@
|
|||
moviePath: movieDetails['mapped_path'],
|
||||
language: $(this).data("language"),
|
||||
forced: $(this).data("forced"),
|
||||
hi: $(this).data("hi"),
|
||||
subtitlesPath: $(this).data("subtitlespath"),
|
||||
radarrId: movieDetails['radarrId'],
|
||||
tmdbid: movieDetails['tmdbId']
|
||||
|
@ -621,6 +622,9 @@
|
|||
}
|
||||
|
||||
let text = '<div class="badge badge-secondary" style="margin:1px;">' + lng.toUpperCase() + '</div>';
|
||||
if (data.forced == "True") {
|
||||
text += '<div class="badge badge-dark" style="margin:1px;">Forced</div>';
|
||||
}
|
||||
if (data.hearing_impaired == "True") {
|
||||
text += '<div class="badge badge-dark" style="margin:1px;">HI</div>';
|
||||
}
|
||||
|
@ -899,7 +903,13 @@
|
|||
data: 'language',
|
||||
render: function (value) {
|
||||
if (value) {
|
||||
return value.name + ((value.forced) ? ' forced' : '')
|
||||
var language_string = '';
|
||||
if (value.hi) {
|
||||
language_string = ' HI';
|
||||
} else if (value.forced) {
|
||||
language_string = ' forced';
|
||||
}
|
||||
return value.name + language_string;
|
||||
} else {
|
||||
return '<i>undefined</i>'
|
||||
}
|
||||
|
@ -912,7 +922,7 @@
|
|||
data: null,
|
||||
render: function (data) {
|
||||
if (data.subs_id && data.subtitles_path && !data.blacklisted) {
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-radarrid="' + data.radarrId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.video_path + '" data-subtitles_path="' + data.subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
return '<a href="" class="blacklist_subtitles badge badge-secondary" data-toggle="tooltip" data-placement="right" title="Blacklist this subtitles" data-radarrid="' + data.radarrId + '" data-language="' + data.language.code2 + '" data-forced="' + data.language.forced + '" data-hi="' + data.language.hi + '" data-provider="' + data.provider + '" data-subs_id="' + data.subs_id + '" data-video_path="' + data.video_path + '" data-subtitles_path="' + data.subtitles_path + '"><i class="far fa-file-excel"></i></a>';
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
@ -936,6 +946,7 @@
|
|||
subs_id: $(this).attr('data-subs_id'),
|
||||
language: $(this).attr('data-language'),
|
||||
forced: $(this).attr('data-forced'),
|
||||
hi: $(this).attr('data-hi'),
|
||||
video_path: $(this).attr('data-video_path'),
|
||||
subtitles_path: $(this).attr('data-subtitles_path')
|
||||
};
|
||||
|
@ -1237,6 +1248,8 @@
|
|||
function missingAppendFunc(value) {
|
||||
if (value.forced) {
|
||||
missing_languages += '<button class="get_subtitle btn btn-secondary btn-sm" type="button" data-toggle="tooltip" data-placement="right" data-original-title="' + value.name + '" data-language="' + value.code3 + '" data-forced=' + value.forced + '>' + value.code2 + ':forced <i class="fas fa-search"></i></button> ';
|
||||
} else if (value.hi) {
|
||||
missing_languages += '<button class="get_subtitle btn btn-secondary btn-sm" type="button" data-toggle="tooltip" data-placement="right" data-original-title="' + value.name + '" data-language="' + value.code3 + '" data-forced=' + value.forced + '>' + value.code2 + ':HI <i class="fas fa-search"></i></button> ';
|
||||
} else {
|
||||
missing_languages += '<button class="get_subtitle btn btn-secondary btn-sm" type="button" data-toggle="tooltip" data-placement="right" data-original-title="' + value.name + '" data-language="' + value.code3 + '" data-forced=' + value.forced + '>' + value.code2 + ' <i class="fas fa-search"></i></button> ';
|
||||
}
|
||||
|
@ -1283,6 +1296,8 @@
|
|||
"render": function(data) {
|
||||
if (data['forced']) {
|
||||
return '<span class="badge badge-secondary">' + data['name'] + ' forced</span>';
|
||||
} else if (data['hi']) {
|
||||
return '<span class="badge badge-secondary">' + data['name'] + ' HI</span>';
|
||||
} else {
|
||||
return '<span class="badge badge-secondary">' + data['name'] + '</span>';
|
||||
}
|
||||
|
@ -1291,7 +1306,7 @@
|
|||
{ "data" : null,
|
||||
"render": function(data) {
|
||||
if (data['path']) {
|
||||
return '<button type="button" class="remove_subtitles close" aria-label="Close" data-toggle="tooltip" data-placement="right" title="Delete Subtitles File" data-language='+data['code3']+' data-forced='+data['forced']+' data-subtitlesPath="'+data['path']+'"><span aria-hidden="true">×</span></button>';
|
||||
return '<button type="button" class="remove_subtitles close" aria-label="Close" data-toggle="tooltip" data-placement="right" title="Delete Subtitles File" data-language='+data['code3']+' data-forced='+data['forced']+' data-hi='+data['hi']+' data-subtitlesPath="'+data['path']+'"><span aria-hidden="true">×</span></button>';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -59,7 +59,15 @@
|
|||
}
|
||||
|
||||
function appendFunc(value) {
|
||||
languages = languages + '<a href="" class="get_subtitle badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value.name + ((value.forced) ? ' forced' : '') + '" data-moviepath="' + data.mapped_path + '" data-scenename="' + data.sceneName + '" data-movietitle="' + data.title + '" data-language="' + value.code3 + '" data-hi="' + data.hearing_impaired + '" data-forced="' + value.forced + '" data-radarrid=' + data.radarrId + '>' + value.code2 + ((value.forced) ? ':forced' : '') + ' <i class="fas fa-search"></i></a> ';
|
||||
if (value.forced) {
|
||||
var advtag = ':forced';
|
||||
} else if (value.hi) {
|
||||
var advtag = ':HI';
|
||||
} else {
|
||||
var advtag = '';
|
||||
}
|
||||
|
||||
languages = languages + '<a href="" class="get_subtitle badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value.name + advtag + '" data-moviepath="' + data.mapped_path + '" data-scenename="' + data.sceneName + '" data-movietitle="' + data.title + '" data-language="' + value.code3 + '" data-hi="' + data.hearing_impaired + '" data-forced="' + value.forced + '" data-radarrid=' + data.radarrId + '>' + value.code2 + advtag + ' <i class="fas fa-search"></i></a> ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,7 +63,15 @@
|
|||
}
|
||||
|
||||
function appendFunc(value) {
|
||||
languages = languages + '<a href="" class="get_subtitle badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value.name + ((value.forced) ? ' forced' : '') + '" data-episodepath="' + data.mapped_path + '" data-scenename="' + data.scene_name + '" data-seriestitle="' + data.seriesTitle + '" data-language="' + value.code3 + '" data-hi="' + data.hearing_impaired + '" data-forced="' + value.forced + '" data-sonarrseriesid=' + data.sonarrSeriesId + ' data-sonarrepisodeid=' + data.sonarrEpisodeId + '>' + value.code2 + ((value.forced) ? ':forced' : '') + ' <i class="fas fa-search"></i></a> ';
|
||||
if (value.forced) {
|
||||
var advtag = ':forced';
|
||||
} else if (value.hi) {
|
||||
var advtag = ':HI';
|
||||
} else {
|
||||
var advtag = '';
|
||||
}
|
||||
|
||||
languages = languages + '<a href="" class="get_subtitle badge badge-secondary" data-toggle="tooltip" data-placement="right" title="' + value.name + advtag + '" data-episodepath="' + data.mapped_path + '" data-scenename="' + data.scene_name + '" data-seriestitle="' + data.seriesTitle + '" data-language="' + value.code3 + '" data-hi="' + data.hearing_impaired + '" data-forced="' + value.forced + '" data-sonarrseriesid=' + data.sonarrSeriesId + ' data-sonarrepisodeid=' + data.sonarrEpisodeId + '>' + value.code2 + advtag + ' <i class="fas fa-search"></i></a> ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue