From 8823548db714f869be82ab8c78d33aef24c0d981 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vil=C3=A9m=20Duha?= <vilda.novak@gmail.com>
Date: Thu, 18 Mar 2021 18:14:08 +0100
Subject: [PATCH] BlenderKit: fix upload

changes on is_free were not reflected in upload properly.
Fix too long requests from search similar
Adding more special characters to exclude when creating a file path.
---
 blenderkit/__init__.py   |  7 ++++---
 blenderkit/bg_blender.py |  3 ++-
 blenderkit/paths.py      |  2 +-
 blenderkit/search.py     |  4 ++++
 blenderkit/ui_panels.py  |  3 ++-
 blenderkit/upload.py     | 30 ++++++++++++++++++++++--------
 6 files changed, 35 insertions(+), 14 deletions(-)

diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index 807cc00a8..2f48fa579 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -1517,7 +1517,7 @@ class BlenderKitSceneSearchProps(PropertyGroup, BlenderKitCommonSearchProps):
     )
     search_engine_other: StringProperty(
         name="Engine",
-        description="engine not specified by addon",
+        description="Engine not specified by addon",
         default="",
         update=search.search_update
     )
@@ -1655,7 +1655,7 @@ class BlenderKitAddonPreferences(AddonPreferences):
         default="BOTH",
     )
     thumbnail_use_gpu: BoolProperty(
-        name="Use GPU for Thumbnails Rendering",
+        name="Use GPU for Thumbnails Rendering (For assets upload)",
         description="By default this is off so you can continue your work without any lag",
         default=False
     )
@@ -1749,13 +1749,14 @@ class BlenderKitAddonPreferences(AddonPreferences):
         layout.prop(self, "project_subdir")
         # layout.prop(self, "temp_dir")
         layout.prop(self, "directory_behaviour")
-        layout.prop(self, "thumbnail_use_gpu")
         # layout.prop(self, "allow_proximity")
         # layout.prop(self, "panel_behaviour")
         layout.prop(self, "thumb_size")
         layout.prop(self, "max_assetbar_rows")
         layout.prop(self, "tips_on_start")
         layout.prop(self, "search_in_header")
+        layout.prop(self, "thumbnail_use_gpu")
+
         if bpy.context.preferences.view.show_developer_ui:
             layout.prop(self, "use_timers")
             layout.prop(self, "experimental_features")
diff --git a/blenderkit/bg_blender.py b/blenderkit/bg_blender.py
index 7dda15590..bdce32afc 100644
--- a/blenderkit/bg_blender.py
+++ b/blenderkit/bg_blender.py
@@ -126,7 +126,8 @@ def bg_update():
             tcom.lasttext = tcom.outtext
             if tcom.outtext != '':
                 tcom.outtext = ''
-                estring = tcom.eval_path_state + ' = tcom.lasttext'
+                text =tcom.lasttext.replace("'","")
+                estring = tcom.eval_path_state + ' = text'
 
                 exec(estring)
             # print(tcom.lasttext)
diff --git a/blenderkit/paths.py b/blenderkit/paths.py
index f5e9a3f26..0ca55271a 100644
--- a/blenderkit/paths.py
+++ b/blenderkit/paths.py
@@ -169,7 +169,7 @@ def slugify(slug):
     import unicodedata, re
     slug = slug.lower()
 
-    characters = '<>:"/\\|?*., ()'
+    characters = '<>:"/\\|?*., ()#'
     for ch in characters:
         slug = slug.replace(ch, '_')
     # import re
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 32e86b6ae..5778973d8 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -1530,6 +1530,10 @@ class SearchOperator(Operator):
             sprops.search_keywords = ''
         if self.keywords != '':
             sprops.search_keywords = self.keywords
+        #crop long searches
+        if len(self.keywords) > 150:
+            idx = self.keywords.find(' ', 142)
+            self.keywords = self.keywords[:idx]
 
         search(category=self.category, get_next=self.get_next, author_id=self.author_id)
         # bpy.ops.view3d.blenderkit_asset_bar()
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index 2e08982e6..699573651 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -1160,9 +1160,10 @@ def draw_asset_context_menu(layout, context, asset_data, from_panel=False):
     # build search string from description and tags:
     op.keywords = asset_data['name']
     if asset_data.get('description'):
-        op.keywords += ' ' + asset_data.get('description')
+        op.keywords += ' ' + asset_data.get('description')+' '
     op.keywords += ' '.join(asset_data.get('tags'))
 
+
     if asset_data.get('canDownload') != 0:
         if len(bpy.context.selected_objects) > 0 and ui_props.asset_type == 'MODEL':
             aob = bpy.context.active_object
diff --git a/blenderkit/upload.py b/blenderkit/upload.py
index 0a7441d4f..495f588cc 100644
--- a/blenderkit/upload.py
+++ b/blenderkit/upload.py
@@ -509,7 +509,7 @@ def get_upload_data(caller=None, context=None, asset_type=None):
         upload_data["category"] = props.subcategory1
 
     upload_data["license"] = props.license
-    upload_data["isFree"] = props.is_free
+    upload_data["isFree"] = props.is_free == 'FREE'
     upload_data["isPrivate"] = props.is_private == 'PRIVATE'
     upload_data["token"] = user_preferences.api_key
 
@@ -857,7 +857,8 @@ class Uploader(threading.Thread):
         return self._stop_event.is_set()
 
     def send_message(self, message):
-        message = str(message)
+        message = str(message).replace("'","")
+
         # this adds a UI report but also writes above the upload panel fields.
         tasks_queue.add_task((ui.add_report, (message,)))
         estring = f"{self.export_data['eval_path_state']} = '{message}'"
@@ -1124,7 +1125,7 @@ class UploadOperator(Operator):
     bl_description = "Upload or re-upload asset + thumbnail + metadata"
 
     bl_label = "BlenderKit asset upload"
-    bl_options = {'REGISTER', 'UNDO', 'INTERNAL'}
+    bl_options = {'REGISTER', 'INTERNAL'}
 
     # type of upload - model, material, textures, e.t.c.
     asset_type: EnumProperty(
@@ -1214,11 +1215,24 @@ class UploadOperator(Operator):
             layout.label(text="For updates of thumbnail or model use reupload.")
 
         if props.is_private == 'PUBLIC':
-            utils.label_multiline(layout, text='public assets are validated several hours'
-                                               ' or days after upload. Remember always to '
-                                               'test download your asset to a clean file'
-                                               ' to see if it uploaded correctly.'
-                                  , width=300)
+            if self.asset_type == 'MODEL':
+                utils.label_multiline(layout, text='You marked the asset as public.\n'
+                                                   'This means it will be validated by our team.\n\n'
+                                                   'Please test your upload after it finishes:\n'
+                                                   '-   Open a new file\n'
+                                                   '-   Find the asset and download it\n'
+                                                   '-   Check if it snaps correctly to surfaces\n'
+                                                   '-   Check if it has all textures and renders as expected\n'
+                                                   '-   Check if it has correct size in world units (for models)'
+                                  , width=400)
+            else:
+                utils.label_multiline(layout, text='You marked the asset as public.\n'
+                                                   'This means it will be validated by our team.\n\n'
+                                                   'Please test your upload after it finishes:\n'
+                                                   '-   Open a new file\n'
+                                                   '-   Find the asset and download it\n'
+                                                   '-   Check if it works as expected\n'
+                                      , width=400)
 
     def invoke(self, context, event):
         props = utils.get_upload_props()
-- 
GitLab