Preserve word-level timing on spelling edits
When the edited text has the same word count as the original (e.g. fixing "Whisper" to "wisper"), each word keeps its original start/end timestamps. Only falls back to segment-level timing when words are added or removed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -60,13 +60,19 @@
|
||||
function finishEditing(segmentId: string) {
|
||||
const trimmed = editText.trim();
|
||||
if (trimmed) {
|
||||
// Update the segment text and rebuild words from the edited text.
|
||||
// The display renders segment.words, so we must update them too.
|
||||
segments.update(segs => segs.map(s => {
|
||||
if (s.id !== segmentId) return s;
|
||||
// Rebuild words from the edited text, preserving timing from the
|
||||
// original segment boundaries (individual word timing is lost on edit)
|
||||
const newWords = trimmed.split(/\s+/).map((word, widx) => ({
|
||||
const newWordTexts = trimmed.split(/\s+/);
|
||||
let newWords;
|
||||
if (newWordTexts.length === s.words.length) {
|
||||
// Same word count (e.g. spelling fix) — preserve each word's timing
|
||||
newWords = s.words.map((w, widx) => ({
|
||||
...w,
|
||||
word: newWordTexts[widx],
|
||||
}));
|
||||
} else {
|
||||
// Word count changed — fall back to segment-level timing
|
||||
newWords = newWordTexts.map((word, widx) => ({
|
||||
id: `${s.id}-word-${widx}`,
|
||||
segment_id: s.id,
|
||||
word,
|
||||
@@ -75,6 +81,7 @@
|
||||
confidence: 1.0,
|
||||
word_index: widx,
|
||||
}));
|
||||
}
|
||||
return {
|
||||
...s,
|
||||
text: trimmed,
|
||||
|
||||
Reference in New Issue
Block a user