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:
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user