diff --git a/daemon/core/gui/coreclient.py b/daemon/core/gui/coreclient.py index e4fd5fac..9d5c5189 100644 --- a/daemon/core/gui/coreclient.py +++ b/daemon/core/gui/coreclient.py @@ -736,6 +736,9 @@ class CoreClient: image=image, emane=emane, ) + if NodeUtils.is_custom(model): + services = NodeUtils.get_custom_node_services(self.app.guiconfig, model) + node.services[:] = services logging.debug( "adding node to core session: %s, coords: (%s, %s), name: %s", self.session_id, diff --git a/daemon/core/gui/dialogs/nodeservice.py b/daemon/core/gui/dialogs/nodeservice.py index a3928c9c..0b4391ce 100644 --- a/daemon/core/gui/dialogs/nodeservice.py +++ b/daemon/core/gui/dialogs/nodeservice.py @@ -7,6 +7,7 @@ from typing import TYPE_CHECKING, Any, Set from core.gui.dialogs.dialog import Dialog from core.gui.dialogs.serviceconfig import ServiceConfigDialog +from core.gui.nodeutils import NodeUtils from core.gui.themes import FRAME_PAD, PADX, PADY from core.gui.widgets import CheckboxList, ListboxScroll @@ -35,10 +36,14 @@ class NodeServiceDialog(Dialog): services = canvas_node.core_node.services model = canvas_node.core_node.model if len(services) == 0: - services = set(self.app.core.default_services[model]) + if not NodeUtils.is_custom(canvas_node.core_node.model): + services = set(self.app.core.default_services[model]) + else: + services = set( + NodeUtils.get_custom_node_services(self.app.guiconfig, model) + ) else: services = set(services) - self.current_services = services self.draw() @@ -137,7 +142,8 @@ class NodeServiceDialog(Dialog): def click_save(self): if ( - self.current_services + self.canvas_node.core_node.model not in self.app.core.default_services + or self.current_services != self.app.core.default_services[self.canvas_node.core_node.model] ): self.canvas_node.core_node.services[:] = self.current_services diff --git a/daemon/core/gui/nodeutils.py b/daemon/core/gui/nodeutils.py index 9047174b..9f1b5a7f 100644 --- a/daemon/core/gui/nodeutils.py +++ b/daemon/core/gui/nodeutils.py @@ -106,6 +106,17 @@ class NodeUtils: logging.error("invalid icon: %s", core_node.icon) return image + @classmethod + def is_custom(cls, model): + return model not in cls.NODE_MODELS + + @classmethod + def get_custom_node_services(cls, gui_config, name): + for m in gui_config["nodes"]: + if m["name"] == name: + return m["services"] + return [] + @classmethod def setup(cls): nodes = [