diff --git a/src/state/watched/store.ts b/src/state/watched/store.ts
index eab57080..4ea10100 100644
--- a/src/state/watched/store.ts
+++ b/src/state/watched/store.ts
@@ -8,80 +8,10 @@ export const VideoProgressStore = versionedStoreBuilder()
.addVersion({
version: 1,
migrate() {
- // const output: WatchedStoreData = { items: [] };
-
- // if (!data || data.constructor !== Object) return output;
-
- // Object.keys(data).forEach((scraperId) => {
- // if (scraperId === "--version") return;
- // if (scraperId === "save") return;
-
- // if (
- // data[scraperId].movie &&
- // data[scraperId].movie.constructor === Object
- // ) {
- // Object.keys(data[scraperId].movie).forEach((movieId) => {
- // try {
- // output.items.push({
- // mediaId: movieId.includes("player.php")
- // ? movieId.split("player.php%3Fimdb%3D")[1]
- // : movieId,
- // mediaType: MWMediaType.MOVIE,
- // providerId: scraperId,
- // title: data[scraperId].movie[movieId].full.meta.title,
- // year: data[scraperId].movie[movieId].full.meta.year,
- // progress: data[scraperId].movie[movieId].full.currentlyAt,
- // percentage: Math.round(
- // (data[scraperId].movie[movieId].full.currentlyAt /
- // data[scraperId].movie[movieId].full.totalDuration) *
- // 100
- // ),
- // });
- // } catch (err) {
- // console.error(
- // `Failed to migrate movie: ${scraperId}/${movieId}`,
- // data[scraperId].movie[movieId]
- // );
- // }
- // });
- // }
-
- // if (
- // data[scraperId].show &&
- // data[scraperId].show.constructor === Object
- // ) {
- // Object.keys(data[scraperId].show).forEach((showId) => {
- // if (data[scraperId].show[showId].constructor !== Object) return;
- // Object.keys(data[scraperId].show[showId]).forEach((episodeId) => {
- // try {
- // output.items.push({
- // mediaId: showId,
- // mediaType: MWMediaType.SERIES,
- // providerId: scraperId,
- // title: data[scraperId].show[showId][episodeId].meta.title,
- // year: data[scraperId].show[showId][episodeId].meta.year,
- // percentage: Math.round(
- // (data[scraperId].show[showId][episodeId].currentlyAt /
- // data[scraperId].show[showId][episodeId].totalDuration) *
- // 100
- // ),
- // progress: data[scraperId].show[showId][episodeId].currentlyAt,
- // episodeId:
- // data[scraperId].show[showId][episodeId].show.episode,
- // seasonId: data[scraperId].show[showId][episodeId].show.season,
- // });
- // } catch (err) {
- // console.error(
- // `Failed to migrate series: ${scraperId}/${showId}/${episodeId}`,
- // data[scraperId].show[showId][episodeId]
- // );
- // }
- // });
- // });
- // }
- // });
-
- return output;
+ // TODO add migration back
+ return {
+ items: [],
+ };
},
})
.addVersion({
diff --git a/src/views/MediaView.tsx b/src/views/MediaView.tsx
index 5cea1a35..e9bedc53 100644
--- a/src/views/MediaView.tsx
+++ b/src/views/MediaView.tsx
@@ -1,235 +1,22 @@
-// import { ReactElement, useCallback, useEffect, useState } from "react";
-// import { useHistory } from "react-router-dom";
-// import { useTranslation } from "react-i18next";
-// import { IconPatch } from "@/components/buttons/IconPatch";
-// import { Icons } from "@/components/Icon";
-// import { Navigation } from "@/components/layout/Navigation";
-// import { Paper } from "@/components/layout/Paper";
-// import { LoadingSeasons, Seasons } from "@/components/layout/Seasons";
-// import { DecoratedVideoPlayer } from "@/components/video/DecoratedVideoPlayer";
-// import { ArrowLink } from "@/components/text/ArrowLink";
-// import { DotList } from "@/components/text/DotList";
-// import { Title } from "@/components/text/Title";
-// import { useLoading } from "@/hooks/useLoading";
-// import { usePortableMedia } from "@/hooks/usePortableMedia";
-// import {
-// getIfBookmarkedFromPortable,
-// useBookmarkContext,
-// } from "@/state/bookmark";
-// import { getWatchedFromPortable, useWatchedContext } from "@/state/watched";
-// import { SourceControl } from "@/components/video/controls/SourceControl";
-// import { ProgressListenerControl } from "@/components/video/controls/ProgressListenerControl";
-// import { Loading } from "@/components/layout/Loading";
-// import { NotFoundChecks } from "./notfound/NotFoundChecks";
-
-import { useTranslation } from "react-i18next";
import { useHistory } from "react-router-dom";
-import { Navigation } from "@/components/layout/Navigation";
-import { ArrowLink } from "@/components/text/ArrowLink";
-
-// interface StyledMediaViewProps {
-// media: MWMedia;
-// stream: MWMediaStream;
-// }
-
-// export function SkeletonVideoPlayer(props: { error?: boolean }) {
-// return (
-//
-// {props.error ? (
-//
-//
-//
Couldn't get your stream
-//
-// ) : (
-//
-//
-//
Getting your stream...
-//
-// )}
-//
-// );
-// }
-
-// function StyledMediaView(props: StyledMediaViewProps) {
-// const reactHistory = useHistory();
-// const watchedStore = useWatchedContext();
-// const startAtTime: number | undefined = getWatchedFromPortable(
-// watchedStore.watched.items,
-// props.media
-// )?.progress;
-
-// const updateProgress = useCallback(
-// (time: number, duration: number) => {
-// // Don't update stored progress if less than 30s into the video
-// if (time <= 30) return;
-// watchedStore.updateProgress(props.media, time, duration);
-// },
-// [props, watchedStore]
-// );
-
-// const goBack = useCallback(() => {
-// if (reactHistory.action !== "POP") reactHistory.goBack();
-// else reactHistory.push("/");
-// }, [reactHistory]);
-
-// return (
-//
-// );
-// }
-
-// interface StyledMediaFooterProps {
-// media: MWMedia;
-// provider: MWMediaProvider;
-// }
-
-// function StyledMediaFooter(props: StyledMediaFooterProps) {
-// const { setItemBookmark, getFilteredBookmarks } = useBookmarkContext();
-// const isBookmarked = getIfBookmarkedFromPortable(
-// getFilteredBookmarks(),
-// props.media
-// );
-
-// return (
-//
-//
-//
-//
{props.media.title}
-//
-//
-//
-// setItemBookmark(props.media, !isBookmarked)}
-// clickable
-// />
-//
-//
-// {props.media.mediaType !== MWMediaType.MOVIE ? (
-//
-// ) : null}
-//
-// );
-// }
-
-// function LoadingMediaFooter(props: { error?: boolean }) {
-// const { t } = useTranslation();
-
-// return (
-//
-//
-//
-//
-//
-//
-//
-//
-// {props.error ? (
-//
-//
-//
{t("media.invalidUrl")}
-//
-// ) : (
-//
-// )}
-//
-//
-//
-// );
-// }
-
-// function MediaViewContent(props: { portable: MWPortableMedia }) {
-// const mediaPortable = props.portable;
-// const [streamUrl, setStreamUrl] = useState();
-// const [media, setMedia] = useState();
-// const [fetchMedia, loadingPortable, errorPortable] = useLoading(
-// (portable: MWPortableMedia) => convertPortableToMedia(portable)
-// );
-// const [fetchStream, loadingStream, errorStream] = useLoading(
-// (portable: MWPortableMedia) => getStream(portable)
-// );
-
-// useEffect(() => {
-// (async () => {
-// if (mediaPortable) {
-// setMedia(await fetchMedia(mediaPortable));
-// }
-// })();
-// }, [mediaPortable, setMedia, fetchMedia]);
-
-// useEffect(() => {
-// (async () => {
-// if (mediaPortable) {
-// setStreamUrl(await fetchStream(mediaPortable));
-// }
-// })();
-// }, [mediaPortable, setStreamUrl, fetchStream]);
-
-// let playerContent: ReactElement | null = null;
-// if (loadingStream) playerContent = ;
-// else if (errorStream) playerContent = ;
-// else if (media && streamUrl)
-// playerContent = ;
-
-// let footerContent: ReactElement | null = null;
-// if (loadingPortable) footerContent = ;
-// else if (errorPortable) footerContent = ;
-// else if (mediaPortable && media)
-// footerContent = (
-//
-// );
-
-// return (
-// <>
-// {playerContent}
-// {footerContent}
-// >
-// );
-// }
+import { useCallback } from "react";
+import { DecoratedVideoPlayer } from "@/components/video/DecoratedVideoPlayer";
export function MediaView() {
- const { t } = useTranslation();
- // const mediaPortable: MWPortableMedia | undefined = usePortableMedia();
const reactHistory = useHistory();
+ const goBack = useCallback(() => {
+ if (reactHistory.action !== "POP") reactHistory.goBack();
+ else reactHistory.push("/");
+ }, [reactHistory]);
+
+ // TODO fetch meta
+ // TODO call useScrape
+ // TODO not found checks
+ // TODO watched store
+ // TODO scrape loading state
+ // TODO error page with video header
return (
-
-
-
- reactHistory.action !== "POP"
- ? reactHistory.goBack()
- : reactHistory.push("/")
- }
- direction="left"
- linkText={t("media.arrowText")}
- />
-
- {/*
-
-
-
- */}
-
+
);
}
diff --git a/src/views/notfound/NotFoundChecks.tsx b/src/views/notfound/NotFoundChecks.tsx
index a8fe9e4a..cffd9b85 100644
--- a/src/views/notfound/NotFoundChecks.tsx
+++ b/src/views/notfound/NotFoundChecks.tsx
@@ -1,28 +1,17 @@
import { ReactElement } from "react";
-// import { NotFoundMedia, NotFoundProvider } from "./NotFoundView";
export interface NotFoundChecksProps {
- // portable: MWPortableMedia | undefined;
+ id: string;
children?: ReactElement;
}
/*
- ** Component that only renders children if the passed-in portable is fully correct
+ ** Component that only renders children if the passed in data is fully correct
*/
export function NotFoundChecks(
props: NotFoundChecksProps
): ReactElement | null {
- // const providerMeta = props.portable
- // ? getProviderMetadata(props.portable.providerId)
- // : undefined;
-
- // if (!providerMeta || !providerMeta.exists) {
- // return ;
- // }
-
- // if (!providerMeta.enabled) {
- // return ;
- // }
+ // TODO do notfound check
return props.children || null;
}
diff --git a/src/views/search/SearchResultsView.tsx b/src/views/search/SearchResultsView.tsx
index 60a61115..5c67e30e 100644
--- a/src/views/search/SearchResultsView.tsx
+++ b/src/views/search/SearchResultsView.tsx
@@ -65,6 +65,8 @@ export function SearchResultsView({ searchQuery }: { searchQuery: MWQuery }) {
if (error) return ;
if (!results) return null;
+ // TODO on click go to the right page with id instead of portable
+
return (
{results.length > 0 ? (