Better error message for file deletion failures (#2298)

This commit is contained in:
Imran Remtulla
2025-05-30 23:48:14 -04:00
parent 3edaa143e4
commit 63e71624f9
28 changed files with 42 additions and 7 deletions

View File

@@ -234,6 +234,14 @@ Future<String?> checkETagHeader(String url,
.toString();
}
deleteFile(File file) {
try {
file.deleteSync(recursive: true);
} on PathAccessException catch (e) {
throw ObtainiumError(tr('fileDeletionError', args: [e.path ?? tr('unknown')]));
}
}
Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
Function? onProgress, String destDir,
{bool useExisting = true,
@@ -348,7 +356,7 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
reqHeaders.addAll({'range': 'bytes=$rangeStart-${fullContentLength - 1}'});
sink = tempDownloadedFile.openWrite(mode: FileMode.writeOnlyAppend);
} else if (tempDownloadedFile.existsSync()) {
tempDownloadedFile.deleteSync(recursive: true);
deleteFile(tempDownloadedFile);
}
var responseWithClient =
await sourceRequestStreamResponse('GET', url, reqHeaders, {});
@@ -404,7 +412,7 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
onProgress(progress);
}
if (response.statusCode < 200 || response.statusCode > 299) {
tempDownloadedFile.deleteSync(recursive: true);
deleteFile(tempDownloadedFile);
throw response.reasonPhrase;
}
if (tempDownloadedFile.existsSync()) {
@@ -797,9 +805,9 @@ class AppsProvider with ChangeNotifier {
await pm.getPackageArchiveInfo(archiveFilePath: file.file.path);
if (newInfo == null) {
try {
file.file.deleteSync(recursive: true);
deleteFile(file.file);
for (var a in additionalAPKs) {
a.file.deleteSync(recursive: true);
deleteFile(a.file);
}
} catch (e) {
//
@@ -839,7 +847,7 @@ class AppsProvider with ChangeNotifier {
bool installed = false;
if (code != null && code != 0 && code != 3) {
try {
file.file.deleteSync(recursive: true);
deleteFile(file.file);
} catch (e) {
//
} finally {
@@ -1511,7 +1519,7 @@ class AppsProvider with ChangeNotifier {
await Future.wait(appIds.map((appId) async {
File file = File('${(await getAppsDir()).path}/$appId.json');
if (file.existsSync()) {
file.deleteSync(recursive: true);
deleteFile(file);
}
apkFiles
.where(