mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-01 16:34:53 +01:00
validation of folder paths happens in controller
This commit is contained in:
parent
c75c9d8d70
commit
4044feb988
2 changed files with 30 additions and 22 deletions
|
|
@ -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."""
|
||||||
|
|
|
||||||
|
|
@ -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):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue