处理api失败频繁channel closed
This commit is contained in:
parent
735c9ffcfc
commit
6520e49066
@ -455,6 +455,7 @@ async fn incremental_translate(
|
||||
let mut buffer: Vec<SubtitleSegment> = Vec::new();
|
||||
let mut translated_count: usize = 0;
|
||||
let idle_flush_after = Duration::from_secs(3);
|
||||
let mut translate_error: Option<String> = None;
|
||||
|
||||
let emit_translate_progress =
|
||||
|window: &Window, task_id: &str, done: usize, total: usize| -> Result<()> {
|
||||
@ -500,7 +501,10 @@ async fn incremental_translate(
|
||||
buffer.push(segment);
|
||||
|
||||
if buffer.len() >= batch_size {
|
||||
translate_buffered_segments(
|
||||
if let Some(ref error) = translate_error {
|
||||
emit_log(window, task_id, format!("translation: skip batch due to previous error: {error}"))?;
|
||||
buffer.clear();
|
||||
} else if let Err(e) = translate_buffered_segments(
|
||||
&translator,
|
||||
window,
|
||||
app_state,
|
||||
@ -512,37 +516,53 @@ async fn incremental_translate(
|
||||
context_size,
|
||||
"batch",
|
||||
)
|
||||
.await?;
|
||||
emit_translate_progress(window, task_id, translated_count, all_segments.len())?;
|
||||
.await
|
||||
{
|
||||
eprintln!("translation error: {e:#}");
|
||||
translate_error = Some(e.to_string());
|
||||
let _ = emit_log(window, task_id, format!("translation: batch failed: {e}"));
|
||||
} else {
|
||||
let _ = emit_translate_progress(window, task_id, translated_count, all_segments.len());
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(None) => break,
|
||||
Err(_) => {
|
||||
if buffer.is_empty() {
|
||||
continue;
|
||||
if !buffer.is_empty() {
|
||||
if let Some(ref error) = translate_error {
|
||||
emit_log(window, task_id, format!("translation: skip idle batch due to previous error: {error}"))?;
|
||||
buffer.clear();
|
||||
} else if let Err(e) = translate_buffered_segments(
|
||||
&translator,
|
||||
window,
|
||||
app_state,
|
||||
task_id,
|
||||
target_lang,
|
||||
&all_segments,
|
||||
&mut buffer,
|
||||
&mut translated_count,
|
||||
context_size,
|
||||
"idle batch",
|
||||
)
|
||||
.await
|
||||
{
|
||||
eprintln!("translation error: {e:#}");
|
||||
translate_error = Some(e.to_string());
|
||||
let _ = emit_log(window, task_id, format!("translation: idle batch failed: {e}"));
|
||||
} else {
|
||||
let _ = emit_translate_progress(window, task_id, translated_count, all_segments.len());
|
||||
}
|
||||
}
|
||||
|
||||
translate_buffered_segments(
|
||||
&translator,
|
||||
window,
|
||||
app_state,
|
||||
task_id,
|
||||
target_lang,
|
||||
&all_segments,
|
||||
&mut buffer,
|
||||
&mut translated_count,
|
||||
context_size,
|
||||
"idle batch",
|
||||
)
|
||||
.await?;
|
||||
emit_translate_progress(window, task_id, translated_count, all_segments.len())?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Flush remaining segments below batch_size
|
||||
if !buffer.is_empty() {
|
||||
translate_buffered_segments(
|
||||
if let Some(ref error) = translate_error {
|
||||
let _ = emit_log(window, task_id, format!("translation: skip final batch due to previous error: {error}"));
|
||||
buffer.clear();
|
||||
} else if let Err(e) = translate_buffered_segments(
|
||||
&translator,
|
||||
window,
|
||||
app_state,
|
||||
@ -554,8 +574,21 @@ async fn incremental_translate(
|
||||
context_size,
|
||||
"final batch",
|
||||
)
|
||||
.await?;
|
||||
emit_translate_progress(window, task_id, translated_count, all_segments.len())?;
|
||||
.await
|
||||
{
|
||||
eprintln!("translation error: {e:#}");
|
||||
translate_error = Some(e.to_string());
|
||||
let _ = emit_log(window, task_id, format!("translation: final batch failed: {e}"));
|
||||
} else {
|
||||
let _ = emit_translate_progress(window, task_id, translated_count, all_segments.len());
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(ref error) = translate_error {
|
||||
emit_log(window, task_id, format!("translation: completed with error: {error}"))?;
|
||||
// Return Ok to keep the channel receiver alive until all
|
||||
// whisper segment callback send tasks have completed
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
// Translation complete
|
||||
|
||||
Loading…
Reference in New Issue
Block a user