fix: keep subtitle prefetch alive after cache hits

This commit is contained in:
2026-05-03 18:49:40 -07:00
parent 6b9cb13b07
commit cd057d1a4f
4 changed files with 100 additions and 2 deletions
@@ -49,8 +49,37 @@ test('subtitle change handler broadcasts cached annotated payload immediately wh
assert.deepEqual(calls, [
'set:line',
'lookup:line',
'broadcast:annotated',
'process:line',
'broadcast:annotated',
'presence',
]);
});
test('subtitle change handler emits cached annotation after forwarding the subtitle change', () => {
const calls: string[] = [];
const handler = createHandleMpvSubtitleChangeHandler({
setCurrentSubText: (text) => calls.push(`set:${text}`),
getImmediateSubtitlePayload: (text) => {
calls.push(`lookup:${text}`);
return { text, tokens: [] };
},
emitImmediateSubtitle: (payload) => {
calls.push(`emit:${payload.tokens === null ? 'plain' : 'annotated'}`);
},
broadcastSubtitle: (payload) => {
calls.push(`broadcast:${payload.tokens === null ? 'plain' : 'annotated'}`);
},
onSubtitleChange: (text) => calls.push(`process:${text}`),
refreshDiscordPresence: () => calls.push('presence'),
});
handler({ text: 'line' });
assert.deepEqual(calls, [
'set:line',
'lookup:line',
'process:line',
'emit:annotated',
'presence',
]);
});
+2 -1
View File
@@ -12,14 +12,15 @@ export function createHandleMpvSubtitleChangeHandler(deps: {
deps.setCurrentSubText(text);
const immediatePayload = deps.getImmediateSubtitlePayload?.(text) ?? null;
if (immediatePayload) {
deps.onSubtitleChange(text);
(deps.emitImmediateSubtitle ?? deps.broadcastSubtitle)(immediatePayload);
} else {
deps.broadcastSubtitle({
text,
tokens: null,
});
deps.onSubtitleChange(text);
}
deps.onSubtitleChange(text);
deps.refreshDiscordPresence();
};
}