import type { BrowserResourceResult, BrowserSessionView } from "@umt/contracts"; import { Download, Settings2 } from "lucide-react"; import { useState } from "react"; import { Link } from "react-router"; import { toast } from "sonner"; import { useSubmitRelease } from "~/api/releases.ts"; import { ManualDownloadDialog } from "~/components/downloads/manual-download-dialog.tsx"; import { Button } from "~/components/ui/button.tsx"; import { workbenchResource } from "~/components/workbench/download-dialog.tsx"; import { apiData, errorMessage } from "~/lib/api.ts"; /** 控件位于 iframe/截图外;直接解析当前详情页并交给共同手动下载入口。 */ export function ResourceDownload({ session }: { session: BrowserSessionView }) { const [busy, setBusy] = useState(false); const [resource, setResource] = useState(null); const [open, setOpen] = useState(false); const [unrecognized, setUnrecognized] = useState(false); const [planId, setPlanId] = useState(null); const submit = useSubmitRelease(); const prepare = async (options: boolean) => { setBusy(true); try { const r = await apiData("/browser/sessions/{id}/resource", { method: "POST", pathParams: { id: session.id }, body: {}, }); setResource(r); setUnrecognized(false); if (options) setOpen(true); else { const result = await submit.mutateAsync({ sourceReleaseId: r.release.id, importMode: "normal", replacementAssetIds: [], }); if (result.requiresConfirmation) { setUnrecognized(true); setOpen(true); } else if (result.submitted) { setPlanId(result.plan?.id ?? null); toast.success("已提交下载"); } else toast.warning(result.rejected.map((v) => v.message).join(";") || "没有提交"); } } catch (e) { toast.error(errorMessage(e)); } finally { setBusy(false); } }; return ( <>
{planId ? ( 查看下载任务 ) : null}
{resource ? ( submit.mutateAsync({ ...options, sourceReleaseId: resource.release.id })} /> ) : null} ); }