Files
UHD_Media_Tool/apps/web/app/components/search/search-download-dialog.tsx
T

51 lines
1.9 KiB
TypeScript

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 (
<ManualDownloadActions
resource={searchResource(release)}
onDelegate={() => delegateToAgent(release)}
submit={(options) =>
submit.mutateAsync({ ...options, siteId: release.siteId, siteReleaseId: release.siteReleaseId })
}
/>
);
}