diff options
Diffstat (limited to 'blenderkit/ratings.py')
-rw-r--r-- | blenderkit/ratings.py | 217 |
1 files changed, 60 insertions, 157 deletions
diff --git a/blenderkit/ratings.py b/blenderkit/ratings.py index c7055905..118cc3ae 100644 --- a/blenderkit/ratings.py +++ b/blenderkit/ratings.py @@ -16,7 +16,7 @@ # # ##### END GPL LICENSE BLOCK ##### -from blenderkit import paths, utils, rerequests, tasks_queue +from blenderkit import paths, utils, rerequests, tasks_queue, ratings_utils import bpy import requests, threading @@ -103,42 +103,6 @@ def get_rating(asset_id): print(r.text) -def update_ratings_quality(self, context): - user_preferences = bpy.context.preferences.addons['blenderkit'].preferences - api_key = user_preferences.api_key - - headers = utils.get_headers(api_key) - asset = self.id_data - if asset: - bkit_ratings = asset.bkit_ratings - url = paths.get_api_url() + 'assets/' + asset['asset_data']['id'] + '/rating/' - else: - # this part is for operator rating: - bkit_ratings = self - url = paths.get_api_url() + f'assets/{self.asset_id}/rating/' - - if bkit_ratings.rating_quality > 0.1: - ratings = [('quality', bkit_ratings.rating_quality)] - tasks_queue.add_task((send_rating_to_thread_quality, (url, ratings, headers)), wait=2.5, only_last=True) - - -def update_ratings_work_hours(self, context): - user_preferences = bpy.context.preferences.addons['blenderkit'].preferences - api_key = user_preferences.api_key - headers = utils.get_headers(api_key) - asset = self.id_data - if asset: - bkit_ratings = asset.bkit_ratings - url = paths.get_api_url() + 'assets/' + asset['asset_data']['id'] + '/rating/' - else: - # this part is for operator rating: - bkit_ratings = self - url = paths.get_api_url() + f'assets/{self.asset_id}/rating/' - - if bkit_ratings.rating_work_hours > 0.45: - ratings = [('working_hours', round(bkit_ratings.rating_work_hours, 1))] - tasks_queue.add_task((send_rating_to_thread_work_hours, (url, ratings, headers)), wait=2.5, only_last=True) - def upload_rating(asset): user_preferences = bpy.context.preferences.addons['blenderkit'].preferences @@ -242,69 +206,40 @@ class UploadRatingOperator(bpy.types.Operator): return wm.invoke_props_dialog(self) -def stars_enum_callback(self, context): - '''regenerates the enum property used to display rating stars, so that there are filled/empty stars correctly.''' - items = [] - for a in range(0, 10): - if self.rating_quality < a + 1: - icon = 'SOLO_OFF' - else: - icon = 'SOLO_ON' - # has to have something before the number in the value, otherwise fails on registration. - items.append((f'{a + 1}', f'{a + 1}', '', icon, a + 1)) - return items - - -def update_quality_ui(self, context): - '''Converts the _ui the enum into actual quality number.''' - user_preferences = bpy.context.preferences.addons['blenderkit'].preferences - if user_preferences.api_key == '': - # ui_panels.draw_not_logged_in(self, message='Please login/signup to rate assets.') - # bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_login_menu') - # return - bpy.ops.wm.blenderkit_login('INVOKE_DEFAULT', - message='Please login/signup to rate assets. Clicking OK takes you to web login.') - # self.rating_quality_ui = '0' - self.rating_quality = int(self.rating_quality_ui) - -def update_ratings_work_hours_ui(self, context): - user_preferences = bpy.context.preferences.addons['blenderkit'].preferences - if user_preferences.api_key == '': - # ui_panels.draw_not_logged_in(self, message='Please login/signup to rate assets.') - # bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_login_menu') - # return - bpy.ops.wm.blenderkit_login('INVOKE_DEFAULT', - message='Please login/signup to rate assets. Clicking OK takes you to web login.') - # self.rating_work_hours_ui = '0' - self.rating_work_hours = float(self.rating_work_hours_ui) +def draw_ratings_menu(self, context, layout): + col = layout.column() + # layout.template_icon_view(bkit_ratings, property, show_labels=False, scale=6.0, scale_popup=5.0) + row = col.row() + row.prop(self, 'rating_quality_ui', expand=True, icon_only=True, emboss=False) + # row.label(text=str(self.rating_quality)) + col.separator() + row = layout.row() + row.label(text=f"How many hours did this {self.asset_type} save you?") -def update_ratings_work_hours_ui_1_5(self, context): - user_preferences = bpy.context.preferences.addons['blenderkit'].preferences - if user_preferences.api_key == '': - # ui_panels.draw_not_logged_in(self, message='Please login/signup to rate assets.') - # bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_login_menu') - # return - bpy.ops.wm.blenderkit_login('INVOKE_DEFAULT', - message='Please login/signup to rate assets. Clicking OK takes you to web login.') - # self.rating_work_hours_ui_1_5 = '0' - # print('updating 1-5') - # print(float(self.rating_work_hours_ui_1_5)) - self.rating_work_hours = float(self.rating_work_hours_ui_1_5) - -def update_ratings_work_hours_ui_1_10(self, context): - user_preferences = bpy.context.preferences.addons['blenderkit'].preferences - if user_preferences.api_key == '': - # ui_panels.draw_not_logged_in(self, message='Please login/signup to rate assets.') - # bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_login_menu') - # return - bpy.ops.wm.blenderkit_login('INVOKE_DEFAULT', - message='Please login/signup to rate assets. Clicking OK takes you to web login.') - # self.rating_work_hours_ui_1_5 = '0' - # print('updating 1-5') - # print(float(self.rating_work_hours_ui_1_5)) - self.rating_work_hours = float(self.rating_work_hours_ui_1_10) + if self.asset_type in ('model', 'scene'): + row = layout.row() + if utils.profile_is_validator(): + col.prop(self, 'rating_work_hours') + row.prop(self, 'rating_work_hours_ui', expand=True, icon_only=False, emboss=True) + if float(self.rating_work_hours_ui) > 100: + utils.label_multiline(layout, + text=f"\nThat's huge! please be sure to give such rating only to godly {self.asset_type}s.\n", + width=500) + elif float(self.rating_work_hours_ui) > 18: + layout.separator() + + utils.label_multiline(layout, + text=f"\nThat's a lot! please be sure to give such rating only to amazing {self.asset_type}s.\n", + width=500) + + elif self.asset_type == 'hdr': + row = layout.row() + row.prop(self, 'rating_work_hours_ui_1_10', expand=True, icon_only=False, emboss=True) + else: + row = layout.row() + row.prop(self, 'rating_work_hours_ui_1_5', expand=True, icon_only=False, emboss=True) class FastRateMenu(Operator): @@ -341,22 +276,22 @@ class FastRateMenu(Operator): description="quality of the material", default=0, min=-1, max=10, - # update=update_ratings_quality, + # update=ratings_utils.update_ratings_quality, options={'SKIP_SAVE'}) # the following enum is only to ease interaction - enums support 'drag over' and enable to draw the stars easily. rating_quality_ui: EnumProperty(name='rating_quality_ui', - items=stars_enum_callback, + items=ratings_utils.stars_enum_callback, description='Rating stars 0 - 10', default=0, - update=update_quality_ui, + update=ratings_utils.update_quality_ui, options={'SKIP_SAVE'}) rating_work_hours: FloatProperty(name="Work Hours", description="How many hours did this work take?", default=0.00, min=0.0, max=300, - # update=update_ratings_work_hours, + # update=ratings_utils.update_ratings_work_hours, options={'SKIP_SAVE'} ) @@ -383,8 +318,8 @@ class FastRateMenu(Operator): ('200', '200', high_rating_warning), ('250', '250', high_rating_warning), ], - default='0', update=update_ratings_work_hours_ui, - options = {'SKIP_SAVE'} + default='0', update=ratings_utils.update_ratings_work_hours_ui, + options={'SKIP_SAVE'} ) rating_work_hours_ui_1_5: EnumProperty(name="Work Hours", @@ -399,28 +334,28 @@ class FastRateMenu(Operator): ('5', '5', '') ], default='0', - update=update_ratings_work_hours_ui_1_5, - options = {'SKIP_SAVE'} + update=ratings_utils.update_ratings_work_hours_ui_1_5, + options={'SKIP_SAVE'} ) rating_work_hours_ui_1_10: EnumProperty(name="Work Hours", - description="How many hours did this work take?", - items=[('0', '0', ''), - ('1', '1', ''), - ('2', '2', ''), - ('3', '3', ''), - ('4', '4', ''), - ('5', '5', ''), - ('6', '6', ''), - ('7', '7', ''), - ('8', '8', ''), - ('9', '9', ''), - ('10', '10', '') - ], - default='0', - update=update_ratings_work_hours_ui_1_10, - options={'SKIP_SAVE'} - ) + description="How many hours did this work take?", + items=[('0', '0', ''), + ('1', '1', ''), + ('2', '2', ''), + ('3', '3', ''), + ('4', '4', ''), + ('5', '5', ''), + ('6', '6', ''), + ('7', '7', ''), + ('8', '8', ''), + ('9', '9', ''), + ('10', '10', '') + ], + default='0', + update=ratings_utils.update_ratings_work_hours_ui_1_10, + options={'SKIP_SAVE'} + ) @classmethod def poll(cls, context): @@ -430,41 +365,9 @@ class FastRateMenu(Operator): def draw(self, context): layout = self.layout - col = layout.column() - - # layout.template_icon_view(bkit_ratings, property, show_labels=False, scale=6.0, scale_popup=5.0) - col.label(text=self.message) - row = col.row() - row.prop(self, 'rating_quality_ui', expand=True, icon_only=True, emboss=False) - # row.label(text=str(self.rating_quality)) - col.separator() - - row = layout.row() - row.label(text=f"How many hours did this {self.asset_type} save you?") - - if self.asset_type in ('model', 'scene'): - row = layout.row() - if utils.profile_is_validator(): - col.prop(self, 'rating_work_hours') - row.prop(self, 'rating_work_hours_ui', expand=True, icon_only=False, emboss=True) - if float(self.rating_work_hours_ui) > 100: - utils.label_multiline(layout, - text=f"\nThat's huge! please be sure to give such rating only to godly {self.asset_type}s.\n", - width=500) - elif float(self.rating_work_hours_ui) > 18: - layout.separator() - - utils.label_multiline(layout, - text=f"\nThat's a lot! please be sure to give such rating only to amazing {self.asset_type}s.\n", - width=500) - - elif self.asset_type == 'hdr': - row = layout.row() - row.prop(self, 'rating_work_hours_ui_1_10', expand=True, icon_only=False, emboss=True) - else: - row = layout.row() - row.prop(self, 'rating_work_hours_ui_1_5', expand=True, icon_only=False, emboss=True) + layout.label(text=self.message) + draw_ratings_menu(self, context, layout) def execute(self, context): user_preferences = bpy.context.preferences.addons['blenderkit'].preferences @@ -505,7 +408,7 @@ class FastRateMenu(Operator): self.message = f"Rate asset {self.asset_name}" wm = context.window_manager - if self.asset_type in ('model','scene'): + if self.asset_type in ('model', 'scene'): # spawn a wider one for validators for the enum buttons return wm.invoke_props_dialog(self, width=500) else: |