mirror of
https://github.com/revanced/revanced-manager
synced 2024-05-14 13:56:57 +02:00
fix: load patches via PatchBundle
(#1242)
This commit is contained in:
parent
9ad1d6cbfb
commit
4b8542b35b
@ -11,6 +11,9 @@ import app.revanced.patcher.PatchBundleLoader
|
||||
import app.revanced.patcher.Patcher
|
||||
import app.revanced.patcher.PatcherOptions
|
||||
import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
|
||||
import app.revanced.patcher.extensions.PatchExtensions.dependencies
|
||||
import app.revanced.patcher.extensions.PatchExtensions.description
|
||||
import app.revanced.patcher.extensions.PatchExtensions.include
|
||||
import app.revanced.patcher.extensions.PatchExtensions.patchName
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
@ -89,6 +92,29 @@ class MainActivity : FlutterActivity() {
|
||||
stopResult = result
|
||||
}
|
||||
|
||||
"getPatches" -> {
|
||||
val patchBundleFilePath = call.argument<String>("patchBundleFilePath")
|
||||
if (patchBundleFilePath != null) {
|
||||
val patches = PatchBundleLoader.Dex(
|
||||
File(patchBundleFilePath)
|
||||
).map { patch ->
|
||||
val map = HashMap<String, Any>()
|
||||
map["\"name\""] = "\"${patch.patchName.replace("\"","\\\"")}\""
|
||||
map["\"description\""] = "\"${patch.description?.replace("\"","\\\"")}\""
|
||||
map["\"excluded\""] = !patch.include
|
||||
map["\"dependencies\""] = patch.dependencies?.map { "\"${it.java.patchName}\"" } ?: emptyList<Any>()
|
||||
map["\"compatiblePackages\""] = patch.compatiblePackages?.map {
|
||||
val map2 = HashMap<String, Any>()
|
||||
map2["\"name\""] = "\"${it.name}\""
|
||||
map2["\"versions\""] = it.versions.map { version -> "\"${version}\"" }
|
||||
map2
|
||||
} ?: emptyList<Any>()
|
||||
map
|
||||
}
|
||||
result.success(patches)
|
||||
} else result.notImplemented()
|
||||
}
|
||||
|
||||
else -> result.notImplemented()
|
||||
}
|
||||
}
|
||||
|
@ -222,10 +222,8 @@ class GithubAPI {
|
||||
final String downloadUrl = asset['browser_download_url'];
|
||||
if (extension == '.apk') {
|
||||
_managerAPI.setIntegrationsDownloadURL(downloadUrl);
|
||||
} else if (extension == '.json') {
|
||||
_managerAPI.setPatchesDownloadURL(downloadUrl, false);
|
||||
} else {
|
||||
_managerAPI.setPatchesDownloadURL(downloadUrl, true);
|
||||
_managerAPI.setPatchesDownloadURL(downloadUrl);
|
||||
}
|
||||
return await DefaultCacheManager().getSingleFile(
|
||||
downloadUrl,
|
||||
|
@ -11,6 +11,7 @@ import 'package:revanced_manager/app/app.locator.dart';
|
||||
import 'package:revanced_manager/models/patch.dart';
|
||||
import 'package:revanced_manager/models/patched_application.dart';
|
||||
import 'package:revanced_manager/services/github_api.dart';
|
||||
import 'package:revanced_manager/services/patcher_api.dart';
|
||||
import 'package:revanced_manager/services/revanced_api.dart';
|
||||
import 'package:revanced_manager/services/root_api.dart';
|
||||
import 'package:revanced_manager/ui/widgets/shared/custom_material_button.dart';
|
||||
@ -26,6 +27,7 @@ class ManagerAPI {
|
||||
final String patcherRepo = 'revanced-patcher';
|
||||
final String cliRepo = 'revanced-cli';
|
||||
late SharedPreferences _prefs;
|
||||
List<Patch> patches = [];
|
||||
bool isRooted = false;
|
||||
String storedPatchesFile = '/selected-patches.json';
|
||||
String keystoreFile =
|
||||
@ -79,12 +81,12 @@ class ManagerAPI {
|
||||
await _prefs.setString('repoUrl', url);
|
||||
}
|
||||
|
||||
String getPatchesDownloadURL(bool bundle) {
|
||||
return _prefs.getString('patchesDownloadURL-$bundle') ?? '';
|
||||
String getPatchesDownloadURL() {
|
||||
return _prefs.getString('patchesDownloadURL') ?? '';
|
||||
}
|
||||
|
||||
Future<void> setPatchesDownloadURL(String value, bool bundle) async {
|
||||
await _prefs.setString('patchesDownloadURL-$bundle', value);
|
||||
Future<void> setPatchesDownloadURL(String value) async {
|
||||
await _prefs.setString('patchesDownloadURL', value);
|
||||
}
|
||||
|
||||
String getPatchesRepo() {
|
||||
@ -300,28 +302,38 @@ class ManagerAPI {
|
||||
}
|
||||
|
||||
Future<List<Patch>> getPatches() async {
|
||||
if (patches.isNotEmpty) {
|
||||
return patches;
|
||||
}
|
||||
final File? patchBundleFile = await downloadPatches();
|
||||
if (patchBundleFile != null) {
|
||||
try {
|
||||
final String repoName = getPatchesRepo();
|
||||
final String currentVersion = await getCurrentPatchesVersion();
|
||||
final String url = getPatchesDownloadURL(false);
|
||||
return await _githubAPI.getPatches(
|
||||
repoName,
|
||||
currentVersion,
|
||||
url,
|
||||
final patchesObject = await PatcherAPI.patcherChannel.invokeMethod(
|
||||
'getPatches',
|
||||
{
|
||||
'patchBundleFilePath': patchBundleFile.path,
|
||||
},
|
||||
);
|
||||
final List<Map<String, dynamic>> patchesMap = [];
|
||||
patchesObject.forEach((patch) {
|
||||
patchesMap.add(jsonDecode('$patch'));
|
||||
});
|
||||
patches = patchesMap.map((patch) => Patch.fromJson(patch)).toList();
|
||||
return patches;
|
||||
} on Exception catch (e) {
|
||||
if (kDebugMode) {
|
||||
print(e);
|
||||
}
|
||||
return [];
|
||||
}
|
||||
}
|
||||
return List.empty();
|
||||
}
|
||||
|
||||
Future<File?> downloadPatches() async {
|
||||
try {
|
||||
final String repoName = getPatchesRepo();
|
||||
final String currentVersion = await getCurrentPatchesVersion();
|
||||
final String url = getPatchesDownloadURL(true);
|
||||
final String url = getPatchesDownloadURL();
|
||||
return await _githubAPI.getPatchesReleaseFile(
|
||||
'.jar',
|
||||
repoName,
|
||||
@ -447,8 +459,7 @@ class ManagerAPI {
|
||||
|
||||
Future<void> setCurrentPatchesVersion(String version) async {
|
||||
await _prefs.setString('patchesVersion', version);
|
||||
await setPatchesDownloadURL('', false);
|
||||
await setPatchesDownloadURL('', true);
|
||||
await setPatchesDownloadURL('');
|
||||
await downloadPatches();
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,6 @@ class PatcherAPI {
|
||||
|
||||
Future<void> initialize() async {
|
||||
await _loadPatches();
|
||||
await _managerAPI.downloadPatches();
|
||||
await _managerAPI.downloadIntegrations();
|
||||
final Directory appCache = await getTemporaryDirectory();
|
||||
_dataDir = await getExternalStorageDirectory() ?? appCache;
|
||||
|
Loading…
Reference in New Issue
Block a user