diff --git a/lib/models/filedownloadprogress.dart b/lib/models/filedownloadprogress.dart index 52542206..6b0a1935 100644 --- a/lib/models/filedownloadprogress.dart +++ b/lib/models/filedownloadprogress.dart @@ -3,12 +3,22 @@ class FileDownloadProgress { int chunksTotal = 1; bool complete = false; bool gotManifest = false; - bool interrupted = false; + bool _interrupted = false; + + // we keep track of both an explicit interrupt flag (for when a request fails or is explicitly cancelled) + set interrupted(isInterrupted) { + this._interrupted = isInterrupted; + } + + // but we have a fuzzy get which depends on lastUpdate, if the file isn't complete, but the last update was more + // that 30 seconds ago, we consider this download as failed. + get interrupted => _interrupted || (DateTime.now().difference(lastUpdate).abs().inSeconds > 30 && !complete); + String? downloadedTo; DateTime? timeStart; DateTime? timeEnd; DateTime? requested; - DateTime lastUpdate = DateTime.now(); + DateTime lastUpdate = DateTime.fromMillisecondsSinceEpoch(0); FileDownloadProgress(this.chunksTotal, this.timeStart); diff --git a/lib/models/profile.dart b/lib/models/profile.dart index a1e62ac3..746bcad4 100644 --- a/lib/models/profile.dart +++ b/lib/models/profile.dart @@ -383,19 +383,6 @@ class ProfileInfoState extends ChangeNotifier { if (this._downloads[fileKey]!.interrupted) { return true; } - - if (this._downloads[fileKey]!.requested != null) { - if (DateTime.now().difference(this._downloads[fileKey]!.requested!) > Duration(minutes: 1)) { - this._downloads[fileKey]!.requested = null; - this._downloads[fileKey]!.interrupted = true; - return true; - } - if (DateTime.now().difference(this._downloads[fileKey]!.lastUpdate) > Duration(minutes: 1)) { - this._downloads[fileKey]!.requested = null; - this._downloads[fileKey]!.interrupted = true; - return true; - } - } } return false; }