From 0fb4c7d13e939375111b3c24f7fca96a0a702b38 Mon Sep 17 00:00:00 2001 From: 4gray Date: Fri, 22 May 2026 14:39:20 +0300 Subject: [PATCH] fix(settings): gate external player choices by launch support --- .../app/settings/settings.component.spec.ts | 41 +++++++++++++++++++ .../src/app/settings/settings.component.ts | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/settings/settings.component.spec.ts b/apps/web/src/app/settings/settings.component.spec.ts index b6b1dff38..ef993ca6d 100644 --- a/apps/web/src/app/settings/settings.component.spec.ts +++ b/apps/web/src/app/settings/settings.component.spec.ts @@ -497,6 +497,9 @@ describe('SettingsComponent', () => { partialBridgeFixture.detectChanges(); expect(partialBridgeComponent.isDesktop).toBe(true); + expect( + partialBridgeComponent.supportsManagedExternalPlayers + ).toBe(false); expect( partialBridgeComponent.supportsExternalPlayerPathSettings ).toBe(false); @@ -527,6 +530,44 @@ describe('SettingsComponent', () => { ).toBe(false); }); + it('keeps external player choices when launch support exists without path settings', () => { + fixture.destroy(); + window.electron = { + getAppVersion: jest.fn().mockResolvedValue('1.0.0'), + openInMpv: jest.fn(), + openInVlc: jest.fn(), + platform: 'linux', + updateSettings: jest.fn().mockResolvedValue(undefined), + } as unknown as typeof window.electron; + + const launchOnlyBridgeFixture = + TestBed.createComponent(SettingsComponent); + const launchOnlyBridgeComponent = + launchOnlyBridgeFixture.componentInstance; + launchOnlyBridgeComponent.checkAppVersion = jest.fn(); + launchOnlyBridgeComponent.fetchLocalIpAddresses = jest + .fn() + .mockResolvedValue(undefined); + launchOnlyBridgeFixture.detectChanges(); + + expect( + launchOnlyBridgeComponent.supportsManagedExternalPlayers + ).toBe(true); + expect( + launchOnlyBridgeComponent.supportsExternalPlayerPathSettings + ).toBe(false); + expect( + launchOnlyBridgeComponent + .players() + .some((player) => player.id === VideoPlayer.MPV) + ).toBe(true); + expect( + launchOnlyBridgeComponent + .players() + .some((player) => player.id === VideoPlayer.VLC) + ).toBe(true); + }); + it('does not block settings initialization while embedded mpv support is pending', async () => { let resolveSupport: | ((value: EmbeddedMpvSupport) => void) diff --git a/apps/web/src/app/settings/settings.component.ts b/apps/web/src/app/settings/settings.component.ts index ed20802d2..8f763d291 100644 --- a/apps/web/src/app/settings/settings.component.ts +++ b/apps/web/src/app/settings/settings.component.ts @@ -163,7 +163,7 @@ export class SettingsComponent implements OnInit, OnDestroy { }, ] : []), - ...(this.supportsExternalPlayerPathSettings + ...(this.supportsManagedExternalPlayers ? SETTINGS_OS_PLAYER_OPTIONS : []), ]);