[Bf-extensions-cvs] [c84f8315] master: BlenderKit: many post-release fixes

Vilem Duha noreply at git.blender.org
Thu Jul 1 14:38:04 CEST 2021


Commit: c84f83153900009f1c7743e3b21792ab1a730257
Author: Vilem Duha
Date:   Thu Jul 1 12:09:55 2021 +0200
Branches: master
https://developer.blender.org/rBAc84f83153900009f1c7743e3b21792ab1a730257

BlenderKit: many post-release fixes

Fix for rerequests recursion crash
rename timers
fix manual link
attemt to fix mysterious crashes on some machines by limiting some calls to assetbar operator, and not copying image into it's preview so often
fix search when & was present
add a popup when appending a scene
improve starup dialog with an image

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

M	blenderkit/__init__.py
M	blenderkit/bg_blender.py
M	blenderkit/categories.py
M	blenderkit/download.py
M	blenderkit/paths.py
M	blenderkit/rerequests.py
M	blenderkit/search.py
M	blenderkit/tasks_queue.py
A	blenderkit/thumbnails/intro.jpg
M	blenderkit/ui.py
M	blenderkit/ui_panels.py
M	blenderkit/utils.py

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

diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index e8043626..c58e5d99 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -155,10 +155,10 @@ def scene_load(context):
 @bpy.app.handlers.persistent
 def check_timers_timer():
     ''' checks if all timers are registered regularly. Prevents possible bugs from stopping the addon.'''
-    if not bpy.app.timers.is_registered(search.timer_update):
-        bpy.app.timers.register(search.timer_update)
-    if not bpy.app.timers.is_registered(download.timer_update):
-        bpy.app.timers.register(download.timer_update)
+    if not bpy.app.timers.is_registered(search.search_timer):
+        bpy.app.timers.register(search.search_timer)
+    if not bpy.app.timers.is_registered(download.download_timer):
+        bpy.app.timers.register(download.download_timer)
     if not (bpy.app.timers.is_registered(tasks_queue.queue_worker)):
         bpy.app.timers.register(tasks_queue.queue_worker)
     if not bpy.app.timers.is_registered(bg_blender.bg_update):
@@ -1542,7 +1542,7 @@ class BlenderKitSceneSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
     )
     switch_after_append: BoolProperty(
         name='Switch to scene after download',
-        default=False
+        default=True
     )
 
 
@@ -1714,6 +1714,13 @@ class BlenderKitAddonPreferences(AddonPreferences):
         update=utils.save_prefs
     )
 
+    # single_timer: BoolProperty(
+    #     name="Use timers",
+    #     description="Use timers for BlenderKit. Usefull for debugging since timers seem to be unstable",
+    #     default=True,
+    #     update=utils.save_prefs
+    # )
+
     experimental_features: BoolProperty(
         name="Enable experimental features",
         description="Enable all experimental features of BlenderKit. Use at your own risk.",
@@ -1773,6 +1780,15 @@ class BlenderKitAddonPreferences(AddonPreferences):
             layout.prop(self, "categories_fix")
 
 
+# # @bpy.app.handlers.persistent
+# def blenderkit_timer():
+#
+#
+# if not user_preferences.use_timers:
+#     search.search_timer()
+#     download.download_timer()
+#     tasks_queue.queue_worker()
+#     bg_blender.bg_update()
 # registration
 classes = (
 
@@ -1800,6 +1816,7 @@ classes = (
 )
 
 
+
 def register():
     for cls in classes:
         bpy.utils.register_class(cls)
@@ -1874,6 +1891,8 @@ def register():
             if a.type == 'PREFERENCES':
                 tasks_queue.add_task((bpy.ops.wm.blenderkit_welcome, ('INVOKE_DEFAULT',)), fake_context=True,
                                      fake_context_area='PREFERENCES')
+                #save preferences after manually enabling the addon
+                tasks_queue.add_task((bpy.ops.wm.save_userpref, ()), fake_context=False,)
 
 
 def unregister():
diff --git a/blenderkit/bg_blender.py b/blenderkit/bg_blender.py
index 01c62538..c4294b30 100644
--- a/blenderkit/bg_blender.py
+++ b/blenderkit/bg_blender.py
@@ -108,11 +108,14 @@ def bg_update():
     '''monitoring of background process'''
     text = ''
     #utils.p('timer search')
+    # utils.p('start bg_blender timer bg_update')
 
     s = bpy.context.scene
 
     global bg_processes
     if len(bg_processes) == 0:
+        # utils.p('end bg_blender timer bg_update')
+
         return 2
     #cleanup dead processes first
     remove_processes = []
@@ -156,7 +159,11 @@ def bg_update():
     # if len(bg_processes) == 0:
     #     bpy.app.timers.unregister(bg_update)
     if len(bg_processes) > 0:
+        # utils.p('end bg_blender timer bg_update')
+
         return .3
+    # utils.p('end bg_blender timer bg_update')
+
     return 1.
 
 
diff --git a/blenderkit/categories.py b/blenderkit/categories.py
index 46d10f86..3a0d2624 100644
--- a/blenderkit/categories.py
+++ b/blenderkit/categories.py
@@ -84,6 +84,7 @@ def get_category_path(categories, category):
                     category_path.insert(0, slug)
                 return category_path
             check_categories.append(ch)
+    return category_path
 
 def get_category_name_path(categories, category):
     '''finds the category in all possible subcategories and returns the path to it'''
diff --git a/blenderkit/download.py b/blenderkit/download.py
index 7cffff44..f0c101a1 100644
--- a/blenderkit/download.py
+++ b/blenderkit/download.py
@@ -17,7 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 
-from blenderkit import paths, append_link, utils, ui, colors, tasks_queue, rerequests, resolutions
+from blenderkit import paths, append_link, utils, ui, colors, tasks_queue, rerequests, resolutions, ui_panels
 
 import threading
 import time
@@ -62,7 +62,7 @@ def check_missing():
     for l in missing:
         asset_data = l['asset_data']
 
-        downloaded = check_existing(asset_data, resolution=asset_data['resolution'])
+        downloaded = check_existing(asset_data, resolution=asset_data.get('resolution'))
         if downloaded:
             try:
                 l.reload()
@@ -315,11 +315,11 @@ def append_asset(asset_data, **kwargs):  # downloaders=[], location=None,
         sprops = s.blenderkit_scene
 
         scene = append_link.append_scene(file_names[0], link=sprops.append_link == 'LINK', fake_user=False)
-        print('scene appended')
+        # print('scene appended')
         if scene is not None:
             props = scene.blenderkit
             asset_main = scene
-            print(sprops.switch_after_append)
+            # print(sprops.switch_after_append)
             if sprops.switch_after_append:
                 bpy.context.window_manager.windows[0].scene = scene
 
@@ -563,7 +563,7 @@ def replace_resolution_appended(file_paths, asset_data, resolution):
 
 
 # @bpy.app.handlers.persistent
-def timer_update():
+def download_timer():
     # TODO might get moved to handle all blenderkit stuff, not to slow down.
     '''
     check for running and finished downloads.
@@ -571,10 +571,14 @@ def timer_update():
     Finished downloads are processed and linked/appended to scene.
      '''
     global download_threads
+    # utils.p('start download timer')
+
     # bk_logger.debug('timer download')
 
     if len(download_threads) == 0:
-        return 2.0
+        # utils.p('end download timer')
+
+        return 2
     s = bpy.context.scene
     for threaddata in download_threads:
         t = threaddata[0]
@@ -589,13 +593,14 @@ def timer_update():
             if sr is not None:
                 for r in sr:
                     if asset_data['id'] == r['id']:
-                        r['downloaded'] = tcom.progress
-
+                        r['downloaded'] = 0.5#tcom.progress
         if not t.is_alive():
             if tcom.error:
                 sprops = utils.get_search_props()
                 sprops.report = tcom.report
                 download_threads.remove(threaddata)
+                # utils.p('end download timer')
+
                 return
             file_paths = paths.get_download_filepaths(asset_data, tcom.passargs['resolution'])
 
@@ -661,6 +666,8 @@ def timer_update():
                                 sres['downloaded'] = 100
 
                 bk_logger.debug('finished download thread')
+    # utils.p('end download timer')
+
     return .5
 
 
@@ -753,6 +760,7 @@ class Downloader(threading.Thread):
     # def main_download_thread(asset_data, tcom, scene_id, api_key):
     def run(self):
         '''try to download file from blenderkit'''
+        # utils.p('start downloader thread')
         asset_data = self.asset_data
         tcom = self.tcom
         scene_id = self.scene_id
@@ -832,6 +840,8 @@ class Downloader(threading.Thread):
         tcom.report = f'Unpacking files'
         self.asset_data['resolution'] = self.resolution
         resolutions.send_to_bg(self.asset_data, file_name, command='unpack')
+        # utils.p('end downloader thread')
+
 
 
 class ThreadCom:  # object passed to threads to read background process stdout info
@@ -1226,7 +1236,7 @@ def show_enum_values(obj, prop_name):
 class BlenderkitDownloadOperator(bpy.types.Operator):
     """Download and link asset to scene. Only link if asset already available locally"""
     bl_idname = "scene.blenderkit_download"
-    bl_label = "BlenderKit Asset Download"
+    bl_label = "Download"
     bl_options = {'REGISTER', 'UNDO', 'INTERNAL'}
 
     # asset_type: EnumProperty(
@@ -1258,6 +1268,8 @@ class BlenderkitDownloadOperator(bpy.types.Operator):
 
     invoke_resolution: BoolProperty(name='Replace resolution popup',
                                     description='pop up to ask which resolution to download', default=False)
+    invoke_scene_settings: BoolProperty(name='Scene import settings popup',
+                                    description='pop up scene import settings', default=False)
 
     resolution: EnumProperty(
         items=available_resolutions_callback,
@@ -1376,7 +1388,10 @@ class BlenderkitDownloadOperator(bpy.types.Operator):
 
     def draw(self, context):
         layout = self.layout
-        layout.prop(self, 'resolution', expand=True, icon_only=False)
+        if self.invoke_resolution:
+            layout.prop(self, 'resolution', expand=True, icon_only=False)
+        if self.invoke_scene_settings:
+            ui_panels.draw_scene_import_settings(self, context)
 
     def invoke(self, context, event):
         # if self.close_window:
@@ -1399,6 +1414,8 @@ class BlenderkitDownloadOperator(bpy.types.Operator):
                 self.resolution = 'ORIGINAL'
             return wm.invoke_props_dialog(self)
 
+        if self.invoke_scene_settings:
+            return wm.invoke_props_dialog(self)
         # if self.close_window:
         #     time.sleep(0.1)
         #     context.area.tag_redraw()
@@ -1416,7 +1433,7 @@ def register_download():
     bpy.app.handlers.save_pre.append(scene_save)
     user_preferences = bpy.context.preferences.addons['blenderkit'].preferences
     if user_preferences.use_timers:
-        bpy.app.timers.register(timer_update)
+        bpy.app.timers.register(download_timer)
 
 
 def unregister_download():
@@ -1424,5 +1441,5 @@ def unregister_download():
     bpy.utils.unregister_class(BlenderkitKillDownloadOperator)
     bpy.app.handlers.load_post.remove(scene_load)
     bpy.app.handlers.save

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list