From 8db85c545b7bb11812d4778dc1aa227730b8aa1a Mon Sep 17 00:00:00 2001 From: Adrian Castro <22133246+castdrian@users.noreply.github.com> Date: Mon, 5 Feb 2024 19:49:00 +0100 Subject: [PATCH] feat: set headers in video player --- apps/expo/src/app/video-player.tsx | 33 +++++++++++++++++++++++----- packages/provider-utils/src/video.ts | 22 +++++-------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/apps/expo/src/app/video-player.tsx b/apps/expo/src/app/video-player.tsx index 3a9bf9f..60d05a3 100644 --- a/apps/expo/src/app/video-player.tsx +++ b/apps/expo/src/app/video-player.tsx @@ -7,6 +7,7 @@ import { useLocalSearchParams, useRouter } from "expo-router"; import * as ScreenOrientation from "expo-screen-orientation"; import { + findHighestQuality, getVideoUrl, transformSearchResultToScrapeMedia, } from "@movie-web/provider-utils"; @@ -28,6 +29,7 @@ interface VideoPlayerProps { const VideoPlayer: React.FC = ({ data }) => { const [videoUrl, setVideoUrl] = useState(""); + const [headers, setHeaders] = useState({} as Record); const [isLoading, setIsLoading] = useState(true); const videoPlayer = useRef(null); const router = useRouter(); @@ -56,19 +58,38 @@ const VideoPlayer: React.FC = ({ data }) => { episode, ); - const videoUrl = await getVideoUrl(scrapeMedia); - if (!videoUrl) { + const stream = await getVideoUrl(scrapeMedia); + if (!stream) { await ScreenOrientation.lockAsync( ScreenOrientation.OrientationLock.PORTRAIT_UP, ); return router.push("/(tabs)"); } - return videoUrl; + return stream; }; setIsLoading(true); - const url = await fetchVideo(); - if (url) { + const stream = await fetchVideo(); + + if (stream) { + let highestQuality; + let url; + + switch (stream.type) { + case "file": + highestQuality = findHighestQuality(stream); + url = highestQuality ? stream.qualities[highestQuality]?.url : null; + return url ?? null; + case "hls": + url = stream.playlist; + } + + const combinedHeaders = { + ...stream.headers, + ...stream.preferredHeaders, + }; + + setHeaders(combinedHeaders); setVideoUrl(url); setIsLoading(false); } else { @@ -123,7 +144,7 @@ const VideoPlayer: React.FC = ({ data }) => {