mirror of
https://github.com/morpheus65535/bazarr.git
synced 2026-04-21 06:37:47 -04:00
Fixed file permission is not applied to translated subtitles and other related issues #3239
This commit is contained in:
@@ -147,6 +147,7 @@ class Subtitles(Resource):
|
||||
|
||||
if action == 'sync':
|
||||
try:
|
||||
postprocess_callback = lambda: postprocess_subtitles(subtitles_path, video_path, media_type, metadata, id)
|
||||
sync_subtitles(video_path=video_path, srt_path=subtitles_path, srt_lang=language, hi=hi, forced=forced,
|
||||
percent_score=0, # make sure to always sync when requested manually
|
||||
reference=args.get('reference') if args.get('reference') not in empty_values else
|
||||
@@ -160,6 +161,7 @@ class Subtitles(Resource):
|
||||
sonarr_episode_id=id if media_type == "episode" else None,
|
||||
radarr_id=id if media_type == "movie" else None,
|
||||
force_sync=True,
|
||||
callback=postprocess_callback
|
||||
)
|
||||
except OSError:
|
||||
return 'Unable to edit subtitles file. Check logs.', 409
|
||||
@@ -185,16 +187,13 @@ class Subtitles(Resource):
|
||||
return 'Invalid source language code', 400
|
||||
|
||||
try:
|
||||
result = translate_subtitles_file(video_path=video_path, source_srt_file=subtitles_path,
|
||||
translate_subtitles_file(video_path=video_path, source_srt_file=subtitles_path,
|
||||
from_lang=from_language, to_lang=dest_language, forced=forced, hi=hi,
|
||||
media_type="series" if media_type == "episode" else "movies",
|
||||
sonarr_series_id=metadata.sonarrSeriesId if media_type == "episode" else None,
|
||||
sonarr_episode_id=id,
|
||||
radarr_id=id)
|
||||
if isinstance(result, str):
|
||||
subtitles_path = result
|
||||
elif result is False:
|
||||
return 'Translation failed. Check logs for more details.', 502
|
||||
radarr_id=id,
|
||||
metadata=metadata)
|
||||
|
||||
except OSError:
|
||||
return 'Unable to edit subtitles file. Check logs.', 409
|
||||
@@ -202,33 +201,35 @@ class Subtitles(Resource):
|
||||
try:
|
||||
subtitles_apply_mods(language=language, subtitle_path=subtitles_path, mods=[action],
|
||||
video_path=video_path)
|
||||
postprocess_subtitles(subtitles_path, video_path, media_type, metadata, id)
|
||||
except OSError:
|
||||
return 'Unable to edit subtitles file. Check logs.', 409
|
||||
|
||||
# apply chmod if required
|
||||
chmod = int(settings.general.chmod, 8) if not sys.platform.startswith(
|
||||
'win') and settings.general.chmod_enabled else None
|
||||
if chmod:
|
||||
os.chmod(subtitles_path, chmod)
|
||||
|
||||
if media_type == 'episode':
|
||||
store_subtitles(path_mappings.path_replace_reverse(video_path), video_path)
|
||||
event_stream(type='series', payload=metadata.sonarrSeriesId)
|
||||
event_stream(type='episode', payload=id)
|
||||
|
||||
if settings.general.use_plex and settings.plex.update_series_library:
|
||||
plex_refresh_item(metadata.imdbId, is_movie=False, season=metadata.season,
|
||||
episode=metadata.episode)
|
||||
else:
|
||||
store_subtitles_movie(path_mappings.path_replace_reverse_movie(video_path), video_path)
|
||||
event_stream(type='movie', payload=id)
|
||||
|
||||
if settings.general.use_plex and settings.plex.update_movie_library:
|
||||
plex_refresh_item(metadata.imdbId, is_movie=True)
|
||||
|
||||
return '', 204
|
||||
|
||||
|
||||
def postprocess_subtitles(subtitles_path, video_path, media_type, metadata, id):
|
||||
# apply chmod if required
|
||||
chmod = int(settings.general.chmod, 8) if not sys.platform.startswith('win') and settings.general.chmod_enabled else None
|
||||
if chmod:
|
||||
os.chmod(subtitles_path, chmod)
|
||||
|
||||
if media_type == 'episode':
|
||||
store_subtitles(path_mappings.path_replace_reverse(video_path), video_path)
|
||||
event_stream(type='series', payload=metadata.sonarrSeriesId)
|
||||
event_stream(type='episode', payload=id)
|
||||
|
||||
if settings.general.use_plex and settings.plex.update_series_library:
|
||||
plex_refresh_item(metadata.imdbId, is_movie=False, season=metadata.season,
|
||||
episode=metadata.episode)
|
||||
else:
|
||||
store_subtitles_movie(path_mappings.path_replace_reverse_movie(video_path), video_path)
|
||||
event_stream(type='movie', payload=id)
|
||||
|
||||
if settings.general.use_plex and settings.plex.update_movie_library:
|
||||
plex_refresh_item(metadata.imdbId, is_movie=True)
|
||||
|
||||
|
||||
def subtitles_lang_from_filename(path):
|
||||
split_extensionless_path = os.path.splitext(path.lower())[0].rsplit(".", 2)
|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@ def sync_subtitles(video_path,
|
||||
gss=settings.subsync.gss,
|
||||
no_fix_framerate=settings.subsync.no_fix_framerate,
|
||||
reference=None,
|
||||
force_sync=False):
|
||||
force_sync=False,
|
||||
callback=None):
|
||||
if not settings.subsync.use_subsync and not force_sync:
|
||||
logging.debug('BAZARR automatic syncing is disabled in settings. Skipping sync routine.')
|
||||
return False
|
||||
@@ -66,6 +67,8 @@ def sync_subtitles(video_path,
|
||||
}
|
||||
try:
|
||||
subsync.sync(**sync_kwargs)
|
||||
if callback:
|
||||
callback()
|
||||
except Exception:
|
||||
logging.exception(f'BAZARR an unhandled exception occurs during the synchronization process for this '
|
||||
f'subtitle file: {srt_path}')
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
import logging
|
||||
import os
|
||||
|
||||
|
||||
from subliminal_patch.core import get_subtitle_path
|
||||
from subzero.language import Language
|
||||
|
||||
@@ -15,7 +16,7 @@ from subtitles.indexer.utils import get_external_subtitles_path
|
||||
|
||||
|
||||
def translate_subtitles_file(video_path, source_srt_file, from_lang, to_lang, forced, hi,
|
||||
media_type, sonarr_series_id, sonarr_episode_id, radarr_id, job_id=None):
|
||||
media_type, sonarr_series_id, sonarr_episode_id, radarr_id, metadata, job_id=None):
|
||||
if not job_id:
|
||||
jobs_queue.add_job_from_function(f'Translating from {from_lang.upper()} to {to_lang.upper()} using '
|
||||
f'{settings.translator.translator_type.replace("_", " ").title()}',
|
||||
@@ -69,6 +70,9 @@ def translate_subtitles_file(video_path, source_srt_file, from_lang, to_lang, fo
|
||||
logging.debug(f'Created translator instance: {translator.__class__.__name__}')
|
||||
result = translator.translate(job_id=job_id)
|
||||
logging.debug(f'BAZARR saved translated subtitles to {dest_srt_file}')
|
||||
from api.subtitles.subtitles import postprocess_subtitles
|
||||
# Call postprocess_subtitles after translation
|
||||
postprocess_subtitles(dest_srt_file, video_path, media_type, metadata, sonarr_episode_id if media_type == 'series' else radarr_id)
|
||||
return result
|
||||
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user