1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Nodes - Fixed nodes provided by plugins not saving correctly

This commit is contained in:
Robert 2022-08-30 21:44:44 +02:00
parent 88f01abe0d
commit cd537051ca
3 changed files with 23 additions and 16 deletions

View File

@ -233,7 +233,7 @@ internal class PluginManagementService : IPluginManagementService
} }
catch (Exception e) catch (Exception e)
{ {
_logger.Warning(new ArtemisPluginException("Failed to load plugin", e), "Plugin exception"); _logger.Warning(new ArtemisPluginException($"Failed to load plugin at {subDirectory}", e), "Plugin exception");
} }
} }

View File

@ -62,9 +62,10 @@ internal class NodeTypeStore
public static Plugin? GetPlugin(INode node) public static Plugin? GetPlugin(INode node)
{ {
Type nodeType = node.GetType();
lock (Registrations) lock (Registrations)
{ {
return Registrations.FirstOrDefault(r => r.Plugin.GetType().Assembly == node.GetType().Assembly)?.Plugin; return Registrations.FirstOrDefault(r => r.NodeData.Type == nodeType)?.Plugin;
} }
} }

View File

@ -14,13 +14,6 @@ namespace Artemis.Core;
/// </summary> /// </summary>
public abstract class NodeScript : CorePropertyChanged, INodeScript public abstract class NodeScript : CorePropertyChanged, INodeScript
{ {
private void NodeTypeStoreOnNodeTypeChanged(object? sender, NodeTypeStoreEvent e)
{
// Only respond to node changes applicable to the current script
if (Entity.Nodes.Any(n => e.TypeRegistration.MatchesEntity(n)))
Load();
}
/// <inheritdoc /> /// <inheritdoc />
public event EventHandler<SingleValueEventArgs<INode>>? NodeAdded; public event EventHandler<SingleValueEventArgs<INode>>? NodeAdded;
@ -79,8 +72,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
Entity = new NodeScriptEntity(); Entity = new NodeScriptEntity();
ExitNode = null!; ExitNode = null!;
NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeChanged; NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeAdded;
NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeChanged; NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeRemoved;
} }
internal NodeScript(string name, string description, NodeScriptEntity entity, object? context = null) internal NodeScript(string name, string description, NodeScriptEntity entity, object? context = null)
@ -91,8 +84,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
Context = context; Context = context;
ExitNode = null!; ExitNode = null!;
NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeChanged; NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeAdded;
NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeChanged; NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeRemoved;
} }
#endregion #endregion
@ -136,8 +129,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
/// <inheritdoc /> /// <inheritdoc />
public void Dispose() public void Dispose()
{ {
NodeTypeStore.NodeTypeAdded -= NodeTypeStoreOnNodeTypeChanged; NodeTypeStore.NodeTypeAdded -= NodeTypeStoreOnNodeTypeAdded;
NodeTypeStore.NodeTypeRemoved -= NodeTypeStoreOnNodeTypeChanged; NodeTypeStore.NodeTypeRemoved -= NodeTypeStoreOnNodeTypeRemoved;
lock (_nodes) lock (_nodes)
{ {
@ -346,7 +339,7 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
sourcePinId++; sourcePinId++;
continue; continue;
} }
foreach (IPin targetPin in sourcePin.ConnectedTo) foreach (IPin targetPin in sourcePin.ConnectedTo)
{ {
int targetPinCollectionId = -1; int targetPinCollectionId = -1;
@ -381,6 +374,19 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
} }
#endregion #endregion
private void NodeTypeStoreOnNodeTypeAdded(object? sender, NodeTypeStoreEvent e)
{
if (Entity.Nodes.Any(n => e.TypeRegistration.MatchesEntity(n)))
Load();
}
private void NodeTypeStoreOnNodeTypeRemoved(object? sender, NodeTypeStoreEvent e)
{
List<INode> nodes = Nodes.Where(n => n.GetType() == e.TypeRegistration.NodeData.Type).ToList();
foreach (INode node in nodes)
RemoveNode(node);
}
} }
/// <summary> /// <summary>