estimateBackupWork function

BackupWorkEstimate estimateBackupWork({
  1. required Duration elapsed,
  2. required int processedBytes,
  3. required int totalBytes,
  4. required int processedFiles,
  5. required int totalFiles,
})

Implementation

BackupWorkEstimate estimateBackupWork({
  required Duration elapsed,
  required int processedBytes,
  required int totalBytes,
  required int processedFiles,
  required int totalFiles,
}) {
  final byteFraction =
      totalBytes <= 0 ? 1.0 : (processedBytes / totalBytes).clamp(0.0, 1.0);
  final fileFraction =
      totalFiles <= 0 ? 1.0 : (processedFiles / totalFiles).clamp(0.0, 1.0);
  final workFraction = (_byteProgressWeight * byteFraction) +
      (_fileProgressWeight * fileFraction);
  final progress =
      (workFraction * _archiveProgressLimit).clamp(0.0, _archiveProgressLimit);

  if (elapsed.inMilliseconds <= 0 || workFraction <= 0) {
    return BackupWorkEstimate(
      progress: progress,
      remaining: const Duration(seconds: 10),
    );
  }

  final estimatedWorkMs = elapsed.inMilliseconds / workFraction;
  final processingRemainingMs =
      (estimatedWorkMs - elapsed.inMilliseconds).clamp(0, double.infinity);
  final finalizationMs =
      (estimatedWorkMs * (1 - _archiveProgressLimit)).clamp(1500, 30000);
  return BackupWorkEstimate(
    progress: progress,
    remaining: Duration(
      milliseconds: (processingRemainingMs + finalizationMs).round(),
    ),
  );
}