import { DownloadersTable } from "./instances.tsx"; import { num } from "./resource-section.tsx"; import { SettingsBlock } from "./settings-block.tsx"; import { type CardSpec, n, SettingsCard, SettingsGate } from "./settings-card.tsx"; // 下载器分区:qB 实例(抽屉里有路径映射和本实例的水位 / 保种 / H&R)+ 下载盘水位与保种天数的缺省值。 // 实例上留空的项用这里的缺省值,所以两处用同一组名字:暂停线、恢复线、清理目标、保种天数。 export const CACHE_CARD: CardSpec = { anchor: "cache", title: "下载盘", description: "下载盘用量到暂停线时不再新增下载,并暂停本工具的下载任务;降到恢复线以下只恢复因此暂停的任务。实例里可以单独设置。", fields: [ { name: "cache.hardThresholdPercent", label: "暂停线(%)", kind: "number" }, { name: "cache.resumePercent", label: "恢复线(%)", kind: "number", hint: "低于暂停线" }, { name: "cache.cleanupTargetPercent", label: "清理目标(%)", kind: "number", hint: "不高于恢复线" }, { name: "cache.checkIntervalSec", label: "检查间隔(秒)", kind: "number", hint: "10–3600" }, ], fromSettings: (s) => ({ "cache.hardThresholdPercent": n(s.cache.hardThresholdPercent), "cache.resumePercent": n(s.cache.resumePercent), "cache.cleanupTargetPercent": n(s.cache.cleanupTargetPercent), "cache.checkIntervalSec": n(s.cache.checkIntervalSec), }), toPatch: (v) => ({ cache: { hardThresholdPercent: num(v["cache.hardThresholdPercent"]), resumePercent: num(v["cache.resumePercent"]), cleanupTargetPercent: num(v["cache.cleanupTargetPercent"]), checkIntervalSec: num(v["cache.checkIntervalSec"]), }, }), }; export const SEEDING_CARD: CardSpec = { anchor: "seeding", title: "保种", description: "复制整理后,下载源留在下载盘继续做种。站点的 H&R 要求另外遵守;实例里可以单独设置。", fields: [ { name: "retention.seedRetentionDays", label: "保种天数", kind: "number", hint: "到期后才允许清理;0–365", }, ], fromSettings: (s) => ({ "retention.seedRetentionDays": n(s.retention.seedRetentionDays) }), toPatch: (v) => ({ retention: { seedRetentionDays: num(v["retention.seedRetentionDays"]) } }), }; export function DownloadersSection() { return (