feat(player): add embedded-mpv player for macOS as experimental feature

- Introduced tooling for building and staging the macOS `libmpv` runtime for IPTVnator's embedded MPV player.
- Added `build-macos-runtime.mjs` for building an LGPL-compatible runtime from source.
- Created `stage-macos-runtime.mjs` for staging the built runtime artifacts.
- Implemented validation for the packaged embedded MPV runtime in `electron-after-pack.cjs` and `embedded-mpv-macos.cjs`.
- Updated packaging scripts to ensure the embedded MPV runtime is correctly integrated and validated during the build process.
- Added README files to document the expected layout and usage for the embedded MPV runtime artifacts.

Entire-Checkpoint: c6e522b4276c
This commit is contained in:
4gray committed 2026-04-27 00:32:14 +02:00
1 parent 10139955e7
commit 9f873e6bed
53 files changed
+6099 -49

No files matched your search

@@ -402,7 +402,7 @@ describe('SettingsComponent', () => {
});
});
/* it('hides the embedded mpv option when the desktop support probe reports unsupported', async () => {
it('hides the embedded mpv option when the desktop support probe reports unsupported', async () => {
window.electron = {
...window.electron,
getEmbeddedMpvSupport: jest.fn().mockResolvedValue({
@@ -416,9 +416,9 @@ describe('SettingsComponent', () => {
await fixture.whenStable();
expect(
component.players().some(
(player) => player.id === VideoPlayer.EmbeddedMpv
)
component
.players()
.some((player) => player.id === VideoPlayer.EmbeddedMpv)
).toBe(false);
});
@@ -435,9 +435,9 @@ describe('SettingsComponent', () => {
await fixture.whenStable();
expect(
component.players().some(
(player) => player.id === VideoPlayer.EmbeddedMpv
)
component
.players()
.some((player) => player.id === VideoPlayer.EmbeddedMpv)
).toBe(true);
});
@@ -458,9 +458,9 @@ describe('SettingsComponent', () => {
expect(component.settingsForm.value).toEqual(DEFAULT_SETTINGS);
expect(window.electron.getEmbeddedMpvSupport).toHaveBeenCalled();
expect(
component.players().some(
(player) => player.id === VideoPlayer.EmbeddedMpv
)
component
.players()
.some((player) => player.id === VideoPlayer.EmbeddedMpv)
).toBe(false);
resolveSupport!({
@@ -470,11 +470,11 @@ describe('SettingsComponent', () => {
await fixture.whenStable();
expect(
component.players().some(
(player) => player.id === VideoPlayer.EmbeddedMpv
)
component
.players()
.some((player) => player.id === VideoPlayer.EmbeddedMpv)
).toBe(true);
}); */
});
});
describe('Version check', () => {