import { FileProgress, QueuedFile, TaskProgress, TaskReportInfo, TaskStatus } from './types'; /** * Progress Tracker * Tracks upload progress of tasks and files */ export declare class ProgressTracker { private taskId; private taskName; private files; private orderedFiles; private startTime; private speedHistory; private speedHistoryHead; private baseDir; private expectedTotalFiles; private aggregate; private preCollectedPaths; constructor(taskId: number, baseDir: string); setTaskName(taskName: string): void; /** * Set expected total file count (for lazy initialization) */ setExpectedTotalFiles(count: number): void; /** * Pre-collect file path for early reporting (before full initialization) * This allows reportConnectionInfo to work even before files are fully initialized */ preCollectFilePath(relativePath: string, requestId: number): void; /** * Get full directory path */ private getFullDir; /** * Extract first level directory or file name * Example: folder/subfolder/file.txt -> folder * file.txt -> file.txt */ private extractFirstLevel; /** * Initialize file */ initFile(file: QueuedFile): void; /** * Update file progress */ updateFile(requestId: number, update: Partial): void; /** * Calculate task progress */ calculateProgress(currentTaskStatus?: TaskStatus): TaskProgress; /** * Calculate task report info (for internal reporting) * Works with both initialized files and pre-collected paths */ calculateReportInfo(): TaskReportInfo; /** * Calculate speed (moving average) */ private calculateSpeed; /** * Pause speed calculation (preserve history, stop calculating) */ pauseSpeed(): void; /** * Resume speed calculation (continue from current state) */ resumeSpeed(): void; /** * Get file progress */ getFile(requestId: number): FileProgress | undefined; /** * Get all files */ getAllFiles(): FileProgress[]; /** * Reset progress */ reset(): void; private getFileContribution; private applyContributionDelta; }