Commit Graph
1438 Commits
Author SHA1 Message Date
4gray 8bc8eab167 feat: show category icon when no channel selected
Add a disabled category icon button next to the "Select category"
placeholder in the live stream layout when no channel is selected, and
align the placeholder text and icon with flex and spacing. This gives a
clearer visual cue for the missing category.

Also add missing translation keys ("SELECT_CATEGORY" and "PAGE") to
English, Russian and German locale files so the new UI text and paging
label are available across supported languages.
2025-11-15 17:36:25 +01:00
4gray 3455ff75f1 refactor: clean up layout, simplify markup, fix img alt
Remove unused .link-input styles from player-dialog component and tidy
vod-details template indentation and structure. Reformat container and
image/detail sections to use consistent indentation, add an alt attribute
to the movie poster img, replace several label elements with simpler divs
for clearer semantics, and ensure placeholder-cover fallback remains.
These changes improve readability, reduce unused CSS, and enhance HTML
accessibility.
2025-11-15 14:27:47 +01:00
4gray 3c4af147a8 refactor(player): remove unused PlayerDialog and SafePipe
Remove the PlayerDialogComponent (TS, HTML, SCSS) and the standalone
SafePipe from the xtream feature. These files were deleted because
the dialog and pipe are no longer used by the application, reducing
dead code and simplifying the web module surface.

This change prevents maintaining UI code (player
markup, styles, and clipboard/snackbar logic) and an unused DOM
sanitizer pipe, improving project maintainability and build size.
2025-11-15 14:27:08 +01:00
4gray 34b252831b feat(account-info): add translations
Add a complete Angular template for the Xtream Tauri account-info dialog.
The new HTML lays out user and server information in a responsive
two-column grid, including status, username, connection counts,
creation/expiry dates, trial indicator, allowed output formats and
server details (live/movies/series counts, URL, protocol, timezone,
server time and ports). Translation pipes are used for all labels and
conditional classes mark active/trial states. This provides a full UI
for displaying parsed accountInfo data and prepares the dialog for
binding with component logic and styles.
2025-11-15 14:26:46 +01:00
4gray 43b92edde3 Merge pull request #649 from 4gray/feat/xtream-preserve-user-data
feat/xtream-preserve-user-data
2025-11-13 20:38:06 +01:00
4gray 730200f704 feat(xtream): preserve user Xtream data during refresh
Save and restore favorited and recently viewed Xtream items when
deleting and re-importing playlist content.

- Return favoritedXtreamIds and recentlyViewedXtreamIds from
  deleteXtreamPlaylistContent so callers can capture user data before
 .
- Add restoreXtreamUserData to the database service to allow restoring
  favorites and recently viewed entries after a refresh.
- Query and collect xtreamIds and timestamps for favorites and recently
  viewed items in the backend before deleting content.
- Persist the captured user data to localStorage in the recent playlists
  component so it can be used to restore state after re-importing the
  playlist.
- Keep existing playlist metadata update flow intact.

This prevents loss of user-specific favorites and recent history when
refreshing Xtream playlists.
2025-11-13 19:26:37 +01:00
4gray 67f54a94c7 fix(xtream): use signal syntax in template 2025-11-11 21:08:16 +01:00
4gray b81798e87a Merge pull request #648 from 4gray/fix/m3u-auto-refresh-mechanism
fix/m3u-auto-refresh-mechanism
2025-11-11 20:57:21 +01:00
4gray d2b076f1fe feat: auto-update playlists on startup
Add automatic playlist refresh on application startup by listening
for successful playlist load and dispatching an IPC event for any
playlists with autoRefresh enabled.

- Inject Actions into AppComponent and add triggerAutoUpdatePlaylists
  that waits for PlaylistActions.loadPlaylistsSuccess, selects
  selectAllPlaylistsMeta from the store, filters playlists with
  autoRefresh, and sends AUTO_UPDATE_PLAYLISTS via DataService.
- Call triggerAutoUpdatePlaylists from ngOnInit and remove a now-
  unused commented commands list.
- Add helper functions in backend playlist events to fetch and parse
  playlists from URL or file, consolidating parsing logic and creating
  playlist objects.

This implements the previously noted TODO to trigger playlist auto-
refresh and centralizes playlist fetching/parsing for reuse and
clarity.
2025-11-11 08:25:02 +01:00
4gray 487b721d7c refactor: replace shared COMPONENT_OVERLAY_REF with local tokens 2025-11-11 08:24:30 +01:00
4gray aee5d93118 refactor(interfaces): remove angular dep (InjectionToken) from shared lib
Remove the COMPONENT_OVERLAY_REF InjectionToken and its export from the
shared interfaces library. The token was unused in the codebase, so
deleting it cleans up dead code and reduces API surface area exposed by
libs/shared/interfaces. This simplifies imports and avoids maintaining an
unneeded token definition.
2025-11-11 08:24:12 +01:00
4gray a06c642eef feat(recent-playlists): show auto-refresh indicator on playlist items
Add a compact auto-refresh icon to playlist items to indicate when a
playlist has auto-refresh enabled. Move existing upload-type icons into
an .icon-container so the auto-refresh indicator can be positioned
absolutely beside them.

- Add .auto-refresh-indicator styles to position and size the indicator,
  match colors, and center the icon.
- Wrap mat-icon elements in .icon-container and render an additional
  mat-icon when item.autoRefresh is true for URL and file playlists.
- Keep tooltips for the auto-refresh icon to explain its meaning.

This improves UX by making auto-refresh state visible at a glance.
2025-11-11 08:23:27 +01:00
4gray 2ae7e730ad Merge pull request #647 from 4gray/fix/favorites-in-stb-and-xc
fix/favorites-in-stb-and-xc
2025-11-11 08:21:51 +01:00
4gray f694c60c93 style: set host width to full in favorites component 2025-11-08 23:54:57 +01:00
4gray e6afb412a9 fix(stalker): rename remove ouput to removeFavorite 2025-11-08 23:54:42 +01:00
4gray b8650be90f Merge pull request #644 from 4gray/refactor/ipc-events-handling
refactor/ipc-events-handling
2025-11-08 22:46:47 +00:00
4gray 0d6e519709 chore(deps): update nx & angular packages
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).
2025-11-08 23:24:56 +01:00
4gray c4f721304f feat(m3u-state): include HTTP headers and title when opening players
Add title, user-agent, refer and origin fields to IPC payloads sent
when opening MPV/VLC players and when launching streams from effects.
Replace legacy userAgent property with standardized 'user-agent' key and
consistently include referer and origin from channel.http. This ensures
external players receive correct HTTP header metadata and stream titles
for proper request handling and display.
2025-11-08 23:02:15 +01:00
4gray 30b7cdb7c6 fix(ui): unsubscribe observable and mark DI fields readonly 2025-11-08 23:02:15 +01:00
4gray 60a06c2b60 fix(epg-list): normalize days value before subtracting 2025-11-08 23:02:15 +01:00
4gray e06c154e0f fix(mpv, electron): improve process startup & error reporting
Refine MPV/VLC launch error handling in the renderer to extract and show
error.message when available, preventing unhelpful "[object Object]"
messages in the UI.

In the Electron backend, ensure failed MPV instances fall through to
creation by commenting intent, and wrap spawn in a promise to reliably
detect startup failures. On spawn error, clear stored references and
reject with a descriptive message that includes the mpv path. Add an
exit handler, conditional storage of the process for reuse, and proc.unref
for detached runs. Use a short timeout to resolve the promise when spawn
succeeds and log startup state. Convert a silent log to console.error and
rethrow the error to surface failures to callers.

These changes make MPV startup more robust and produce clearer error
feedback for debugging and UI notifications.
2025-11-08 23:02:15 +01:00
4gray 588664c3aa refactor(player): remove unused player path args 2025-11-08 23:02:15 +01:00
4gray fbed100fb0 ci: make release step create draft prereleases for PRs
Update the GitHub release action to mark releases from pull 
request events as prerelease and to set a safe tag name when the
 is not triggered by a tag ref.

- Set prerelease to true when github.event_name == 'pull_request'
  so draft releases created during PR workflows are marked as
  prereleases.
- Use the tag name from github.ref_name when the workflow is
  triggered by a tag; otherwise generate a deterministic test tag
  "test-<sha>" to avoid using an invalid or empty tag name.

This prevents accidental full releases from PR runs and ensures the
action always has a valid tag_name value.
2025-11-08 23:02:15 +01:00
4gray ea3c2b1e45 feat(build): set deterministic artifact file names
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.
2025-11-08 23:02:15 +01:00
4gray 656c86dc30 refactor: rework ipc events handling 2025-11-08 23:02:15 +01:00
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 f36f94675b Merge pull request #638 from 4gray/ci-add-github-actions-ui-fixes
ci-add-github-actions-ui-fixes
2025-10-31 09:42:01 +00: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 68ab822553 Merge pull request #637 from 4gray/chore/upgrade-videojs-and-fix-settings
chore/upgrade-videojs-and-fix-settings
2025-10-23 23:00:31 +02: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 d45f6539d5 Merge pull request #636 from 4gray/feat/epg
feat/epg
2025-10-23 22:53:21 +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 04bcb522ad Merge pull request #632 from 4gray/refactor/libsql
refactor/libsql
2025-10-18 22:26:26 +02:00