mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-15 21:56:18 -08:00
fix(embedded-mpv): isolate recording ticks by engine
This commit is contained in:
1 parent
7913b75017
commit
bbc854ff31
3 files changed
+42
-17
No files matched your search
@@ -75,7 +75,9 @@ export class EmbeddedMpvControlsAdapter implements PlayerController {
|
||||
() => this.playbackIdentity()
|
||||
);
|
||||
private readonly recordingActive = computed(
|
||||
() => this.controller.session()?.recording?.active === true
|
||||
() =>
|
||||
this.controller.support()?.engine === 'frame-copy' &&
|
||||
this.controller.session()?.recording?.active === true
|
||||
);
|
||||
private readonly activeSessionId = computed(
|
||||
() => this.controller.session()?.id ?? null
|
||||
@@ -313,6 +315,7 @@ export class EmbeddedMpvControlsAdapter implements PlayerController {
|
||||
!session ||
|
||||
!playbackIdentity ||
|
||||
!support?.supported ||
|
||||
support.engine !== 'frame-copy' ||
|
||||
support.capabilities?.recording !== true ||
|
||||
!this.isLivePlayback(context.playback()) ||
|
||||
session?.status === 'error'
|
||||
|
||||
+33
-15
@@ -283,23 +283,41 @@ describe('EmbeddedMpvPlayerComponent shared controls host', () => {
|
||||
expect(component.menus.audioOpen()).toBe(true);
|
||||
});
|
||||
|
||||
it('uses only the adapter recording interval for frame-copy', () => {
|
||||
const { fixture, controller } = render();
|
||||
const setInterval = jest.spyOn(window, 'setInterval');
|
||||
it.each(['frame-copy', 'native'] as const)(
|
||||
'uses exactly one recording interval for the %s engine',
|
||||
(engine) => {
|
||||
const { fixture, controller } = render(engine);
|
||||
const setInterval = jest.spyOn(window, 'setInterval');
|
||||
|
||||
controller.session.update((session) =>
|
||||
session
|
||||
? {
|
||||
...session,
|
||||
recording: {
|
||||
active: true,
|
||||
startedAt: new Date().toISOString(),
|
||||
},
|
||||
}
|
||||
: session
|
||||
);
|
||||
controller.session.update((session) =>
|
||||
session
|
||||
? {
|
||||
...session,
|
||||
recording: {
|
||||
active: true,
|
||||
startedAt: new Date().toISOString(),
|
||||
},
|
||||
}
|
||||
: session
|
||||
);
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(setInterval).toHaveBeenCalledTimes(1);
|
||||
}
|
||||
);
|
||||
|
||||
it('keeps the component-scoped recording adapter inert for native', () => {
|
||||
const { fixture, component, controller } = render('native');
|
||||
fixture.componentRef.setInput('playback', {
|
||||
streamUrl: 'https://example.test/live.ts',
|
||||
title: 'Live news',
|
||||
isLive: true,
|
||||
});
|
||||
fixture.detectChanges();
|
||||
const startRecording = jest.spyOn(controller, 'startRecording');
|
||||
|
||||
expect(setInterval).toHaveBeenCalledTimes(1);
|
||||
component.sharedControls.commands.toggleRecording();
|
||||
|
||||
expect(startRecording).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user