[Bf-extensions-cvs] [5412d45d] master: BlenderKit: -fix arrows not showing on the right side when the search results can be increased still. -improve tasks_queue. It's now hanging on another blender object(panel definition) to have persistent task queue. -get separate Author info (should also get Gravatar in future) -get Profile info in fetch server data -new Profile panel shows user information -improve tooltip - random tips, author info(will be further improved) -improve login UI - fix swapping of search results
Vilem Duha
noreply at git.blender.org
Sun May 19 16:02:54 CEST 2019
Commit: 5412d45d9e682d0b8fe8437b735ee06979e34f02
Author: Vilem Duha
Date: Mon Apr 29 21:30:11 2019 +0200
Branches: master
https://developer.blender.org/rBA5412d45d9e682d0b8fe8437b735ee06979e34f02
BlenderKit:
-fix arrows not showing on the right side when the search results can be increased still.
-improve tasks_queue. It's now hanging on another blender object(panel definition) to have persistent task queue.
-get separate Author info (should also get Gravatar in future)
-get Profile info in fetch server data
-new Profile panel shows user information
-improve tooltip - random tips, author info(will be further improved)
-improve login UI
- fix swapping of search results
===================================================================
M blenderkit/__init__.py
M blenderkit/oauth.py
M blenderkit/search.py
M blenderkit/tasks_queue.py
M blenderkit/ui.py
M blenderkit/ui_panels.py
M blenderkit/utils.py
===================================================================
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index 6a8b1886..929a900a 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -83,7 +83,8 @@ def scene_load(context):
ui_props = bpy.context.scene.blenderkitUI
ui_props.assetbar_on = False
ui_props.turn_off = False
-
+ preferences = bpy.context.preferences.addons['blenderkit'].preferences
+ preferences.login_attempt = False
licenses = (
('royalty_free', 'Royalty Free', 'royalty free commercial license'),
@@ -205,14 +206,19 @@ def switch_search_results(self, context):
props = s.blenderkitUI
if props.asset_type == 'MODEL':
s['search results'] = s.get('bkit model search')
+ s['search results orig'] = s.get('bkit model search orig')
elif props.asset_type == 'SCENE':
s['search results'] = s.get('bkit scene search')
+ s['search results orig'] = s.get('bkit scene search orig')
elif props.asset_type == 'MATERIAL':
s['search results'] = s.get('bkit material search')
+ s['search results orig'] = s.get('bkit material search orig')
elif props.asset_type == 'TEXTURE':
s['search results'] = s.get('bkit texture search')
+ s['search results orig'] = s.get('bkit texture search orig')
elif props.asset_type == 'BRUSH':
s['search results'] = s.get('bkit brush search')
+ s['search results orig'] = s.get('bkit brush search orig')
search.load_previews()
@@ -1313,9 +1319,8 @@ class BlenderKitAddonPreferences(AddonPreferences):
layout = self.layout
if self.api_key.strip() == '':
- op = layout.operator("wm.url_open", text="Register online and get your API Key",
- icon='QUESTION')
- op.url = paths.BLENDERKIT_SIGNUP_URL
+ layout.operator("wm.blenderkit_login", text="Login/ Sign up",
+ icon='URL')
layout.prop(self, "api_key", text='Your API Key')
# layout.label(text='After you paste API Key, categories are downloaded, so blender will freeze for a few seconds.')
layout.prop(self, "global_dir")
diff --git a/blenderkit/oauth.py b/blenderkit/oauth.py
index 78c8dfb3..f2cdf3e8 100644
--- a/blenderkit/oauth.py
+++ b/blenderkit/oauth.py
@@ -25,6 +25,7 @@ from urllib.parse import parse_qs, urlparse
import requests
import threading
+import blenderkit
from blenderkit import tasks_queue, utils, paths
CLIENT_ID = "IdFRwa3SGA8eMpzhRVFMg5Ts8sPK93xBjif93x0F"
@@ -99,8 +100,8 @@ def login_thread():
def login():
authenticator = SimpleOAuthAuthenticator(server_url=paths.get_bkit_url(), client_id=CLIENT_ID, ports=PORTS)
auth_token, refresh_token = authenticator.get_new_token()
- print('tokens retrieved')
- tasks_queue.tasks_queue.put('blenderkit.oauth.write_tokens("%s", "%s")' % (auth_token, refresh_token))
+ utils.p('tokens retrieved')
+ tasks_queue.add_task((write_tokens , (auth_token, refresh_token)))
def refresh_token_thread():
@@ -113,11 +114,12 @@ def refresh_token_thread():
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)
- tasks_queue.tasks_queue.put('blenderkit.oauth.write_tokens("%s", "%s")' % (auth_token, refresh_token))
+ 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):
- print('writing tokens?')
+ utils.p('writing tokens?')
preferences = bpy.context.preferences.addons['blenderkit'].preferences
preferences.api_key = auth_token
preferences.api_key_refresh = refresh_token
@@ -144,6 +146,25 @@ class RegisterLoginOnline(bpy.types.Operator):
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."""
@@ -163,6 +184,7 @@ class CancelLoginOnline(bpy.types.Operator):
classess = (
RegisterLoginOnline,
CancelLoginOnline,
+ Logout,
)
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 39a770ee..45865391 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -25,8 +25,9 @@ if "bpy" in locals():
imp.reload(ui)
imp.reload(version_checker)
imp.reload(oauth)
+ imp.reload(tasks_queue)
else:
- from blenderkit import paths, utils, categories, ui, oauth, version_checker
+ from blenderkit import paths, utils, categories, ui, oauth, version_checker, tasks_queue
import blenderkit
from bpy.app.handlers import persistent
@@ -91,6 +92,7 @@ def fetch_server_data():
api_key = user_preferences.api_key
# version_checker.check_version_thread(url, api_key, blenderkit)
oauth.refresh_token_thread()
+ get_profile()
categories.fetch_categories_thread(api_key)
@@ -177,7 +179,9 @@ def timer_update(): # TODO might get moved to handle all blenderkit stuff.
'tooltip': tooltip,
'tags': r['tags'],
'can_download': r.get('canDownload', True),
- 'verification_status': r['verificationStatus']
+ 'verification_status': r['verificationStatus'],
+ 'author_id': str(r['author']['id'])
+ # 'author': r['author']['firstName'] + ' ' + r['author']['lastName']
# 'description': r['description'],
# 'author': r['description'],
}
@@ -217,6 +221,7 @@ def timer_update(): # TODO might get moved to handle all blenderkit stuff.
# results = rdata['results']
s[search_name] = result_field
s['search results'] = result_field
+ s[search_name + ' orig'] = rdata
s['search results orig'] = rdata
load_previews()
ui_props = bpy.context.scene.blenderkitUI
@@ -432,17 +437,35 @@ def generate_tooltip(mdata):
# generator is for both upload preview and search, this is only after search
if mdata.get('versionNumber'):
# t = writeblockm(t, mdata, key='versionNumber', pretext='version')
-
- t += 'author: %s %s\n' % (mdata['author']['firstName'], mdata['author']['lastName'])
- # t += '\n'
+ a_id = mdata['author'].get('id')
+ if a_id != None:
+ adata = bpy.context.window_manager['bkit authors'].get(str(a_id))
+ if adata != None:
+ t += generate_author_textblock(adata)
at = mdata['assetType']
t += '\n'
+
+ return t
+
+def get_random_tip():
if at == 'brush' or at == 'texture':
t += 'click to link %s' % mdata['assetType']
if at == 'model' or at == 'material':
- t += 'click or drag in scene to link/append %s' % mdata['assetType']
-
+ tips = ['Click or drag in scene to link/append %s' % mdata['assetType'],
+ # "'A' key to search assets by same author",
+ "'W' key to open Authors webpage",
+ ]
+ tip = 'Tip: ' + random.choice(tips)
+ t = writeblock(t, tip)
+
+def generate_author_textblock(adata):
+ t = ''
+ if adata not in (None, ''):
+ t += 'author: %s %s\n' % (adata['firstName'], adata['lastName'])
+ t = writeblockm(t, adata, key='aboutMe', pretext='')
+ t += '\n'
+ t = writeblockm(t, adata, key='aboutMeUrl', pretext='')
return t
@@ -492,6 +515,80 @@ class ThumbDownloader(threading.Thread):
# f.write(chunk)
+def write_author(a_id, adata):
+ utils.p('writing author back')
+ authors = bpy.context.window_manager['bkit authors']
+ if authors.get(a_id) in (None, ''):
+ adata['tooltip'] = generate_author_textblock
+ authors[a_id] = adata
+
+
+def fetch_author(a_id, api_key):
+ utils.p('fetch author')
+ try:
+ a_url = paths.get_api_url() + 'accounts/' + a_id + '/'
+ headers = utils.get_headers(api_key)
+ r = requests.get(a_url, headers=headers)
+ adata = r.json()
+ if not hasattr(adata, 'id'):
+ utils.p(adata)
+ # utils.p(adata)
+ tasks_queue.add_task((write_author, (a_id, adata)))
+ except Exception as e:
+ utils.p(e)
+ utils.p('finish fetch')
+
+
+def get_author(r):
+ a_id = str(r['author']['id'])
+ preferences = bpy.context.preferences.addons['blenderkit'].preferences
+
+ authors = bpy.context.window_manager.get('bkit authors', {})
+ if authors == {}:
+ bpy.context.window_manager['bkit authors'] = authors
+ a = authors.get(a_id)
+ if a is None or a is '':
+ authors[a_id] = ''
+ thread = threading.Thread(target=fetch_author, args=(a_id, preferences.api_key), daemon=True)
+ thread.start()
+ return a
+
+
+def write_profile(adata):
+ utils.p('writing profile')
+ utils.p(adata.keys())
+ adata['user']['sumAssetFilesSize'] = str(round(adata['user']['sumAssetFilesSize'] / 1024 / 1024)) + ' Mb'
+ adata['user']['sumPrivateAssetFilesSize'] = str(
+ round(adata['user']['sumPrivateAssetFilesSize'] / 1024 / 1024)) + ' Mb'
+ adata['user']['remainingPrivateQuota'] = str(round(adata['user']['remainingPrivateQuota'] / 1024 / 1024)) + ' Mb'
+
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list