diff options
author | Vilem Duha <vilem.duha@gmail.com> | 2019-06-06 15:27:18 +0300 |
---|---|---|
committer | Vilem Duha <vilem.duha@gmail.com> | 2019-06-06 15:28:33 +0300 |
commit | 9823579a2da0d65f8e545e7daefd18a38676e859 (patch) | |
tree | 6d83336afa43d22175c1c44a01a732a658eccb21 /blenderkit | |
parent | a2c280a16b947b7e4e05cb595c54769af053e26b (diff) |
BlenderKit: refactor reporting to User.
this is still not very compatible with blender's way of doing things, but we need more lines of reporting for parallel tasks reporting.
Diffstat (limited to 'blenderkit')
-rw-r--r-- | blenderkit/colors.py | 22 | ||||
-rw-r--r-- | blenderkit/download.py | 19 | ||||
-rw-r--r-- | blenderkit/search.py | 4 | ||||
-rw-r--r-- | blenderkit/ui.py | 81 | ||||
-rw-r--r-- | blenderkit/ui_panels.py | 6 |
5 files changed, 108 insertions, 24 deletions
diff --git a/blenderkit/colors.py b/blenderkit/colors.py new file mode 100644 index 00000000..42545941 --- /dev/null +++ b/blenderkit/colors.py @@ -0,0 +1,22 @@ +# ##### 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 ##### + +# this module defines color palette for BlenderKit UI + +GREEN = (.9, 1, .9, .6) +RED = (1, .5, .5, .8)
\ No newline at end of file diff --git a/blenderkit/download.py b/blenderkit/download.py index 7bdbc3c4..06342db6 100644 --- a/blenderkit/download.py +++ b/blenderkit/download.py @@ -22,8 +22,11 @@ if "bpy" in locals(): paths = reload(paths) append_link = reload(append_link) utils = reload(utils) + ui = reload(ui) + colors = reload(colors) + tasks_queue = reload(tasks_queue) else: - from blenderkit import paths, append_link, utils + from blenderkit import paths, append_link, utils, ui, colors, tasks_queue import threading import time @@ -596,7 +599,10 @@ def download(asset_data, **kwargs): if kwargs.get('retry_counter', 0) > 3: sprops = utils.get_search_props() - sprops.report = f"Maximum retries exceeded for {asset_data['name']}" + report = f"Maximum retries exceeded for {asset_data['name']}" + sprops.report = report + ui.add_report(report, 5, colors.RED) + utils.p(sprops.report) return @@ -729,6 +735,7 @@ def get_download_url(asset_data, scene_id, api_key, tcom=None): tcom.report = 'Connection Error' tcom.error = True return 'Connection Error' + if r.status_code < 400: data = r.json() url = data['filePath'] @@ -737,9 +744,12 @@ def get_download_url(asset_data, scene_id, api_key, tcom=None): return True if r.status_code == 403: - tcom.report = 'Available only in higher plans.' + r = 'You need Standard plan to get this item.' + tcom.report = r + r1 = 'All materials and brushes are aviable for free. Only users registered to Standart plan can use all models.' + tasks_queue.add_task((ui.add_report, (r1, 5, colors.RED))) tcom.error = True - return 'Available only in higher plans.' + if r.status_code == 401: tcom.report = 'Invalid API key' tcom.error = True @@ -747,6 +757,7 @@ def get_download_url(asset_data, scene_id, api_key, tcom=None): elif r.status_code >= 500: tcom.report = 'Server error' tcom.error = True + return False def start_download(asset_data, **kwargs): diff --git a/blenderkit/search.py b/blenderkit/search.py index b4d3b7fe..c1adf9b0 100644 --- a/blenderkit/search.py +++ b/blenderkit/search.py @@ -245,7 +245,7 @@ def timer_update(): # TODO might get moved to handle all blenderkit stuff. props.search_error = False props.report = 'Open assetbar to see %i results. ' % len(s['search results']) if len(s['search results']) == 0: - props.report = 'No matching results found.' + tasks_queue.add_task((ui.add_report, ('No matching results found.',))) # (rdata['next']) # if rdata['next'] != None: @@ -1032,6 +1032,8 @@ def search(category='', get_next=False, author_id=''): # query['keywords'] += '+is_free:true' add_search_process(query, params) + tasks_queue.add_task((ui.add_report, ('BlenderKit searching....',2))) + props.report = 'BlenderKit searching....' diff --git a/blenderkit/ui.py b/blenderkit/ui.py index f35b0f73..727f0927 100644 --- a/blenderkit/ui.py +++ b/blenderkit/ui.py @@ -28,8 +28,9 @@ if "bpy" in locals(): ui_bgl = importlib.reload(ui_bgl) download = importlib.reload(download) bg_blender = importlib.reload(bg_blender) + colors = importlib.reload(colors) else: - from blenderkit import paths, ratings, utils, search, upload, ui_bgl, download, bg_blender + from blenderkit import paths, ratings, utils, search, upload, ui_bgl, download, bg_blender, colors import bpy @@ -48,6 +49,7 @@ import os handler_2d = None handler_3d = None +reports = [] mappingdict = { 'MODEL': 'model', @@ -95,6 +97,48 @@ def get_approximate_text_width(st): return size # Convert to picas +def add_report(text='', timeout=5, color=colors.GREEN): + global reports + updated = False + + #check for same reports and just make them longer by the timeout. + for old_report in reports: + if old_report.text == text: + old_report.timeout = old_report.age + timeout + updated = True + if not updated: + report = Report(text=text, timeout=timeout, color=color) + reports.append(report) + print('added report') + print(report) + + +class Report(): + def __init__(self, text='', timeout=5, color=(.5, 1, .5, 1)): + self.text = text + self.timeout = timeout + self.start_time = time.time() + self.color = color + self.draw_color = color + self.age = 0 + + def fade(self): + fade_time = 1 + self.age = time.time() - self.start_time + if self.age + fade_time > self.timeout: + alpha_multiplier = (self.timeout - self.age) / fade_time + self.draw_color = (self.color[0], self.color[1], self.color[2], self.color[3] * alpha_multiplier) + if self.age > self.timeout: + global reports + try: + reports.remove(self) + except Exception as e: + pass; + + def draw(self, x, y): + ui_bgl.draw_text(self.text, x, y + 8, 16, self.draw_color) + + def get_asset_under_mouse(mousex, mousey): s = bpy.context.scene ui_props = bpy.context.scene.blenderkitUI @@ -502,9 +546,9 @@ def draw_downloader(x, y, percent=0, img=None): ui_bgl.draw_rect(x - 3, y - 3, 6, 6, (1, 0, 0, .3)) -def draw_progress(x, y, text='', percent=None, color=(.2, 1, .2, .3)): +def draw_progress(x, y, text='', percent=None, color=colors.GREEN): ui_bgl.draw_rect(x, y, percent, 5, color) - ui_bgl.draw_text(text, x, y + 8, 10, color) + ui_bgl.draw_text(text, x, y + 8, 16, color) def draw_callback_3d_progress(self, context): @@ -556,6 +600,11 @@ def draw_callback_2d_progress(self, context): draw_progress(x, y - index * 30, '%s' % tcom.lasttext, tcom.progress) index += 1 + global reports + for report in reports: + report.draw(x, y - index * 30) + index += 1 + report.fade() def draw_callback_2d_upload_preview(self, context): @@ -685,19 +734,19 @@ def draw_callback_2d_search(self, context): img = utils.get_thumbnail(v_icon) ui_bgl.draw_image(x + ui_props.thumb_size - 26, y + 2, 24, 24, img, 1) - if user_preferences.api_key == '': - report = 'Register on BlenderKit website to upload your own assets.' - ui_bgl.draw_text(report, ui_props.bar_x + ui_props.margin, - ui_props.bar_y - 25 - ui_props.margin - ui_props.bar_height, 15) - elif len(search_results) == 0: - report = 'BlenderKit - No matching results found.' - ui_bgl.draw_text(report, ui_props.bar_x + ui_props.margin, - ui_props.bar_y - 25 - ui_props.margin, 15) + # if user_preferences.api_key == '': + # report = 'Register on BlenderKit website to upload your own assets.' + # ui_bgl.draw_text(report, ui_props.bar_x + ui_props.margin, + # ui_props.bar_y - 25 - ui_props.margin - ui_props.bar_height, 15) + # elif len(search_results) == 0: + # report = 'BlenderKit - No matching results found.' + # ui_bgl.draw_text(report, ui_props.bar_x + ui_props.margin, + # ui_props.bar_y - 25 - ui_props.margin, 15) s = bpy.context.scene props = utils.get_search_props() - if props.report != '' and props.is_searching or props.search_error: - ui_bgl.draw_text(props.report, ui_props.bar_x, - ui_props.bar_y - 15 - ui_props.margin - ui_props.bar_height, 15) + # if props.report != '' and props.is_searching or props.search_error: + # ui_bgl.draw_text(props.report, ui_props.bar_x, + # ui_props.bar_y - 15 - ui_props.margin - ui_props.bar_height, 15) props = s.blenderkitUI if props.draw_tooltip: @@ -990,10 +1039,10 @@ def update_ui_size(area, region): ui.bar_height = (ui.thumb_size + ui.margin) * ui.hcount + ui.margin ui.bar_y = region.height - ui.bar_y_offset * ui_scale if ui.down_up == 'UPLOAD': - ui.reports_y = ui.bar_y + 800 + ui.reports_y = ui.bar_y - 600 ui.reports_x = ui.bar_x else: - ui.reports_y = ui.bar_y + ui.bar_height + ui.reports_y = ui.bar_y - ui.bar_height - 100 ui.reports_x = ui.bar_x ui.rating_x = ui.bar_x diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py index 197f208f..37b84aeb 100644 --- a/blenderkit/ui_panels.py +++ b/blenderkit/ui_panels.py @@ -273,11 +273,11 @@ def draw_panel_model_search(self, context): layout.prop(props, "search_keywords", text="", icon='VIEWZOOM') icon = 'NONE' - if props.report == 'Available only in higher plans.': + if props.report == 'You need Standard plan to get this item.': icon = 'ERROR' label_multiline(layout, text=props.report, icon=icon) - if props.report == 'Available only in higher plans.': - layout.operator("wm.url_open", text="Check plans", icon='URL').url = paths.BLENDERKIT_PLANS + if props.report == 'You need Standard plan to get this item.': + layout.operator("wm.url_open", text="Get Standard plan", icon='URL').url = paths.BLENDERKIT_PLANS layout.prop(props, "search_style") layout.prop(props, "free_only") |