Commit Graph
100 Commits
Author SHA1 Message Date
4gray d3fc2a5af8 feat(ui): enhance navigation sidebar visuals and tooltips
Update navigation components to improve sidebar usability and layout.
- Reformat stalker-shell navigation binding to align attributes consistently.
- Add matTooltip and matTooltipPosition to portal icon and nav items to
  surface portal status and item labels on hover.
 Rework navigation markup to use mat-nav-list, add home shortcut and dividers,
  and hide several textual labels/actions by commenting them out to create a
  more compact icon-only sidebar while preserving code for future restore.
- Collapse unused portal info/actions and library labels into comments to
  simplify DOM while keeping structure for reactivation.

These changes make the left navigation more compact, provide quick hover
context via tooltips, and prepare the UI for a condensed icon-driven layout.
2025-11-08 23:02:15 +01:00
4gray 837849ee57 refactor: code style improvements 2025-11-08 10:24:41 +01:00
4gray 1b9dc0b37e fix(ui): disable two Angular template accessibility rules 2025-11-08 10:22:57 +01:00
4gray e6aa33959e feat(deps): bump Electron to v39.x 2025-11-08 10:22:57 +01:00
4gray 6f9e8aa64e feat(player): pass playlist headers to external players 2025-11-08 10:22:27 +01:00
4gray 3eed15d806 feat(player): use user-agent, referrer, origin for vlc and mpv
Enhance MPV player IPC handler to accept and forward extra parameters
(url, path, title, userAgent, referer, origin). Attempt to reuse an
existing MPV instance when reuse is enabled and an IPC socket is
available; if reuse fails, fall back to spawning a new process.

When creating a new MPV process, generate a unique platform-aware IPC
socket path, build arguments conditionally from provided metadata
(user-agent, referrer, origin via http-header-fields, force-media-title)
and append the URL last. Improve logging for debugging and handle
process spawn errors by clearing stale process/socket references.

These changes enable smoother playback handoff, preserve headers and
title for remote resources, and make MPV invocations more robust.
2025-11-08 10:22:27 +01:00
4gray e079d268f0 docs: add CLAUDE.md with developer guidance 2025-11-08 10:22:27 +01:00
4gray 4c6ee1b75a feat(store): migrate from electron-store to electron-conf 2025-10-27 08:20:29 +01:00
4gray 3520229670 fix: correct typo in settings import path 2025-10-27 08:20:29 +01:00
4gray 681e58728f chore(config): normalize YAML quoting and indentation 2025-10-27 08:20:29 +01:00
4gray 6ac61720ad feat(ci): add GitHub Actions workflow to build and make app 2025-10-27 08:20:29 +01:00
4gray ccbb08cfb4 fix(ui): correct imports, guard checks, logging and settings handling 2025-10-27 08:20:29 +01:00
4gray 516a376dc0 chore(deps): remove Tauri packages and bump test deps 2025-10-27 08:20:29 +01:00
4gray 51e04ab069 fix(settings): fix settings issues, fix ipc commands
Update channel.model to import Channel from the local interface file
instead of the package namespace. This fixes an incorrect module
resolution and keeps the codebase consistent with local typings.

Add a new SidebarView union type ('CHANNELS' | 'PLAYLISTS') to expose
possible sidebar view options for consumers of the shared interfaces.
2025-10-23 22:55:17 +02:00
4gray 2f930a6dfe chore(deps): upgrade video.js to 8
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.
2025-10-23 22:54:22 +02:00
4gray 1b420c67de refactor: code style improvements
- Comment/test stubs in several .spec.ts to avoid importing
  heavy modules and to disable flaky tests
 (video-player.component.spec.ts, channel-list-container.component.spec.ts,
  recent-playlists.component.spec.ts).
- Replace long relative import with package alias for PlaylistsService
  to simplify module resolution (video-player.component.spec.ts).
- Add missing alt attribute to channel logo img for accessibility
  (channel-list-item.component.ts).
- Assert non-null where templates expect values by removing optional
  chaining in template bindings (video-player.component.html):
  use activeChannel.url and activeChannel.epgParams, and non-null
  assertions for playerSettings.showCaptions to avoid runtime/template
  type errors.
- Consolidate SidebarView import with Channel from shared-interfaces to
  fix incorrect relative path (sidebar.component.ts).
- Restore or replace MomentDatePipe import usage in tests (info-overlay.spec.ts).

These changes reduce test import noise, fix template type issues,
improve accessibility, and simplify imports to match project aliases.
2025-10-23 22:52:44 +02:00
4gray 57005d4f46 refactor(epg): improve list rendering, state handling, and styles
- Track list items by start+stop to avoid incorrect reuse of DOM
  nodes when program time ranges change.
- matListItemLine with matListItemTitle and add
  program-title class to ensure proper styling and layout of titles.
- Add left margin to item label for visual spacing.
- Update imports to use shared-interfaces barrel to simplify paths.
- Remove unused OnDestroy and related ipc cleanup; epg list no longer
  manages EPG IPC listeners directly.
- Introduce setEpgAvailableFlag dispatch when handling EPG data to
  expose availability state; clear current EPG program via
  resetActiveEpgProgram when no programs are returned.
- Remove direct Store usage from EpgService and update BehaviorSubject
  flow to set epgAvailable=false on error.
- Clean up unused imports and minor formatting.

These changes fix rendering glitches, improve state clarity for EPG
availability, simplify imports, and tidy up lifecycle responsibilities.
2025-10-23 22:51:28 +02:00
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 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 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 260f3b3da7 refactor(nx): app restructuring 2025-10-14 09:00:31 +02:00
4gray 2d4fdcfc1b refactor(nx): add restructuring 2025-10-13 01:33:50 +02:00
4gray 920afa6850 refactor(nx): created shared and m3u-utils library 2025-10-10 11:49:35 +02:00
4gray fac3a9d49e chore: bump version to 1.0.0-beta.6 2025-04-05 15:07:04 +02:00
4gray e5a1684fea feat(epg): fetch epg from local files 2025-04-04 20:25:46 +02:00
4gray b9fae1e493 feat(permissions): allow fetching of local files 2025-04-04 20:25:26 +02:00
4gray 4872d8ec87 fix(multi-epg): get epg for channels by name 2025-04-04 20:24:35 +02:00
4gray 47c67b306a fix(epg): get epg for channels by name 2025-04-04 20:24:08 +02:00
4gray 457e4b73b2 fix: update frontendDist path in tauri configuration for correct build output 2025-03-11 23:59:54 +01:00
4gray 820ef1145a fix: refactor sidebar component for improved layout and responsiveness 2025-03-10 22:32:13 +01:00
4gray ef2b42f3f7 fix: update environment detection to use Tauri instead of Electron for service worker registration 2025-03-10 22:17:12 +01:00
4gray 119a7b156b fix: fix playlist update mechanism and improve response handling in Tauri service 2025-03-10 22:04:41 +01:00
4gray bfe061d8b7 fix(i18n): add success message for playlist removal and correct typo in remove all playlists dialog 2025-03-10 22:03:36 +01:00
4gray 449d1eab07 fix(i18n): add missing translation strings 2025-03-10 21:02:43 +01:00
4gray 2e2dc8e45a fix(export): fix export functionality and improve error handling and translation support 2025-03-10 21:02:11 +01:00
4gray fb106dd555 fix: enhance file system capabilities by adding write text file permission and scope configuration 2025-03-10 21:01:26 +01:00
4gray 177a166c05 fix: improve playlist removal process with success notification and optimized database queries 2025-03-10 20:00:35 +01:00
4gray 8345c1f44f fix: update app version retrieval to use GitHub releases API 2025-03-10 19:19:01 +01:00
4gray a3a8f96eaa fix: refresh local playlist functionallity 2025-03-09 19:38:43 +01:00
4gray b07bda2663 chore: enhance file system capabilities by adding read permissions 2025-03-09 19:02:02 +01:00
4gray 3910c0c85c chore: update tauri dependencies and add file reading capability 2025-03-07 20:59:48 +01:00
4gray 35c9ca2bab chore: update Node.js engine requirement to version 20 or higher 2025-03-04 22:13:24 +01:00
4gray d22121704b chore: update bug report template to reflect migration from Electron to Tauri 2025-03-04 22:06:12 +01:00
4gray ec66c9da4a chore: update GitHub workflows to use master branch and upgrade Node.js version to 22 2025-03-04 22:05:53 +01:00
4gray 7b534f8582 chore: remove Electron-related files from tsconfig.serve.json 2025-03-04 22:03:21 +01:00
4gray aa323b1eda chore: update README to reflect migration from Electron to Tauri and improve formatting 2025-03-04 22:01:42 +01:00
4gray 6cb9dc5b13 chore: upgrade Node.js version to 22-alpine and adjust artifact copy path in Dockerfile 2025-03-03 22:28:37 +01:00
4gray 762c53610b chore: replace TranslateModule with TranslatePipe in multiple components 2025-03-03 19:56:21 +01:00
4gray 00e7883cee chore: upgrade @ngx-translate packages to versions 16.0.4 and 16.0.1 2025-03-03 19:51:18 +01:00
4gray a2133be1aa chore: update dependencies for Jest packages 2025-03-03 19:43:23 +01:00
4gray e0692dd48e chore: upgrade Angular ESLint packages to version 19.2.0 2025-03-03 19:40:04 +01:00
4gray a75705d5c7 chore: upgrade NgRx packages to version 19.0.1 2025-03-03 19:36:56 +01:00
4gray 0176452bcf chore: upgrade Angular material to v19.2.1 2025-03-03 19:34:51 +01:00
4gray c147a9da7c chore: update to angular 19 2025-03-03 19:32:38 +01:00
4gray e2942f3e00 fix(pwa): ensure promise resolution in PwaService when conditions are not met 2025-03-03 18:47:25 +01:00
4gray 996cb30f4c feat(sort): implement sorting functionality for playlists with user-defined options 2025-03-01 22:27:50 +01:00
4gray 6b9e021d74 feat(xtream): add connection testing functionality and portal status service 2025-03-01 22:00:04 +01:00
4gray d0c8e8259e refactor(xtream): remove unused Store injection from main container component 2025-03-01 21:54:05 +01:00
4gray 29328a71f1 refactor(playlist): remove drag-and-drop functionality and clean up styles 2025-03-01 21:45:09 +01:00
4gray 8b586fd8c1 test: update specs 2025-03-01 19:53:39 +01:00
4gray 4cd7ab0afe refactor(electron): remove unused preload, HTML, and server files 2025-03-01 19:53:05 +01:00
4gray 0f0f1775d6 fix(app): restrict global keydown event listener to Tauri environment 2025-03-01 18:16:27 +01:00
4gray 8222d82b01 fix(update): ensure update check is only performed in Tauri environment 2025-03-01 14:22:54 +01:00
4gray 01bbf396a9 fix(routing): remove enableTracing option from RouterModule configuration 2025-03-01 14:22:32 +01:00
4gray a43d43782a feat(xtream): add portal status indicator in playlist-item cmp 2025-02-22 20:00:20 +01:00
4gray 23434d367b fix(favorites): use toggleFavorite logic from store for xtream live channels 2025-01-27 10:14:10 +01:00
4gray c2459f3dcc feat(player): enhance video player IPC events with origin and referrer support 2025-01-27 08:57:05 +01:00
4gray 50df27f5ee feat(global-search): implement global search functionality and manage recently viewed items 2025-01-27 08:56:06 +01:00
4gray a56e3594b4 feat(recently-viewed): enhance UI with playlist grouping and global search support 2025-01-27 08:55:21 +01:00
4gray 5f44107d5e feat(app): add global search and recently viewed dialogs with keyboard shortcuts 2025-01-27 08:55:03 +01:00
4gray 83afd91c79 feat(tauri): add 'fs:allow-write-file' capability to enable file writing 2025-01-27 08:48:47 +01:00
4gray 74a5459735 fix(database): order categories by name in database query for consistency 2024-12-26 23:35:17 +01:00
4gray cf6c5b4317 feat(xtream): add loadChannelEpg method to fetch EPG listings with decoding 2024-12-26 22:21:37 +01:00
4gray 175d631607 refactor(xtream): remove unused XtreamApiService to streamline codebase 2024-12-26 22:21:07 +01:00
4gray 298d97a331 feat(xtream): add 'stop' property to EpgItem interface for enhanced program timing 2024-12-26 22:20:58 +01:00
4gray 8f93b9961c feat(xtream): implement EPG display with current program highlighting and progress tracking 2024-12-26 22:20:43 +01:00
4gray 23b967aad7 feat(xtream): enhance EPG view with current program highlighting and progress indicator 2024-12-26 22:20:30 +01:00
4gray 181dee4a47 style(xtream): update icon colors to improve visibility and consistency 2024-12-26 22:20:11 +01:00
4gray e6a34593d4 refactor(xtream): streamline fetching of VOD and serial details with metadata 2024-12-26 14:59:18 +01:00
4gray f4dda4c274 feat(xtream): add portal status type and interface to manage portal state 2024-12-26 14:57:09 +01:00
4gray bc8e5c98ea refactor(xtream): simplify layout structure and improve styling for video player and EPG sections 2024-12-26 14:56:53 +01:00
4gray f06bcefcd3 style(xtream): reorganize navigation layout with section labels and improved styling 2024-12-26 14:03:36 +01:00
4gray d36b808026 feat(xtream): enhance portal status display with dynamic styling and actions 2024-12-26 13:33:59 +01:00
4gray 96f61bc859 feat(xtream): add remove button for individual recently viewed items 2024-12-26 11:03:59 +01:00
4gray ef7aca9765 fix(with-recent-items): enhance content selection query to include category filtering 2024-12-26 11:02:45 +01:00
4gray bb23e834fe fix(epg): prefer channel.tgv.id for epg match 2024-12-25 21:06:52 +01:00
4gray 1da10c8adf style(channel-list-item): improve layout and styling for channel list item component 2024-12-25 21:04:13 +01:00
4gray b9b5ac7df9 style(playlist-error-view): update empty category image styling for better responsiveness 2024-12-25 21:03:47 +01:00
4gray 71d11da14a refactor(toolbar): rename addToFavorites to updateFavoriteStatus and improve button structure 2024-12-25 21:02:25 +01:00
4gray e8062d4d68 refactor(tauri): use default builder for window state plugin initialization 2024-12-25 18:54:28 +01:00
4gray f70ed99a19 chore(dependencies): update Tauri packages to latest versions 2024-12-24 23:23:07 +01:00
4gray 17e4441765 chore(vscode): update settings to prevent automatic opening of test results 2024-12-24 23:19:36 +01:00