Skip to content

Commit 098d0e5

Browse files
authored
Fixed file permission is not applied to translated subtitles and other related issues #3239
1 parent 27ea75e commit 098d0e5

3 files changed

Lines changed: 34 additions & 26 deletions

File tree

bazarr/api/subtitles/subtitles.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ def patch(self):
147147

148148
if action == 'sync':
149149
try:
150+
postprocess_callback = lambda: postprocess_subtitles(subtitles_path, video_path, media_type, metadata, id)
150151
sync_subtitles(video_path=video_path, srt_path=subtitles_path, srt_lang=language, hi=hi, forced=forced,
151152
percent_score=0, # make sure to always sync when requested manually
152153
reference=args.get('reference') if args.get('reference') not in empty_values else
@@ -160,6 +161,7 @@ def patch(self):
160161
sonarr_episode_id=id if media_type == "episode" else None,
161162
radarr_id=id if media_type == "movie" else None,
162163
force_sync=True,
164+
callback=postprocess_callback
163165
)
164166
except OSError:
165167
return 'Unable to edit subtitles file. Check logs.', 409
@@ -185,48 +187,47 @@ def patch(self):
185187
return 'Invalid source language code', 400
186188

187189
try:
188-
result = translate_subtitles_file(video_path=video_path, source_srt_file=subtitles_path,
190+
translate_subtitles_file(video_path=video_path, source_srt_file=subtitles_path,
189191
from_lang=from_language, to_lang=dest_language, forced=forced, hi=hi,
190192
media_type="series" if media_type == "episode" else "movies",
191193
sonarr_series_id=metadata.sonarrSeriesId if media_type == "episode" else None,
192194
sonarr_episode_id=id,
193-
radarr_id=id)
194-
if isinstance(result, str):
195-
subtitles_path = result
196-
elif result is False:
197-
return 'Translation failed. Check logs for more details.', 502
195+
radarr_id=id,
196+
metadata=metadata)
198197

199198
except OSError:
200199
return 'Unable to edit subtitles file. Check logs.', 409
201200
else:
202201
try:
203202
subtitles_apply_mods(language=language, subtitle_path=subtitles_path, mods=[action],
204203
video_path=video_path)
204+
postprocess_subtitles(subtitles_path, video_path, media_type, metadata, id)
205205
except OSError:
206206
return 'Unable to edit subtitles file. Check logs.', 409
207207

208-
# apply chmod if required
209-
chmod = int(settings.general.chmod, 8) if not sys.platform.startswith(
210-
'win') and settings.general.chmod_enabled else None
211-
if chmod:
212-
os.chmod(subtitles_path, chmod)
208+
return '', 204
213209

214-
if media_type == 'episode':
215-
store_subtitles(path_mappings.path_replace_reverse(video_path), video_path)
216-
event_stream(type='series', payload=metadata.sonarrSeriesId)
217-
event_stream(type='episode', payload=id)
218210

219-
if settings.general.use_plex and settings.plex.update_series_library:
220-
plex_refresh_item(metadata.imdbId, is_movie=False, season=metadata.season,
221-
episode=metadata.episode)
222-
else:
223-
store_subtitles_movie(path_mappings.path_replace_reverse_movie(video_path), video_path)
224-
event_stream(type='movie', payload=id)
211+
def postprocess_subtitles(subtitles_path, video_path, media_type, metadata, id):
212+
# apply chmod if required
213+
chmod = int(settings.general.chmod, 8) if not sys.platform.startswith('win') and settings.general.chmod_enabled else None
214+
if chmod:
215+
os.chmod(subtitles_path, chmod)
225216

226-
if settings.general.use_plex and settings.plex.update_movie_library:
227-
plex_refresh_item(metadata.imdbId, is_movie=True)
217+
if media_type == 'episode':
218+
store_subtitles(path_mappings.path_replace_reverse(video_path), video_path)
219+
event_stream(type='series', payload=metadata.sonarrSeriesId)
220+
event_stream(type='episode', payload=id)
228221

229-
return '', 204
222+
if settings.general.use_plex and settings.plex.update_series_library:
223+
plex_refresh_item(metadata.imdbId, is_movie=False, season=metadata.season,
224+
episode=metadata.episode)
225+
else:
226+
store_subtitles_movie(path_mappings.path_replace_reverse_movie(video_path), video_path)
227+
event_stream(type='movie', payload=id)
228+
229+
if settings.general.use_plex and settings.plex.update_movie_library:
230+
plex_refresh_item(metadata.imdbId, is_movie=True)
230231

231232

232233
def subtitles_lang_from_filename(path):

bazarr/subtitles/sync.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ def sync_subtitles(video_path,
2323
gss=settings.subsync.gss,
2424
no_fix_framerate=settings.subsync.no_fix_framerate,
2525
reference=None,
26-
force_sync=False):
26+
force_sync=False,
27+
callback=None):
2728
if not settings.subsync.use_subsync and not force_sync:
2829
logging.debug('BAZARR automatic syncing is disabled in settings. Skipping sync routine.')
2930
return False
@@ -66,6 +67,8 @@ def sync_subtitles(video_path,
6667
}
6768
try:
6869
subsync.sync(**sync_kwargs)
70+
if callback:
71+
callback()
6972
except Exception:
7073
logging.exception(f'BAZARR an unhandled exception occurs during the synchronization process for this '
7174
f'subtitle file: {srt_path}')

bazarr/subtitles/tools/translate/main.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import logging
44
import os
55

6+
67
from subliminal_patch.core import get_subtitle_path
78
from subzero.language import Language
89

@@ -15,7 +16,7 @@
1516

1617

1718
def translate_subtitles_file(video_path, source_srt_file, from_lang, to_lang, forced, hi,
18-
media_type, sonarr_series_id, sonarr_episode_id, radarr_id, job_id=None):
19+
media_type, sonarr_series_id, sonarr_episode_id, radarr_id, metadata, job_id=None):
1920
if not job_id:
2021
jobs_queue.add_job_from_function(f'Translating from {from_lang.upper()} to {to_lang.upper()} using '
2122
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
6970
logging.debug(f'Created translator instance: {translator.__class__.__name__}')
7071
result = translator.translate(job_id=job_id)
7172
logging.debug(f'BAZARR saved translated subtitles to {dest_srt_file}')
73+
from api.subtitles.subtitles import postprocess_subtitles
74+
# Call postprocess_subtitles after translation
75+
postprocess_subtitles(dest_srt_file, video_path, media_type, metadata, sonarr_episode_id if media_type == 'series' else radarr_id)
7276
return result
7377

7478
except Exception as e:

0 commit comments

Comments
 (0)