[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