From f26e3e57c84a34c004d8c262c8db53a0e5de29a7 Mon Sep 17 00:00:00 2001 From: 4gray Date: Mon, 12 Jan 2026 00:39:11 +0100 Subject: [PATCH] fix: normalize favorites and fix stalker nav --- .../stalker-favorites.component.html | 12 +---- .../stalker-favorites.component.ts | 49 ++++++++++++++++--- .../stalker-series-view.component.ts | 3 ++ .../category-content-view.component.ts | 5 +- .../vod-details/vod-details.component.ts | 2 + 5 files changed, 51 insertions(+), 20 deletions(-) diff --git a/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.html b/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.html index 73a4dff49..6f88784e7 100644 --- a/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.html +++ b/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.html @@ -1,13 +1,4 @@ @if (itemDetails) { - @switch (itemDetails.category_id) { @case ('vod') { } @case ('series') { - + } } } @else { diff --git a/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.ts b/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.ts index fd6ea17c4..aca1b8216 100644 --- a/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.ts +++ b/apps/web/src/app/stalker/stalker-favorites/stalker-favorites.component.ts @@ -14,10 +14,7 @@ import { StalkerStore } from '../stalker.store'; templateUrl: './stalker-favorites.component.html', imports: [ FavoritesLayoutComponent, - MatButton, - MatIcon, StalkerSeriesViewComponent, - TranslatePipe, VodDetailsComponent, ], styles: [ @@ -128,20 +125,21 @@ export class StalkerFavoritesComponent { openItem(item: any) { console.debug('Open item', item); + const normalizedItem = this.normalizeFavoriteItem(item); + switch (item.category_id) { case 'itv': this.stalkerStore.setSelectedContentType('itv'); this.createLinkToPlayVodItv(item.cmd, item.name, item.logo); break; case 'vod': - this.itemDetails = item; - this.stalkerStore.setSelectedItem(item); + this.itemDetails = normalizedItem; + this.stalkerStore.setSelectedItem(normalizedItem.details); this.stalkerStore.setSelectedContentType('vod'); break; case 'series': - this.itemDetails = item; - - this.stalkerStore.setSelectedItem(item); + this.itemDetails = normalizedItem; + this.stalkerStore.setSelectedItem(normalizedItem.details); this.stalkerStore.setSelectedContentType('series'); break; default: @@ -149,6 +147,41 @@ export class StalkerFavoritesComponent { } } + private normalizeFavoriteItem(item: any): any { + if (item.details && item.details.info) { + return item; + } + + const source = item.details || item; + const info = source.info || { + name: item.name || item.title || 'Unknown', + movie_image: item.cover || item.screenshot_uri || item.logo, + description: item.description, + releasedate: item.releasedate || item.year, + genre: item.genre || item.genres_str, + duration: item.duration, + rating_imdb: item.rating_imdb || item.rating, + country: item.country, + actors: item.actors, + director: item.director, + backdrop_path: + item.backdrop_path || + [item.cover, item.screenshot_uri].filter(Boolean), + }; + + return { + ...item, + details: { + ...source, + info: info, + cmd: item.cmd || source.cmd, + id: item.stream_id || item.id || source.id, + series: item.series || source.series, + is_series: item.is_series || source.is_series, + }, + }; + } + async createLinkToPlayVodItv( cmd?: string, title?: string, diff --git a/apps/web/src/app/stalker/stalker-series-view/stalker-series-view.component.ts b/apps/web/src/app/stalker/stalker-series-view/stalker-series-view.component.ts index 83a7cbc5e..9b3b0fa9a 100644 --- a/apps/web/src/app/stalker/stalker-series-view/stalker-series-view.component.ts +++ b/apps/web/src/app/stalker/stalker-series-view/stalker-series-view.component.ts @@ -4,6 +4,7 @@ import { effect, inject, input, + output, signal, } from '@angular/core'; import { TranslatePipe } from '@ngx-translate/core'; @@ -56,6 +57,7 @@ interface StalkerSeriesSeason { }) export class StalkerSeriesViewComponent { readonly stalkerStore = inject(StalkerStore); + readonly backClicked = output(); /** * Optional input for VOD items with embedded series array (vclub mode) @@ -349,6 +351,7 @@ export class StalkerSeriesViewComponent { } goBack() { + this.backClicked.emit(); this.stalkerStore.clearSelectedItem(); } } \ No newline at end of file diff --git a/apps/web/src/app/xtream-tauri/category-content-view/category-content-view.component.ts b/apps/web/src/app/xtream-tauri/category-content-view/category-content-view.component.ts index fec71cee4..f2955ac1d 100644 --- a/apps/web/src/app/xtream-tauri/category-content-view/category-content-view.component.ts +++ b/apps/web/src/app/xtream-tauri/category-content-view/category-content-view.component.ts @@ -96,8 +96,9 @@ export class CategoryContentViewComponent implements OnInit { }, }; - this.store.setSelectedItem(selectedItem); - if (!this.isStalker) { + if (this.isStalker) { + this.store.setSelectedItem(selectedItem); + } else { this.router.navigate([item.xtream_id], { relativeTo: this.activatedRoute, }); diff --git a/apps/web/src/app/xtream/vod-details/vod-details.component.ts b/apps/web/src/app/xtream/vod-details/vod-details.component.ts index 948406af3..c46ba1b2d 100644 --- a/apps/web/src/app/xtream/vod-details/vod-details.component.ts +++ b/apps/web/src/app/xtream/vod-details/vod-details.component.ts @@ -36,6 +36,7 @@ export class VodDetailsComponent implements OnInit { @Output() addToFavoritesClicked = new EventEmitter(); @Output() playClicked = new EventEmitter(); @Output() removeFromFavoritesClicked = new EventEmitter(); + @Output() backClicked = new EventEmitter(); private location = inject(Location); private playlistService = inject(PlaylistsService); @@ -114,6 +115,7 @@ export class VodDetailsComponent implements OnInit { } goBack() { + this.backClicked.emit(); if (this.isStalker) { // Stalker mode: clear selectedItem to return to category view this.stalkerStore.clearSelectedItem();