diff --git a/src/backend/providers/flixhq.ts b/src/backend/providers/flixhq.ts index c2a1b84b..d9440213 100644 --- a/src/backend/providers/flixhq.ts +++ b/src/backend/providers/flixhq.ts @@ -10,12 +10,13 @@ import { MWMediaType } from "../metadata/types"; const flixHqBase = "https://api.consumet.org/meta/tmdb"; +type FlixHQMediaType = "Movie" | "TV Series"; interface FLIXMediaBase { id: number; title: string; url: string; image: string; - type: "Movie" | "TV Series"; + type: FlixHQMediaType; releaseDate: string; } @@ -38,9 +39,9 @@ const qualityMap: Record = { "1080": MWStreamQuality.Q1080P, }; -enum FlixHQMediaType { - MOVIE = "movie", - SERIES = "series", +function flixTypeToMWType(type: FlixHQMediaType) { + if (type === "Movie") return MWMediaType.MOVIE; + return MWMediaType.SERIES; } registerProvider({ @@ -48,7 +49,6 @@ registerProvider({ displayName: "FlixHQ", rank: 100, type: [MWMediaType.MOVIE, MWMediaType.SERIES], - async scrape({ media, episode, progress }) { if (!this.type.includes(media.meta.type)) { throw new Error("Unsupported type"); @@ -65,9 +65,11 @@ registerProvider({ if (v.type !== "Movie" && v.type !== "TV Series") return false; return ( compareTitle(v.title, media.meta.title) && + flixTypeToMWType(v.type) === media.meta.type && v.releaseDate === media.meta.year ); }); + if (!foundItem) throw new Error("No watchable item found"); // get media info @@ -75,15 +77,12 @@ registerProvider({ const mediaInfo = await proxiedFetch(`/info/${foundItem.id}`, { baseURL: flixHqBase, params: { - type: - media.meta.type === MWMediaType.MOVIE - ? FlixHQMediaType.MOVIE - : FlixHQMediaType.SERIES, + type: flixTypeToMWType(foundItem.type), }, }); if (!mediaInfo.id) throw new Error("No watchable item found"); // get stream info from media - progress(75); + progress(50); let episodeId: string | undefined; if (media.meta.type === MWMediaType.MOVIE) { @@ -98,7 +97,7 @@ registerProvider({ episodeId = season.episodes.find((o: any) => o.episode === episodeNo).id; } if (!episodeId) throw new Error("No watchable item found"); - + progress(75); const watchInfo = await proxiedFetch(`/watch/${episodeId}`, { baseURL: flixHqBase, params: { diff --git a/src/hooks/useSearchQuery.ts b/src/hooks/useSearchQuery.ts index 372c70fc..093a99c2 100644 --- a/src/hooks/useSearchQuery.ts +++ b/src/hooks/useSearchQuery.ts @@ -6,7 +6,7 @@ function getInitialValue(params: { type: string; query: string }) { const type = Object.values(MWMediaType).find((v) => params.type === v) || MWMediaType.MOVIE; - const searchQuery = params.query || ""; + const searchQuery = decodeURIComponent(params.query || ""); return { type, searchQuery }; } diff --git a/src/video/state/providers/videoStateProvider.ts b/src/video/state/providers/videoStateProvider.ts index 4b085133..7ea0e321 100644 --- a/src/video/state/providers/videoStateProvider.ts +++ b/src/video/state/providers/videoStateProvider.ts @@ -277,7 +277,9 @@ export function createVideoStateProvider( updateMediaPlaying(descriptor, state); }; const fullscreenchange = () => { - state.interface.isFullscreen = !!document.fullscreenElement; + state.interface.isFullscreen = + !!document.fullscreenElement || // other browsers + !!(document as any).webkitFullscreenElement; // safari updateInterface(descriptor, state); }; const volumechange = async () => { diff --git a/src/views/developer/VideoTesterView.tsx b/src/views/developer/VideoTesterView.tsx index 7681af6e..c4e148ee 100644 --- a/src/views/developer/VideoTesterView.tsx +++ b/src/views/developer/VideoTesterView.tsx @@ -64,8 +64,8 @@ export function VideoTesterView() { />