feat(scanner): complete localized artifact quality checkpoint
This commit is contained in:
@@ -4,12 +4,16 @@ import type {
|
||||
FocusGenshinResult,
|
||||
NativeScannerCatalogStatus,
|
||||
NativeScannerDataStatus,
|
||||
NativeScannerDeleteResultStatus,
|
||||
NativeScannerImageLoadStatus,
|
||||
NativeScannerPreflightStatus,
|
||||
NativeScannerProcessOptions,
|
||||
NativeScannerProcessStatus,
|
||||
NativeScannerProcessingProgressStatus,
|
||||
NativeScannerPromotionStatus,
|
||||
NativeScannerReviewArtifactInput,
|
||||
NativeScannerReviewStatus,
|
||||
NativeScannerResultsLoadOptions,
|
||||
NativeScannerResultsLoadStatus,
|
||||
NativeScannerRunStatus,
|
||||
NativeScannerStartCategory,
|
||||
@@ -30,10 +34,12 @@ interface AppCommandDependencies {
|
||||
nativeScannerStart: (options?: { limit?: number; category?: NativeScannerStartCategory }) => Promise<NativeScannerRunStatus>;
|
||||
nativeScannerStop: () => Promise<NativeScannerRunStatus>;
|
||||
nativeScannerStatus: () => Promise<NativeScannerRunStatus>;
|
||||
nativeScannerProcessRun: (options?: { runDir?: string; persist?: boolean; limit?: number }) => Promise<NativeScannerProcessStatus>;
|
||||
nativeScannerLoadResults: (options?: { runDir?: string; limit?: number }) => Promise<NativeScannerResultsLoadStatus>;
|
||||
nativeScannerProcessRun: (options?: NativeScannerProcessOptions) => Promise<NativeScannerProcessStatus>;
|
||||
nativeScannerProcessingStatus: () => Promise<NativeScannerProcessingProgressStatus>;
|
||||
nativeScannerLoadResults: (options?: NativeScannerResultsLoadOptions) => Promise<NativeScannerResultsLoadStatus>;
|
||||
nativeScannerPromoteResults: (options: { runDir?: string; resultIds: string[] }) => Promise<NativeScannerPromotionStatus>;
|
||||
nativeScannerReviewResult: (options: { runDir?: string; resultId: string; action: "approve" | "reject"; artifact?: NativeScannerReviewArtifactInput; note?: string }) => Promise<NativeScannerReviewStatus>;
|
||||
nativeScannerDeleteResult: (options: { runDir?: string; resultId: string; removeLinkedStoreRecord?: boolean }) => Promise<NativeScannerDeleteResultStatus>;
|
||||
nativeScannerLoadImage: (options: { runDir?: string; imagePath: string }) => Promise<NativeScannerImageLoadStatus>;
|
||||
getRuntimeInfo: () => Promise<RuntimeInfo>;
|
||||
loadSnapshot: () => Promise<AppSnapshot | null>;
|
||||
@@ -55,9 +61,11 @@ export function registerAppHandlers({
|
||||
nativeScannerStop,
|
||||
nativeScannerStatus,
|
||||
nativeScannerProcessRun,
|
||||
nativeScannerProcessingStatus,
|
||||
nativeScannerLoadResults,
|
||||
nativeScannerPromoteResults,
|
||||
nativeScannerReviewResult,
|
||||
nativeScannerDeleteResult,
|
||||
nativeScannerLoadImage,
|
||||
getRuntimeInfo,
|
||||
loadSnapshot,
|
||||
@@ -81,10 +89,12 @@ export function registerAppHandlers({
|
||||
ipcMain.handle("scanner:nativeStart", async (_event, options?: { limit?: number; category?: NativeScannerStartCategory }) => nativeScannerStart(options));
|
||||
ipcMain.handle("scanner:nativeStop", async () => nativeScannerStop());
|
||||
ipcMain.handle("scanner:nativeStatus", async () => nativeScannerStatus());
|
||||
ipcMain.handle("scanner:nativeProcessRun", async (_event, options?: { runDir?: string; persist?: boolean; limit?: number }) => nativeScannerProcessRun(options));
|
||||
ipcMain.handle("scanner:nativeLoadResults", async (_event, options?: { runDir?: string; limit?: number }) => nativeScannerLoadResults(options));
|
||||
ipcMain.handle("scanner:nativeProcessRun", async (_event, options?: NativeScannerProcessOptions) => nativeScannerProcessRun(options));
|
||||
ipcMain.handle("scanner:nativeProcessingStatus", async () => nativeScannerProcessingStatus());
|
||||
ipcMain.handle("scanner:nativeLoadResults", async (_event, options?: NativeScannerResultsLoadOptions) => nativeScannerLoadResults(options));
|
||||
ipcMain.handle("scanner:nativePromoteResults", async (_event, options: { runDir?: string; resultIds: string[] }) => nativeScannerPromoteResults(options));
|
||||
ipcMain.handle("scanner:nativeReviewResult", async (_event, options: { runDir?: string; resultId: string; action: "approve" | "reject"; artifact?: NativeScannerReviewArtifactInput; note?: string }) => nativeScannerReviewResult(options));
|
||||
ipcMain.handle("scanner:nativeDeleteResult", async (_event, options: { runDir?: string; resultId: string; removeLinkedStoreRecord?: boolean }) => nativeScannerDeleteResult(options));
|
||||
ipcMain.handle("scanner:nativeLoadImage", async (_event, options: { runDir?: string; imagePath: string }) => nativeScannerLoadImage(options));
|
||||
ipcMain.handle("app:getRuntimeInfo", async () => getRuntimeInfo());
|
||||
ipcMain.handle("snapshot:load", async () => loadSnapshot());
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { ipcMain } from "electron";
|
||||
import type {
|
||||
ArtifactStoreLoadResult,
|
||||
ArtifactStoreRemoveResult,
|
||||
ArtifactStoreRepositoryPort,
|
||||
ArtifactStoreSaveResult,
|
||||
ReviewSampleListResult,
|
||||
@@ -81,6 +82,33 @@ export function registerPersistenceHandlers({
|
||||
}
|
||||
});
|
||||
|
||||
// Intentionally accepts one exact local Store id only. Native result/crop
|
||||
// tombstones use their separate scanner workflow, and this handler never
|
||||
// invokes the input helper or sends any action to Genshin.
|
||||
ipcMain.handle("artifacts:removeOne", async (_event, id: unknown): Promise<ArtifactStoreRemoveResult> => {
|
||||
const artifactId = typeof id === "string" ? id.trim() : "";
|
||||
if (!artifactId) {
|
||||
return {
|
||||
ok: false,
|
||||
removed: 0,
|
||||
total: 0,
|
||||
path: artifactStorePath(),
|
||||
error: "A local artifact Store id is required.",
|
||||
};
|
||||
}
|
||||
try {
|
||||
return (await getArtifactStoreRepository().removeByIds([artifactId])) as ArtifactStoreRemoveResult;
|
||||
} catch {
|
||||
return {
|
||||
ok: false,
|
||||
removed: 0,
|
||||
total: 0,
|
||||
path: artifactStorePath(),
|
||||
error: "The local artifact Store record could not be removed.",
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
ipcMain.handle("good:export", async (_event, payload: GoodDatabase) => {
|
||||
return exportGood(payload);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user