Fixed file permission is not applied to translated subtitles and other related issues #3239

This commit is contained in:
JayZed
2026-03-18 22:19:19 -04:00
committed by GitHub
parent 27ea75e053
commit 098d0e55ab
3 changed files with 37 additions and 29 deletions

View File

@@ -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)

View File

@@ -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}')

View File

@@ -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: