From 079689a5324878f02c3b4b6490dea87696772666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 18 May 2016 14:54:49 +0200 Subject: [PATCH] Client-side sorting of nodes. The sorting happens after obtaining the individual nodes, as this is done in parallel in unpredictable order. --- blender_cloud/gui.py | 24 ++++++++++++++++++++++++ blender_cloud/pillar.py | 1 - 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/blender_cloud/gui.py b/blender_cloud/gui.py index 4cbe9b2..fac2a6c 100644 --- a/blender_cloud/gui.py +++ b/blender_cloud/gui.py @@ -99,6 +99,12 @@ class MenuItem: self._is_folder = (node['node_type'] == 'group_texture' or isinstance(node, SpecialFolderNode)) + # Determine sorting order. + # by default, sort all the way at the end and folders first. + self._order = 0 if self._is_folder else 10000 + if node and node.properties and node.properties.order is not None: + self._order = node.properties.order + self.thumb_path = thumb_path # Updated when drawing the image @@ -107,6 +113,10 @@ class MenuItem: self.width = 0 self.height = 0 + def sort_key(self): + """Key for sorting lists of MenuItems.""" + return self._order, self.label_text + @property def thumb_path(self) -> str: return self._thumb_path @@ -463,6 +473,8 @@ class BlenderCloudBrowser(bpy.types.Operator): self.current_display_content.append(menu_item) self.loaded_images.add(menu_item.icon.filepath_raw) + self.sort_menu() + return menu_item def update_menu_item(self, node, *args) -> MenuItem: @@ -478,6 +490,18 @@ class BlenderCloudBrowser(bpy.types.Operator): else: raise ValueError('Unable to find MenuItem(node_uuid=%r)' % node_uuid) + self.sort_menu() + + def sort_menu(self): + """Sorts the self.current_display_content list.""" + + if not self.current_display_content: + return + + with self._menu_item_lock: + self.current_display_content.sort(key=MenuItem.sort_key) + + async def async_download_previews(self): self._state = 'BROWSING' diff --git a/blender_cloud/pillar.py b/blender_cloud/pillar.py index ebe08a3..350271d 100644 --- a/blender_cloud/pillar.py +++ b/blender_cloud/pillar.py @@ -272,7 +272,6 @@ async def get_nodes(project_uuid: str = None, parent_node_uuid: str = None, 'properties.files': 1, 'properties.content_type': 1, 'picture': 1}, 'where': where, - 'sort': 'properties.order', 'embed': ['parent']}) return children['_items']