From f95ac9c34ec9e39e422c95b2ee277de51b61d7c9 Mon Sep 17 00:00:00 2001 From: 4gray Date: Fri, 30 Jan 2026 20:39:18 +0100 Subject: [PATCH] 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. --- .../database/playback-position.events.ts | 12 + .../video-player/video-player.component.html | 16 +- .../video-player/video-player.component.scss | 15 +- .../video-player/video-player.component.ts | 2 + .../favorites-layout.component.html | 9 +- .../favorites-layout.component.ts | 3 +- .../stalker-serial-details.interface.ts | 18 +- .../models/stalker-vod-details.interface.ts | 23 +- .../recently-viewed.component.html | 43 +- .../recently-viewed.component.ts | 96 ++++- .../stalker-favorites.component.html | 36 +- .../stalker-favorites.component.ts | 66 ++- .../stalker-main-container.component.html | 9 +- .../stalker-main-container.component.ts | 6 +- .../stalker-search.component.html | 21 +- .../stalker-search.component.ts | 46 ++- .../stalker-series-view.component.ts | 149 +++++-- apps/web/src/app/stalker/stalker.store.ts | 26 +- .../category-content-view.component.html | 22 +- .../category-content-view.component.ts | 55 +++ .../downloads/downloads.component.scss | 6 +- .../live-stream-layout.component.html | 11 +- .../live-stream-layout.component.scss | 24 +- .../live-stream-layout.component.ts | 20 +- .../portal-channels-list.component.html | 35 +- .../portal-channels-list.component.scss | 313 ++++++++------ .../portal-channels-list.component.ts | 10 +- .../season-container.component.html | 287 +++++++++---- .../season-container.component.scss | 259 ++++++++++++ .../season-container.component.ts | 130 ++++-- apps/web/src/app/xtream-tauri/sidebar.scss | 5 + ....html => vod-details-route.component.html} | 0 ...nent.ts => vod-details-route.component.ts} | 16 +- .../xtream-main-container.component.html | 9 +- .../xtream-main-container.component.ts | 3 +- .../xtream-shell/xtream-shell.component.ts | 33 +- .../web/src/app/xtream-tauri/xtream.routes.ts | 6 +- .../vod-details/vod-details.component.html | 92 +++-- .../vod-details/vod-details.component.ts | 387 +++++++----------- .../xtream-main-container.component.html | 7 +- .../xtream/xtream-main-container.component.ts | 36 ++ apps/web/src/styles.scss | 1 + .../live-stream-layout.component.html | 9 +- .../live-stream-layout.component.scss | 21 +- .../live-stream-layout.component.ts | 2 + 45 files changed, 1670 insertions(+), 725 deletions(-) rename apps/web/src/app/xtream-tauri/vod-details/{vod-details.component.html => vod-details-route.component.html} (100%) rename apps/web/src/app/xtream-tauri/vod-details/{vod-details.component.ts => vod-details-route.component.ts} (93%) diff --git a/apps/electron-backend/src/app/events/database/playback-position.events.ts b/apps/electron-backend/src/app/events/database/playback-position.events.ts index 423458de0..8e85e2d92 100644 --- a/apps/electron-backend/src/app/events/database/playback-position.events.ts +++ b/apps/electron-backend/src/app/events/database/playback-position.events.ts @@ -117,6 +117,9 @@ ipcMain.handle( 'DB_GET_SERIES_PLAYBACK_POSITIONS', async (event, playlistId: string, seriesXtreamId: number) => { try { + console.log( + `[DatabaseEvents] Getting series playback positions: playlistId=${playlistId}, seriesXtreamId=${seriesXtreamId}` + ); const db = await getDatabase(); const result = await db .select() @@ -132,6 +135,15 @@ ipcMain.handle( ) ); + console.log( + `[DatabaseEvents] Found ${result.length} positions for series ${seriesXtreamId}:`, + result.map((r) => ({ + contentXtreamId: r.contentXtreamId, + seriesXtreamId: r.seriesXtreamId, + position: r.positionSeconds, + })) + ); + return result; } catch (error) { console.error('Error getting series playback positions:', error); diff --git a/apps/web/src/app/home/video-player/video-player.component.html b/apps/web/src/app/home/video-player/video-player.component.html index 5926a7050..66f90c69e 100644 --- a/apps/web/src/app/home/video-player/video-player.component.html +++ b/apps/web/src/app/home/video-player/video-player.component.html @@ -1,6 +1,18 @@ - + - + @defer { } @loading { diff --git a/apps/web/src/app/home/video-player/video-player.component.scss b/apps/web/src/app/home/video-player/video-player.component.scss index c876706e4..4d7ad9be5 100644 --- a/apps/web/src/app/home/video-player/video-player.component.scss +++ b/apps/web/src/app/home/video-player/video-player.component.scss @@ -4,6 +4,7 @@ bottom: 0; left: 0; right: 0; + overflow: hidden; // Prevent horizontal scrollbar from resize handle } .mat-drawer-content { @@ -13,8 +14,18 @@ } .mat-drawer { - width: 400px; - min-width: 400px; + // Width is controlled by appResizable directive + // Default: 350px, min: 200px, max: 600px + overflow-x: hidden !important; // Hide horizontal scrollbar + + .resize-handle--right { + right: 0; + } +} + +// Ensure mat-drawer inner container fills the drawer width +::ng-deep .mat-drawer-inner-container { + width: 100% !important; } .custom-player { diff --git a/apps/web/src/app/home/video-player/video-player.component.ts b/apps/web/src/app/home/video-player/video-player.component.ts index da9cc285e..cc8f40a3c 100644 --- a/apps/web/src/app/home/video-player/video-player.component.ts +++ b/apps/web/src/app/home/video-player/video-player.component.ts @@ -23,6 +23,7 @@ import { HtmlVideoPlayerComponent, InfoOverlayComponent, MultiEpgContainerComponent, + ResizableDirective, SidebarComponent, ToolbarComponent, VjsPlayerComponent, @@ -64,6 +65,7 @@ import { SettingsComponent } from '../../settings/settings.component'; HtmlVideoPlayerComponent, InfoOverlayComponent, MatSidenavModule, + ResizableDirective, RouterLink, SidebarComponent, ToolbarComponent, diff --git a/apps/web/src/app/shared/components/favorites-layout/favorites-layout.component.html b/apps/web/src/app/shared/components/favorites-layout/favorites-layout.component.html index 53630e466..fab280587 100644 --- a/apps/web/src/app/shared/components/favorites-layout/favorites-layout.component.html +++ b/apps/web/src/app/shared/components/favorites-layout/favorites-layout.component.html @@ -1,4 +1,11 @@ -