feat(subscriptions): 按 MP 收敛订阅默认值与表单

- 定时主动搜索默认关(DEFAULT_SEARCH_INTERVAL_HOURS = 0),新建 / 手动照常各搜一次,之后靠 RSS 与站点快照
- 多版本自动补全系统缺省改为关
- 表单:基础页 = 作品与范围、下载、洗版;收录版本、优先级、自动补全折叠到进阶页「多版本」
- 对照文档 §7.3 记录落实范围

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
rootandClaude Opus 5.5 committed 2026-10-02 22:34:48 +08:00
1 parent 709414778e
commit ed083fd138
12 files changed
+111 -74

No files matched your search

@@ -50,7 +50,13 @@ describe.skipIf(!hasPg)("订阅增强(真实 PG + mock qB + 临时目录)", () =
async function seriesSlot(
title: string,
opts: { mode?: "once" | "continuous"; status?: "active" | "pending"; hard?: object; upgrade?: object } = {},
opts: {
mode?: "once" | "continuous";
status?: "active" | "pending";
hard?: object;
upgrade?: object;
params?: object;
} = {},
) {
const entityId = await seedEntity(h.db, { kind: "series", title, year: 2024 });
const sub = await db()
@@ -60,6 +66,7 @@ describe.skipIf(!hasPg)("订阅增强(真实 PG + mock qB + 临时目录)", () =
media_kind: "series",
mode: opts.mode ?? "continuous",
status: opts.status ?? "active",
...(opts.params ? { params: JSON.stringify(opts.params) } : {}),
})
.returning("id")
.executeTakeFirstOrThrow();
@@ -275,7 +282,7 @@ describe.skipIf(!hasPg)("订阅增强(真实 PG + mock qB + 临时目录)", () =
}, 90_000);
it("多个目标版本按各自已接收单元完成,单版本入库不提前完成订阅", async () => {
const { entityId, subId } = await seriesSlot("双版本剧", { mode: "once" });
const { entityId, subId } = await seriesSlot("双版本剧", { mode: "once", params: { autoFill: "on" } });
await db()
.insertInto("acquisition_slot")
.values({