Skip to content

Commit 325fbfe

Browse files
committed
fix(translate): prevent NPE translating words during ASR re-run
1 parent 01c43b5 commit 325fbfe

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

FlyleafLib/MediaPlayer/Translation/SubtitlesTranslator.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ public class SubTranslator
2222
private readonly TranslateServiceFactory _translateServiceFactory;
2323
private Task? _translateTask;
2424
private bool _isReset;
25+
private Language? _srcLang;
26+
2527
private bool IsEnabled => _config[_subIndex].EnabledTranslated;
2628

2729
private readonly LogHandler Log;
@@ -55,6 +57,12 @@ private void SubManager_OnPropertyChanged(object? sender, PropertyChangedEventAr
5557
if (!IsEnabled || _subManager.Subs.Count == 0 || _subManager.Language == null)
5658
return;
5759

60+
if (_translateService == null)
61+
{
62+
// capture for later initialization
63+
_srcLang = _subManager.Language;
64+
}
65+
5866
if (_translationStartCancellation != null)
5967
{
6068
_translationStartCancellation.Cancel();
@@ -116,6 +124,7 @@ private async Task Reset()
116124

117125
_translateService?.Dispose();
118126
_translateService = null;
127+
_srcLang = null;
119128
}
120129
finally
121130
{
@@ -199,7 +208,7 @@ private void EnsureTranslationService()
199208
if (_translateService == null)
200209
{
201210
var service = _translateServiceFactory.GetService(_config.TranslateServiceType, false);
202-
service.Initialize(_subManager.Language, _config.TranslateTargetLanguage);
211+
service.Initialize(_srcLang!, _config.TranslateTargetLanguage);
203212

204213
Volatile.Write(ref _translateService, service);
205214
}

LLPlayer/Controls/WordPopup.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,8 @@ private async ValueTask<string> TranslateWithCache(string text, WordClickedEvent
195195
var srcLang = FL.Player.SubtitlesManager[e.SubIndex].Language;
196196
var targetLang = FL.PlayerConfig.Subtitles.TranslateTargetLanguage;
197197

198-
// Same language
199-
if (srcLang?.ISO6391 == targetLang.ToISO6391())
198+
// Not set language or same language
199+
if (srcLang == null || srcLang.ISO6391 == targetLang.ToISO6391())
200200
{
201201
return text;
202202
}

0 commit comments

Comments
 (0)