From 4bfb83cf6b4cd13ae797e2b1d2f4c82857cecc08 Mon Sep 17 00:00:00 2001 From: Owain van Brakel Date: Tue, 7 Sep 2021 15:53:01 +0200 Subject: [PATCH] external: Support custom plugin json files for raw repositories --- .../plugins/OPRSExternalPluginManager.java | 52 +++++++++++++++++-- .../externals/ExternalPluginManagerPanel.java | 26 ++++++++-- 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/OPRSExternalPluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/OPRSExternalPluginManager.java index 55f4530831..9610442e70 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/OPRSExternalPluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/OPRSExternalPluginManager.java @@ -186,9 +186,21 @@ public class OPRSExternalPluginManager } public static boolean testRepository(URL url) + { + return testRepository(url, null); + } + + public static boolean testRepository(URL url, String pluginsJson) { final List repositories = new ArrayList<>(); - repositories.add(new DefaultUpdateRepository("repository-testing", url)); + if (pluginsJson != null) + { + repositories.add(new DefaultUpdateRepository("repository-testing", url, pluginsJson)); + } + else + { + repositories.add(new DefaultUpdateRepository("repository-testing", url)); + } DefaultPluginManager testPluginManager = new DefaultPluginManager(EXTERNALPLUGIN_DIR.toPath()); UpdateManager updateManager = new UpdateManager(testPluginManager, repositories); @@ -285,7 +297,26 @@ public class OPRSExternalPluginManager } } - repositories.add(new DefaultUpdateRepository(id, new URL(url))); + log.info("url: {}", url); + String pluginJson = null; + if (url.contains(".json")) + { + url = url.replace(".json/", ".json"); + + URL urlObj = new URL(url); + String urlPath = urlObj.getPath(); + + pluginJson = urlPath.substring(urlPath.lastIndexOf('/') + 1); + } + + if (pluginJson == null) + { + repositories.add(new DefaultUpdateRepository(id, new URL(url))); + } + else + { + repositories.add(new DefaultUpdateRepository(id, new URL(url), pluginJson)); + } } } catch (ArrayIndexOutOfBoundsException | MalformedURLException e) @@ -342,7 +373,22 @@ public class OPRSExternalPluginManager public void addRepository(String key, URL url) { - DefaultUpdateRepository respository = new DefaultUpdateRepository(key, url); + addRepository(key, url, null); + } + + public void addRepository(String key, URL url, String pluginsJson) + { + DefaultUpdateRepository respository; + + if (pluginsJson != null) + { + respository = new DefaultUpdateRepository(key, url, pluginsJson); + } + else + { + respository = new DefaultUpdateRepository(key, url); + } + updateManager.addRepository(respository); eventBus.post(new OPRSRepositoryChanged(key, true)); saveConfig(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/externals/ExternalPluginManagerPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/externals/ExternalPluginManagerPanel.java index 67212c8cfc..0da11c5f4b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/externals/ExternalPluginManagerPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/openosrs/externals/ExternalPluginManagerPanel.java @@ -208,9 +208,22 @@ public class ExternalPluginManagerPanel extends PluginPanel } URL urlActual; + String pluginJson = null; try { - urlActual = new URL(url.getText()); + String urlText = url.getText(); + + if (urlText.contains(".json")) + { + urlText = urlText.replace(".json/", ".json"); + + URL urlObj = new URL(urlText); + String urlPath = urlObj.getPath(); + + pluginJson = urlPath.substring(urlPath.lastIndexOf('/') + 1); + } + + urlActual = new URL(urlText); } catch (MalformedURLException e) { @@ -219,14 +232,21 @@ public class ExternalPluginManagerPanel extends PluginPanel return; } - if (OPRSExternalPluginManager.testRepository(urlActual)) + if ((pluginJson == null && OPRSExternalPluginManager.testRepository(urlActual)) || (pluginJson != null && OPRSExternalPluginManager.testRepository(urlActual, pluginJson))) { JOptionPane.showMessageDialog(ClientUI.getFrame(), "This doesn't appear to be a valid repository.", "Error!", JOptionPane.ERROR_MESSAGE); return; } - externalPluginManager.addRepository(id.getText(), urlActual); + if (pluginJson == null) + { + externalPluginManager.addRepository(id.getText(), urlActual); + } + else + { + externalPluginManager.addRepository(id.getText(), urlActual, pluginJson); + } } @Override