From a377e691319da4466b69a5d8ecdd2a50b5c82263 Mon Sep 17 00:00:00 2001 From: Ganom <8338284+Ganom@users.noreply.github.com> Date: Tue, 20 Oct 2020 04:46:38 -0400 Subject: [PATCH] externalmanager: alert user when they have duplicate plugins. (#2815) * externalmanager: alert user when they have duplicate plugins. * externalmanager: log in one line instead of multiples. --- .../plugins/ExternalPf4jPluginManager.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPf4jPluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPf4jPluginManager.java index 3ed2758e3c..b9e23668c9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPf4jPluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/ExternalPf4jPluginManager.java @@ -6,8 +6,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; import lombok.extern.slf4j.Slf4j; import net.runelite.client.RuneLite; import net.runelite.client.RuneLiteProperties; @@ -132,6 +136,7 @@ class ExternalPf4jPluginManager extends DefaultPluginManager log.debug("Found {} possible plugins: {}", pluginPaths.size(), pluginPaths); + Set duplicatePlugins = new HashSet<>(); for (Path pluginPath : pluginPaths) { try @@ -146,11 +151,26 @@ class ExternalPf4jPluginManager extends DefaultPluginManager { if (!(e instanceof PluginAlreadyLoadedException)) { + String plugin = pluginPath.toString().substring(pluginsRoot.toString().length() + 1); + duplicatePlugins.add(plugin); log.error("Could not load plugin {}", pluginPath, e); } } } + if (!duplicatePlugins.isEmpty()) + { + log.error("Duplicate plugins detected: {}", String.join(", ", duplicatePlugins)); + + String formatted = String.join("\n", duplicatePlugins); + + SwingUtilities.invokeLater(() -> JOptionPane.showMessageDialog(null, "You have duplicate plugins in your externalmanager.\n" + + "Having duplicate plugins will result in an unstable\n" + + "experience, It is highly recommended to delete any\n" + + "duplicates, here is a list of the plugins.\n\n" + + formatted, "Duplicate Plugins Detected", JOptionPane.WARNING_MESSAGE)); + } + try { resolvePlugins();