From 40e0792c3cae2cb95eef8d08d23364ca2e091eca Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vil=C3=A9m=20Duha?= <vilda.novak@gmail.com>
Date: Wed, 4 Nov 2020 23:48:26 +0100
Subject: [PATCH] BlenderKit: fix a border case with generating context for
 assetbar (opening a file with no 3d view)

---
 blenderkit/search.py |  1 -
 blenderkit/ui.py     |  4 ++--
 blenderkit/utils.py  | 11 +++++++----
 3 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/blenderkit/search.py b/blenderkit/search.py
index f1230eb79..b681134cb 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -140,7 +140,6 @@ def update_assets_data():  # updates assets data on scene load.
         for bkdict in dicts:
 
             d = s.get(bkdict)
-            print(d)
             if not d:
                 continue;
 
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index 130e66ab5..56dd1feef 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1820,7 +1820,6 @@ class UndoWithContext(bpy.types.Operator):
         return {'FINISHED'}
 
 
-
 class RunAssetBarWithContext(bpy.types.Operator):
     """Regenerate cobweb"""
     bl_idname = "object.run_assetbar_fix_context"
@@ -1833,7 +1832,8 @@ class RunAssetBarWithContext(bpy.types.Operator):
 
     def execute(self, context):
         C_dict = utils.get_fake_context(context)
-        bpy.ops.view3d.blenderkit_asset_bar(C_dict, 'INVOKE_REGION_WIN', keep_running=True, do_search=False)
+        if C_dict.get('window'): # no 3d view, no asset bar.
+            bpy.ops.view3d.blenderkit_asset_bar(C_dict, 'INVOKE_REGION_WIN', keep_running=True, do_search=False)
         return {'FINISHED'}
 
 
diff --git a/blenderkit/utils.py b/blenderkit/utils.py
index 8ddd7e7d0..d03140b77 100644
--- a/blenderkit/utils.py
+++ b/blenderkit/utils.py
@@ -656,14 +656,17 @@ def get_fake_context(context, area_type='VIEW_3D'):
 
     try:
         context = context.copy()
-    except:
+    except Exception as e:
+        print(e)
+        print('BlenderKit: context.copy() failed. probably a colliding addon.')
         context = {}
 
     if context.get('area') is None or context.get('area').type != area_type:
         w, a, r = get_largest_area(area_type=area_type)
-
-        override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
-        C_dict.update(override)
+        if w:
+            #sometimes there is no area of the requested type. Let's face it, some people use Blender without 3d view.
+            override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
+            C_dict.update(override)
         # print(w,a,r)
     return C_dict
 
-- 
GitLab