|
19 | 19 | from meshroom.core.node import Node, CompatibilityNode, Status, Position, CompatibilityIssue |
20 | 20 | from meshroom.core.taskManager import TaskManager |
21 | 21 | from meshroom.core.evaluation import MathEvaluator |
| 22 | +from meshroom.core.plugins import NodePluginStatus |
22 | 23 |
|
23 | 24 | from meshroom.ui import commands |
24 | 25 | from meshroom.ui.graph import UIGraph |
@@ -445,17 +446,25 @@ def _reloadPlugins(self): |
445 | 446 | The nodes in the graph will be updated to match the changes in the description, if |
446 | 447 | there was any. |
447 | 448 | """ |
448 | | - nodeTypes: list[str] = [] |
| 449 | + reloadedNodes: list[str] = [] |
| 450 | + errorNodes: list[str] = [] |
449 | 451 | for plugin in meshroom.core.pluginManager.getPlugins().values(): |
450 | 452 | for node in plugin.nodes.values(): |
451 | 453 | if node.reload(): |
452 | | - nodeTypes.append(node.nodeDescriptor.__name__) |
453 | | - self.pluginsReloaded.emit(nodeTypes) |
| 454 | + reloadedNodes.append(node.nodeDescriptor.__name__) |
| 455 | + else: |
| 456 | + if node.status == NodePluginStatus.DESC_ERROR or node.status == NodePluginStatus.ERROR: |
| 457 | + errorNodes.append(node.nodeDescriptor.__name__) |
| 458 | + |
| 459 | + self.pluginsReloaded.emit(reloadedNodes, errorNodes) |
454 | 460 |
|
455 | 461 | @Slot(list) |
456 | | - def _onPluginsReloaded(self, nodeTypes: list): |
457 | | - self._graph.reloadNodePlugins(nodeTypes) |
458 | | - self.parent().showMessage("Plugins reloaded!", "ok") |
| 462 | + def _onPluginsReloaded(self, reloadedNodes: list, errorNodes: list): |
| 463 | + self._graph.reloadNodePlugins(reloadedNodes) |
| 464 | + if len(errorNodes) > 0: |
| 465 | + self.parent().showMessage(f"Some plugins failed to reload: {', '.join(errorNodes)}", "error") |
| 466 | + else: |
| 467 | + self.parent().showMessage("Plugins reloaded!", "ok") |
459 | 468 |
|
460 | 469 | @Slot() |
461 | 470 | @Slot(str) |
@@ -944,7 +953,7 @@ def setBuildingIntrinsics(self, value): |
944 | 953 | displayedAttrs3DChanged = Signal() |
945 | 954 | displayedAttrs3D = Property(QObject, lambda self: self._displayedAttrs3D, notify=displayedAttrs3DChanged) |
946 | 955 |
|
947 | | - pluginsReloaded = Signal(list) |
| 956 | + pluginsReloaded = Signal(list, list) |
948 | 957 |
|
949 | 958 | @Slot(QObject) |
950 | 959 | def setActiveNode(self, node, categories=True, inputs=True): |
|
0 commit comments