From c8ec67aef37e8b702b88af988a00310aaed12d1b Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Mon, 14 Nov 2022 20:38:02 -0500 Subject: [PATCH] Existing APKs now reused again With partial APKs avoided (#113) --- lib/providers/apps_provider.dart | 55 +++++++++++++++++--------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 87b49d6..ba150f3 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -65,7 +65,9 @@ class AppsProvider with ChangeNotifier { // Delete existing APKs (await getExternalStorageDirectory()) ?.listSync() - .where((element) => element.path.endsWith('.apk')) + .where((element) => + element.path.endsWith('.apk') || + element.path.endsWith('.apk.part')) .forEach((apk) { apk.delete(); }); @@ -73,38 +75,39 @@ class AppsProvider with ChangeNotifier { } } - downloadFile(String url, String fileName, Function? onProgress) async { + downloadFile(String url, String fileName, Function? onProgress, + {bool useExisting = true}) async { var destDir = (await getExternalStorageDirectory())!.path; StreamedResponse response = await Client().send(Request('GET', Uri.parse(url))); File downloadedFile = File('$destDir/$fileName'); - - if (downloadedFile.existsSync()) { - downloadedFile.deleteSync(); - } - var length = response.contentLength; - var received = 0; - double? progress; - var sink = downloadedFile.openWrite(); - - await response.stream.map((s) { - received += s.length; - progress = (length != null ? received / length * 100 : 30); + if (!(downloadedFile.existsSync() && useExisting)) { + File tempDownloadedFile = File('${downloadedFile.path}.part'); + if (tempDownloadedFile.existsSync()) { + tempDownloadedFile.deleteSync(); + } + var length = response.contentLength; + var received = 0; + double? progress; + var sink = tempDownloadedFile.openWrite(); + await response.stream.map((s) { + received += s.length; + progress = (length != null ? received / length * 100 : 30); + if (onProgress != null) { + onProgress(progress); + } + return s; + }).pipe(sink); + await sink.close(); + progress = null; if (onProgress != null) { onProgress(progress); } - return s; - }).pipe(sink); - - await sink.close(); - progress = null; - if (onProgress != null) { - onProgress(progress); - } - - if (response.statusCode != 200) { - downloadedFile.deleteSync(); - throw response.reasonPhrase ?? 'Unknown Error'; + if (response.statusCode != 200) { + tempDownloadedFile.deleteSync(); + throw response.reasonPhrase ?? 'Unknown Error'; + } + tempDownloadedFile.renameSync(downloadedFile.path); } return downloadedFile; }