mirror of
https://github.com/streamyfin/streamyfin.git
synced 2026-01-15 23:59:08 +00:00
Merge pull request #371 from herrrta/feat/328
[Jellyseerr] Add external links to trailers
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import React, {useCallback, useMemo, useRef, useState} from "react";
|
||||
import { useLocalSearchParams } from "expo-router";
|
||||
import React, {useCallback, useEffect, useMemo, useRef, useState} from "react";
|
||||
import {useLocalSearchParams, useNavigation} from "expo-router";
|
||||
import { MovieResult, TvResult } from "@/utils/jellyseerr/server/models/Search";
|
||||
import { Text } from "@/components/common/Text";
|
||||
import { ParallaxScrollView } from "@/components/ParallaxPage";
|
||||
@@ -29,6 +29,7 @@ import JellyseerrSeasons from "@/components/series/JellyseerrSeasons";
|
||||
import { JellyserrRatings } from "@/components/Ratings";
|
||||
import MediaRequest from "@/utils/jellyseerr/server/entity/MediaRequest";
|
||||
import DetailFacts from "@/components/jellyseerr/DetailFacts";
|
||||
import {ItemActions} from "@/components/series/SeriesActions";
|
||||
|
||||
const Page: React.FC = () => {
|
||||
const insets = useSafeAreaInsets();
|
||||
@@ -46,6 +47,7 @@ const Page: React.FC = () => {
|
||||
posterSrc: string;
|
||||
} & Partial<MovieResult | TvResult>;
|
||||
|
||||
const navigation = useNavigation();
|
||||
const { jellyseerrApi, requestMedia } = useJellyseerr();
|
||||
|
||||
const [issueType, setIssueType] = useState<IssueType>();
|
||||
@@ -120,6 +122,18 @@ const Page: React.FC = () => {
|
||||
[details, result, requestMedia]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (details) {
|
||||
navigation.setOptions({
|
||||
headerRight: () =>
|
||||
<TouchableOpacity className="rounded-full p-1.5 bg-neutral-800/80">
|
||||
<ItemActions item={details} />
|
||||
</TouchableOpacity>
|
||||
});
|
||||
}
|
||||
|
||||
}, [details]);
|
||||
|
||||
return (
|
||||
<View
|
||||
className="flex-1 relative"
|
||||
|
||||
@@ -3,15 +3,22 @@ import { BaseItemDto } from "@jellyfin/sdk/lib/generated-client";
|
||||
import { useRouter } from "expo-router";
|
||||
import { useCallback, useMemo } from "react";
|
||||
import { TouchableOpacity, View, ViewProps } from "react-native";
|
||||
import {MovieDetails} from "@/utils/jellyseerr/server/models/Movie";
|
||||
import {TvDetails} from "@/utils/jellyseerr/server/models/Tv";
|
||||
|
||||
interface Props extends ViewProps {
|
||||
item: BaseItemDto;
|
||||
item: BaseItemDto | MovieDetails | TvDetails;
|
||||
}
|
||||
|
||||
export const ItemActions = ({ item, ...props }: Props) => {
|
||||
const router = useRouter();
|
||||
|
||||
const trailerLink = useMemo(() => item.RemoteTrailers?.[0]?.Url, [item]);
|
||||
const trailerLink = useMemo(() => {
|
||||
const url = (item as BaseItemDto).RemoteTrailers?.[0]?.Url
|
||||
if (url)
|
||||
return url
|
||||
return (item as MovieDetails | TvDetails)?.relatedVideos?.find(v => v.type === "Trailer")?.url
|
||||
}, [item]);
|
||||
|
||||
const openTrailer = useCallback(async () => {
|
||||
if (!trailerLink) return;
|
||||
|
||||
Reference in New Issue
Block a user