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>2021-01-19 20:32:26 +0300
committerVilém Duha <vilda.novak@gmail.com>2021-01-19 20:32:26 +0300
commit789773b05f53360a21e51520247c2da5a22e38d8 (patch)
tree760ea7236919c7e9939dd6d67a956323aa9bb36b
parentaf50ac234088b0d7eeab54cd498c0318a1f95c76 (diff)
BlenderKit: fix category upload for 3 level categories
If the subcategory1 enum was empty but the enum value would be higher than 0 from previous attempts, the metadata upload would fail.
-rw-r--r--blenderkit/__init__.py6
-rw-r--r--blenderkit/categories.py17
-rw-r--r--blenderkit/search.py5
-rw-r--r--blenderkit/ui_panels.py6
-rw-r--r--blenderkit/upload.py14
5 files changed, 37 insertions, 11 deletions
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index d3cd5a72..494b530e 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -696,12 +696,14 @@ class BlenderKitCommonUploadProps(object):
category: EnumProperty(
name="Category",
description="main category to put into",
- items=categories.get_category_enums
+ items=categories.get_category_enums,
+ update=categories.update_category_enums
)
subcategory: EnumProperty(
name="Subcategory",
description="Subcategory to put into",
- items=categories.get_subcategory_enums
+ items=categories.get_subcategory_enums,
+ update=categories.update_subcategory_enums
)
subcategory1: EnumProperty(
name="Subcategory lvl2",
diff --git a/blenderkit/categories.py b/blenderkit/categories.py
index 71e14f64..8408f16f 100644
--- a/blenderkit/categories.py
+++ b/blenderkit/categories.py
@@ -106,6 +106,18 @@ def get_category(categories, cat_path=()):
# asset_type = typemapper[type(self)]
# return asset_type
+def update_category_enums(self,context):
+ '''Fixes if lower level is empty - sets it to None, because enum value can be higher.'''
+ enums = get_subcategory_enums(self,context)
+ if enums[0][0] == 'NONE' and self.subcategory != 'NONE':
+ self.subcategory = 'NONE'
+
+def update_subcategory_enums(self,context):
+ '''Fixes if lower level is empty - sets it to None, because enum value can be higher.'''
+ enums = get_subcategory1_enums(self,context)
+ if enums[0][0] == 'NONE' and self.subcategory1 != 'NONE':
+ self.subcategory1 = 'NONE'
+
def get_category_enums(self, context):
wm = bpy.context.window_manager
@@ -192,7 +204,10 @@ def fetch_categories(API_key, force = False):
tempdir = paths.get_temp_dir()
categories_filepath = os.path.join(tempdir, 'categories.json')
- catfile_age = time.time() - os.path.getmtime(categories_filepath)
+ if os.path.exists(categories_filepath):
+ catfile_age = time.time() - os.path.getmtime(categories_filepath)
+ else:
+ catfile_age = 10000000
# global catfetch_counter
# catfetch_counter += 1
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 484830e0..00f8eda0 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -1368,7 +1368,10 @@ def search(category='', get_next=False, author_id=''):
return;
if category != '':
- query['category_subtree'] = category
+ if utils.profile_is_validator():
+ query['category'] = category
+ else:
+ query['category_subtree'] = category
if author_id != '':
query['author_id'] = author_id
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 4948b651..40be0800 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -1592,9 +1592,9 @@ def draw_panel_categories(self, context):
# op.free_only = True
for c in cats['children']:
- if c['assetCount'] > 0:
+ if c['assetCount'] > 0 or utils.profile_is_validator():
row = col.row(align=True)
- if len(c['children']) > 0 and c['assetCount'] > 15:
+ if len(c['children']) > 0 and c['assetCount'] > 15 or utils.profile_is_validator():
row = row.split(factor=.8, align=True)
# row = split.split()
ctext = '%s (%i)' % (c['name'], c['assetCount'])
@@ -1608,7 +1608,7 @@ def draw_panel_categories(self, context):
op.keep_running = True
op.category = c['slug']
# TODO enable subcategories, now not working due to some bug on server probably
- if len(c['children']) > 0 and c['assetCount'] > 15:
+ if len(c['children']) > 0 and c['assetCount'] > 15 or utils.profile_is_validator():
# row = row.split()
op = row.operator('view3d.blenderkit_set_category', text='>>')
op.asset_type = ui_props.asset_type
diff --git a/blenderkit/upload.py b/blenderkit/upload.py
index 69150230..2cd23f72 100644
--- a/blenderkit/upload.py
+++ b/blenderkit/upload.py
@@ -564,12 +564,14 @@ class FastMetadata(bpy.types.Operator):
category: EnumProperty(
name="Category",
description="main category to put into",
- items=categories.get_category_enums
+ items=categories.get_category_enums,
+ update=categories.update_category_enums
)
subcategory: EnumProperty(
name="Subcategory",
description="main category to put into",
- items=categories.get_subcategory_enums
+ items=categories.get_subcategory_enums,
+ update = categories.update_subcategory_enums
)
subcategory1: EnumProperty(
name="Subcategory",
@@ -608,7 +610,9 @@ class FastMetadata(bpy.types.Operator):
if self.category != 'NONE' and self.subcategory != 'NONE':
layout.prop(self, 'subcategory')
if self.subcategory != 'NONE' and self.subcategory1 != 'NONE':
- layout.prop(self, 'subcategory1')
+ enums = categories.get_subcategory1_enums(self, context)
+ if enums[0][0]!='NONE':
+ layout.prop(self, 'subcategory1')
layout.prop(self, 'name')
layout.prop(self, 'description')
layout.prop(self, 'tags')
@@ -668,7 +672,8 @@ class FastMetadata(bpy.types.Operator):
self.subcategory = cat_path[2]
except Exception as e:
print(e)
- self.message = f"Recategorize asset {asset_data['name']}"
+ self.message = f"Fast edit metadata of {asset_data['name']}"
+ self.message = str(cat_path)
self.name = asset_data['displayName']
self.description = asset_data['description']
self.tags = ','.join(asset_data['tags'])
@@ -679,6 +684,7 @@ class FastMetadata(bpy.types.Operator):
self.license = asset_data['license']
wm = context.window_manager
+
return wm.invoke_props_dialog(self, width = 600)