Merge branch 'scr2'

Co-Authored-By: Claude Fable 5.1 <[email protected]>

# Conflicts:
#	CHANGELOG.md
#	apps/server/src/modules/file-manager/routes.ts
This commit is contained in:
root committed 2026-10-01 00:09:01 +08:00
commit 44f7c88be6
41 files changed
+2810 -826

No files matched your search

+19 -2
View File
@@ -33,6 +33,7 @@ import {
FilesRenameResult,
type FilesScrapeBatchRequest,
FilesScrapeBatchResult,
FilesScrapeRecordsResult,
type FilesScrapeRequest,
FilesScrapeResult,
type FilesSuggestNameRequest,
@@ -70,11 +71,14 @@ export type {
FilesOrganizeItem,
FilesOrganizeRequest,
FilesScrapeBatchResult,
FilesScrapeNeedsChoice,
FilesScrapeResult,
FilesSuggestNameResult,
FilesTransferResult,
FilesTreeResult,
IdentifyCompletedPayload,
NamingTemplateSource,
ScrapeRecord,
TmdbCandidate,
TrashItem,
} from "@umt/contracts";
@@ -278,6 +282,19 @@ export function useFileRecords(q: { ids?: string[]; planIds?: string[] }, enable
});
}
/** 刮削记录回查:排队 / 进行中时每 2 秒刷新 */
export function useScrapeRecords(ids: string[]) {
return useQuery({
queryKey: ["files", "scrape-records", ids.join(",")],
enabled: ids.length > 0,
retry: false,
queryFn: ({ signal }) =>
call(FilesScrapeRecordsResult, "/files/scrape-records", { params: { ids: ids.join(",") }, signal }),
refetchInterval: (query) =>
query.state.data?.records.some((r) => r.status === "queued" || r.status === "running") ? 2_000 : false,
});
}
/** 整理记录 → 源 FileRef(整理记录页"重新整理") */
export function useRecordSources(recordId: string | null) {
return useQuery({
@@ -401,8 +418,8 @@ export const useOrganizeFiles = () =>
useFilesMutation((b: FilesOrganizeRequest) => post(FilesOrganizeResult, "/files/organize", b), {
invalidate: notDry,
});
export const useScrape = () =>
useMutation({ mutationFn: (b: FilesScrapeRequest) => post(FilesScrapeResult, "/files/scrape", b) });
/** 刮削(SCR-2):任意目录 / 视频文件就地写 NFO 与图片;认不准的项在 needsChoice 里,选定后再提交 */
export const useScrape = () => useFilesMutation((b: FilesScrapeRequest) => post(FilesScrapeResult, "/files/scrape", b));
export const useProbe = () => useFilesMutation((b: FilesProbeRequest) => post(FilesProbeResult, "/files/probe", b));
export const useScrapeBatch = () =>
useMutation({ mutationFn: (b: FilesScrapeBatchRequest) => post(FilesScrapeBatchResult, "/files/scrape-batch", b) });
+1 -1
View File
@@ -82,7 +82,7 @@ export function useLibraryDetail(id: string | undefined) {
});
}
/** SCR-1 刮削:写 NFO 与图片到媒体库目录(后台任务);mode 缺省按设置 */
/** 刮削:对作品目录就地写 NFO 与图片(后台任务,SCR-2 与文件管理「刮削」同一实现);mode 缺省按设置 */
export function useScrapeEntity(id: string) {
const qc = useQueryClient();
return useMutation({