Commit Graph
1393 Commits
Author SHA1 Message Date
4gray 8b0db47caf feat(epg): normalize channel data and fix template bindings
Convert channel structures to a consistent and adapt templates
to read new safely.

- Add accessors in EListComponent:
  - getChannelName(channel) returns first displayName or ''
  - getChannelIcon(channel) returns first icon.src or ''
  These helpers make reading channel metadata robust against missing or
  differently-shaped data.

- Build channel object with normalized fields in ngOnInit:
  - set id, displayName[], url[], icon[] rather than raw name/icon
  - ensure fallbacks to empty strings/arrays to avoid undefined values

- Update InfoOverlay template to safely access program fields:
  - use epgProgram?.icon?.[0]?.src for image source
  - use epgProgram?.title?.[0]?.value and epgProgram?.desc?.[0]?.value

- Fix MultiEpg templates for property access and tracking:
  - replace invalid template boolean expressions with safe non-null
    assertion where needed ((hourWidth$ | async)! ...)
  - use track item.id instead of track $any(item).channel
  - call getChannelIcon/getChannelName and render icon/name via helpers

These changes prevent runtime errors when fields are missing or have
array-wrapped values, improve template safety, and standardize channel
data handling across the EPG UI.
2025-10-23 21:54:11 +02:00
4gray 8e5a643fac feat(epg): worker-based EPG handlers and fetch logic 2025-10-23 21:53:51 +02:00
4gray 0ec25115e0 feat(epg): update interfaces to match epg-parser v0.4.0 2025-10-23 21:53:24 +02:00
4gray 94e8d76a36 chore(de): upgrade epg-parser to 0.4.0 and add new deps
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.
2025-10-23 21:52:09 +02:00
4gray 04bcb522ad Merge pull request #632 from 4gray/refactor/libsql
refactor/libsql
2025-10-18 22:26:26 +02:00
4gray 461e2e2e7e feat(xtream): Xtream playlist refresh workflow
a dedicated refresh button and workflow for Xtream in the
recent playlists UI. Show a refresh icon only when the playlist has a
serverUrl. For Xtream playlists, prompt the user with a confirmation
dialog, delete locally cached categories and streams, show a toast that
the refresh started, and navigate to the playlist to trigger re-import.
Keep existing refresh IPC logic for non-Xtream (M3U/local) playlists.

Also add English translations for the Xtream refresh tooltip and dialog
messages, and surface errors via snackbar on failure.

This enables safe re-importing of remote Xtream playlists while preserving
favorites and recent items.
2025-10-18 21:55:48 +02:00
4gray 0a934d2ac6 refactor(electron): migrate from tauri/plugin-sql to libsql 2025-10-18 21:31:29 +02:00
4gray 6dcbbadda8 refactor(app): replace TauriService with ElectronService usage 2025-10-18 13:05:26 +02:00
4gray 03268ab8c5 Merge pull request #631 from 4gray/refactor-add-mpv-reuse-ipc
refactor-add-mpv-reuse-ipc
2025-10-18 12:02:42 +02:00
4gray e04cb113dd refactor(epg): simplify EPG availability dispatch 2025-10-18 11:57:43 +02:00
4gray 7c42c1b6fc feat(settings): add mpvReuseInstance setting to store and i18n
Add MPV_REUSE_INSTANCE key to the electron backend store service and
include mpvReuseInstance in the shared settings interface so the new
boolean setting is persisted and available across renderer and main
processes.

Also update English i18n JSON formatting and expand the HOME section
translations (reformatting and adding nested playlist-related keys)
to ensure the UI strings remain consistent after changes.
2025-10-18 11:57:20 +02:00
4gray d9cbb1ce87 refactor(player,epg): add MPV reuse, IPC commands, and EPG handlers
Introduce MPV process reuse and IPC control, and add basic EPG IPC
handlers.

- Add GET_CHANNEL_PROGRAMS and FETCH_EPG ipc handlers to epg.events.ts
  to expose fetching EPG data by channel or URLs.
- Rework player.events.ts:
  - Export proper bootstrap and add module-level mpvProcess and
    mpvSocketPath to track a reusable MPV instance.
  - Add sendMpvCommand helper to communicate with MPV via its IPC socket.
  - Implement OPEN_MPV_PLAYER handler that:
    - Reads MPV path and MPV_REUSE_INSTANCE setting from store.
    - Attempts to reuse an existing MPV process by sending loadfile
      command over the socket when reuse is enabled.
    - Falls back to spawning a new mpv process, creating a unique IPC
      socket path, and storing the process/socket when reuse is enabled.
    - Adds error and exit handlers to clear stored references.
  - Add necessary imports (ChildProcess, existsSync, createConnection).
  - Remove/comment unused import block for shared-interfaces and adapt
    existing code to the new flow.

Why:
- Enable reusing a single MPV instance to improve resource usage and
  provide faster playback switching.
- Add IPC endpoints for EPG to support frontend requests for program
  data.
2025-10-18 11:53:57 +02:00
4gray b61530f279 feat(preloadtauri): add external player IPC and playlist auto-update
MPV/VLC launch and playlist auto-update from the Electron preload
and migrate Tauri invoke calls to use the exposed window.electron API.

- Add openInMpv, openInVlc and autoUpdatePlaylists to the preload API,
  forwarding parameters to ipcRenderer for native handling.
- Replace tauri invoke('open_in_mpv') and invoke('open_in_vlc') calls
  with window.electron.openInMpv / openInVlc in tauri.service to use the
  unified Electron IPC surface.
- Replace file-based AUTO_UPDATE_PLAYLISTS handling with a call to
  window.electron.autoUpdatePlaylists and remove legacy file parsing
  code (now commented) so the main process owns playlist refresh logic.
- Import shared AUTO_UPDATE_PLAYLISTS/Playlist types into preload.

This centralizes native player launching and playlist updates through the
preload IPC bridge, simplifying web service code and moving file I/O to
the native/main layer for better security and separation of concerns.
2025-10-15 23:31:08 +02:00
4gray 6b693b3237 refactor: convert to standalone api 2025-10-15 23:12:19 +02:00
4gray 3186d022e2 Merge pull request #629 from 4gray/refactor/remove-packages-fix-build
refactor/remove-packages-fix-build
2025-10-15 08:55:25 +02:00
4gray bc3c9ce8cc feat(electron-backend): add IPC event scaffolding and persistent store 2025-10-15 08:55:03 +02:00
4gray 7487738a7d refactor(nx): remove packages, fix build issues 2025-10-14 23:44:33 +02:00
4gray ad75cb2f1a Merge pull request #628 from 4gray/refactor(nx)-more-app-restructuring
refactor(nx): app restructuring
2025-10-14 09:01:42 +02:00
4gray 260f3b3da7 refactor(nx): app restructuring 2025-10-14 09:00:31 +02:00
4gray af55372655 Merge pull request #625 from 4gray/app-restructuring
refactor(nx): add restructuring
2025-10-13 01:34:10 +02:00
4gray 2d4fdcfc1b refactor(nx): add restructuring 2025-10-13 01:33:50 +02:00
4gray 7028ff4049 refactor(nx): app restructuring 2025-10-13 00:24:54 +02:00
4gray 505b9907ae Merge pull request #623 from 4gray/refactor/nx-integration
refactor(nx): created shared and m3u-utils library
2025-10-10 11:50:41 +02:00
4gray 920afa6850 refactor(nx): created shared and m3u-utils library 2025-10-10 11:49:35 +02:00
4gray 99ed5df404 chore: back to electron + nx 2025-10-07 18:02:13 +02:00
4gray f5b3a15b83 Merge pull request #619 from 4gray/feat/add-artplayer
feat/add-artplayer
2025-09-27 20:18:32 +02:00
4gray 0c5939ae16 feat(video-player): integrate Artplayer and remove DPlayer
- Enableplayer global config and component options:
  - set Artplayer.AUTO_PLAYBACK_TIMEOUT to 10000 to reduce autoplay
    timeouts.
  - enable autoPlayback, playsInline, airplay, backdrop, mutex and set
    theme on Artplayer instance to improve playback behaviour and UI.
  - add autoSize, autoMini, pip, screenshot, aspectRatio and fullscreen
    settings for a consistent feature set.

- Harden channel URL check to avoid null errors:
  - use optional chaining when checking channel.url for m3u8.

- Move StreamFormat import ordering and clean unused enum entry:
  - remove DPlayer from VideoPlayer enum and related commented code.
  - remove DPlayer component imports, declarations and template branch,
    simplifying player selection and eliminating dead code.

- Tidy component decorator formatting and fix template array trailing
  commas to preserve style consistency.

These changes replace the deprecated/removed DPlayer integration with a
fully configured Artplayer, improve runtime safety, and clean up unused
code.
2025-09-27 20:05:35 +02:00
4gray e338eb16dc fix(web-player): remove unused dplayer 2025-09-27 20:05:00 +02:00
4gray 3214c9087d Merge pull request #618 from 4gray/chore/update-packages
chore(deps): bump multiple dev/prod dependency versions
2025-09-27 18:12:20 +02:00
4gray c01e8c204c chore(deps): bump multiple dev/prod dependency versions
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.
2025-09-27 17:19:50 +02:00
4gray 7fd0f2046a Merge pull request #617 from 4gray/fix/reorder-favorites
fix/reorder-favorites
2025-09-27 16:55:18 +02:00
4gray 0e2ba6b138 refactor: convert *ngFor to control-flow @for loops in channel list 2025-09-27 16:31:01 +02:00
4gray bce4717de6 fix(player): use channel URL for favorites ordering
Use channel.url instead of channel.id when updating the favorites
ordering in the playlist store. The change ensures the dispatched
setFavorites action contains the correct identifierurl) that the
store and downstream logic expect, preventing mismatches between the
UI order and persisted favorites.
2025-09-27 16:30:22 +02:00
4gray 2fda888676 Merge pull request #616 from 4gray/copilot/fix-7096d205-d765-4091-8c1a-6fc63c666e04
Fix hardcoded playlist name in URL import to use filename extraction
2025-09-27 15:17:49 +02:00
copilot-swe-agent[bot]and4gray 11a816a210 Fix playlist name extraction from URL with fallback
Co-authored-by: 4gray <1503032+4gray@users.noreply.github.com>
2025-09-27 13:04:17 +00:00
copilot-swe-agent[bot] b249c5eca0 Initial plan 2025-09-27 12:56:37 +00:00
4gray e56ebce3a3 Merge pull request #613 from 4gray/chore/update-angular-to-v20
chore: update to angular v20
2025-09-21 13:09:18 +02:00
4gray cd2dd2ede5 chore: update to angular v20
- 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.
2025-09-21 12:27:36 +02:00
4gray 4fe40a741f ci: add minimal configuration for CodeRabbit 2025-09-18 14:51:31 +02:00
4gray dd31f6350f Merge pull request #612 from 4gray/dependabot/npm_and_yarn/multi-6996cb6ab6
chore(deps): bump vite and @angular/build
2025-09-18 14:42:53 +02:00
4gray a8d7a77482 Merge pull request #597 from 4gray/dependabot/npm_and_yarn/multi-c22e25d29b
chore(deps): bump brace-expansion
2025-09-18 14:36:17 +02:00
4gray af85825985 Merge pull request #605 from 4gray/dependabot/npm_and_yarn/sha.js-2.4.12
chore(deps-dev): bump sha.js from 2.4.11 to 2.4.12
2025-09-18 14:35:41 +02:00
dependabot[bot] 21b08b9922 chore(deps): bump brace-expansion
Bumps  and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together.

Updates `brace-expansion` from 1.1.11 to 1.1.12
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)

Updates `brace-expansion` from 2.0.1 to 2.0.2
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.12
  dependency-type: indirect
- dependency-name: brace-expansion
  dependency-version: 2.0.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-18 12:25:31 +00:00
dependabot[bot] 876becef14 chore(deps-dev): bump sha.js from 2.4.11 to 2.4.12
Bumps [sha.js](https://github.com/crypto-browserify/sha.js) from 2.4.11 to 2.4.12.
- [Changelog](https://github.com/browserify/sha.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/crypto-browserify/sha.js/compare/v2.4.11...v2.4.12)

---
updated-dependencies:
- dependency-name: sha.js
  dependency-version: 2.4.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-18 12:25:15 +00:00
dependabot[bot] 935c6cf6d2 chore(deps): bump vite and @angular/build
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) to 6.3.6 and updates ancestor dependency [@angular/build](https://github.com/angular/angular-cli). These dependencies need to be updated together.


Updates `vite` from 6.1.0 to 6.3.6
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.3.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.6/packages/vite)

Updates `@angular/build` from 19.2.0 to 19.2.17
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/19.2.0...19.2.17)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.6
  dependency-type: indirect
- dependency-name: "@angular/build"
  dependency-version: 19.2.17
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-18 12:23:49 +00:00
4gray 5c04deffaf Merge pull request #604 from 4gray/dependabot/npm_and_yarn/cipher-base-1.0.6
chore(deps-dev): bump cipher-base from 1.0.4 to 1.0.6
2025-09-18 14:23:38 +02:00
4gray 58fcc1f09f Merge pull request #607 from 4gray/dependabot/npm_and_yarn/axios-1.12.0
chore(deps): bump axios from 1.6.2 to 1.12.0
2025-09-18 14:22:01 +02:00
dependabot[bot] 27720269db chore(deps): bump axios from 1.6.2 to 1.12.0
Bumps [axios](https://github.com/axios/axios) from 1.6.2 to 1.12.0.
- [Release notes](https://github.com/axios/axios/releases)
- [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md)
- [Commits](https://github.com/axios/axios/compare/v1.6.2...v1.12.0)

---
updated-dependencies:
- dependency-name: axios
  dependency-version: 1.12.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-11 22:43:05 +00:00
4gray fb507b932a feat(m3u): preserve favorites list after updating playlist 2025-09-09 09:18:31 +02:00
4gray 89316477be Merge pull request #576 from EaiWez/master
Added PORTUGUESE translation
2025-09-08 18:31:07 +02:00