Skip to content

Commit b581fb9

Browse files
committed
fix: AI translator import error, batch translate deadlock, and missing subtitle indexing
- Add missing show_progress, hide_progress, show_message functions to event_handler.py (and dev_event_handler.py) that openrouter_translator imports but were never defined - Pass job_id from batch.py process_episode_translation and process_movie_translation to translate_subtitles_file to prevent deadlock when batch jobs re-queue themselves - Add job_id parameter to OpenRouterTranslatorService.translate() to match the interface used by main.py - Add store_subtitles/store_subtitles_movie calls after batch translation so Bazarr's database is updated with the new translated subtitle files - Add event_stream notifications after batch translation so the frontend refreshes to show the new subtitles
1 parent 6c667fc commit b581fb9

File tree

4 files changed

+48
-6
lines changed

4 files changed

+48
-6
lines changed

bazarr/app/event_handler.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,15 @@ def event_stream(type, action="update", payload=None):
1717
except (ValueError, TypeError):
1818
pass
1919
socketio.emit("data", {"type": type, "action": action, "payload": payload})
20+
21+
22+
def show_message(msg):
23+
event_stream(type="message", payload=msg)
24+
25+
26+
def show_progress(id, header, name, value, count):
27+
event_stream(type="progress", payload={"id": id, "header": header, "name": name, "value": value, "count": count})
28+
29+
30+
def hide_progress(id):
31+
event_stream(type="progress", action="delete", payload=id)

bazarr/subtitles/tools/translate/batch.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
import ast
66
import re
77
from app.database import TableEpisodes, TableMovies, database, select
8+
from app.event_handler import event_stream
89
from utilities.path_mappings import path_mappings
10+
from subtitles.indexer.series import store_subtitles
11+
from subtitles.indexer.movies import store_subtitles_movie
912
from subtitles.tools.translate.main import translate_subtitles_file
1013

1114
logger = logging.getLogger(__name__)
@@ -59,9 +62,17 @@ def process_episode_translation(item, source_language, target_language, forced,
5962
media_type="series",
6063
sonarr_series_id=sonarr_series_id,
6164
sonarr_episode_id=sonarr_episode_id,
62-
radarr_id=None
65+
radarr_id=None,
66+
job_id=job_id
6367
)
64-
return result is not False
68+
if result is not False:
69+
# Re-index subtitles so Bazarr's DB knows about the new translated file
70+
store_subtitles(path_mappings.path_replace_reverse(video_path), video_path)
71+
# Notify frontend to refresh
72+
event_stream(type='series', payload=sonarr_series_id)
73+
event_stream(type='episode', payload=sonarr_episode_id)
74+
return True
75+
return False
6576
except Exception as e:
6677
logger.error(f'Translation failed for episode {sonarr_episode_id}: {e}')
6778
return False
@@ -102,7 +113,7 @@ def process_movie_translation(item, source_language, target_language, forced, hi
102113
if detected_source_lang:
103114
source_language = detected_source_lang
104115

105-
# Queue translation
116+
# Queue translation
106117
try:
107118
result = translate_subtitles_file(
108119
video_path=video_path,
@@ -114,9 +125,16 @@ def process_movie_translation(item, source_language, target_language, forced, hi
114125
media_type="movies",
115126
sonarr_series_id=None,
116127
sonarr_episode_id=None,
117-
radarr_id=radarr_id
128+
radarr_id=radarr_id,
129+
job_id=job_id
118130
)
119-
return result is not False
131+
if result is not False:
132+
# Re-index subtitles so Bazarr's DB knows about the new translated file
133+
store_subtitles_movie(path_mappings.path_replace_reverse_movie(video_path), video_path)
134+
# Notify frontend to refresh
135+
event_stream(type='movie', payload=radarr_id)
136+
return True
137+
return False
120138
except Exception as e:
121139
logger.error(f'Translation failed for movie {radarr_id}: {e}')
122140
return False

bazarr/subtitles/tools/translate/services/openrouter_translator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def _build_reasoning_config(self):
7272
'maxTokens': max_tokens,
7373
}
7474

75-
def translate(self):
75+
def translate(self, job_id=None):
7676
try:
7777
subs = pysubs2.load(self.source_srt_file, encoding='utf-8')
7878
lines_list: List[str] = [x.plaintext for x in subs]

dev_event_handler.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,15 @@ def event_stream(type, action="update", payload=None):
1717
except (ValueError, TypeError):
1818
pass
1919
socketio.emit("data", {"type": type, "action": action, "payload": payload})
20+
21+
22+
def show_message(msg):
23+
event_stream(type="message", payload=msg)
24+
25+
26+
def show_progress(id, header, name, value, count):
27+
event_stream(type="progress", payload={"id": id, "header": header, "name": name, "value": value, "count": count})
28+
29+
30+
def hide_progress(id):
31+
event_stream(type="progress", action="delete", payload=id)

0 commit comments

Comments
 (0)