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.Patcher
|
||||||
import app.revanced.patcher.PatcherOptions
|
import app.revanced.patcher.PatcherOptions
|
||||||
import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
|
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.extensions.PatchExtensions.patchName
|
||||||
import app.revanced.patcher.patch.PatchResult
|
import app.revanced.patcher.patch.PatchResult
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
@ -89,6 +92,29 @@ class MainActivity : FlutterActivity() {
|
|||||||
stopResult = result
|
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()
|
else -> result.notImplemented()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -222,10 +222,8 @@ class GithubAPI {
|
|||||||
final String downloadUrl = asset['browser_download_url'];
|
final String downloadUrl = asset['browser_download_url'];
|
||||||
if (extension == '.apk') {
|
if (extension == '.apk') {
|
||||||
_managerAPI.setIntegrationsDownloadURL(downloadUrl);
|
_managerAPI.setIntegrationsDownloadURL(downloadUrl);
|
||||||
} else if (extension == '.json') {
|
|
||||||
_managerAPI.setPatchesDownloadURL(downloadUrl, false);
|
|
||||||
} else {
|
} else {
|
||||||
_managerAPI.setPatchesDownloadURL(downloadUrl, true);
|
_managerAPI.setPatchesDownloadURL(downloadUrl);
|
||||||
}
|
}
|
||||||
return await DefaultCacheManager().getSingleFile(
|
return await DefaultCacheManager().getSingleFile(
|
||||||
downloadUrl,
|
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/patch.dart';
|
||||||
import 'package:revanced_manager/models/patched_application.dart';
|
import 'package:revanced_manager/models/patched_application.dart';
|
||||||
import 'package:revanced_manager/services/github_api.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/revanced_api.dart';
|
||||||
import 'package:revanced_manager/services/root_api.dart';
|
import 'package:revanced_manager/services/root_api.dart';
|
||||||
import 'package:revanced_manager/ui/widgets/shared/custom_material_button.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 patcherRepo = 'revanced-patcher';
|
||||||
final String cliRepo = 'revanced-cli';
|
final String cliRepo = 'revanced-cli';
|
||||||
late SharedPreferences _prefs;
|
late SharedPreferences _prefs;
|
||||||
|
List<Patch> patches = [];
|
||||||
bool isRooted = false;
|
bool isRooted = false;
|
||||||
String storedPatchesFile = '/selected-patches.json';
|
String storedPatchesFile = '/selected-patches.json';
|
||||||
String keystoreFile =
|
String keystoreFile =
|
||||||
@ -79,12 +81,12 @@ class ManagerAPI {
|
|||||||
await _prefs.setString('repoUrl', url);
|
await _prefs.setString('repoUrl', url);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getPatchesDownloadURL(bool bundle) {
|
String getPatchesDownloadURL() {
|
||||||
return _prefs.getString('patchesDownloadURL-$bundle') ?? '';
|
return _prefs.getString('patchesDownloadURL') ?? '';
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> setPatchesDownloadURL(String value, bool bundle) async {
|
Future<void> setPatchesDownloadURL(String value) async {
|
||||||
await _prefs.setString('patchesDownloadURL-$bundle', value);
|
await _prefs.setString('patchesDownloadURL', value);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getPatchesRepo() {
|
String getPatchesRepo() {
|
||||||
@ -300,28 +302,38 @@ class ManagerAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<Patch>> getPatches() async {
|
Future<List<Patch>> getPatches() async {
|
||||||
|
if (patches.isNotEmpty) {
|
||||||
|
return patches;
|
||||||
|
}
|
||||||
|
final File? patchBundleFile = await downloadPatches();
|
||||||
|
if (patchBundleFile != null) {
|
||||||
try {
|
try {
|
||||||
final String repoName = getPatchesRepo();
|
final patchesObject = await PatcherAPI.patcherChannel.invokeMethod(
|
||||||
final String currentVersion = await getCurrentPatchesVersion();
|
'getPatches',
|
||||||
final String url = getPatchesDownloadURL(false);
|
{
|
||||||
return await _githubAPI.getPatches(
|
'patchBundleFilePath': patchBundleFile.path,
|
||||||
repoName,
|
},
|
||||||
currentVersion,
|
|
||||||
url,
|
|
||||||
);
|
);
|
||||||
|
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) {
|
} on Exception catch (e) {
|
||||||
if (kDebugMode) {
|
if (kDebugMode) {
|
||||||
print(e);
|
print(e);
|
||||||
}
|
}
|
||||||
return [];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return List.empty();
|
||||||
|
}
|
||||||
|
|
||||||
Future<File?> downloadPatches() async {
|
Future<File?> downloadPatches() async {
|
||||||
try {
|
try {
|
||||||
final String repoName = getPatchesRepo();
|
final String repoName = getPatchesRepo();
|
||||||
final String currentVersion = await getCurrentPatchesVersion();
|
final String currentVersion = await getCurrentPatchesVersion();
|
||||||
final String url = getPatchesDownloadURL(true);
|
final String url = getPatchesDownloadURL();
|
||||||
return await _githubAPI.getPatchesReleaseFile(
|
return await _githubAPI.getPatchesReleaseFile(
|
||||||
'.jar',
|
'.jar',
|
||||||
repoName,
|
repoName,
|
||||||
@ -447,8 +459,7 @@ class ManagerAPI {
|
|||||||
|
|
||||||
Future<void> setCurrentPatchesVersion(String version) async {
|
Future<void> setCurrentPatchesVersion(String version) async {
|
||||||
await _prefs.setString('patchesVersion', version);
|
await _prefs.setString('patchesVersion', version);
|
||||||
await setPatchesDownloadURL('', false);
|
await setPatchesDownloadURL('');
|
||||||
await setPatchesDownloadURL('', true);
|
|
||||||
await downloadPatches();
|
await downloadPatches();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ class PatcherAPI {
|
|||||||
|
|
||||||
Future<void> initialize() async {
|
Future<void> initialize() async {
|
||||||
await _loadPatches();
|
await _loadPatches();
|
||||||
await _managerAPI.downloadPatches();
|
|
||||||
await _managerAPI.downloadIntegrations();
|
await _managerAPI.downloadIntegrations();
|
||||||
final Directory appCache = await getTemporaryDirectory();
|
final Directory appCache = await getTemporaryDirectory();
|
||||||
_dataDir = await getExternalStorageDirectory() ?? appCache;
|
_dataDir = await getExternalStorageDirectory() ?? appCache;
|
||||||
|
Loading…
Reference in New Issue
Block a user