From 5fbc8ff7a0081f04680e0a88211f50446f6e83c2 Mon Sep 17 00:00:00 2001 From: Alberto Ponces Date: Sat, 17 Sep 2022 19:29:46 +0100 Subject: [PATCH] feat: Retrieve unsaved apps from manager's root folder and known packages from user's apps list --- lib/services/manager_api.dart | 99 ++++++++++++++++++++++++++++------- 1 file changed, 81 insertions(+), 18 deletions(-) diff --git a/lib/services/manager_api.dart b/lib/services/manager_api.dart index 8c9e3e731d..b77a0d4595 100644 --- a/lib/services/manager_api.dart +++ b/lib/services/manager_api.dart @@ -165,33 +165,96 @@ class ManagerAPI { return packageInfo.version; } - Future reAssessSavedApps() async { - List patchedApps = getPatchedApps(); + Future> getAppsToRemove( + List patchedApps, + ) async { List toRemove = []; for (PatchedApplication app in patchedApps) { bool isRemove = await isAppUninstalled(app); if (isRemove) { toRemove.add(app); - } else { - app.hasUpdates = await hasAppUpdates(app.packageName, app.patchDate); - app.changelog = await getAppChangelog(app.packageName, app.patchDate); - if (!app.hasUpdates) { - String? currentInstalledVersion = - (await DeviceApps.getApp(app.packageName))?.versionName; - if (currentInstalledVersion != null) { - String currentSavedVersion = app.version; - int currentInstalledVersionInt = int.parse( - currentInstalledVersion.replaceAll(RegExp('[^0-9]'), '')); - int currentSavedVersionInt = - int.parse(currentSavedVersion.replaceAll(RegExp('[^0-9]'), '')); - if (currentInstalledVersionInt > currentSavedVersionInt) { - app.hasUpdates = true; - } - } + } + } + return toRemove; + } + + Future> getUnsavedApps( + List patchedApps, + ) async { + List unsavedApps = []; + List installedApps = await _rootAPI.getInstalledApps(); + for (String packageName in installedApps) { + if (!patchedApps.any((app) => app.packageName == packageName)) { + ApplicationWithIcon? application = + await DeviceApps.getApp(packageName, true) as ApplicationWithIcon?; + if (application != null) { + unsavedApps.add( + PatchedApplication( + name: application.appName, + packageName: application.packageName, + version: application.versionName!, + apkFilePath: application.apkFilePath, + icon: application.icon, + patchDate: DateTime.now(), + isRooted: true, + ), + ); + } + } + } + List userApps = await DeviceApps.getInstalledApplications( + includeSystemApps: false, + includeAppIcons: false, + ); + for (Application app in userApps) { + if (app.packageName.startsWith('app.revanced') && + !app.packageName.startsWith('app.revanced.manager.')) { + ApplicationWithIcon? application = + await DeviceApps.getApp(app.packageName, true) + as ApplicationWithIcon?; + if (application != null) { + unsavedApps.add( + PatchedApplication( + name: application.appName, + packageName: application.packageName, + version: application.versionName!, + apkFilePath: application.apkFilePath, + icon: application.icon, + patchDate: DateTime.now(), + isRooted: false, + ), + ); } } } + + return unsavedApps; + } + + Future reAssessSavedApps() async { + List patchedApps = getPatchedApps(); + List unsavedApps = await getUnsavedApps(patchedApps); + patchedApps.addAll(unsavedApps); + List toRemove = await getAppsToRemove(patchedApps); patchedApps.removeWhere((a) => toRemove.contains(a)); + for (PatchedApplication app in patchedApps) { + app.hasUpdates = await hasAppUpdates(app.packageName, app.patchDate); + app.changelog = await getAppChangelog(app.packageName, app.patchDate); + if (!app.hasUpdates) { + String? currentInstalledVersion = + (await DeviceApps.getApp(app.packageName))?.versionName; + if (currentInstalledVersion != null) { + String currentSavedVersion = app.version; + int currentInstalledVersionInt = int.parse( + currentInstalledVersion.replaceAll(RegExp('[^0-9]'), '')); + int currentSavedVersionInt = + int.parse(currentSavedVersion.replaceAll(RegExp('[^0-9]'), '')); + if (currentInstalledVersionInt > currentSavedVersionInt) { + app.hasUpdates = true; + } + } + } + } await setPatchedApps(patchedApps); }