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)
{
_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)
{
Type nodeType = node.GetType();
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>
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 />
public event EventHandler<SingleValueEventArgs<INode>>? NodeAdded;
@ -79,8 +72,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
Entity = new NodeScriptEntity();
ExitNode = null!;
NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeChanged;
NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeChanged;
NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeAdded;
NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeRemoved;
}
internal NodeScript(string name, string description, NodeScriptEntity entity, object? context = null)
@ -91,8 +84,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
Context = context;
ExitNode = null!;
NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeChanged;
NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeChanged;
NodeTypeStore.NodeTypeAdded += NodeTypeStoreOnNodeTypeAdded;
NodeTypeStore.NodeTypeRemoved += NodeTypeStoreOnNodeTypeRemoved;
}
#endregion
@ -136,8 +129,8 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
/// <inheritdoc />
public void Dispose()
{
NodeTypeStore.NodeTypeAdded -= NodeTypeStoreOnNodeTypeChanged;
NodeTypeStore.NodeTypeRemoved -= NodeTypeStoreOnNodeTypeChanged;
NodeTypeStore.NodeTypeAdded -= NodeTypeStoreOnNodeTypeAdded;
NodeTypeStore.NodeTypeRemoved -= NodeTypeStoreOnNodeTypeRemoved;
lock (_nodes)
{
@ -346,7 +339,7 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
sourcePinId++;
continue;
}
foreach (IPin targetPin in sourcePin.ConnectedTo)
{
int targetPinCollectionId = -1;
@ -381,6 +374,19 @@ public abstract class NodeScript : CorePropertyChanged, INodeScript
}
#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>