mirror of
https://github.com/4gray/iptvnator.git
synced 2026-10-10 10:06:15 -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
@@ -32,7 +32,10 @@ describe('EmbeddedMpvPlayerComponent recording status message', () => {
|
||||
} as unknown as typeof window.electron;
|
||||
|
||||
await TestBed.configureTestingModule({
|
||||
imports: [EmbeddedMpvPlayerHostComponent, TranslateModule.forRoot()],
|
||||
imports: [
|
||||
EmbeddedMpvPlayerHostComponent,
|
||||
TranslateModule.forRoot(),
|
||||
],
|
||||
providers: [
|
||||
{
|
||||
provide: EmbeddedMpvOverlayVisibilityService,
|
||||
@@ -69,6 +72,7 @@ describe('EmbeddedMpvPlayerComponent recording status message', () => {
|
||||
controller.support.set({
|
||||
supported: true,
|
||||
platform: 'darwin',
|
||||
engine: 'native',
|
||||
capabilities: {
|
||||
subtitles: true,
|
||||
playbackSpeed: true,
|
||||
|
||||
@@ -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