validation of folder paths happens in controller

This commit is contained in:
Jakub Trllo 2024-02-28 15:54:04 +01:00
parent c75c9d8d70
commit 4044feb988
2 changed files with 30 additions and 22 deletions

View file

@ -1734,6 +1734,18 @@ class PublisherController(BasePublisherController):
return folder_item.entity_id return folder_item.entity_id
return None return None
def are_folder_paths_valid(self, folder_paths):
if not folder_paths:
return True
folder_paths = set(folder_paths)
folder_items = self._hierarchy_model.get_folder_items_by_paths(
self.project_name, folder_paths
)
for folder_item in folder_items.values():
if folder_item is None:
return False
return True
# --- Publish specific callbacks --- # --- Publish specific callbacks ---
def get_context_title(self): def get_context_title(self):
"""Get context title for artist shown at the top of main window.""" """Get context title for artist shown at the top of main window."""

View file

@ -465,6 +465,7 @@ class AssetsField(BaseClickableFrame):
icon_btn.clicked.connect(self._mouse_release_callback) icon_btn.clicked.connect(self._mouse_release_callback)
dialog.finished.connect(self._on_dialog_finish) dialog.finished.connect(self._on_dialog_finish)
self._controller = controller
self._dialog = dialog self._dialog = dialog
self._name_input = name_input self._name_input = name_input
self._icon_btn = icon_btn self._icon_btn = icon_btn
@ -539,38 +540,33 @@ class AssetsField(BaseClickableFrame):
self._name_input.setText(text) self._name_input.setText(text)
self._name_input.end(False) self._name_input.end(False)
def set_selected_items(self, asset_names=None): def set_selected_items(self, folder_paths=None):
"""Set asset names for selection of instances. """Set asset names for selection of instances.
Passed asset names are validated and if there are 2 or more different Passed asset names are validated and if there are 2 or more different
asset names then multiselection text is shown. asset names then multiselection text is shown.
Args: Args:
asset_names (list, tuple, set, NoneType): List of asset names. folder_paths (list, tuple, set, NoneType): List of folder paths.
""" """
if asset_names is None: if folder_paths is None:
asset_names = [] folder_paths = []
self._has_value_changed = False self._has_value_changed = False
self._origin_value = list(asset_names) self._origin_value = list(folder_paths)
self._selected_items = list(asset_names) self._selected_items = list(folder_paths)
is_valid = True is_valid = self._controller.are_folder_paths_valid(folder_paths)
if not asset_names: if not folder_paths:
self.set_text("") self.set_text("")
elif len(asset_names) == 1: elif len(folder_paths) == 1:
asset_name = tuple(asset_names)[0] folder_path = tuple(folder_paths)[0]
is_valid = self._dialog.name_is_valid(asset_name) self.set_text(folder_path)
self.set_text(asset_name)
else: else:
for asset_name in asset_names:
is_valid = self._dialog.name_is_valid(asset_name)
if not is_valid:
break
multiselection_text = self._multiselection_text multiselection_text = self._multiselection_text
if multiselection_text is None: if multiselection_text is None:
multiselection_text = "|".join(asset_names) multiselection_text = "|".join(folder_paths)
self.set_text(multiselection_text) self.set_text(multiselection_text)
self._set_is_valid(is_valid) self._set_is_valid(is_valid)
@ -746,11 +742,11 @@ class TasksCombobox(QtWidgets.QComboBox):
""" """
return list(self._selected_items) return list(self._selected_items)
def set_asset_names(self, asset_names): def set_folder_paths(self, asset_names):
"""Set asset names for which should show tasks.""" """Set asset names for which should show tasks."""
self._ignore_index_change = True self._ignore_index_change = True
self._model.set_asset_names(asset_names) self._model.set_folder_paths(asset_names)
self._proxy_model.set_filter_empty(False) self._proxy_model.set_filter_empty(False)
self._proxy_model.sort(0) self._proxy_model.sort(0)
@ -822,7 +818,7 @@ class TasksCombobox(QtWidgets.QComboBox):
self._ignore_index_change = True self._ignore_index_change = True
self._model.set_asset_names(asset_names) self._model.set_folder_paths(asset_names)
self._has_value_changed = False self._has_value_changed = False
@ -1265,7 +1261,7 @@ class GlobalAttrsWidget(QtWidgets.QWidget):
def _on_asset_change(self): def _on_asset_change(self):
asset_names = self.asset_value_widget.get_selected_items() asset_names = self.asset_value_widget.get_selected_items()
self.task_value_widget.set_asset_names(asset_names) self.task_value_widget.set_folder_paths(asset_names)
self._on_value_change() self._on_value_change()
def _on_task_change(self): def _on_task_change(self):