mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-11-01 22:03:29 +01:00
Attempt at more resilient XAPK installs (#682)
This commit is contained in:
@@ -341,20 +341,33 @@ class AppsProvider with ChangeNotifier {
|
|||||||
|
|
||||||
Future<void> installXApkDir(DownloadedXApkDir dir,
|
Future<void> installXApkDir(DownloadedXApkDir dir,
|
||||||
{bool silent = false}) async {
|
{bool silent = false}) async {
|
||||||
|
// We don't know which APKs in an XAPK are supported by the user's device
|
||||||
|
// So we try installing all of them and assume success if at least one installed
|
||||||
|
// If 0 APKs installed, throw the first install error encountered
|
||||||
try {
|
try {
|
||||||
var somethingInstalled = false;
|
var somethingInstalled = false;
|
||||||
|
var firstError = null;
|
||||||
for (var file in dir.extracted
|
for (var file in dir.extracted
|
||||||
.listSync(recursive: true, followLinks: false)
|
.listSync(recursive: true, followLinks: false)
|
||||||
.whereType<File>()) {
|
.whereType<File>()) {
|
||||||
if (file.path.toLowerCase().endsWith('.apk')) {
|
if (file.path.toLowerCase().endsWith('.apk')) {
|
||||||
somethingInstalled = somethingInstalled ||
|
try {
|
||||||
await installApk(DownloadedApk(dir.appId, file), silent: silent);
|
somethingInstalled = somethingInstalled ||
|
||||||
|
await installApk(DownloadedApk(dir.appId, file),
|
||||||
|
silent: silent);
|
||||||
|
} catch (e) {
|
||||||
|
logs.add(
|
||||||
|
'Could not install APK from XAPK \'${file.path}\': ${e.toString()}');
|
||||||
|
firstError ??= e;
|
||||||
|
}
|
||||||
} else if (file.path.toLowerCase().endsWith('.obb')) {
|
} else if (file.path.toLowerCase().endsWith('.obb')) {
|
||||||
await moveObbFile(file, dir.appId);
|
await moveObbFile(file, dir.appId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (somethingInstalled) {
|
if (somethingInstalled) {
|
||||||
dir.file.delete(recursive: true);
|
dir.file.delete(recursive: true);
|
||||||
|
} else if (firstError) {
|
||||||
|
throw firstError;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
dir.extracted.delete(recursive: true);
|
dir.extracted.delete(recursive: true);
|
||||||
|
|||||||
Reference in New Issue
Block a user