From a4e10491e746b8942be406ab70f32a0a852c9107 Mon Sep 17 00:00:00 2001 From: Aleksi Lassila Date: Fri, 13 Feb 2026 17:39:51 +0200 Subject: [PATCH] feat: use new data fetching in MoviePage --- .../StackRouter/stack-router.store.ts | 1 - .../TitlePages/MoviePage/MoviePage.svelte | 92 ++++------ .../TitlePages/SeriesPage/SeriesPage.svelte | 14 +- frontend/src/lib/stores/movie-data.store.ts | 158 ++++++++++++++++++ 4 files changed, 195 insertions(+), 70 deletions(-) create mode 100644 frontend/src/lib/stores/movie-data.store.ts diff --git a/frontend/src/lib/components/StackRouter/stack-router.store.ts b/frontend/src/lib/components/StackRouter/stack-router.store.ts index d3285ac..265c78a 100644 --- a/frontend/src/lib/components/StackRouter/stack-router.store.ts +++ b/frontend/src/lib/components/StackRouter/stack-router.store.ts @@ -214,7 +214,6 @@ export function useStackRouter({ }; // Only updates when historyState changes const visibleStack: Writable> = writable([]); - visibleStack.subscribe(console.log); initializeFromUrl(); diff --git a/frontend/src/lib/pages/TitlePages/MoviePage/MoviePage.svelte b/frontend/src/lib/pages/TitlePages/MoviePage/MoviePage.svelte index c2b4b74..08e1d36 100644 --- a/frontend/src/lib/pages/TitlePages/MoviePage/MoviePage.svelte +++ b/frontend/src/lib/pages/TitlePages/MoviePage/MoviePage.svelte @@ -3,41 +3,28 @@ import Button from '$lib/components/Button/Button.svelte'; import TmdbCard from '$lib/components/Card/TmdbCard.svelte'; import Carousel from '$lib/components/Carousel/Carousel.svelte'; - import { createBackgroundPage } from '$lib/components/GlobalBackground/BackgroundStack'; + import { backgroundContext } from '$lib/components/GlobalBackground/BackgroundStack'; import HeroCarousel from '$lib/components/HeroShowcase/HeroCarousel.svelte'; import TmdbPersonCard from '$lib/components/PersonCard/TmdbPersonCard.svelte'; import { PLATFORM_WEB } from '$lib/constants'; import { scrollIntoView } from '$lib/selectable'; import { localSettings } from '$lib/stores/localstorage.store'; + import { useMovieContext } from '$lib/stores/movie-data.store'; import { setScrollContext } from '$lib/stores/scroll.store'; import { setUiVisibilityContext } from '$lib/stores/ui-visibility.store'; - import { movieUserDataContext } from '$lib/stores/user-data/title-user-data.store'; import { tmdbApi } from '$lib/stores/user.store'; import { formatMinutesToTime, formatThousands } from '$lib/utils'; - import { Bookmark, Check, ExternalLink, Minus, Play, Video } from 'radix-icons-svelte'; + import { Bookmark, Check, ExternalLink, Minus, Video } from 'radix-icons-svelte'; import { onDestroy } from 'svelte'; import type { TitleInfoProperty } from '../HeroTitleInfo'; import HeroTitleInfo from '../HeroTitleInfo.svelte'; export let id: string; - const background = createBackgroundPage({ backgroundMediaId: id, videoMediaId: id }); - const { - tmdbId, - tmdbMovie, - inLibrary, - progress, - handleAddToLibrary, - handleRemoveFromLibrary, - isWatched, - toggleIsWatched, - autoplayCandidate, - autoplayStream, - unsubscribe - } = movieUserDataContext.createContext(id); - // const { componentStack } = titlePageContext.createContext(); - - // componentStack.push({ component: MoviePageDetails, props: {} }); + const background = backgroundContext.createContext({ backgroundMediaId: id, videoMediaId: id }); + const { movieData, inLibrary, isWatched, setInLibrary, setWatched, unsubscribe } = + useMovieContext(id).createContext(); + const { promise: tmdbMovie } = movieData; $tmdbMovie.then(async (movie) => { const backgrounds = @@ -65,7 +52,7 @@ let trailerId: string | undefined; let titleProperties: TitleInfoProperty[] = []; - $: recommendations = tmdbApi.v3.movieRecommendations(Number(tmdbId)).then((r) => r.data.results); + $: recommendations = tmdbApi.v3.movieRecommendations(Number(id)).then((r) => r.data.results); $tmdbMovie.then(async (movie) => { trailerId = movie?.videos?.results?.find( @@ -81,7 +68,7 @@ if (movie?.vote_average) { titleProperties.push({ label: `${movie.vote_average.toFixed(1)} TMDB (${formatThousands(movie.vote_count ?? 0)})`, - href: `https://www.themoviedb.org/movie/${movie.id}` + href: `https://www.themoviedb.org/movie/${id}` }); } @@ -101,19 +88,9 @@ titleProperties = titleProperties; }); $: if ($localSettings.autoplayTrailers && trailerId) { - background?.playYoutubeVideo({ tmdbId, videoId: trailerId, onBackground: true }); + background.playYoutubeVideo({ tmdbId: id, videoId: trailerId, onBackground: true }); } - function openEpisodeMenu() { - // componentStack.create(ActionsMenu, { - // tmdbId - // }); - } - - onDestroy(() => { - unsubscribe(); - }); - onDestroy(() => { unsubscribe(); }); @@ -135,19 +112,10 @@ {/if} {/await} - - {#if trailerId} + {:else} - + {/if} - + {#if $isWatched} + + {:else} + + {/if} {#if PLATFORM_WEB}