[Bf-extensions-cvs] [e1dae55c] master: BlenderKit: fix data update

Vilém Duha noreply at git.blender.org
Tue Jul 28 15:34:59 CEST 2020


Commit: e1dae55cca702ef4a140a455d88099d666230c8c
Author: Vilém Duha
Date:   Tue Jul 28 15:31:28 2020 +0200
Branches: master
https://developer.blender.org/rBAe1dae55cca702ef4a140a455d88099d666230c8c

BlenderKit: fix data update

-older fines could act as broken

===================================================================

M	blenderkit/append_link.py
M	blenderkit/download.py
M	blenderkit/search.py
M	blenderkit/ui.py
M	blenderkit/ui_panels.py

===================================================================

diff --git a/blenderkit/append_link.py b/blenderkit/append_link.py
index b6bfb791..2301daac 100644
--- a/blenderkit/append_link.py
+++ b/blenderkit/append_link.py
@@ -88,6 +88,8 @@ def append_scene(file_name, scenename=None, link=False, fake_user=False):
 def link_collection(file_name, obnames=[], location=(0, 0, 0), link=False, parent = None, **kwargs):
     '''link an instanced group - model type asset'''
     sel = utils.selection_get()
+    print('link collection')
+    print(kwargs)
 
     with bpy.data.libraries.load(file_name, link=link, relative=True) as (data_from, data_to):
         scols = []
@@ -115,6 +117,12 @@ def link_collection(file_name, obnames=[], location=(0, 0, 0), link=False, paren
                 main_object.instance_collection = col
                 break;
 
+    #sometimes, the lib might already  be without the actual link.
+    if not main_object.instance_collection and kwargs['name']:
+        col = bpy.data.collections.get(kwargs['name'])
+        if col:
+            main_object.instance_collection = col
+
     main_object.name = main_object.instance_collection.name
 
     # bpy.ops.wm.link(directory=file_name + "/Collection/", filename=kwargs['name'], link=link, instance_collections=True,
diff --git a/blenderkit/download.py b/blenderkit/download.py
index 7ec425ce..c14fc84d 100644
--- a/blenderkit/download.py
+++ b/blenderkit/download.py
@@ -343,6 +343,13 @@ def append_asset(asset_data, **kwargs):  # downloaders=[], location=None,
                                                                  parent=kwargs.get('parent'))
 
                 else:
+                    # parent, newobs = append_link.link_collection(file_names[-1],
+                    #                                              location=downloader['location'],
+                    #                                              rotation=downloader['rotation'],
+                    #                                              link=False,
+                    #                                              name=asset_data['name'],
+                    #                                              parent=kwargs.get('parent'))
+
                     parent, newobs = append_link.append_objects(file_names[-1],
                                                                 location=downloader['location'],
                                                                 rotation=downloader['rotation'],
@@ -364,10 +371,17 @@ def append_asset(asset_data, **kwargs):  # downloaders=[], location=None,
                                                              name=asset_data['name'],
                                                              parent=kwargs.get('parent'))
             else:
+                # parent, newobs = append_link.link_collection(file_names[-1],
+                #                                              location=kwargs['model_location'],
+                #                                              rotation=kwargs['model_rotation'],
+                #                                              link=False,
+                #                                              name=asset_data['name'],
+                #                                              parent=kwargs.get('parent'))
                 parent, newobs = append_link.append_objects(file_names[-1],
                                                             location=kwargs['model_location'],
                                                             rotation=kwargs['model_rotation'],
                                                             link=link,
+                                                            name=asset_data['name'],
                                                             parent=kwargs.get('parent'))
             if parent.type == 'EMPTY' and link:
                 bmin = asset_data['bbox_min']
@@ -723,8 +737,8 @@ def try_finished_append(asset_data, **kwargs):  # location=None, material_target
                 for f in file_names:
                     try:
                         os.remove(f)
-                    except:
-                        e = sys.exc_info()[0]
+                    except Exception as e:
+                        # e = sys.exc_info()[0]
                         print(e)
                         pass;
                 done = False
@@ -934,7 +948,7 @@ class BlenderkitDownloadOperator(bpy.types.Operator):
 
         if self.replace:  # cleanup first, assign later.
             obs = utils.get_selected_replace_adepts()
-            print(obs)
+            # print(obs)
             for ob in obs:
                 print('replace attempt ', ob.name)
                 if self.asset_base_id != '':
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 6c8d16e2..82bb8f58 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -101,22 +101,40 @@ def refresh_token_timer():
 
     return max(3600, user_preferences.api_key_life - 3600)
 
+def update_ad(ad):
+    if not ad.get('assetBaseId'):
+        ad['assetBaseId'] = ad['asset_base_id']  # this should stay ONLY for compatibility with older scenes
+        ad['assetType'] = ad['asset_type']  # this should stay ONLY for compatibility with older scenes
+        ad['canDownload'] = ad['can_download']  # this should stay ONLY for compatibility with older scenes
+        ad['verificationStatus'] = ad['verification_status']  # this should stay ONLY for compatibility with older scenes
+        ad['author'] = {}
+        ad['author']['id'] = ad['author_id']  # this should stay ONLY for compatibility with older scenes
+    return ad
 
 def update_assets_data():  # updates assets data on scene load.
     '''updates some properties that were changed on scenes with older assets.
     The properties were mainly changed from snake_case to CamelCase to fit the data that is coming from the server.
     '''
-    for ob in bpy.context.scene.objects:
-        if ob.get('asset_data') != None:
-            ad = ob['asset_data']
-            if not ad.get('assetBaseId'):
-                ad['assetBaseId'] = ad['asset_base_id'],  # this should stay ONLY for compatibility with older scenes
-                ad['assetType'] = ad['asset_type'],  # this should stay ONLY for compatibility with older scenes
-                ad['canDownload'] = ad['can_download'],  # this should stay ONLY for compatibility with older scenes
-                ad['verificationStatus'] = ad[
-                                               'verification_status'],  # this should stay ONLY for compatibility with older scenes
-                ad['author'] = {}
-                ad['author']['id'] = ad['author_id'],  # this should stay ONLY for compatibility with older scenes
+    data = bpy.data
+
+    datablocks = [
+        bpy.data.objects,
+        bpy.data.materials,
+        bpy.data.brushes,
+    ]
+    for dtype in datablocks:
+        for block in dtype:
+            if block.get('asset_data') != None:
+                update_ad(block['asset_data'])
+
+    dicts = [
+        'assets used',
+        'assets rated',
+    ]
+    for d in dicts:
+        for k in d.keys():
+            update_ad(d[k])
+            # bpy.context.scene['assets used'][ad] = ad
 
 
 @persistent
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index 7935363d..80b7ef2c 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1033,9 +1033,10 @@ def is_rating_possible():
             m = ao.active_material
             if m is not None:
                 ad = m.get('asset_data')
-                if ad is not None:
+                if ad is not None and ad.get('assetBaseId'):
                     rated = bpy.context.scene['assets rated'].get(ad['assetBaseId'])
-                    return True, rated, m, ad
+                    if rated:
+                        return True, rated, m, ad
 
         # if t>2 and t<2.5:
         #     ui_props.rating_on = False
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 89646862..a591e76e 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -1048,7 +1048,12 @@ def draw_asset_context_menu(self, context, asset_data):
             op.author_id = author_id
 
     op = layout.operator('view3d.blenderkit_search', text='Search Similar')
-    op.keywords = asset_data['name'] + ' ' + asset_data['description'] + ' ' + ' '.join(asset_data['tags'])
+    #build search string from description and tags:
+    op.keywords = asset_data['name']
+    if asset_data.get('description'):
+        op.keywords += ' ' + asset_data.get('description')
+    op.keywords += ' '.join(asset_data.get('tags'))
+
     if asset_data.get('canDownload') != 0:
         if len(bpy.context.selected_objects) > 0 and ui_props.asset_type == 'MODEL':
             aob = bpy.context.active_object



More information about the Bf-extensions-cvs mailing list