ynput / ayon-core

Apache License 2.0
27 stars 32 forks source link

Folder widget: Fix set selected folder path #719

Closed BigRoy closed 3 months ago

BigRoy commented 3 months ago

Changelog Description

Fix the logic to set selected folder path in Folder Widget

Additional info

Stack trace:

Traceback (most recent call last):
  File "E:\dev\ayon-core\server_addon\houdini\client\ayon_houdini\api\hda_utils.py", line 519, in _select_folder_path
    dialog.folder_widget.set_selected_folder_path(folder_path)
  File "E:\dev\ayon-core\client\ayon_core\tools\utils\folders_widget.py", line 561, in set_selected_folder_path
    folder_id = self._folders_model.get_item_id_by_path(folder_path)
  File "E:\dev\ayon-core\client\ayon_core\tools\utils\folders_widget.py", line 99, in get_item_id_by_path
    for folder_id, item in self._items_by_id.values():
TypeError: cannot unpack non-iterable PySide2.QtGui.QStandardItem object

Testing notes:

  1. Folder Widget should work.

Ugly testing code:

from ayon_core.tools.utils.folders_widget import SimpleFoldersWidget

from ayon_core.pipeline import (
    get_current_project_name,
    get_current_folder_path
)
from qtpy import QtCore, QtWidgets

class Dialog(QtWidgets.QDialog):
    def __init__(self):
        super().__init__()

        layout = QtWidgets.QVBoxLayout(self)
        widget = SimpleFoldersWidget(parent=self)
        layout.addWidget(widget)

        self.folders_widget = widget

dialog = Dialog()
dialog.show()

dialog.folders_widget.set_project_name(get_current_project_name())

# This should not error (it does not actually work, because the above set project has a small delay)
dialog.folders_widget.set_selected_folder_path(get_current_folder_path())

# This would work directly though
QtCore.QTimer.singleShot(100, lambda: dialog.folders_widget.set_selected_folder_path(get_current_folder_path()))