import type { SearchRelease } from "@umt/contracts"; import { usePlanFromSearch } from "~/api/search.ts"; import { openAgentDrawer } from "~/components/agent/agent-store.ts"; import { ManualDownloadActions, type ManualDownloadResource } from "~/components/downloads/manual-download-dialog.tsx"; import { kindHintOf } from "~/components/downloads/manual-download-model.ts"; import { promoLabel } from "./search-labels.ts"; export function delegateToAgent(release: SearchRelease) { openAgentDrawer({ label: `资源:${release.title}`, releaseId: release.sourceReleaseId ?? undefined, entityId: release.entity?.id, siteId: release.siteId, goal: `判断资源「${release.title}」是否值得下载;合适就按手动下载流程提交`, }); } /** 搜索结果 → 下载对话框的资源摘要;别名命中(未确认)按未识别处理 */ export function searchResource(release: SearchRelease): ManualDownloadResource { const resolved = release.entityMatch === "resolved" ? release.entity : null; const promo = promoLabel(release.promotion.type); return { title: release.title, subtitle: release.subtitle, sizeBytes: release.sizeBytes, entityId: resolved?.id, entity: resolved, siteId: release.siteId, siteName: release.siteName, seeders: release.seeders, leechers: release.leechers, promotion: promo ? { label: promo, free: release.free } : null, hr: release.hr === "unknown" ? "unknown" : release.hr ? "yes" : "no", publishedAt: release.uploadedAt, kindHint: kindHintOf(release.parsed), }; } export function SearchDownloadActions({ release }: { release: SearchRelease }) { const submit = usePlanFromSearch(); return ( delegateToAgent(release)} submit={(options) => submit.mutateAsync({ ...options, siteId: release.siteId, siteReleaseId: release.siteReleaseId }) } /> ); }