feat: Retrieve unsaved apps from manager's root folder and known packages from user's apps list

This commit is contained in:
Alberto Ponces 2022-09-17 19:29:46 +01:00
parent bb4b59eee6
commit 5fbc8ff7a0

View File

@ -165,33 +165,96 @@ class ManagerAPI {
return packageInfo.version; return packageInfo.version;
} }
Future<void> reAssessSavedApps() async { Future<List<PatchedApplication>> getAppsToRemove(
List<PatchedApplication> patchedApps = getPatchedApps(); List<PatchedApplication> patchedApps,
) async {
List<PatchedApplication> toRemove = []; List<PatchedApplication> toRemove = [];
for (PatchedApplication app in patchedApps) { for (PatchedApplication app in patchedApps) {
bool isRemove = await isAppUninstalled(app); bool isRemove = await isAppUninstalled(app);
if (isRemove) { if (isRemove) {
toRemove.add(app); toRemove.add(app);
} else { }
app.hasUpdates = await hasAppUpdates(app.packageName, app.patchDate); }
app.changelog = await getAppChangelog(app.packageName, app.patchDate); return toRemove;
if (!app.hasUpdates) { }
String? currentInstalledVersion =
(await DeviceApps.getApp(app.packageName))?.versionName; Future<List<PatchedApplication>> getUnsavedApps(
if (currentInstalledVersion != null) { List<PatchedApplication> patchedApps,
String currentSavedVersion = app.version; ) async {
int currentInstalledVersionInt = int.parse( List<PatchedApplication> unsavedApps = [];
currentInstalledVersion.replaceAll(RegExp('[^0-9]'), '')); List<String> installedApps = await _rootAPI.getInstalledApps();
int currentSavedVersionInt = for (String packageName in installedApps) {
int.parse(currentSavedVersion.replaceAll(RegExp('[^0-9]'), '')); if (!patchedApps.any((app) => app.packageName == packageName)) {
if (currentInstalledVersionInt > currentSavedVersionInt) { ApplicationWithIcon? application =
app.hasUpdates = true; 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<Application> 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<void> reAssessSavedApps() async {
List<PatchedApplication> patchedApps = getPatchedApps();
List<PatchedApplication> unsavedApps = await getUnsavedApps(patchedApps);
patchedApps.addAll(unsavedApps);
List<PatchedApplication> 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;
} }
} }
} }
} }
patchedApps.removeWhere((a) => toRemove.contains(a));
await setPatchedApps(patchedApps); await setPatchedApps(patchedApps);
} }