Existing APKs now reused again

With partial APKs avoided (#113)
This commit is contained in:
Imran Remtulla
2022-11-14 20:38:02 -05:00
parent 9576a99a4e
commit c8ec67aef3

View File

@@ -65,7 +65,9 @@ class AppsProvider with ChangeNotifier {
// Delete existing APKs // Delete existing APKs
(await getExternalStorageDirectory()) (await getExternalStorageDirectory())
?.listSync() ?.listSync()
.where((element) => element.path.endsWith('.apk')) .where((element) =>
element.path.endsWith('.apk') ||
element.path.endsWith('.apk.part'))
.forEach((apk) { .forEach((apk) {
apk.delete(); 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; var destDir = (await getExternalStorageDirectory())!.path;
StreamedResponse response = StreamedResponse response =
await Client().send(Request('GET', Uri.parse(url))); await Client().send(Request('GET', Uri.parse(url)));
File downloadedFile = File('$destDir/$fileName'); File downloadedFile = File('$destDir/$fileName');
if (!(downloadedFile.existsSync() && useExisting)) {
if (downloadedFile.existsSync()) { File tempDownloadedFile = File('${downloadedFile.path}.part');
downloadedFile.deleteSync(); if (tempDownloadedFile.existsSync()) {
} tempDownloadedFile.deleteSync();
var length = response.contentLength; }
var received = 0; var length = response.contentLength;
double? progress; var received = 0;
var sink = downloadedFile.openWrite(); double? progress;
var sink = tempDownloadedFile.openWrite();
await response.stream.map((s) { await response.stream.map((s) {
received += s.length; received += s.length;
progress = (length != null ? received / length * 100 : 30); progress = (length != null ? received / length * 100 : 30);
if (onProgress != null) {
onProgress(progress);
}
return s;
}).pipe(sink);
await sink.close();
progress = null;
if (onProgress != null) { if (onProgress != null) {
onProgress(progress); onProgress(progress);
} }
return s; if (response.statusCode != 200) {
}).pipe(sink); tempDownloadedFile.deleteSync();
throw response.reasonPhrase ?? 'Unknown Error';
await sink.close(); }
progress = null; tempDownloadedFile.renameSync(downloadedFile.path);
if (onProgress != null) {
onProgress(progress);
}
if (response.statusCode != 200) {
downloadedFile.deleteSync();
throw response.reasonPhrase ?? 'Unknown Error';
} }
return downloadedFile; return downloadedFile;
} }