import { useCallback, useMemo } from "react"; import { Trans, useTranslation } from "react-i18next"; import { useCopyToClipboard } from "react-use"; import { Button } from "@/components/buttons/Button"; import { Icon, Icons } from "@/components/Icon"; import { OverlayPage } from "@/components/overlays/OverlayPage"; import { Menu } from "@/components/player/internals/ContextMenu"; import { convertSubtitlesToSrtDataurl } from "@/components/player/utils/captions"; import { useOverlayRouter } from "@/hooks/useOverlayRouter"; import { usePlayerStore } from "@/stores/player/store"; export function useDownloadLink() { const source = usePlayerStore((s) => s.source); const currentQuality = usePlayerStore((s) => s.currentQuality); const url = useMemo(() => { if (source?.type === "file" && currentQuality) return source.qualities[currentQuality]?.url ?? null; if (source?.type === "hls") return source.url; return null; }, [source, currentQuality]); return url; } function StyleTrans(props: { k: string }) { return ( , br:
, ios_share: ( ), ios_files: ( ), }} /> ); } export function DownloadView({ id }: { id: string }) { const router = useOverlayRouter(id); const { t } = useTranslation(); const downloadUrl = useDownloadLink(); const [, copyToClipboard] = useCopyToClipboard(); const sourceType = usePlayerStore((s) => s.source?.type); const selectedCaption = usePlayerStore((s) => s.caption?.selected); const openSubtitleDownload = useCallback(() => { const dataUrl = selectedCaption ? convertSubtitlesToSrtDataurl(selectedCaption?.srtData) : null; if (!dataUrl) return; window.open(dataUrl); }, [selectedCaption]); if (!downloadUrl) return null; return ( <> router.navigate("/")}> {t("player.menus.downloads.title")}
{sourceType === "hls" ? ( <> ) : ( <> router.navigate("/download/pc")}> {t("player.menus.downloads.onPc.title")} router.navigate("/download/ios")} > {t("player.menus.downloads.onIos.title")} router.navigate("/download/android")} > {t("player.menus.downloads.onAndroid.title")} )}
); } function AndroidExplanationView({ id }: { id: string }) { const router = useOverlayRouter(id); const { t } = useTranslation(); return ( <> router.navigate("/download")}> {t("player.menus.downloads.onAndroid.shortTitle")} ); } function PCExplanationView({ id }: { id: string }) { const router = useOverlayRouter(id); const { t } = useTranslation(); return ( <> router.navigate("/download")}> {t("player.menus.downloads.onPc.shortTitle")} ); } function IOSExplanationView({ id }: { id: string }) { const router = useOverlayRouter(id); return ( <> router.navigate("/download")}> ); } export function DownloadRoutes({ id }: { id: string }) { return ( <> ); }