Add comprehensive download functionality for Xtream and Stalker portals:
Backend (Electron):
- Add downloads table schema with foreign key to playlists
- Create downloads.events.ts with IPC handlers for download operations
- Support download start, cancel, retry, remove, and status queries
- Auto-create playlist entries for Stalker portals to satisfy FK constraints
- Add download folder selection and file reveal/play functionality
Frontend (Angular):
- Create DownloadsService with reactive signal-based state management
- Add DownloadsComponent with queue management UI
- Implement download buttons with three states: download, downloading, play local
- Support both Xtream and Stalker modes with proper playlist ID handling
- Add download progress indicators and status badges
UI Components:
- Update VodDetailsComponent with download/play-local buttons
- Update SeasonContainerComponent with episode download buttons
- Add navigation link to downloads page
- Style download buttons and progress indicators
Stalker Portal Support:
- Resolve stream URLs via fetchLinkToPlay API before downloading
- Handle both vod-series and regular-series episode types
- Use playlist._id for Stalker (vs portalId for Xtream)
- Pass playlist info for auto-creation in database
Translations:
- Add download-related strings for en, de, es, fr
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Swap videojs-hls-quality-selector for videojs-quality-selector-hls
and update package versions. Initialize plugins defensively: call the
new quality selector via qualitySelectorHls when available and wrap
both quality selector and aspectRatioPanel initializations in try/catch
blocks to avoid runtime errors if a plugin fails to load. Bump project
version to 0.18.0 and add the new dependency and packageManager entry.
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.
Add a packaging rule to copy the built remote-control-web output from
dist/apps/remote-control-web into the installer as remote-control-web.
Previously the repository included the raw source pattern
remote-control-web/**/* which did not reflect the compiled build output.
By pointing files to the dist build and filtering all files, the packaged
app now contains the production web assets instead of source files.
This fixes missing runtime assets in releases and ensures the packaged
installer includes the correct built web app for remote control.
Remove @libsql/client and its transitive entries from package-lock and
add better-sqlite3 plus its TypeScript types. This updates the lockfile
to reflect switching DB client dependencies: drop the @libsql packages
and related node_modules entries, and add "better-sqlite3" and
"@types/better-sqlite3". The change reduces unused libsql artifacts and
ensures type definitions are available for the new native sqlite client.
Add an asarUnpack rule for node_modules/@libsql/** so native bindings are
not embedded in the ASAR archive. This ensures libsql's native modules
are available at runtime for the Electron app and prevents issues when
loading native binaries from inside an ASAR.
Also remove ia32 architecture from NSIS target, keeping only x64 to
align installers with supported platforms and reduce build artifacts.
Add webpack config and include it in the electron backend build so
worker scripts are correctly bundled for packaged apps. Move worker
files to be packaged as extraResources instead of asar unpack patterns
so the packaged app can load worker JS from Resources/dist/... at
runtime. Fix worker path resolution in epg.events: compute resourcesPath
from app.getAppPath() and point to dist/apps/electron-backend/workers
when app.isPackaged. Remove verbose app path logging and update comments
to reflect the actual packaged layout.
Why: ensure webworker entry points are included in the renderer/backend
bundle and accessible when the Electron app is packaged, preventing
worker loading failures in production builds.
Update EPG worker path handling and unpack worker files for production
builds so the worker can be spawned when the app is packaged with ASAR.
- Change workerPath to let and, when the resolved path includes
app.asar, replace it with app.asar.unpacked. This ensures the spawned
worker points to the unpacked resource in production.
- Add electron-builder asarUnpack pattern for workers/** so worker files
are packaged outside the ASAR archive.
These changes fix runtime errors where worker threads cannot be started
from inside app.asar and ensure the EPG parser can run in packaged apps.
Add explicit icon settings to packaged app configuration for macOS,
Linux and Windows. Set macOS icon to
apps/web/src/assets/icons/favicon.ic, Linux icon directory to
apps/web/src/assets/icons and Windows icon to
apps/web/src/assets/icons/favicon.ico. This ensures bundled installers
and app bundles include the intended application icon across platforms
and prevents missing icon assets when creating artifacts. Also add
trailing commas to keep JSON formatting
consistent.
Update Angular in pnpm-lock to newer 20.3.x versions
and align CDK/Material specifiers to the compatible 20.2.12/20.2.12
releases. This brings core, common, compiler, platform-browser,
animations, forms and related packages to the 20.3.x series to fix
version skew and ensure dependency compatibility.
Add tsConfig for tests in libs/shared/interfaces project config so
jest runner uses the correct TypeScript spec configuration, fixing
test/compile issues for that library.
Remove husky commit-msg hooks and local pre-commit checks to avoid
running commitlint, tests and eslint on commit (CI remains unaffected).
Standardize generated installer/artifact file names across build
targets by adding explicit artifactName patterns in package.json.
Add a general artifactName at the top-level build config, ensure
linux targets (snap/deb/rpm) carry the same pattern, and set a
Windows-specific artifactName for win and nsis outputs that includes
the platform and arch.
This makes build outputs predictable for CI, releases, and automated
upload tooling by embedding name, version, OS, arch, and extension in
artifact filenames.
Add nested @videojs/http-streaming and related module entries (v2.16.3,
video.js 7.21.7, mpd-parser, @videojs/xhr, videojs-font, etc.) required by
the upgraded video.js ecosystem.
These changes ensure the lockfile reflects the new major video.js
version and pulls in compatible HTTP streaming and parsing libraries so
consumers get consistent, resolved dependency trees and avoid runtime
mismatches when using the newer player.
Bump epg-parser from 0.1.6 to 0.4.0 in package.json and update
package-lock.json to reflect the new version, resolved tarball, and
integrity. Add its new runtime dependencies (dayjs ^1.11.6 and
lodash.groupby ^4.6.0) into package-lock.json and include a dayjs
entry. Also add missing license fields for some modules.
This upgrade brings epg-parser improvements and fixes, and ensures the
lockfile accurately represents the installed dependency tree.
Update several packages in package-lock to newer minor/patch releases
and align Angular ESLint packages with the Angular 20 toolchain. Key
changes include:
- Upgrade @rx-angular/* to 20.0.0 to match other framework updates.
- Bump runtime libs: artplayer, axios, hls.js, rxjs, semver, uuid,
zone.js to patch/minor versions for fixes and compatibility.
- Update @angular-eslint packages to 20.3.0 to match Angular 20.x.
- Refresh eslint, @eslint/*, eslint-plugin-import, prettier, and
semantic-release to more recent releases for linting/CI stability.
- Add explicit rxjs 7.8.1 entries under some Angular DevKit node_modules
to ensure consistent resolution.
These updates address compatibility with Angular 20, pull in bug fixes
and security/maintenance patches, and stabilize dev tooling and CI.
- Removed unnecessary imports from header, account-info,
loading-overlay, navigation-bar, season-container, serial-details, and
vod-details components.
- Updated template syntax to use structural directives more efficiently in mpv-player-bar, account-info, navigation-bar, season-container, serial-details, and vod-details components.
- Enhanced readability and maintainability of the code by organizing imports and using Angular's async pipe and structural directives appropriately.
- Adjusted TypeScript configuration to use "bundler" for module resolution for better compatibility with modern build tools.