From 973730ec87a0729c6d3e69ad29b8d180e216b11e Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 30 Nov 2021 14:04:11 +0100 Subject: [PATCH 1/4] extracter clearing to private method --- openpype/tools/utils/assets_widget.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/openpype/tools/utils/assets_widget.py b/openpype/tools/utils/assets_widget.py index 041bb1ef1c..9d15ad0803 100644 --- a/openpype/tools/utils/assets_widget.py +++ b/openpype/tools/utils/assets_widget.py @@ -379,15 +379,18 @@ class AssetModel(QtGui.QStandardItemModel): continue item.setData(colors, ASSET_UNDERLINE_COLORS_ROLE) + def _clear_items(self): + root_item = self.invisibleRootItem() + root_item.removeRows(0, root_item.rowCount()) + self._items_by_asset_id = {} + self._items_with_color_by_id = {} + def _on_docs_fetched(self): # Make sure refreshing did not change # - since this line is refreshing sequential and # triggering of new refresh will happen when this method is done if not self._refreshing: - root_item = self.invisibleRootItem() - root_item.removeRows(0, root_item.rowCount()) - self._items_by_asset_id = {} - self._items_with_color_by_id = {} + self._clear_items() return # Collect asset documents as needed From 7a9b0eb3684c3ab69536c1d7d55ef1cec63e1905 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 30 Nov 2021 14:05:36 +0100 Subject: [PATCH 2/4] it is possible to clear model before refresh thread --- openpype/tools/utils/assets_widget.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/openpype/tools/utils/assets_widget.py b/openpype/tools/utils/assets_widget.py index 9d15ad0803..7fabf357de 100644 --- a/openpype/tools/utils/assets_widget.py +++ b/openpype/tools/utils/assets_widget.py @@ -347,14 +347,22 @@ class AssetModel(QtGui.QStandardItemModel): return self.get_indexes_by_asset_ids(asset_ids) - def refresh(self, force=False): - """Refresh the data for the model.""" + def refresh(self, force=False, clear=False): + """Refresh the data for the model. + + Args: + force (bool): Stop currently running refresh start new refresh. + clear (bool): Clear model before refresh thread starts. + """ # Skip fetch if there is already other thread fetching documents if self._refreshing: if not force: return self.stop_refresh() + if clear: + self._clear_items() + # Fetch documents from mongo # Restart payload self._refreshing = True From 5609b0bdb56a7bdb7082c0753a1c4af17fcf5833 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 30 Nov 2021 14:05:59 +0100 Subject: [PATCH 3/4] clear model before refresh thread if project name changed --- openpype/tools/utils/assets_widget.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/openpype/tools/utils/assets_widget.py b/openpype/tools/utils/assets_widget.py index 7fabf357de..5026a24129 100644 --- a/openpype/tools/utils/assets_widget.py +++ b/openpype/tools/utils/assets_widget.py @@ -637,6 +637,7 @@ class AssetsWidget(QtWidgets.QWidget): self._model = model self._proxy = proxy self._view = view + self._last_project_name = None self.model_selection = {} @@ -645,7 +646,12 @@ class AssetsWidget(QtWidgets.QWidget): return self._model.refreshing def refresh(self): - self._refresh_model() + project_name = self.dbcon.Session.get("AVALON_PROJECT") + clear_model = False + if project_name != self._last_project_name: + clear_model = True + self._last_project_name = project_name + self._refresh_model(clear_model) def stop_refresh(self): self._model.stop_refresh() @@ -691,14 +697,14 @@ class AssetsWidget(QtWidgets.QWidget): self._set_loading_state(loading=False, empty=not has_item) self.refreshed.emit() - def _refresh_model(self): + def _refresh_model(self, clear=False): # Store selection self._set_loading_state(loading=True, empty=True) # Trigger signal before refresh is called self.refresh_triggered.emit() # Refresh model - self._model.refresh() + self._model.refresh(clear=clear) def _set_loading_state(self, loading, empty): self._view.set_loading_state(loading, empty) From c936a501ade37b9a03b34c55c0f55b3a20008488 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Tue, 30 Nov 2021 14:08:26 +0100 Subject: [PATCH 4/4] don't skip item if children from loaded data are empty --- openpype/tools/utils/assets_widget.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/openpype/tools/utils/assets_widget.py b/openpype/tools/utils/assets_widget.py index 5026a24129..f310aafe89 100644 --- a/openpype/tools/utils/assets_widget.py +++ b/openpype/tools/utils/assets_widget.py @@ -430,8 +430,6 @@ class AssetModel(QtGui.QStandardItemModel): parent_id, parent_item = asset_items_queue.popleft() # Skip if there are no children children_ids = asset_ids_by_parents[parent_id] - if not children_ids: - continue # Go through current children of parent item # - find out items that were deleted and skip creation of already