diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py index 4fabd97fbeaa763b43bf2b48d22bbcde4632c1cf..80a4746b5e5d1ddd72216ce92fcd017516eccd8d 100644 --- a/blenderkit/__init__.py +++ b/blenderkit/__init__.py @@ -41,11 +41,11 @@ if "bpy" in locals(): importlib.reload(bg_blender) importlib.reload(paths) importlib.reload(utils) - importlib.reload(oauth) + importlib.reload(bkit_oauth) importlib.reload(tasks_queue) else: from blenderkit import asset_inspector, search, download, upload, ratings, autothumb, ui, bg_blender, paths, utils, \ - overrides, ui_panels, categories, oauth, tasks_queue + overrides, ui_panels, categories, bkit_oauth, tasks_queue import os import math @@ -1418,7 +1418,7 @@ def register(): bg_blender.register() utils.load_prefs() overrides.register_overrides() - oauth.register() + bkit_oauth.register() tasks_queue.register() bpy.app.handlers.load_post.append(scene_load) @@ -1435,7 +1435,7 @@ def unregister(): ui_panels.unregister_ui_panels() bg_blender.unregister() overrides.unregister_overrides() - oauth.unregister() + bkit_oauth.unregister() tasks_queue.unregister() del bpy.types.Scene.blenderkit_models diff --git a/blenderkit/bkit_oauth.py b/blenderkit/bkit_oauth.py new file mode 100644 index 0000000000000000000000000000000000000000..14274b042ecac850d7de958a714a00c10e5237d7 --- /dev/null +++ b/blenderkit/bkit_oauth.py @@ -0,0 +1,133 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +import bpy + +import threading +import blenderkit +from blenderkit import tasks_queue, utils, paths, search, categories, oauth + +CLIENT_ID = "IdFRwa3SGA8eMpzhRVFMg5Ts8sPK93xBjif93x0F" +PORTS = [62485, 1234] + +def login_thread(): + thread = threading.Thread(target=login, args=([]), daemon=True) + thread.start() + + +def login(): + authenticator = oauth.SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS) + auth_token, refresh_token = authenticator.get_new_token() + utils.p('tokens retrieved') + tasks_queue.add_task((write_tokens , (auth_token, refresh_token))) + + +def refresh_token_thread(): + preferences = bpy.context.preferences.addons['blenderkit'].preferences + if len(preferences.api_key_refresh) > 0: + thread = threading.Thread(target=refresh_token, args=([preferences.api_key_refresh]), daemon=True) + thread.start() + + +def refresh_token(api_key_refresh): + authenticator = oauth.SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS) + auth_token, refresh_token = authenticator.get_refreshed_token(api_key_refresh) + if auth_token is not None and refresh_token is not None: + tasks_queue.add_task((blenderkit.oauth.write_tokens , (auth_token, refresh_token))) + + +def write_tokens(auth_token, refresh_token): + utils.p('writing tokens') + preferences = bpy.context.preferences.addons['blenderkit'].preferences + preferences.api_key_refresh = refresh_token + preferences.api_key = auth_token + preferences.login_attempt = False + props = utils.get_search_props() + props.report = 'Login success!' + search.get_profile() + categories.fetch_categories_thread(auth_token) + + +class RegisterLoginOnline(bpy.types.Operator): + """Bring linked object hierarchy to scene and make it editable.""" + + bl_idname = "wm.blenderkit_login" + bl_label = "BlenderKit login or signup" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + preferences = bpy.context.preferences.addons['blenderkit'].preferences + preferences.login_attempt = True + login_thread() + return {'FINISHED'} + + +class Logout(bpy.types.Operator): + """Bring linked object hierarchy to scene and make it editable.""" + + bl_idname = "wm.blenderkit_logout" + bl_label = "BlenderKit logout" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + preferences = bpy.context.preferences.addons['blenderkit'].preferences + preferences.login_attempt = False + preferences.api_key_refresh = '' + preferences.api_key = '' + return {'FINISHED'} + + +class CancelLoginOnline(bpy.types.Operator): + """Cancel login attempt.""" + + bl_idname = "wm.blenderkit_login_cancel" + bl_label = "BlenderKit login cancel" + bl_options = {'REGISTER', 'UNDO'} + + @classmethod + def poll(cls, context): + return True + + def execute(self, context): + preferences = bpy.context.preferences.addons['blenderkit'].preferences + preferences.login_attempt = False + return {'FINISHED'} + +classess = ( + RegisterLoginOnline, + CancelLoginOnline, + Logout, +) + + +def register(): + for c in classess: + bpy.utils.register_class(c) + + +def unregister(): + for c in classess: + bpy.utils.unregister_class(c) diff --git a/blenderkit/oauth.py b/blenderkit/oauth.py index c5d1932a8532d33d13a39da7755394e601701d8b..61d6a7e8bd2644e1f7554c0e097c5d1f7785ffee 100644 --- a/blenderkit/oauth.py +++ b/blenderkit/oauth.py @@ -16,7 +16,6 @@ # # ##### END GPL LICENSE BLOCK ##### -import bpy import json import webbrowser @@ -24,12 +23,6 @@ from http.server import BaseHTTPRequestHandler, HTTPServer from urllib.parse import parse_qs, urlparse import requests -import threading -import blenderkit -from blenderkit import tasks_queue, utils, paths, search, categories - -CLIENT_ID = "IdFRwa3SGA8eMpzhRVFMg5Ts8sPK93xBjif93x0F" -PORTS = [62485, 1234] class SimpleOAuthAuthenticator(object): @@ -90,111 +83,3 @@ class SimpleOAuthAuthenticator(object): def get_refreshed_token(self, refresh_token): return self._get_tokens(refresh_token=refresh_token, grant_type="refresh_token") - - -def login_thread(): - thread = threading.Thread(target=login, args=([]), daemon=True) - thread.start() - - -def login(): - authenticator = SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS) - auth_token, refresh_token = authenticator.get_new_token() - utils.p('tokens retrieved') - tasks_queue.add_task((write_tokens , (auth_token, refresh_token))) - - -def refresh_token_thread(): - preferences = bpy.context.preferences.addons['blenderkit'].preferences - if len(preferences.api_key_refresh) > 0: - thread = threading.Thread(target=refresh_token, args=([preferences.api_key_refresh]), daemon=True) - thread.start() - - -def refresh_token(api_key_refresh): - authenticator = SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS) - auth_token, refresh_token = authenticator.get_refreshed_token(api_key_refresh) - if auth_token is not None and refresh_token is not None: - tasks_queue.add_task((blenderkit.oauth.write_tokens , (auth_token, refresh_token))) - - -def write_tokens(auth_token, refresh_token): - utils.p('writing tokens') - preferences = bpy.context.preferences.addons['blenderkit'].preferences - preferences.api_key_refresh = refresh_token - preferences.api_key = auth_token - preferences.login_attempt = False - props = utils.get_search_props() - props.report = 'Login success!' - search.get_profile() - categories.fetch_categories_thread(auth_token) - - -class RegisterLoginOnline(bpy.types.Operator): - """Bring linked object hierarchy to scene and make it editable.""" - - bl_idname = "wm.blenderkit_login" - bl_label = "BlenderKit login or signup" - bl_options = {'REGISTER', 'UNDO'} - - @classmethod - def poll(cls, context): - return True - - def execute(self, context): - preferences = bpy.context.preferences.addons['blenderkit'].preferences - preferences.login_attempt = True - login_thread() - return {'FINISHED'} - - -class Logout(bpy.types.Operator): - """Bring linked object hierarchy to scene and make it editable.""" - - bl_idname = "wm.blenderkit_logout" - bl_label = "BlenderKit logout" - bl_options = {'REGISTER', 'UNDO'} - - @classmethod - def poll(cls, context): - return True - - def execute(self, context): - preferences = bpy.context.preferences.addons['blenderkit'].preferences - preferences.login_attempt = False - preferences.api_key_refresh = '' - preferences.api_key = '' - return {'FINISHED'} - - -class CancelLoginOnline(bpy.types.Operator): - """Cancel login attempt.""" - - bl_idname = "wm.blenderkit_login_cancel" - bl_label = "BlenderKit login cancel" - bl_options = {'REGISTER', 'UNDO'} - - @classmethod - def poll(cls, context): - return True - - def execute(self, context): - preferences = bpy.context.preferences.addons['blenderkit'].preferences - preferences.login_attempt = False - return {'FINISHED'} - -classess = ( - RegisterLoginOnline, - CancelLoginOnline, - Logout, -) - - -def register(): - for c in classess: - bpy.utils.register_class(c) - - -def unregister(): - for c in classess: - bpy.utils.unregister_class(c) diff --git a/blenderkit/search.py b/blenderkit/search.py index 84069467d0d5c1115d9781d964368b16fdeb586b..306434a1d39efeecd2e6099d0579ec33b3c6120b 100644 --- a/blenderkit/search.py +++ b/blenderkit/search.py @@ -24,10 +24,10 @@ if "bpy" in locals(): imp.reload(categories) imp.reload(ui) imp.reload(version_checker) - imp.reload(oauth) + imp.reload(bkit_oauth) imp.reload(tasks_queue) else: - from blenderkit import paths, utils, categories, ui, oauth, version_checker, tasks_queue + from blenderkit import paths, utils, categories, ui, bkit_oauth, version_checker, tasks_queue import blenderkit from bpy.app.handlers import persistent @@ -64,7 +64,7 @@ def check_errors(rdata): if rdata.get('detail') == 'Invalid token.': user_preferences = bpy.context.preferences.addons['blenderkit'].preferences if user_preferences.api_key != '': - oauth.refresh_token_thread() + bkit_oauth.refresh_token_thread() return False, "You've been logged out. Logging in...." return False, 'Missing or wrong api_key in addon preferences' return True, '' @@ -99,7 +99,7 @@ def fetch_server_data(): url = paths.BLENDERKIT_ADDON_URL api_key = user_preferences.api_key # version_checker.check_version_thread(url, api_key, blenderkit) - oauth.refresh_token_thread() + bkit_oauth.refresh_token_thread() get_profile() categories.fetch_categories_thread(api_key) diff --git a/blenderkit/utils.py b/blenderkit/utils.py index 00ce1b5ee01c0856b0e653441525fc9cec65c293..0ba6249c156d841e587a6fef5d864616f5a83103 100644 --- a/blenderkit/utils.py +++ b/blenderkit/utils.py @@ -256,7 +256,7 @@ def get_brush_props(context): def p(text, text1='', text2='', text3='', text4='', text5=''): '''debug printing depending on blender's debug value''' - if bpy.app.debug_value != 10: + if bpy.app.debug_value > 0: print(text, text1, text2, text3, text4, text5)