Change the way how plugins are hotswapped to use PluginWrapper instead of String (#2969)

Co-authored-by: Egert Aia <egert.aia@softwerk.ee>
This commit is contained in:
Egert
2021-03-12 02:00:27 +02:00
committed by GitHub
parent ebe84d3890
commit 03827aafa5
2 changed files with 18 additions and 7 deletions

View File

@@ -48,6 +48,7 @@ import java.net.URLEncoder;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
@@ -693,14 +694,14 @@ public class OPRSExternalPluginManager
if (groups.getInstanceCount() > 1) if (groups.getInstanceCount() > 1)
{ {
for (String pluginId : getDisabledPlugins()) for (String pluginId : getDisabledPluginIds())
{ {
groups.sendString("STOPEXTERNAL;" + pluginId); groups.sendString("STOPEXTERNAL;" + pluginId);
} }
} }
else else
{ {
for (String pluginId : getDisabledPlugins()) for (String pluginId : getDisabledPluginIds())
{ {
externalPluginManager.enablePlugin(pluginId); externalPluginManager.enablePlugin(pluginId);
externalPluginManager.deletePlugin(pluginId); externalPluginManager.deletePlugin(pluginId);
@@ -809,7 +810,7 @@ public class OPRSExternalPluginManager
public boolean install(String pluginId) public boolean install(String pluginId)
{ {
if (getDisabledPlugins().contains(pluginId)) if (getDisabledPluginIds().contains(pluginId))
{ {
externalPluginManager.enablePlugin(pluginId); externalPluginManager.enablePlugin(pluginId);
externalPluginManager.startPlugin(pluginId); externalPluginManager.startPlugin(pluginId);
@@ -984,11 +985,18 @@ public class OPRSExternalPluginManager
return deps; return deps;
} }
public List<String> getDisabledPlugins() public List<PluginWrapper> getDisabledPlugins()
{ {
return externalPluginManager.getResolvedPlugins() return externalPluginManager.getResolvedPlugins()
.stream() .stream()
.filter(not(externalPluginManager.getStartedPlugins()::contains)) .filter(not(externalPluginManager.getStartedPlugins()::contains))
.collect(Collectors.toList());
}
public List<String> getDisabledPluginIds()
{
return getDisabledPlugins()
.stream()
.map(PluginWrapper::getPluginId) .map(PluginWrapper::getPluginId)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@@ -1004,18 +1012,21 @@ public class OPRSExternalPluginManager
externalPluginManager.startPlugin(pluginId); externalPluginManager.startPlugin(pluginId);
List<PluginWrapper> startedPlugins = List.copyOf(getStartedPlugins()); List<PluginWrapper> startedPlugins = List.copyOf(getStartedPlugins());
List<PluginWrapper> disabledPlugins = List.copyOf(getDisabledPlugins());
List<PluginWrapper> combinedList = Stream.of(startedPlugins, disabledPlugins).flatMap(Collection::stream).collect(Collectors.toList());
List<Plugin> scannedPlugins = new ArrayList<>(); List<Plugin> scannedPlugins = new ArrayList<>();
for (PluginWrapper pluginWrapper : startedPlugins) for (PluginWrapper pluginWrapper : combinedList)
{ {
if (!pluginId.equals(pluginWrapper.getDescriptor().getPluginId())) if (!pluginId.equals(pluginWrapper.getDescriptor().getPluginId()))
{ {
continue; continue;
} }
checkDepsAndStart(startedPlugins, scannedPlugins, pluginWrapper); checkDepsAndStart(combinedList, scannedPlugins, pluginWrapper);
} }
scanAndInstantiate(scannedPlugins, true, false); scanAndInstantiate(scannedPlugins, true, false);
groups.broadcastSring("STARTEXTERNAL;" + pluginId); groups.broadcastSring("STARTEXTERNAL;" + pluginId);

View File

@@ -244,7 +244,7 @@ public class PluginsPanel extends JPanel
{ {
List<PluginInfo> availablePlugins = null; List<PluginInfo> availablePlugins = null;
List<PluginInfo> plugins = null; List<PluginInfo> plugins = null;
List<String> disabledPlugins = externalPluginManager.getDisabledPlugins(); List<String> disabledPlugins = externalPluginManager.getDisabledPluginIds();
try try
{ {