import { ReactNode, useEffect, useState } from "react"; import { testData } from "@/__tests__/providers/testdata"; import { MWProviderScrapeResult } from "@/backend/helpers/provider"; import { getProviders } from "@/backend/helpers/register"; import { runProvider } from "@/backend/helpers/run"; import { DetailedMeta } from "@/backend/metadata/getmeta"; import { Navigation } from "@/components/layout/Navigation"; import { ArrowLink } from "@/components/text/ArrowLink"; import { Title } from "@/components/text/Title"; import { useLoading } from "@/hooks/useLoading"; interface MediaSelectorProps { onSelect: (meta: DetailedMeta) => void; } interface ProviderSelectorProps { onSelect: (providerId: string) => void; } interface MediaScraperProps { media: DetailedMeta | null; id: string; } function MediaSelector(props: MediaSelectorProps) { const options: DetailedMeta[] = testData; return (
Choose media {options.map((v) => ( props.onSelect(v)} direction="right" linkText={`${v.meta.title} (${v.meta.type})`} /> ))}
); } function MediaScraper(props: MediaScraperProps) { const [results, setResults] = useState(null); const [percentage, setPercentage] = useState(0); const [scrape, loading, error] = useLoading(async (media: DetailedMeta) => { const provider = getProviders().find((v) => v.id === props.id); if (!provider) throw new Error("provider not found"); const data = await runProvider(provider, { progress(num) { console.log(`SCRAPING AT ${num}%`); setPercentage(num); }, media, type: media.meta.type as any, }); console.log("got data", data); setResults(data); }); useEffect(() => { if (props.media) { scrape(props.media); } }, [props.media, scrape]); if (loading) return

Scraping... ({percentage}%)

; if (error) return

Errored, check console

; return (
Output data
{JSON.stringify(results, null, 2)}
); } function ProviderSelector(props: ProviderSelectorProps) { const providers = getProviders(); return (
Choose provider {providers.map((v) => ( props.onSelect(v.id)} direction="right" linkText={v.displayName} /> ))}
); } export default function ProviderTesterView() { const [media, setMedia] = useState(null); const [providerId, setProviderId] = useState(null); let content: ReactNode = null; if (!providerId) { content = setProviderId(id)} />; } else if (!media) { content = setMedia(v)} />; } else { content = ; } return (
{content}
); }