[Bf-extensions-cvs] [a3a1815d] blender-v2.90-release: BlenderKit: fix login after token refresh fails.

Vilém Duha noreply at git.blender.org
Wed Jul 29 22:19:13 CEST 2020


Commit: a3a1815d36afbccbd45b52c91afc4e543d4154df
Author: Vilém Duha
Date:   Wed Jul 15 00:39:45 2020 +0200
Branches: blender-v2.90-release
https://developer.blender.org/rBAa3a1815d36afbccbd45b52c91afc4e543d4154df

BlenderKit: fix login after token refresh fails.

Now offers a popup to login on site, previously only reported about invalid token, which wasn't clear to many users.

(cherry picked from commit c52cfd99ff31f7554cc998c69382d1c8dd7ed8ed)

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

M	blenderkit/bkit_oauth.py
M	blenderkit/rerequests.py
M	blenderkit/search.py
M	blenderkit/tasks_queue.py
M	blenderkit/ui.py
M	blenderkit/utils.py

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

diff --git a/blenderkit/bkit_oauth.py b/blenderkit/bkit_oauth.py
index ae90b215..59ed6c8b 100644
--- a/blenderkit/bkit_oauth.py
+++ b/blenderkit/bkit_oauth.py
@@ -116,7 +116,7 @@ class RegisterLoginOnline(bpy.types.Operator):
     message: bpy.props.StringProperty(
         name="Message",
         description="",
-        default="You were logged out from BlenderKit. Clicking OK takes you to web login. ")
+        default="You were logged out from BlenderKit.\n Clicking OK takes you to web login. ")
 
     @classmethod
     def poll(cls, context):
@@ -124,7 +124,7 @@ class RegisterLoginOnline(bpy.types.Operator):
 
     def draw(self, context):
         layout = self.layout
-        utils.label_multiline(layout, text=self.message)
+        utils.label_multiline(layout, text=self.message, width = 300)
 
     def execute(self, context):
         preferences = bpy.context.preferences.addons['blenderkit'].preferences
diff --git a/blenderkit/rerequests.py b/blenderkit/rerequests.py
index 3d9a4d75..c655c8c5 100644
--- a/blenderkit/rerequests.py
+++ b/blenderkit/rerequests.py
@@ -76,6 +76,11 @@ def rerequest(method, url, **kwargs):
                         utils.p('reresult', response.status_code)
                         if response.status_code >= 400:
                             utils.p('reresult', response.text)
+                    else:
+                        tasks_queue.add_task((ui.add_report, (
+                            'Refreshing token failed.Please login manually.', 10)))
+                        # tasks_queue.add_task((bkit_oauth.write_tokens, ('', '', '')))
+                        tasks_queue.add_task((bpy.ops.wm.blenderkit_login,( 'INVOKE_DEFAULT',)),fake_context = True)
     return response
 
 
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 09dfeb65..f6226049 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -72,7 +72,7 @@ def check_errors(rdata):
                 if user_preferences.enable_oauth:
                     bkit_oauth.refresh_token_thread()
                 return False, rdata.get('detail')
-            return False, 'Missing or wrong api_key in addon preferences'
+            return False, 'Use login panel to connect your profile.'
     return True, ''
 
 
@@ -282,7 +282,7 @@ def timer_update():
             search()
             preferences.first_run = False
         if preferences.tips_on_start:
-            ui.get_largest_3dview()
+            utils.get_largest_3dview()
             ui.update_ui_size(ui.active_area, ui.active_region)
             ui.add_report(text='BlenderKit Tip: ' + random.choice(rtips), timeout=12, color=colors.GREEN)
         return 3.0
diff --git a/blenderkit/tasks_queue.py b/blenderkit/tasks_queue.py
index bbac6d63..a253aa96 100644
--- a/blenderkit/tasks_queue.py
+++ b/blenderkit/tasks_queue.py
@@ -45,15 +45,16 @@ def get_queue():
     return t.task_queue
 
 class task_object:
-    def __init__(self, command = '', arguments = (), wait = 0, only_last = False):
+    def __init__(self, command = '', arguments = (), wait = 0, only_last = False, fake_context = False):
         self.command = command
         self.arguments = arguments
         self.wait = wait
         self.only_last = only_last
+        self.fake_context = fake_context
 
-def add_task(task, wait = 0, only_last = False):
+def add_task(task, wait = 0, only_last = False, fake_context = False):
     q = get_queue()
-    taskob = task_object(task[0],task[1], wait = wait, only_last = only_last)
+    taskob = task_object(task[0],task[1], wait = wait, only_last = only_last, fake_context = fake_context)
     q.put(taskob)
 
 
@@ -90,7 +91,11 @@ def queue_worker():
             utils.p('as a task:   ')
             utils.p(task.command, task.arguments)
             try:
-                task.command(*task.arguments)
+                if task.fake_context:
+                    fc = utils.get_fake_context(bpy.context)
+                    task.command(fc,*task.arguments)
+                else:
+                    task.command(*task.arguments)
             except Exception as e:
                 utils.p('task failed:')
                 print(e)
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index a1cd66d9..fa26d8a3 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1181,30 +1181,6 @@ def update_ui_size(area, region):
     ui.rating_y = ui.bar_y - ui.bar_height
 
 
-def get_largest_3dview():
-    maxsurf = 0
-    maxa = None
-    maxw = None
-    region = None
-    for w in bpy.context.window_manager.windows:
-        screen = w.screen
-        for a in screen.areas:
-            if a.type == 'VIEW_3D':
-                asurf = a.width * a.height
-                if asurf > maxsurf:
-                    maxa = a
-                    maxw = w
-                    maxsurf = asurf
-
-                    for r in a.regions:
-                        if r.type == 'WINDOW':
-                            region = r
-    global active_area, active_window, active_region
-    active_window = maxw
-    active_area = maxa
-    active_region = region
-    return maxw, maxa, region
-
 
 class AssetBarOperator(bpy.types.Operator):
     '''runs search and displays the asset bar at the same time'''
@@ -1808,13 +1784,14 @@ class UndoWithContext(bpy.types.Operator):
         C_dict = bpy.context.copy()
         C_dict.update(region='WINDOW')
         if context.area is None or context.area.type != 'VIEW_3D':
-            w, a, r = get_largest_3dview()
+            w, a, r = utils.get_largest_3dview()
             override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
             C_dict.update(override)
         bpy.ops.ed.undo_push(C_dict, 'INVOKE_REGION_WIN', message=self.message)
         return {'FINISHED'}
 
 
+
 class RunAssetBarWithContext(bpy.types.Operator):
     """Regenerate cobweb"""
     bl_idname = "object.run_assetbar_fix_context"
@@ -1826,12 +1803,7 @@ class RunAssetBarWithContext(bpy.types.Operator):
     #     return {'RUNNING_MODAL'}
 
     def execute(self, context):
-        C_dict = bpy.context.copy()
-        C_dict.update(region='WINDOW')
-        if context.area is None or context.area.type != 'VIEW_3D':
-            w, a, r = get_largest_3dview()
-            override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
-            C_dict.update(override)
+        C_dict = utils.get_fake_context(context)
         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 2e59887c..78eff216 100644
--- a/blenderkit/utils.py
+++ b/blenderkit/utils.py
@@ -614,6 +614,39 @@ def guard_from_crash():
     return True
 
 
+def get_largest_3dview():
+    maxsurf = 0
+    maxa = None
+    maxw = None
+    region = None
+    for w in bpy.context.window_manager.windows:
+        screen = w.screen
+        for a in screen.areas:
+            if a.type == 'VIEW_3D':
+                asurf = a.width * a.height
+                if asurf > maxsurf:
+                    maxa = a
+                    maxw = w
+                    maxsurf = asurf
+
+                    for r in a.regions:
+                        if r.type == 'WINDOW':
+                            region = r
+    global active_area, active_window, active_region
+    active_window = maxw
+    active_area = maxa
+    active_region = region
+    return maxw, maxa, region
+
+def get_fake_context(context):
+    C_dict = context.copy()
+    C_dict.update(region='WINDOW')
+    if context.area is None or context.area.type != 'VIEW_3D':
+        w, a, r = get_largest_3dview()
+        override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
+        C_dict.update(override)
+    return C_dict
+
 def label_multiline(layout, text='', icon='NONE', width=-1):
     ''' draw a ui label, but try to split it in multiple lines.'''
     if text.strip() == '':



More information about the Bf-extensions-cvs mailing list