From 53848ad366ca2451091223ca7871482ecaa75d2d Mon Sep 17 00:00:00 2001 From: Jakub Trllo <43494761+iLLiCiTiT@users.noreply.github.com> Date: Wed, 20 Aug 2025 17:53:03 +0200 Subject: [PATCH] keep entity ids and entity type on action item --- client/ayon_core/tools/loader/abstract.py | 11 ++++++- .../ayon_core/tools/loader/models/actions.py | 31 +++++++++++-------- .../tools/loader/ui/products_widget.py | 9 +++--- .../tools/loader/ui/repres_widget.py | 8 ++--- 4 files changed, 37 insertions(+), 22 deletions(-) diff --git a/client/ayon_core/tools/loader/abstract.py b/client/ayon_core/tools/loader/abstract.py index 04cf0c6037..55898e460f 100644 --- a/client/ayon_core/tools/loader/abstract.py +++ b/client/ayon_core/tools/loader/abstract.py @@ -318,17 +318,21 @@ class ActionItem: Args: identifier (str): Action identifier. + entity_ids (set[str]): Entity ids. + entity_type (str): Entity type. label (str): Action label. icon (dict[str, Any]): Action icon definition. tooltip (str): Action tooltip. options (Union[list[AbstractAttrDef], list[qargparse.QArgument]]): Action options. Note: 'qargparse' is considered as deprecated. order (int): Action order. - """ + """ def __init__( self, identifier, + entity_ids, + entity_type, label, icon, tooltip, @@ -336,6 +340,8 @@ class ActionItem: order, ): self.identifier = identifier + self.entity_ids = entity_ids + self.entity_type = entity_type self.label = label self.icon = icon self.tooltip = tooltip @@ -362,6 +368,8 @@ class ActionItem: options = self._options_to_data() return { "identifier": self.identifier, + "entity_ids": list(self.entity_ids), + "entity_type": self.entity_type, "label": self.label, "icon": self.icon, "tooltip": self.tooltip, @@ -375,6 +383,7 @@ class ActionItem: if options: options = deserialize_attr_defs(options) data["options"] = options + data["entity_ids"] = set(data["entity_ids"]) return cls(**data) diff --git a/client/ayon_core/tools/loader/models/actions.py b/client/ayon_core/tools/loader/models/actions.py index ec0997685f..d8fd67234c 100644 --- a/client/ayon_core/tools/loader/models/actions.py +++ b/client/ayon_core/tools/loader/models/actions.py @@ -145,15 +145,16 @@ class LoaderActionsModel: ACTIONS_MODEL_SENDER, ) loader = self._get_loader_by_identifier(project_name, identifier) - if entity_type == "representation": - error_info = self._trigger_representation_loader( + + if entity_type == "version": + error_info = self._trigger_version_loader( loader, options, project_name, entity_ids, ) - elif entity_type == "version": - error_info = self._trigger_version_loader( + elif entity_type == "representation": + error_info = self._trigger_representation_loader( loader, options, project_name, @@ -277,6 +278,8 @@ class LoaderActionsModel: self, loader, contexts, + entity_ids, + entity_type, repre_name=None, ): label = self._get_action_label(loader) @@ -284,6 +287,8 @@ class LoaderActionsModel: label = "{} ({})".format(label, repre_name) return ActionItem( get_loader_identifier(loader), + entity_ids=entity_ids, + entity_type=entity_type, label=label, icon=self._get_action_icon(loader), tooltip=self._get_action_tooltip(loader), @@ -548,19 +553,16 @@ class LoaderActionsModel: if not filtered_repre_contexts: continue - repre_ids = set() - repre_version_ids = set() - repre_product_ids = set() - repre_folder_ids = set() - for repre_context in filtered_repre_contexts: - repre_ids.add(repre_context["representation"]["id"]) - repre_product_ids.add(repre_context["product"]["id"]) - repre_version_ids.add(repre_context["version"]["id"]) - repre_folder_ids.add(repre_context["folder"]["id"]) + repre_ids = { + repre_context["representation"]["id"] + for repre_context in filtered_repre_contexts + } item = self._create_loader_action_item( loader, repre_contexts, + repre_ids, + "representation", repre_name=repre_name, ) action_items.append(item) @@ -572,11 +574,14 @@ class LoaderActionsModel: product_ids.add(product_context["product"]["id"]) product_folder_ids.add(product_context["folder"]["id"]) + version_ids = set(version_context_by_id.keys()) version_contexts = list(version_context_by_id.values()) for loader in product_loaders: item = self._create_loader_action_item( loader, version_contexts, + version_ids, + "version", ) action_items.append(item) diff --git a/client/ayon_core/tools/loader/ui/products_widget.py b/client/ayon_core/tools/loader/ui/products_widget.py index caa2ee82d0..4ed4368ab4 100644 --- a/client/ayon_core/tools/loader/ui/products_widget.py +++ b/client/ayon_core/tools/loader/ui/products_widget.py @@ -420,8 +420,9 @@ class ProductsWidget(QtWidgets.QWidget): if version_id is not None: version_ids.add(version_id) - action_items = self._controller.get_versions_action_items( - project_name, version_ids) + action_items = self._controller.get_action_items( + project_name, version_ids, "version" + ) # Prepare global point where to show the menu global_point = self._products_view.mapToGlobal(point) @@ -440,8 +441,8 @@ class ProductsWidget(QtWidgets.QWidget): action_item.identifier, options, project_name, - version_ids, - "version", + action_item.entity_ids, + action_item.entity_type, ) def _on_selection_change(self): diff --git a/client/ayon_core/tools/loader/ui/repres_widget.py b/client/ayon_core/tools/loader/ui/repres_widget.py index 17c429cb53..c0957d186c 100644 --- a/client/ayon_core/tools/loader/ui/repres_widget.py +++ b/client/ayon_core/tools/loader/ui/repres_widget.py @@ -384,8 +384,8 @@ class RepresentationsWidget(QtWidgets.QWidget): def _on_context_menu(self, point): repre_ids = self._get_selected_repre_ids() - action_items = self._controller.get_representations_action_items( - self._selected_project_name, repre_ids + action_items = self._controller.get_action_items( + self._selected_project_name, repre_ids, "representation" ) global_point = self._repre_view.mapToGlobal(point) result = show_actions_menu( @@ -402,6 +402,6 @@ class RepresentationsWidget(QtWidgets.QWidget): action_item.identifier, options, self._selected_project_name, - repre_ids, - "representation", + action_item.entity_ids, + action_item.entity_type, )