Showing movie trailers. Added internal parameter for entity visibility.

This commit is contained in:
DebaucheryLibrarian 2024-08-16 23:24:11 +02:00
parent cd6318216f
commit 50570cb734
5 changed files with 40 additions and 21 deletions

View File

@ -72,12 +72,12 @@ const pageContext = inject('pageContext');
const { pageProps } = pageContext; const { pageProps } = pageContext;
const { actor } = pageProps; const { actor } = pageProps;
const photos = actor.profiles const photos = Object.values(Object.fromEntries(actor.profiles
.filter((profile) => !!profile.avatar) .filter((profile) => !!profile.avatar)
.map((profile) => ({ .map((profile) => [profile.avatar.id, {
...profile.avatar, ...profile.avatar,
isAvatar: profile.avatar.id === actor.avatar.id, isAvatar: profile.avatar.id === actor.avatar.id,
})); }])));
</script> </script>
<style scoped> <style scoped>

View File

@ -6,20 +6,6 @@
:style="{ 'background-image': `url(${getPath(movie.poster || movie.covers[0])})` }" :style="{ 'background-image': `url(${getPath(movie.poster || movie.covers[0])})` }"
> >
<div class="banner"> <div class="banner">
<div
v-if="movie.trailer"
class="trailer"
>
<Player
:video="movie.trailer"
:poster="poster"
class="item"
:class="{ playing }"
@play="playing = true; paused = false;"
@pause="playing = false; paused = true;"
/>
</div>
<img <img
v-for="cover in movie.covers" v-for="cover in movie.covers"
:key="`cover-${cover.id}`" :key="`cover-${cover.id}`"
@ -27,6 +13,20 @@
class="cover" class="cover"
> >
<div
v-if="movie.trailer"
class="trailer"
>
<Player
:video="movie.trailer"
:poster="getPath(movie.poster || movie.covers[0])"
class="item"
:class="{ playing }"
@play="playing = true; paused = false;"
@pause="playing = false; paused = true;"
/>
</div>
<div <div
v-if="movie.photos.length > 0" v-if="movie.photos.length > 0"
class="album" class="album"
@ -459,7 +459,7 @@ const scenes = pageContext.pageProps.scenes;
} }
.cover { .cover {
height: 20rem; height: 21rem;
} }
.actors, .actors,

View File

@ -67,6 +67,10 @@ export async function fetchEntities(options) {
if (options.type) { if (options.type) {
builder.where('entities.type', options.type); builder.where('entities.type', options.type);
} }
if (options.showInvisible !== true) {
builder.where('entities.visible', true);
}
}) })
.leftJoin('entities as parents', 'parents.id', 'entities.parent_id') .leftJoin('entities as parents', 'parents.id', 'entities.parent_id')
.orderBy(...(options.order || ['name', 'asc'])) .orderBy(...(options.order || ['name', 'asc']))

View File

@ -55,6 +55,7 @@ function curateMovie(rawMovie, assets) {
// poster: curateMedia(assets.poster), // poster: curateMedia(assets.poster),
covers: assets.covers.map((cover) => curateMedia(cover)), covers: assets.covers.map((cover) => curateMedia(cover)),
photos: assets.photos.map((photo) => curateMedia(photo)), photos: assets.photos.map((photo) => curateMedia(photo)),
trailer: curateMedia(assets.trailer),
stashes: assets.stashes?.map((stash) => curateStash(stash)) || [], stashes: assets.stashes?.map((stash) => curateStash(stash)) || [],
createdBatchId: rawMovie.created_batch_id, createdBatchId: rawMovie.created_batch_id,
updatedBatchId: rawMovie.updated_batch_id, updatedBatchId: rawMovie.updated_batch_id,
@ -68,8 +69,10 @@ export async function fetchMoviesById(movieIds, reqUser) {
actors, actors,
directors, directors,
tags, tags,
sceneTags,
covers, covers,
photos, photos,
trailers,
stashes, stashes,
} = await promiseProps({ } = await promiseProps({
movies: knex('movies') movies: knex('movies')
@ -103,7 +106,11 @@ export async function fetchMoviesById(movieIds, reqUser) {
.leftJoin('movies_scenes', 'movies_scenes.movie_id', 'movies.id') .leftJoin('movies_scenes', 'movies_scenes.movie_id', 'movies.id')
.leftJoin('releases_directors', 'releases_directors.release_id', 'movies_scenes.scene_id') .leftJoin('releases_directors', 'releases_directors.release_id', 'movies_scenes.scene_id')
.leftJoin('actors as directors', 'directors.id', 'releases_directors.director_id'), .leftJoin('actors as directors', 'directors.id', 'releases_directors.director_id'),
tags: knex('movies') tags: knex('movies_tags')
.whereIn('movie_id', movieIds)
.whereNotNull('tags.id')
.leftJoin('tags', 'tags.id', 'movies_tags.tag_id'),
sceneTags: knex('movies')
.select('tags.id', 'tags.slug', 'tags.name', 'tags.priority', 'movies.id as movie_id') .select('tags.id', 'tags.slug', 'tags.name', 'tags.priority', 'movies.id as movie_id')
.distinct() .distinct()
.whereIn('movies.id', movieIds) .whereIn('movies.id', movieIds)
@ -121,6 +128,9 @@ export async function fetchMoviesById(movieIds, reqUser) {
.leftJoin('movies_scenes', 'movies_scenes.movie_id', 'movies.id') .leftJoin('movies_scenes', 'movies_scenes.movie_id', 'movies.id')
.leftJoin('releases_photos', 'releases_photos.release_id', 'movies_scenes.scene_id') .leftJoin('releases_photos', 'releases_photos.release_id', 'movies_scenes.scene_id')
.leftJoin('media', 'media.id', 'releases_photos.media_id'), .leftJoin('media', 'media.id', 'releases_photos.media_id'),
trailers: knex('movies_trailers')
.whereIn('movie_id', movieIds)
.leftJoin('media', 'media.id', 'movies_trailers.media_id'),
stashes: reqUser stashes: reqUser
? knexOwner('stashes_movies') ? knexOwner('stashes_movies')
.leftJoin('stashes', 'stashes.id', 'stashes_movies.stash_id') .leftJoin('stashes', 'stashes.id', 'stashes_movies.stash_id')
@ -141,17 +151,22 @@ export async function fetchMoviesById(movieIds, reqUser) {
const movieActors = actors.filter((actor) => actor.movie_id === movieId); const movieActors = actors.filter((actor) => actor.movie_id === movieId);
const movieDirectors = directors.filter((director) => director.release_id === movieId); const movieDirectors = directors.filter((director) => director.release_id === movieId);
const movieTags = tags.filter((tag) => tag.movie_id === movieId); const movieTags = tags.filter((tag) => tag.movie_id === movieId);
const movieSceneTags = sceneTags.filter((tag) => tag.movie_id === movieId);
const movieCovers = covers.filter((cover) => cover.movie_id === movieId); const movieCovers = covers.filter((cover) => cover.movie_id === movieId);
const moviePhotos = photos.filter((photo) => photo.release_id === movieId); const moviePhotos = photos.filter((photo) => photo.release_id === movieId);
const movieTrailer = trailers.find((trailer) => trailer.movie_id === movieId);
const movieStashes = stashes.filter((stash) => stash.movie_id === movieId); const movieStashes = stashes.filter((stash) => stash.movie_id === movieId);
const combinedTags = Object.values(Object.fromEntries(movieTags.concat(movieSceneTags).map((tag) => [tag.slug, tag]))).toSorted((tagA, tagB) => tagB.priority - tagA.priority);
return curateMovie(movie, { return curateMovie(movie, {
channel: movieChannel, channel: movieChannel,
actors: movieActors, actors: movieActors,
directors: movieDirectors, directors: movieDirectors,
tags: movieTags, tags: combinedTags,
covers: movieCovers, covers: movieCovers,
photos: moviePhotos, photos: moviePhotos,
trailer: movieTrailer,
stashes: movieStashes, stashes: movieStashes,
}); });
}).filter(Boolean); }).filter(Boolean);

2
static

@ -1 +1 @@
Subproject commit 86446006a785c63e9c7a65431e9563f4a78e7ac5 Subproject commit bade7b236ac5d28b6df8cdba42c8c519c08abe69