[Bf-extensions-cvs] [c5b6e7a4] master: BlenderKit: Right click menu -Open authors webpage -Search assets by author -basic 'search similar' . -fix some tooltips -deleting of assets from online lib (disabled by now) - possibility to validate , not yet supported on server.

Vilém Duha noreply at git.blender.org
Fri Aug 16 23:34:07 CEST 2019


Commit: c5b6e7a4c89828227c6c11aa00b679cef994c30e
Author: Vilém Duha
Date:   Fri Aug 16 22:33:33 2019 +0200
Branches: master
https://developer.blender.org/rBAc5b6e7a4c89828227c6c11aa00b679cef994c30e

BlenderKit: Right click menu
-Open authors webpage
-Search assets by author
-basic 'search similar' .
-fix some tooltips
-deleting of assets from online lib (disabled by now)
- possibility to validate , not yet supported on server.

scroll wheel now scrolls rows instead of single items if there are more rows enabled.

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

M	blenderkit/autothumb.py
M	blenderkit/search.py
M	blenderkit/ui.py
M	blenderkit/ui_panels.py
M	blenderkit/upload.py

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

diff --git a/blenderkit/autothumb.py b/blenderkit/autothumb.py
index b5f659aa..2e5eb710 100644
--- a/blenderkit/autothumb.py
+++ b/blenderkit/autothumb.py
@@ -253,7 +253,7 @@ def start_material_thumbnailer(self, context):
 
 
 class GenerateThumbnailOperator(bpy.types.Operator):
-    """Tooltip"""
+    """Generate Cycles thumbnail for model assets"""
     bl_idname = "object.blenderkit_generate_thumbnail"
     bl_label = "BlenderKit Thumbnail Generator"
 
diff --git a/blenderkit/search.py b/blenderkit/search.py
index e81e456e..56c8b526 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -597,7 +597,7 @@ def fetch_author(a_id, api_key):
                         f.write(r.content)
                     adata['gravatarImg'] = gravatar_path
                 elif r.status_code == '404':
-                    adata['gravatarHash']= None
+                    adata['gravatarHash'] = None
     except Exception as e:
         utils.p(e)
     utils.p('finish fetch')
@@ -723,7 +723,6 @@ class Searcher(threading.Thread):
             else:
                 requeststring += '+order:_score'
 
-
             requeststring += '&addon_version=%s' % params['addon_version']
             if params.get('scene_uuid') is not None:
                 requeststring += '&scene_uuid=%s' % params['scene_uuid']
@@ -1101,6 +1100,7 @@ class SearchOperator(Operator):
     own: BoolProperty(name="own assets only",
                       description="Find all own assets",
                       default=False)
+
     category: StringProperty(
         name="category",
         description="search only subtree of this category",
@@ -1115,13 +1115,26 @@ class SearchOperator(Operator):
                            description="get next page from previous search",
                            default=False)
 
+    keywords = StringProperty(
+        name="Keywords",
+        description="Keywords",
+        default="")
+
     @classmethod
     def poll(cls, context):
         return True
 
     def execute(self, context):
-        search(own=self.own, category=self.category, get_next=self.get_next, author_id=self.author_id)
-        bpy.ops.view3d.blenderkit_asset_bar()
+        # TODO ; this should all get transferred to properties of the search operator, so sprops don't have to be fetched here at all.
+        sprops = utils.get_search_props()
+        if self.author_id != '':
+            sprops.search_keywords = ''
+        if self.keywords != '':
+            sprops.search_keywords = self.keywords
+
+
+        search(category=self.category, get_next=self.get_next, author_id=self.author_id)
+        #bpy.ops.view3d.blenderkit_asset_bar()
 
         return {'FINISHED'}
 
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index d33c124f..bd30d152 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1323,11 +1323,23 @@ class AssetBarOperator(bpy.types.Operator):
             # if event.type == 'TRACKPADPAN' :
             #     print(dir(event))
             #     print(event.value, event.oskey, event.)
-            if (event.type == 'WHEELDOWNMOUSE') and len(sr) - ui_props.scrolloffset > ui_props.wcount:
-                ui_props.scrolloffset += 1
+            if (event.type == 'WHEELDOWNMOUSE') and len(sr) - ui_props.scrolloffset > (
+                    ui_props.wcount * ui_props.hcount):
+                if ui_props.hcount > 1:
+                    ui_props.scrolloffset += ui_props.wcount
+                else:
+                    ui_props.scrolloffset += 1
+                if len(sr) - ui_props.scrolloffset < (ui_props.wcount * ui_props.hcount):
+                    ui_props.scrolloffset = len(sr) - (ui_props.wcount * ui_props.hcount)
 
             if event.type == 'WHEELUPMOUSE' and ui_props.scrolloffset > 0:
-                ui_props.scrolloffset -= 1
+                if ui_props.hcount > 1:
+                    ui_props.scrolloffset -= ui_props.wcount
+                else:
+                    ui_props.scrolloffset -= 1
+                if ui_props.scrolloffset < 0:
+                    ui_props.scrolloffset = 0
+
             return {'RUNNING_MODAL'}
         if event.type == 'MOUSEMOVE':  # Apply
 
@@ -1358,7 +1370,6 @@ class AssetBarOperator(bpy.types.Operator):
                 ui_props.draw_snapped_bounds = False
                 ui_props.draw_tooltip = False
                 bpy.context.window.cursor_set("DEFAULT")
-                print('out of region')
                 return {'PASS_THROUGH'}
 
             sr = bpy.context.scene['search results']
@@ -1412,6 +1423,14 @@ class AssetBarOperator(bpy.types.Operator):
                     ui_props.draw_drag_image = True
             return {'RUNNING_MODAL'}
 
+        if event.type == 'RIGHTMOUSE':
+            mx = event.mouse_x - r.x
+            my = event.mouse_y - r.y
+
+            if event.value == 'PRESS' and mouse_in_asset_bar(mx, my):
+                bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_asset_menu')
+                return {'RUNNING_MODAL'}
+
         if event.type == 'LEFTMOUSE':
 
             r = self.region
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 9175bed4..d17fe040 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -114,18 +114,16 @@ def draw_upload_common(layout, props, asset_type, context):
         op.asset_type = asset_type
 
     if props.asset_base_id != '':
-
         op = layout.operator("object.blenderkit_upload", text='Reupload asset', icon='EXPORT')
         op.asset_type = asset_type
         op.reupload = True
 
-
         op = layout.operator("object.blenderkit_upload", text='Upload as new asset', icon='EXPORT')
         op.asset_type = asset_type
         op.reupload = False
 
         # layout.label(text = 'asset id, overwrite only for reuploading')
-        layout.label(text = 'asset has a version online.')
+        layout.label(text='asset has a version online.')
         # row = layout.row()
         # row.enabled = False
         # row.prop(props, 'asset_base_id', icon='FILE_TICK')
@@ -387,11 +385,13 @@ class VIEW3D_PT_blenderkit_model_properties(Panel):
         layout.operator('object.blenderkit_bring_to_scene', text='Bring to scene')
         # layout.operator('object.blenderkit_color_corrector')
 
+
 def draw_login_progress(layout):
     layout.label(text='Login through browser')
     layout.label(text='in progress.')
     layout.operator("wm.blenderkit_login_cancel", text="Cancel", icon='CANCEL')
 
+
 class VIEW3D_PT_blenderkit_profile(Panel):
     bl_category = "BlenderKit"
     bl_idname = "VIEW3D_PT_blenderkit_profile"
@@ -416,7 +416,6 @@ class VIEW3D_PT_blenderkit_profile(Panel):
         if user_preferences.enable_oauth:
             draw_login_buttons(layout)
 
-
         if user_preferences.api_key != '':
             me = bpy.context.window_manager.get('bkit profile')
             if me is not None:
@@ -429,7 +428,7 @@ class VIEW3D_PT_blenderkit_profile(Panel):
                     layout.label(text='Private assets: %i MiB' % (me['sumPrivateAssetFilesSize']))
                 if me.get('remainingPrivateQuota') is not None:
                     layout.label(text='Remaining private storage: %i MiB' % (me['remainingPrivateQuota']))
-                    
+
             layout.operator("wm.url_open", text="See my uploads",
                             icon='URL').url = paths.BLENDERKIT_USER_ASSETS
 
@@ -561,13 +560,11 @@ def draw_login_buttons(layout):
 
         else:
             layout.operator("wm.blenderkit_login", text="Login as someone else",
-                           icon='URL').signup = False
+                            icon='URL').signup = False
             layout.operator("wm.blenderkit_logout", text="Logout",
                             icon='URL')
 
 
-
-
 class VIEW3D_PT_blenderkit_unified(Panel):
     bl_category = "BlenderKit"
     bl_idname = "VIEW3D_PT_blenderkit_unified"
@@ -721,6 +718,53 @@ class VIEW3D_PT_blenderkit_unified(Panel):
                 layout.label(text='not yet implemented')
 
 
+class OBJECT_MT_blenderkit_asset_menu(bpy.types.Menu):
+    bl_label = "Asset options:"
+    bl_idname = "OBJECT_MT_blenderkit_asset_menu"
+
+    def draw(self, context):
+        layout = self.layout
+        ui_props = context.scene.blenderkitUI
+
+        sr = bpy.context.scene['search results']
+        sr = bpy.context.scene['search results orig']['results']
+        asset_data = sr[ui_props.active_index]
+        author_id = str(asset_data['author']['id'])
+        a = bpy.context.window_manager['bkit authors'].get(author_id)
+        if a is not None:
+            # utils.p('author:', a)
+            if a.get('aboutMeUrl') is not None:
+                op = layout.operator('wm.url_open', text="Open author's website")
+                op.url = a['aboutMeUrl']
+        op = layout.operator('view3d.blenderkit_search', text='search assets by same author')
+        op.author_id = author_id
+
+        op = layout.operator('view3d.blenderkit_search', text='search similar')
+        print(dir(asset_data))
+        op.keywords = asset_data['name'] + ' ' + asset_data['description'] + ' ' + ''.join(asset_data['tags'])
+
+        wm = bpy.context.window_manager
+        profile = wm.get('bkit profile')
+        if profile is not None:
+            # validation by admin
+            if profile['user']['id'] == 2:
+                if asset_data['verificationStatus'] != 'validated':
+                    op = layout.operator('object.blenderkit_change_status', text='Validate')
+                    op.asset_id = asset_data['id']
+                    op.state = 'validated'
+
+            if author_id == str(profile['user']['id']):
+                layout.label(text='Management tools:')
+                row = layout.row()
+                row.operator_context = 'INVOKE_DEFAULT'
+                op = row.operator('object.blenderkit_change_status', text='Delete')
+                op.asset_id = asset_data['id']
+                op.state = 'deleted'
+            # else:
+            #     #not an author - can rate
+            #     draw_ratings(layout, context)
+
+
 class SetCategoryOperator(bpy.types.Operator):
     """Visit subcategory"""
     bl_idname = "view3d.blenderkit_set_category"
@@ -838,7 +882,8 @@ cl

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list