feat: allow to disable installed plugins (#2277)

This commit is contained in:
Skylot
2024-10-26 22:21:26 +01:00
parent 4d8a5d6671
commit cc6a893402
33 changed files with 358 additions and 90 deletions
@@ -72,7 +72,7 @@ public class JadxExternalPluginsLoader implements JadxPluginLoader {
}
private void loadInstalledPlugins(Map<Class<? extends JadxPlugin>, JadxPlugin> map, ClassLoader classLoader) {
List<Path> jars = JadxPluginsTools.getInstance().getAllPluginJars();
List<Path> jars = JadxPluginsTools.getInstance().getEnabledPluginJars();
for (Path jar : jars) {
classLoaders.add(loadFromJar(map, classLoader, jar));
}
@@ -28,9 +28,6 @@ import jadx.plugins.tools.utils.PluginUtils;
import static jadx.plugins.tools.utils.PluginFiles.PLUGINS_LIST_CACHE;
/**
* TODO: implement list caching (on disk) with check for new release
*/
public class JadxPluginsList {
private static final JadxPluginsList INSTANCE = new JadxPluginsList();
@@ -124,6 +124,38 @@ public class JadxPluginsTools {
return list;
}
public List<Path> getEnabledPluginJars() {
List<Path> list = new ArrayList<>();
for (JadxPluginMetadata pluginMetadata : loadPluginsJson().getInstalled()) {
if (pluginMetadata.isDisabled()) {
continue;
}
list.add(INSTALLED_DIR.resolve(pluginMetadata.getJar()));
}
collectFromDir(list, DROPINS_DIR);
return list;
}
/**
* Disable or enable plugin
*
* @return true if disabled status was changed
*/
public boolean changeDisabledStatus(String pluginId, boolean disabled) {
JadxInstalledPlugins data = loadPluginsJson();
JadxPluginMetadata plugin = data.getInstalled().stream()
.filter(p -> p.getPluginId().equals(pluginId))
.findFirst()
.orElseThrow(() -> new RuntimeException("Plugin not found: " + pluginId));
if (plugin.isDisabled() == disabled) {
return false;
}
plugin.setDisabled(disabled);
data.setUpdated(System.currentTimeMillis());
savePluginsJson(data);
return true;
}
private @Nullable JadxPluginMetadata update(JadxPluginMetadata plugin) {
IJadxPluginResolver resolver = ResolversRegistry.getById(plugin.getResolverId());
if (!resolver.isUpdateSupported()) {
@@ -12,6 +12,7 @@ public class JadxPluginMetadata implements Comparable<JadxPluginMetadata> {
private String locationId;
private String resolverId;
private String jar;
private boolean disabled;
public String getPluginId() {
return pluginId;
@@ -77,6 +78,14 @@ public class JadxPluginMetadata implements Comparable<JadxPluginMetadata> {
this.jar = jar;
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
@Override
public boolean equals(Object other) {
if (this == other) {