Skip to content

Commit

Permalink
perf: Do not load patches twice
Browse files Browse the repository at this point in the history
  • Loading branch information
oSumAtrIX committed Oct 4, 2023
1 parent 4de274b commit 012110f
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import app.revanced.manager.flutter.utils.signing.Signer
import app.revanced.manager.flutter.utils.zip.ZipFile
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
import app.revanced.patcher.PatchBundleLoader
import app.revanced.patcher.PatchSet
import app.revanced.patcher.Patcher
import app.revanced.patcher.PatcherOptions
import app.revanced.patcher.patch.PatchResult
Expand All @@ -31,6 +32,8 @@ class MainActivity : FlutterActivity() {
private var cancel: Boolean = false
private var stopResult: MethodChannel.Result? = null

private lateinit var patches: PatchSet

override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)

Expand All @@ -46,7 +49,6 @@ class MainActivity : FlutterActivity() {
mainChannel.setMethodCallHandler { call, result ->
when (call.method) {
"runPatcher" -> {
val patchBundleFilePath = call.argument<String>("patchBundleFilePath")
val originalFilePath = call.argument<String>("originalFilePath")
val inputFilePath = call.argument<String>("inputFilePath")
val patchedFilePath = call.argument<String>("patchedFilePath")
Expand All @@ -57,7 +59,7 @@ class MainActivity : FlutterActivity() {
val keyStoreFilePath = call.argument<String>("keyStoreFilePath")
val keystorePassword = call.argument<String>("keystorePassword")

if (patchBundleFilePath != null &&
if (
originalFilePath != null &&
inputFilePath != null &&
patchedFilePath != null &&
Expand All @@ -71,7 +73,6 @@ class MainActivity : FlutterActivity() {
cancel = false
runPatcher(
result,
patchBundleFilePath,
originalFilePath,
inputFilePath,
patchedFilePath,
Expand All @@ -94,17 +95,19 @@ class MainActivity : FlutterActivity() {
val patchBundleFilePath = call.argument<String>("patchBundleFilePath")!!
val cacheDirPath = call.argument<String>("cacheDirPath")!!

try {
patches = PatchBundleLoader.Dex(
File(patchBundleFilePath),
optimizedDexDirectory = File(cacheDirPath)
)
} catch (ex: Exception) {
return@setMethodCallHandler result.notImplemented()
} catch (err: Error) {
return@setMethodCallHandler result.notImplemented()
}

JSONArray().apply {
try {
PatchBundleLoader.Dex(
File(patchBundleFilePath),
optimizedDexDirectory = File(cacheDirPath)
)
} catch (ex: Exception) {
return@setMethodCallHandler result.notImplemented()
} catch (err: Error) {
return@setMethodCallHandler result.notImplemented()
}.forEach {
patches.forEach {
JSONObject().apply {
put("name", it.name)
put("description", it.description)
Expand Down Expand Up @@ -136,7 +139,6 @@ class MainActivity : FlutterActivity() {

private fun runPatcher(
result: MethodChannel.Result,
patchBundleFilePath: String,
originalFilePath: String,
inputFilePath: String,
patchedFilePath: String,
Expand Down Expand Up @@ -223,10 +225,7 @@ class MainActivity : FlutterActivity() {

updateProgress(0.1, "Loading patches...", "Loading patches")

val patches = PatchBundleLoader.Dex(
File(patchBundleFilePath),
optimizedDexDirectory = cacheDir
).filter { patch ->
val patches = patches.filter { patch ->
val isCompatible = patch.compatiblePackages?.any {
it.name == patcher.context.packageMetadata.packageName
} ?: false
Expand Down
16 changes: 6 additions & 10 deletions lib/services/patcher_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,7 @@ class PatcherAPI {
}

List<Patch> getUniversalPatches() {
return _patches
.where((patch) => patch.compatiblePackages.isEmpty)
.toList();
return _patches.where((patch) => patch.compatiblePackages.isEmpty).toList();
}

Future<void> _loadPatches() async {
Expand All @@ -85,15 +83,14 @@ class PatcherAPI {
) async {
final List<ApplicationWithIcon> filteredApps = [];
final bool allAppsIncluded =
_universalPatches.isNotEmpty &&
showUniversalPatches;
_universalPatches.isNotEmpty && showUniversalPatches;
if (allAppsIncluded) {
final appList = await DeviceApps.getInstalledApplications(
includeAppIcons: true,
onlyAppsWithLaunchIntent: true,
);

for(final app in appList) {
for (final app in appList) {
filteredApps.add(app as ApplicationWithIcon);
}
}
Expand Down Expand Up @@ -154,9 +151,9 @@ class PatcherAPI {
String apkFilePath,
List<Patch> selectedPatches,
) async {
final File? patchBundleFile = await _managerAPI.downloadPatches();
final File? integrationsFile = await _managerAPI.downloadIntegrations();
if (patchBundleFile != null) {

if (integrationsFile != null) {
_dataDir.createSync();
_tmpDir.createSync();
final Directory workDir = _tmpDir.createTempSync('tmp-');
Expand All @@ -170,12 +167,11 @@ class PatcherAPI {
await patcherChannel.invokeMethod(
'runPatcher',
{
'patchBundleFilePath': patchBundleFile.path,
'originalFilePath': originalFilePath,
'inputFilePath': inputFile.path,
'patchedFilePath': patchedFile.path,
'outFilePath': outFile!.path,
'integrationsPath': integrationsFile!.path,
'integrationsPath': integrationsFile.path,
'selectedPatches': selectedPatches.map((p) => p.name).toList(),
'cacheDirPath': cacheDir.path,
'keyStoreFilePath': _keyStoreFile.path,
Expand Down
2 changes: 2 additions & 0 deletions lib/ui/views/installer/installer_viewmodel.dart
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ class InstallerViewModel extends BaseViewModel {
isInstalled = false;
hasErrors = false;
} else if (value == 1.0) {
_managerAPI.patches.clear();

isPatching = false;
hasErrors = false;
await _managerAPI.savePatches(
Expand Down

0 comments on commit 012110f

Please sign in to comment.