diff --git a/blenderkit/download.py b/blenderkit/download.py index 7bc044813db651e84db5b0f782fda2f4f67d3417..3eaa4e51f9b7f06f1506ab4fac1aa1b2ffded1fe 100644 --- a/blenderkit/download.py +++ b/blenderkit/download.py @@ -475,12 +475,9 @@ def timer_update(): # TODO might get moved to handle all blenderkit stuff, not if len(file_names) == 2: # todo this should try to check if both files exist and are ok. shutil.copyfile(file_names[0], file_names[1]) - print('appending asset') + utils.p('appending asset') # progress bars: - if bpy.context.scene['search results'] is not None: - for sres in bpy.context.scene['search results']: - if asset_data['id'] == sres['id']: - sres['downloaded'] = 100 + # we need to check if mouse isn't down, which means an operator can be running. # Especially for sculpt mode, where appending a brush during a sculpt stroke causes crasehes # @@ -495,6 +492,7 @@ def timer_update(): # TODO might get moved to handle all blenderkit stuff, not done = try_finished_append(asset_data, **tcom.passargs) if not done: at = asset_data['asset_type'] + tcom.passargs['retry_counter'] = tcom.passargs.get('retry_counter',0) +1 if at in ('model', 'material'): download(asset_data, **tcom.passargs) elif asset_data['asset_type'] == 'material': @@ -503,7 +501,12 @@ def timer_update(): # TODO might get moved to handle all blenderkit stuff, not download(asset_data, **tcom.passargs) elif asset_data['asset_type'] == 'brush' or asset_data['asset_type'] == 'texture': download(asset_data, **tcom.passargs) - print('finished download thread') + if bpy.context.scene['search results'] is not None and done: + for sres in bpy.context.scene['search results']: + if asset_data['id'] == sres['id']: + sres['downloaded'] = 100 + + utils.p('finished download thread') return .2 @@ -590,9 +593,15 @@ def download(asset_data, **kwargs): scene_id = get_scene_id() tcom = ThreadCom() - tcom.passargs = kwargs + if kwargs.get('retry_counter',0) > 3: + sprops = utils.get_search_props() + sprops.report = f"Maximum retries exceeded for {asset_data['name']}" + utils.p(sprops.report) + return + + # incoming data can be either directly dict from python, or blender id property # (recovering failed downloads on reload) if type(asset_data) == dict: @@ -654,7 +663,7 @@ def try_finished_append(asset_data, **kwargs): # location=None, material_target This means probably wrong download, so download should restart''' file_names = paths.get_download_filenames(asset_data) done = False - print('try to append allready existing asset') + utils.p('try to append allready existing asset') if len(file_names) > 0: if os.path.isfile(file_names[-1]): kwargs['name'] = asset_data['name'] diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py index 88d1438682ab6d32cbf081626ca33008177d4693..1a4b2e7638eff7810b53ff6209d055d6f7717e18 100644 --- a/blenderkit/ui_panels.py +++ b/blenderkit/ui_panels.py @@ -802,6 +802,12 @@ class VIEW3D_PT_blenderkit_downloads(Panel): row.label(text=asset_data['name']) row.label(text=str(int(tcom.progress)) + ' %') row.operator('scene.blenderkit_download_kill', text='', icon='CANCEL') + if tcom.passargs.get('retry_counter',0)>0: + row = layout.row() + row.label(text = 'failed. retrying ... ', icon='ERROR') + row.label(text = str(tcom.passargs["retry_counter"])) + + layout.separator() classess = (