decideFailedDownloadAction function

  1. @visibleForTesting
ResumeAction decideFailedDownloadAction({
  1. required bool canResume,
  2. required int resumeAttempt,
  3. required int currentAttempt,
  4. required int maxRetries,
  5. required int maxResumeAttempts,
})

Pure decision for _handleFailedDownload. Resume is only chosen while under maxResumeAttempts — the old code resumed unconditionally whenever canResume, which let a repeatedly-failing resume loop forever (#355).

Implementation

@visibleForTesting
ResumeAction decideFailedDownloadAction({
  required bool canResume,
  required int resumeAttempt,
  required int currentAttempt,
  required int maxRetries,
  required int maxResumeAttempts,
}) {
  if (canResume && resumeAttempt < maxResumeAttempts) {
    return ResumeAction.resume;
  }
  if (currentAttempt < maxRetries) {
    return ResumeAction.retry;
  }
  return ResumeAction.giveUp;
}