Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVilém Duha <vilda.novak@gmail.com>2020-07-28 16:31:28 +0300
committerVilém Duha <vilda.novak@gmail.com>2020-07-29 23:18:39 +0300
commitfb3d2715ce6f3474fc862fbf5454054730bcb516 (patch)
treed7a1a3f0dee225ccbcafc4477bdc0944940c96f2
parent06181ee9947d558d5323471c9b5d9792267fdb66 (diff)
BlenderKit: fix data update
-older fines could act as broken (cherry picked from commit e1dae55cca702ef4a140a455d88099d666230c8c)
-rw-r--r--blenderkit/append_link.py8
-rw-r--r--blenderkit/download.py20
-rw-r--r--blenderkit/search.py40
-rw-r--r--blenderkit/ui.py5
-rw-r--r--blenderkit/ui_panels.py7
5 files changed, 63 insertions, 17 deletions
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