fix(stats): don't write sentence clip to expression-audio field

- `getStatsDirectMiningAudioFieldNames` now takes a `mode` param; sentence mode skips `ExpressionAudio`
- Update test expectation: `ExpressionAudio` should be `undefined` after sentence mining
- Clarify changelog wording for the audio-field fix
- Reformat `SearchTab.test.ts` assertions (no behavior change)
This commit is contained in:
2026-06-06 01:58:01 -07:00
parent 83897c81d1
commit 2fca5bbdba
4 changed files with 10 additions and 5 deletions
@@ -1852,7 +1852,7 @@ describe('stats server API routes', () => {
const updateRequest = requests.find((request) => request.action === 'updateNoteFields');
const audioValue = updateRequest?.params?.note?.fields?.SentenceAudio;
assert.match(audioValue ?? '', /^\[sound:subminer_audio_\d+\.mp3\]$/);
assert.equal(updateRequest?.params?.note?.fields?.ExpressionAudio, audioValue);
assert.equal(updateRequest?.params?.note?.fields?.ExpressionAudio, undefined);
});
});
});
+6 -1
View File
@@ -172,6 +172,7 @@ function getStatsWordMiningAudioFieldName(
function getStatsDirectMiningAudioFieldNames(
ankiConfig: AnkiConnectConfig,
noteInfo: StatsServerNoteInfo | null,
mode: 'sentence' | 'audio',
): string[] {
const configuredAudioField = ankiConfig.fields?.audio ?? 'ExpressionAudio';
if (!ankiConfig.isLapis?.enabled && !ankiConfig.isKiku?.enabled) {
@@ -185,6 +186,10 @@ function getStatsDirectMiningAudioFieldNames(
? resolveStatsNoteFieldName(noteInfo, configuredAudioField)
: null;
if (mode === 'sentence') {
return uniqueFieldNames(sentenceAudioField);
}
return uniqueFieldNames(sentenceAudioField, expressionAudioField);
}
@@ -1395,7 +1400,7 @@ export function createStatsApp(
client.storeMediaFile(audioFilename, audioBuffer),
);
const audioValue = `[sound:${audioFilename}]`;
for (const fieldName of getStatsDirectMiningAudioFieldNames(ankiConfig, noteInfo)) {
for (const fieldName of getStatsDirectMiningAudioFieldNames(ankiConfig, noteInfo, mode)) {
mediaFields[fieldName] = audioValue;
}
} catch (err) {