estimateBackupWork function
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(),
),
);
}