mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-10-25 23:35:21 -07:00
fix(mpv): move a pending replay pause when sub-delay changes
This commit is contained in:
2 files changed
+19
-4
No files matched your search
@@ -399,17 +399,25 @@ test('dispatchMpvProtocolMessage pauses on sub-end when pendingPauseAtSubEnd is
|
|||||||
|
|
||||||
test('dispatchMpvProtocolMessage pauses at the sub-delay retimed sub-end', async () => {
|
test('dispatchMpvProtocolMessage pauses at the sub-delay retimed sub-end', async () => {
|
||||||
let pauseAtTime: number | null = null;
|
let pauseAtTime: number | null = null;
|
||||||
|
let subDelay = 1.5;
|
||||||
const { deps } = createDeps({
|
const { deps } = createDeps({
|
||||||
getPendingPauseAtSubEnd: () => true,
|
getPendingPauseAtSubEnd: () => true,
|
||||||
getCurrentSubDelay: () => 1.5,
|
getCurrentSubDelay: () => subDelay,
|
||||||
|
setCurrentSubDelay: (next) => {
|
||||||
|
subDelay = next;
|
||||||
|
},
|
||||||
|
getPauseAtTime: () => pauseAtTime,
|
||||||
setPauseAtTime: (next) => {
|
setPauseAtTime: (next) => {
|
||||||
pauseAtTime = next;
|
pauseAtTime = next;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
await dispatchMpvProtocolMessage({ event: 'property-change', name: 'sub-end', data: 42 }, deps);
|
await dispatchMpvProtocolMessage({ event: 'property-change', name: 'sub-end', data: 42 }, deps);
|
||||||
|
|
||||||
assert.equal(pauseAtTime, 43.5);
|
assert.equal(pauseAtTime, 43.5);
|
||||||
|
|
||||||
|
// Retiming before the replay reaches its end moves the pause with the line.
|
||||||
|
await dispatchMpvProtocolMessage({ event: 'property-change', name: 'sub-delay', data: 2 }, deps);
|
||||||
|
assert.equal(pauseAtTime, 44);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('dispatchMpvProtocolMessage updates current time before emitting time-pos change', async () => {
|
test('dispatchMpvProtocolMessage updates current time before emitting time-pos change', async () => {
|
||||||
|
|||||||
@@ -277,8 +277,15 @@ export async function dispatchMpvProtocolMessage(
|
|||||||
end: deps.getCurrentSubEnd(),
|
end: deps.getCurrentSubEnd(),
|
||||||
});
|
});
|
||||||
} else if (msg.name === 'sub-delay') {
|
} else if (msg.name === 'sub-delay') {
|
||||||
const delay = typeof msg.data === 'number' ? msg.data : Number(msg.data);
|
const parsed = typeof msg.data === 'number' ? msg.data : Number(msg.data);
|
||||||
deps.setCurrentSubDelay(Number.isFinite(delay) ? delay : 0);
|
const delay = Number.isFinite(parsed) ? parsed : 0;
|
||||||
|
// A scheduled replay pause sits at the line's end on the video clock; retiming
|
||||||
|
// mid-replay moves that end, so the pause moves with it.
|
||||||
|
const pauseAtTime = deps.getPauseAtTime();
|
||||||
|
if (pauseAtTime !== null) {
|
||||||
|
deps.setPauseAtTime(pauseAtTime + delay - deps.getCurrentSubDelay());
|
||||||
|
}
|
||||||
|
deps.setCurrentSubDelay(delay);
|
||||||
} else if (msg.name === 'secondary-sub-text') {
|
} else if (msg.name === 'secondary-sub-text') {
|
||||||
const nextSubText = (msg.data as string) || '';
|
const nextSubText = (msg.data as string) || '';
|
||||||
deps.setCurrentSecondarySubText(nextSubText);
|
deps.setCurrentSecondarySubText(nextSubText);
|
||||||
|
|||||||
Reference in new issue
Block a user