import FileServer from '../file-server'; import { FileProgress, TaskProgress, TaskStatus, UploadTaskOptions } from './types'; export declare class FastUploadTask { private taskId; private taskName; private server; private options; private tracker; private status; private progressInterval?; private readonly fileInfoConcurrency; private readonly uploadConcurrency; private currentFileInfoConcurrency; private activeFileInfoCount; private activeUploadCount; private pendingInfoQueue; private pendingUploadQueue; private pendingFiles; private rootDirStatusMap; private rootDirWaitingFiles; private activeRootInfoCount; private uploadContexts; private completedRequestIds; private isServerEventAttached; private isLoggedIn; private pendingEmptyDirs; private isScanComplete; private scannedFileCount; private inputFileCount; private hasReportedTaskStart; private taskIsAllDone; private requestIdCounter; private primaryRootName; private smallFileCompressor; /** 缓存 getFileInfo 响应 */ private fileInfoResponseMap; /** 缓存 uploadStart 响应 */ private uploadStartResponseMap; private loginInfo?; private groupId?; private spaceId?; constructor(server: FileServer, files: FileList | File[] | DataTransferItemList, options: UploadTaskOptions, loginInfo?: { username: string; password: string; spaceId: number; authWay: number; isEncrypt: boolean; }, groupId?: number, spaceId?: number); pause(): void; resume(): void; cancel(): void; getProgress(): TaskProgress; getTaskId(): number; getStatus(): TaskStatus; getAllFiles(): FileProgress[]; getFile(requestId: number): FileProgress | undefined; private isFileListOrArray; private processFileListDirectly; private scanDataTransferItems; private isCompressionEnabled; private maybeCollectSmallFile; private finalizeSmallFileCompression; private registerScannedFiles; private registerFile; private startLogin; private processPendingFiles; private enqueueForFileInfo; private ensureRootDirectoryChecked; private flushRootWaitingFiles; private routeFileBySize; private enqueueDirectUpload; private pumpGetFileInfoQueue; private pumpUploadStartQueue; private startUploadWithoutBlocking; private sendUploadStart; private bindReader; private pumpReadAndSend; private sendUploadSuccessWhenReady; private sendChunk; /** * Send upload data directly through websocket to avoid occupying * FileServer.pending[requestId], which is single-slot per requestId. * This prevents ON_UPLOADING / ON_UPLOAD_SUCCESS from overwriting * the pending promise of ON_UPLOAD_START. */ private sendRawCommand; private handleInstantTransfer; private resolveSeek; private buildFullPath; private buildUploadPath; private nextRequestId; private shouldFilterFile; private extractFirstLevel; private extractDirectory; private extractRootDirectory; private buildRootPath; private calcInputCount; private getRootWaitingCount; private attachServerEvents; private markUploadResult; private cleanupCompletedFileCaches; private releaseUploadSlot; private updateTaskStatusByPhase; private startProgressReporting; private stopProgressReporting; private checkCompletion; private handleError; private cleanupTaskCaches; private closeServerConnection; private checkServerStatus; private isReportedConnectionInfo; private reportConnectionInfo; private reportTaskStart; private reportUploadProgress; private reportTaskCompletion; private createEmptyDirectory; private buildTaskName; private getPlatform; }