mirror of
https://github.com/binaricat/Netcatty.git
synced 2026-10-09 15:58:34 +00:00
100 lines
2.8 KiB
TypeScript
100 lines
2.8 KiB
TypeScript
import type { TransferTask, TransferStatus } from "../../../domain/models";
|
|
import type { UploadCallbacks, UploadTaskInfo } from "../../../lib/uploadService";
|
|
import { joinPath } from "./utils";
|
|
|
|
interface UploadTaskCallbacksParams {
|
|
connectionId: string;
|
|
targetPath: string;
|
|
targetHostId?: string;
|
|
targetConnectionKey?: string;
|
|
addExternalUpload?: (task: TransferTask) => void;
|
|
updateExternalUpload?: (taskId: string, updates: Partial<TransferTask>) => void;
|
|
dismissExternalUpload?: (taskId: string) => void;
|
|
}
|
|
|
|
export const createUploadTaskCallbacks = ({
|
|
connectionId,
|
|
targetPath,
|
|
targetHostId,
|
|
targetConnectionKey,
|
|
addExternalUpload,
|
|
updateExternalUpload,
|
|
dismissExternalUpload,
|
|
}: UploadTaskCallbacksParams): UploadCallbacks => ({
|
|
onScanningStart: (taskId: string) => {
|
|
if (!addExternalUpload) return;
|
|
addExternalUpload({
|
|
id: taskId,
|
|
fileName: "Scanning files...",
|
|
sourcePath: "local",
|
|
targetPath,
|
|
sourceConnectionId: "external",
|
|
targetConnectionId: connectionId,
|
|
targetHostId,
|
|
targetConnectionKey,
|
|
direction: "upload",
|
|
status: "pending" as TransferStatus,
|
|
totalBytes: 0,
|
|
transferredBytes: 0,
|
|
speed: 0,
|
|
startTime: Date.now(),
|
|
isDirectory: true,
|
|
progressMode: "bytes",
|
|
});
|
|
},
|
|
onScanningEnd: (taskId: string) => {
|
|
dismissExternalUpload?.(taskId);
|
|
},
|
|
onTaskCreated: (task: UploadTaskInfo) => {
|
|
if (!addExternalUpload) return;
|
|
addExternalUpload({
|
|
id: task.id,
|
|
fileName: task.displayName,
|
|
sourcePath: "local",
|
|
targetPath: joinPath(targetPath, task.fileName),
|
|
sourceConnectionId: "external",
|
|
targetConnectionId: connectionId,
|
|
targetHostId,
|
|
targetConnectionKey,
|
|
direction: "upload",
|
|
status: "transferring" as TransferStatus,
|
|
totalBytes: task.totalBytes,
|
|
transferredBytes: 0,
|
|
speed: 0,
|
|
startTime: Date.now(),
|
|
isDirectory: task.isDirectory,
|
|
progressMode: task.progressMode ?? "bytes",
|
|
parentTaskId: task.parentTaskId,
|
|
});
|
|
},
|
|
onTaskProgress: (taskId: string, progress) => {
|
|
updateExternalUpload?.(taskId, {
|
|
transferredBytes: progress.transferred,
|
|
speed: progress.speed,
|
|
});
|
|
},
|
|
onTaskCompleted: (taskId: string, totalBytes: number) => {
|
|
updateExternalUpload?.(taskId, {
|
|
status: "completed" as TransferStatus,
|
|
endTime: Date.now(),
|
|
transferredBytes: totalBytes,
|
|
speed: 0,
|
|
});
|
|
},
|
|
onTaskFailed: (taskId: string, error: string) => {
|
|
updateExternalUpload?.(taskId, {
|
|
status: "failed" as TransferStatus,
|
|
endTime: Date.now(),
|
|
error,
|
|
speed: 0,
|
|
});
|
|
},
|
|
onTaskCancelled: (taskId: string) => {
|
|
updateExternalUpload?.(taskId, {
|
|
status: "cancelled" as TransferStatus,
|
|
endTime: Date.now(),
|
|
speed: 0,
|
|
});
|
|
},
|
|
});
|