Commit Graph
37 Commits
Author SHA1 Message Date
4grayandClaude Opus 5 99a85da6b0 feat(packaging): register IPTVnator as the .m3u/.m3u8 handler (#1301)
* feat(packaging): register IPTVnator as the .m3u/.m3u8 handler

Every runtime path for an OS-supplied playlist existed, but no packaging
metadata claimed the file types — so the OS never offered IPTVnator as a
handler and `open-file` could not fire from Finder.

`fileAssociations` declares one entry per extension. Electron Builder derives
all three platform registrations from it: macOS `CFBundleDocumentTypes` (the
prerequisite for `open-file`), the NSIS registry entries, and, on Linux, the
desktop entry's `MimeType` plus `/usr/share/mime/packages/iptvnator.xml` for
deb/rpm/pacman. Neither platform needs a dedicated icon — both fall back to the
app icon.

Declaring `MimeType` under `linux.desktop.entry` would not have worked:
Electron Builder assigns the association-derived value *after* spreading that
object, so an explicit key there is silently overwritten. The per-association
`mimeType` fields produce the same entry through the supported path.

Registering the types also exposes a gap in the delivery side. The generated
Linux `Exec` ends in `%U`, so file managers hand over a percent-encoded
`file://` URI rather than a path, which `createPlaylistOpenRequest` would have
resolved into a bogus relative path. It now decodes a `file://` candidate
before the extension check. Suppressing the `%U` instead would mean putting an
exec code in `linux.executableArgs`, which also passes it to the app as a real
argument.

Verified on macOS against a signed packaged bundle: Launch Services lists the
app as a `public.m3u-playlist` handler, and an LS-initiated open imports the
playlist both on a cold launch and against the already-running process.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(playlist): open every playlist of a multi-file selection

`%U` is the plural exec code, so selecting several playlists in a Linux file
manager is one launch carrying one argument per file. Both argv paths called
`extractPlaylistOpenRequestFromArgv`, which returned at the first match, so
everything after the first playlist was silently discarded — a gap this PR
itself opened by making the desktop entry reachable in the first place.

The extractor is now plural and returns every match in argument order, and the
queue gained `enqueueAll` so a selection is pushed under a single flush: a
delivery that fails partway leaves the untouched remainder queued in arrival
order rather than interleaved.

Covered by unit tests over a mixed argv (percent-encoded `file://` URI, a
non-playlist argument, a second URI) and by a new Electron E2E that launches
with two playlist arguments and asserts both are imported.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 21:53:43 +02:00
4gray 8fdac824fd feat(packaging): ship Linux embedded MPV frame-copy runtime (#1200)
* docs: design Linux frame-copy packaging

* docs: plan Linux frame-copy packaging

* feat(packaging): define Linux frame-copy profiles

* fix(packaging): reject inherited profile names

* feat(embedded-mpv): validate staged Linux runtime

* fix(embedded-mpv): require Linux source packages

* fix(embedded-mpv): harden Linux runtime staging

* feat(embedded-mpv): build LGPL Linux runtime

* fix(embedded-mpv): pin Linux runtime inputs

* feat(embedded-mpv): build relocatable Linux helper

* fix(embedded-mpv): require bundled Linux runtime

* fix(embedded-mpv): make Linux runtime portable

* feat(packaging): ship Linux frame-copy artifacts

* fix(embedded-mpv): verify Linux helper linkage

* fix(packaging): enforce Linux frame-copy isolation

* fix(embedded-mpv): pin Linux display data

* docs(embedded-mpv): document Linux frame-copy packaging

* feat(embedded-mpv): probe Linux frame-copy runtime

* test(embedded-mpv): smoke packaged Linux frame-copy

* docs(embedded-mpv): clarify Linux system runtime baseline

* fix(embedded-mpv): harden Linux runtime capability gate

* ci: verify Linux frame-copy packages

* test(embedded-mpv): harden packaged Linux smoke

* test(embedded-mpv): preserve packaged GL mode

* test(packaging): harden Linux package probes

* fix(embedded-mpv): enable private Snap shared memory

* fix(embedded-mpv): sanitize Linux helper environment

* fix(packaging): enforce private Snap memory semantics

* fix(packaging): reject ambiguous Snap memory metadata

* fix(embedded-mpv): prioritize trusted Snap GL

* fix(packaging): reject advanced Snap YAML semantics

* fix(packaging): reject arbitrary Snap YAML aliases

* feat(packaging): ship Linux runtime license notices

* docs(embedded-mpv): document Linux runtime distribution

* fix(packaging): parse Snap trailing comments safely

* fix(release): gate Snap publish on public source release

* fix(packaging): strip VCS metadata from source bundle

* docs(packaging): clarify Linux source release gate

* test(embedded-mpv): smoke missing bundled libmpv

* style(embedded-mpv): format final validation inputs

* fix(e2e): satisfy fixture index signature typing

* fix(ci): declare fontconfig gperf generator

* fix(embedded-mpv): hash runtime cache identities

* fix(packaging): harden Linux frame-copy delivery

* fix(packaging): tighten runtime delivery gates

* fix(ci): decouple Linux runtime matrix

* fix(packaging): harden Linux frame-copy delivery

* fix(packaging): validate Linux frame-copy runtimes

* fix(packaging): scope Snap Electron library checks

* feat(packaging): ship Linux frame-copy runtimes

* fix(packaging): improve Linux runtime smoke diagnostics

* fix(packaging): expose bounded helper probe details

* test(packaging): trace Snap EGL probe failures

* fix(packaging): prefer core22 ABI in Snap helper

* fix(packaging): bound helper probe capture

* fix(packaging): harden Linux frame-copy releases

* fix(packaging): canonicalize libplacebo submodule identity

* fix(packaging): make source archive inspection portable

* fix(packaging): harden Snap release verification
2026-07-18 17:28:22 +02:00
4gray b1119189e2 feat(updater): add GitHub releases desktop updater
Adds the GitHub Releases desktop updater with release notes, startup notification, packaging metadata, tests, and CI fixes for Electron E2E.
2026-06-28 22:21:20 +02:00
4gray 4094a36fef Harden Linux embedded MPV packaging (#1043) 2026-06-13 17:24:13 +02:00
4gray 06700b318a feat(electron): add embedded mpv support for windows and linux (#1031)
Adds experimental embedded MPV support for Windows and Linux, expands packaging/runtime validation, and updates CI coverage for the cross-platform native addon.
2026-06-09 08:58:38 +02:00
4gray 6cdd02f010 fix(linux): align packaged app identity
Entire-Checkpoint: f957cd9849e0
2026-05-09 16:22:37 +02:00
4gray b25fc040b5 build(embedded-mpv): streamline macOS native output handling and packaging process
Entire-Checkpoint: c6e522b4276c
2026-04-27 11:33:57 +02:00
4gray 6aa4f2521b build(embedded-mpv): enhance macOS build process and validation for embedded MPV integration
Entire-Checkpoint: c6e522b4276c
2026-04-27 11:06:12 +02:00
4gray 9f873e6bed 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
2026-04-27 00:32:14 +02:00
4gray b449e3796b build: update Snap packaging to use core22 base for compatibility 2026-04-13 08:06:48 +02:00
4gray e25c137eec build: include X11 override in Snap package configuration
Entire-Checkpoint: 21b9b9f90f23
2026-04-12 18:56:20 +02:00
4gray 35141bec31 build: configure Flatpak finish arguments for external player launching
Entire-Checkpoint: 21b9b9f90f23
2026-04-12 18:38:07 +02:00
4gray c06ed66c41 ci(flatpak): add Flatpak runtime and base configuration for stable branch
Entire-Checkpoint: 21b9b9f90f23
2026-04-12 14:09:05 +02:00
4gray 1136e9abac ci(flatpak): add Flatpak support with metainfo and asset validation
Entire-Checkpoint: 21b9b9f90f23
2026-04-12 12:13:05 +02:00
4gray e0b3c74fed ci(packaging): implement Linux launcher sandbox fix and verification process
Entire-Checkpoint: 21b9b9f90f23
2026-04-12 11:47:07 +02:00
4gray 367c9507a5 ci(macOS): enhance code signing process with CSC_NAME variable and verification steps 2026-03-15 10:55:30 +01:00
4gray ec84eea924 feat(macOS): add notarization support and entitlements for Electron app 2026-03-13 07:36:09 +01:00
4gray 5952ce3719 ci(build): add ia32 architecture support for NSIS target 2026-02-21 11:57:41 +01:00
4gray b57f4a640a fix(electron): pass nativeModulesPath to workers and load native modules in worker to support packaged app 2026-01-13 22:55:32 +01:00
4gray 7fa7143868 build: update snap description in electron-builder 2025-12-14 14:14:03 +01:00
4gray c714996ce0 feat(electron): refine Linux sandbox handling and format copy filter
Improve sandbox handling on Linux by detecting Snap, Flatpak,
and AppImage environments and applying appropriate Chromium
command-line switches:

- If running in Snap or Flatpak, disable Chromium's sandbox
  (--no-sandbox) to avoid conflicts with the distribution's
  own sandboxing.
- Otherwise (traditional packages and AppImage), disable the
  SUID sandbox and prefer the user namespace sandbox
  (--disable-setuid-sandbox). This avoids requiring a SUID
  chrome-sandbox binary and aligns with modern Linux best
  practices.

Also adjust apps/electron-backend/src/main.ts to only apply
these changes on Linux (process.platform === 'linux').

Minor formatting: expand the package.json copy "filter" array
to a multiline style for readability.
2025-12-14 12:31:00 +01:00
4gray 04ccc67021 chore: remove Electron build configuration files 2024-12-01 19:49:30 +01:00
4gray 18efd2060c test: set custom test id attribute for playwright
Update electron-builder.json

ci: experiment with electron-builder configuration for linux
2023-01-03 23:30:44 +01:00
4gray 1afabc671d test(e2e): adjust playwright configuration 2023-01-02 19:04:39 +01:00
4gray 1666376704 build: back to "dist" folder 2022-09-19 11:41:24 +02:00
4gray 3de1f1432b build: remove deprecated ia32 support for linux 2022-09-11 14:40:46 +02:00
4gray 57e30ca84a refactor: update icons path 2022-07-17 21:19:35 +02:00
4gray 32e08c969b chore: update electron builder config
ci: update version of upload-artifacts action

build: update depdendencies

ci: update release script

ci: try with ubuntu-18.04

ci: add USE_SYSTEM_FPM=true

ci: downgrade electron-builder

ci: revert electron-builder, add new step with manual packaging

ci: add separate steps for build

ci: add separate steps for build

ci: adapt package script

ci: update package command for macos

ci: update package command for macos

ci: update package commands

ci: update package commands

ci: update package commands

build: downgrade electron-builder

build: revert electron-builder.json

ci: update package commands
2022-04-26 22:38:36 +02:00
4gray f70d875b88 build: create additional build for M1 chips (macOS) 2022-01-30 11:28:12 +01:00
4gray 36d3eaa54d fix: capitalize app name #117 2022-01-29 20:55:03 +01:00
4gray bcc76e5728 build: extend build options 2021-10-10 21:37:34 +02:00
4gray 035fdec3b2 build: revert some changes back to fix compatibility issues 2021-05-18 17:49:49 +02:00
4gray 955bb27eec fix: macOS corrupt icon fix, closes #21 2021-02-21 19:14:42 +01:00
4gray 041cd61be4 build: update release def in electron-packager 2020-12-24 20:41:45 +01:00
4gray 11021b8b45 build: enable packaging for win32 2020-12-24 19:30:48 +01:00
4gray 903a5ffbbb build: enable deb, rpb & nsis for windows 2020-09-13 18:59:08 +02:00
4gray 998e7e9255 feat: electron based app 2020-08-23 20:57:07 +02:00