Commit Graph
88 Commits
Author SHA1 Message Date
4gray 992b996ecd feat: general development, update core application components, and enhance build scripts. 2026-03-01 22:52:33 +01:00
4gray 09efead104 style: enhance UI components with improved styles, search functionality, and error handling 2026-02-26 00:45:58 +01:00
4gray e1b41832a9 feat(playlist-switcher): add playlist type filters and enhance search functionality 2026-02-25 07:45:00 +01:00
4gray ff76eb1af2 feat: Refactor workspace panel resizing to use a unified storage key, enhance downloads UI, and introduce new AI assistant skill definitions. 2026-02-25 00:17:34 +01:00
4gray 22c1e5462c refactor: code style improvements 2026-02-24 19:18:09 +01:00
4gray 538649feff feat(players): enhance video player with audio track management and UI adjustments
Entire-Checkpoint: f35656857e95
2026-02-21 11:56:21 +01:00
4gray fae4c44804 chore: update angular dependencies 2026-02-20 08:22:50 +01:00
4gray 87b2c509aa fix(channel-list): handle null values in channelList input setter
Entire-Checkpoint: 033757b19995
2026-02-15 23:20:50 +01:00
4gray 7c9db4bc7d feat(remote-control): add channel selection by number and volume control features
- Implemented `getChannelItemByNumber` utility function to retrieve channels by their number.
- Enhanced `StalkerLiveStreamLayoutComponent` and `LiveStreamLayoutComponent` to handle remote control commands for channel selection and volume adjustments.
- Updated typings to include new remote control commands and status updates.
- Refactored `RemoteControlComponent` to manage numeric input for channel selection and volume control actions.
- Improved UI for remote control with new volume and channel navigation features.
- Added service methods for volume up, down, and mute toggle in `RemoteControlService`.
2026-02-14 00:03:42 +01:00
4gray c63988d0fc style(m3u): adjust channel list item width and add responsive container queries
Entire-Checkpoint: 3ba3a7503b59
2026-02-11 23:11:41 +01:00
4gray 166e81dae0 fix(xtream): enhance error handling in content hero and serial details components
Entire-Checkpoint: 3ba3a7503b59
2026-02-11 22:50:33 +01:00
4gray 3e7c58b049 refactor: replace lodash import with specific groupBy function for improved performance 2026-02-08 20:23:48 +01:00
4gray edcd7cb148 feat: improve global favorites handling and channel display logic in the UI 2026-02-08 19:18:56 +01:00
4gray bb1f3af082 refactor: optimize progress calculation and enhance enriched channel retrieval in favorites and groups tabs 2026-02-01 22:35:10 +01:00
4gray ed8c373d78 feat: add favorite functionality to channel list items and groups tab 2026-02-01 21:13:52 +01:00
4gray 3988708ab5 refactor: move favorites tab to own component 2026-02-01 20:22:46 +01:00
4gray 40173e6498 feat: improve search behavior, add debounce operation, skip FilterPipe 2026-02-01 20:22:20 +01:00
4gray 8b95cfea70 feat: implement groups tab with infinite scroll and enriched channel data 2026-02-01 20:20:15 +01:00
4gray 6b18d91ca7 Merge pull request #749 from 4gray/feat/custom-sorting-for-playlists
Feat/custom-sorting-for-playlists
2026-02-01 16:40:56 +01:00
4grayandClaude Opus 4.5 932b1e5b53 feat: add custom drag-and-drop sorting for playlists
Add a new "Custom order" sort option that allows users to manually
reorder playlists via drag-and-drop. When this sort mode is active,
drag handles appear in front of each playlist item.

- Add SortBy.CUSTOM enum value to SortService
- Add custom order button to filter-sort-menu
- Add isDraggable input and cdkDrag support to PlaylistItemComponent
- Enable cdkDropList in RecentPlaylistsComponent when custom sort active
- Add translation key for custom order option

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 15:57:18 +01:00
4gray f95ac9c34e refactor: refactor existing vod-details component and implement VOD details route component
- Added `VodDetailsRouteComponent` to handle VOD details with route parameters.
- Refactored existing `VodDetailsComponent` to use a unified structure for Xtream and Stalker portals.
- Enhanced VOD details display with normalized metadata and improved playback position handling.
- Integrated resizable sidebar functionality in main container and live stream layout components.
- Updated routing to use the new VOD details route component.
- Improved favorite toggling and download handling in VOD details.
- Adjusted styles for responsive sidebar and grid layouts.
2026-01-30 20:39:18 +01:00
4gray e4be046194 refactor: add SafePipe for sanitizing resource URLs 2026-01-30 20:38:41 +01:00
4gray 6c52ee349d feat: add resizable directive and styles for dynamic element resizing 2026-01-30 20:36:36 +01:00
4gray adb89145a3 feat: playback position persistence for all players and grid indicators 2026-01-18 11:40:27 +01:00
4gray 8662fa90c6 fix(vjs-player): replace HLS quality plugin and add plugin guards
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.
2026-01-13 19:50:36 +01:00
4gray 2961c35ec1 style(channel-list-container): adjust min-height for scroll viewport and clean up search-bar styles 2026-01-12 18:20:15 +01:00
4gray 6cc9000a61 refactor: code style and formatting 2026-01-12 18:02:54 +01:00
4gray b422cad260 fix(playlist-switcher): enhance filtered playlists logic to include sorting by import date 2026-01-12 17:54:06 +01:00
4gray aec69196bc fix(playlist-switcher): adjust menu dimensions and clean up unused styles 2026-01-12 17:51:02 +01:00
4gray 51ce39e2b4 fix(ui): check portal statuses when menu opens 2026-01-12 00:43:21 +01:00
4gray 33d8036ecc Merge pull request #724 from 4gray/refactor/store-refactoring
refactor/store-refactoring
2026-01-12 00:40:40 +01:00
4gray 34c769e9a7 style(playlist-switcher): tweak button background 2026-01-12 00:39:11 +01:00
4gray dba45f27c3 fix(vjs-player): enable HLS quality selector 2026-01-12 00:39:11 +01:00
4gray 2630025b11 feat: restore hidden category state after playlist refresh 2026-01-11 21:20:50 +01:00
4gray afd8da0c25 feat: indicate loading while fetching details 2026-01-11 21:20:50 +01:00
4gray 971ad70893 refactor: add lifecycle-safe router unsubscribe and optimize portal checks 2026-01-10 16:53:05 +01:00
4gray 6b94fcbdd6 feat(ui): use playlist-switcher in all modules 2026-01-10 15:19:37 +01:00
4gray b9b7fc8a63 feat: add playlist switcher component UI and styles 2026-01-10 15:18:57 +01:00
4gray 0a4d00c081 Merge pull request #711 from 4gray/feat/epg-improvements
feat/epg-improvements
2026-01-06 00:40:07 +01:00
4gray 0662c15905 refactor(ui): tidy imports and cleanup RecentPlaylists 2026-01-05 21:55:19 +01:00
4gray afad80e61b feat(ui): add ContentHero component and detail view styles
Add a new standalone ContentHero component (template and TS) that
provides a cinematic hero section with backdrop, poster, title,
description, tags/meta/action slots, and a back button event emitter.
The component chooses backdrop or poster as the background, falls back
to a default poster image on load error, and exposes inputs for title,
description, posterUrl, and backdropUrl.

Introduce extensive cinematic styles for the detail view:
- define CSS custom properties for light and dark themes, poster size,
  shadows, and color tokens
- implement gradient vignette, layout sizing, and theming via
  :host and :host-context(.dark-theme)
- change container sizing behavior to full-height and hide overflow

These changes create a reusable hero UI and themed detail-page styles
to support a Netflix-style streaming detail experience.
2026-01-05 21:54:54 +01:00
4gray 57246c421d fix: timezone handling
* EPG data is stored with ISO 8601 format including timezone offset
(e.g., 2025-12-26T16:00:00+01:00)
* When displayed, moment(isoString)
parses it correctly and converts to the user's local timezone
automatically
* No settings needed — times always show in the user's
machine timezone
2026-01-05 21:52:45 +01:00
4gray 61eef5e00d feat(stalker): feat: add auth for stalker portal, expend portal import UI
Refactor stalker-series-view template to guard fields with conditionals
so that only available metadata is displayed. Replace selectedItem() with
displayItem() to use the updated selection accessor. Add checks for
director, actors, year/release date, genre/genres_str, imdb and kinopoisk
ratings to avoid showing empty labels.

Enhance stalker-portal-import component by adding reactive form fields
for serial/device IDs and signatures, importing MatProgressSpinnerModule,
and wiring TranslateService and StalkerSessionService into the component.
Include a small loading-container style. These changes prepare the UI for
improved import UX and safer rendering of optional series metadata.
2026-01-04 19:07:37 +01:00
4gray 99b5ad161f feat(ui): improve info overlay and add EPG header search styles
Update info-overlay template to read simplified EPG fields and
avoid indexing into arrays for title, icon and description so bindings
are resilient and clearer:
- Use epgProgram?.iconUrl instead of epgProgram?.icon?.[0]?.src
- Use epgProgram?.title instead of epgProgram?.title?.[0]?.value
- Use epgProgram?.desc instead of epgProgram?.desc?.[0]?.value
- Guard description rendering with epgProgram?.desc

Adjust multi-epg header layout and add search UI styles to support
desktop window chrome and draggable regions:
- Add left padding to #epg-navigation for macOS traffic lights, enable
  backdrop drag via -webkit-app-region: drag and set z-index to keep
  header above content.
- Exclude interactive elements (buttons, search inputs) from drag by
  applying -webkit-app-region: no-drag to maintain native interactions.
- Add extensive styles for a channel search container (search input,
  icons, clear button, filter count, animations) and scaffold a program
  search container.

These changes improve robustness of EPG data rendering and add styled
search controls while ensuring proper window dragging behavior on
desktop builds.
2026-01-02 17:22:09 +01:00
4gray 81bdcd644c refactor: move global favorites to header 2025-12-26 00:53:14 +01:00
4gray ac31cf18e5 refactor(web): replace individual action imports with namespaced
imports and update dispatch calls

Replace multiple direct or wildcard imports for actions with
namespaced action groups from 'm3u-state' (e.g. PlaylistActions,
ChannelActions, EpgActions). Update dispatch calls to use the
namespaced action creators (for example, setAdjacentChannelAsActive,
setEpgAvailableFlag, resetActiveEpgProgram, setCurrentEpgProgram,
setActiveEpgProgram, addPlaylist).

This cleans up imports, improves tree-shaking and readability,
and standardizes how actions are referenced across components. It
also fixes inconsistent import styles (wildcard vs. named) and
prepares the codebase for clearer action organization.
2025-12-21 00:42:48 +01:00
4gray 8482e7c76a style: remove redundant light-theme CSS block from playlist item
Delete an unnecessary media query that set `.meta` color for the
light color scheme in the recent-playlists playlist-item stylesheet.
The rule duplicated default styling and added extra specificity,
so removing it simplifies the CSS and avoids redundant overrides.

This reduces stylesheet size and potential maintenance confusion while
preserving visual behaviour across themes.
2025-12-14 17:01:02 +01:00
4gray aba6ef024f feat(ui): enable XC refresh only in Electron environment
Add an isElectron flag to PlaylistItemComponent and conditionally
render the refresh button only when running inside Electron.
This prevents exposing the server refresh action in non-Electron
(environments like the browser) where window.electron is unavailable
and the feature is not supported.

Update ensures safer behavior by checking !!window.electron in the
component and using that value in the template to guard the UI.
2025-12-06 21:44:50 +01:00
4gray ccc50573d4 feat(ui): add app-region drag/no-drag and tweak styles
Add app-region: drag to container and header elements and app-region:
no-drag to interactive controls multiple components so the
Tauri window dragging behaves correctly while keeping buttons and form
controls clickable. Expand header search max width from 500px to 800px
to give more room on larger screens. Clean up and restyle video-player
toolbar toolbar primary colors and unify toolbar spacing.

Files changed include navigation, sidebar, header, main containers,
live-stream layout, navigation-bar, stalker container, and video-player
toolbar. These changes improve window drag UX on desktop and refine
toolbar/header appearance.
2025-12-06 21:44:25 +01:00
4gray aa2d5b9508 feat(ui): add empty-state and expose addPlaylist event
Introduce explicit empty-state handling in RecentPlaylists:
- Replace previous direct rendering of an empty mat-list item with
  app-empty-state for two cases: a global "welcome" state when no
  playlists exist at all, and a "no-results" state when filters/search
  return nothing. This clarifies UX and provides a CTA for adding
  playlists in the welcome state.
- Change playlist data binding from playlists$ to playlistsData$ and
  adapt loops and accessors to data.playlists / data.totalCount.
- Keep existing global favorites item and playlist-item rendering.

Wire up addPlaylist event and components:
- Add addPlaylistClicked output to RecentPlaylists component and
  forward the event from the home component so the parent can open
  the add-playlist flow.
- Import EmptyStateComponent and PlaylistType types used by the new
  output.

Minor cleanup and imports:
- Reformat some imports and add tap to RxJS imports.
- Adjust template structure and placeholders for deferred loading.
2025-12-06 21:44:25 +01:00