def search(own=False, category='', get_next=False, free_only=False): ''' initialize searching''' global search_start_time search_start_time = time.time() mt('start') scene = bpy.context.scene uiprops = scene.blenderkitUI if uiprops.asset_type == 'MODEL': if not hasattr(scene, 'blenderkit'): return; props = scene.blenderkit_models query = build_query_model() if uiprops.asset_type == 'SCENE': if not hasattr(scene, 'blenderkit_scene'): return; props = scene.blenderkit_scene query = build_query_scene() if uiprops.asset_type == 'MATERIAL': if not hasattr(scene, 'blenderkit_mat'): return; props = scene.blenderkit_mat query = build_query_material() if uiprops.asset_type == 'TEXTURE': if not hasattr(scene, 'blenderkit_tex'): return; # props = scene.blenderkit_tex # query = build_query_texture() if uiprops.asset_type == 'BRUSH': if not hasattr(scene, 'blenderkit_brush'): return; props = scene.blenderkit_brush query = build_query_brush() if props.is_searching and get_next == True: return; query['own'] = own if category != '': query['category'] = category print('searching') props.is_searching = True params = { 'scene_uuid': bpy.context.scene.get('uuid', None), 'addon_version': version_checker.get_addon_version(), 'get_next': get_next } if free_only: query['keywords'] += '+is_free:true' add_search_process(query, params) props.report = 'BlenderKit searching....'
def search(own=False, category='', get_next=False, free_only=False): ''' initialize searching''' global search_start_time search_start_time = time.time() mt('start') scene = bpy.context.scene uiprops = scene.blenderkitUI if uiprops.asset_type == 'MODEL': if not hasattr(scene, 'blenderkit'): return; props = scene.blenderkit_models query = build_query_model() if uiprops.asset_type == 'SCENE': if not hasattr(scene, 'blenderkit_scene'): return; props = scene.blenderkit_scene query = build_query_scene() if uiprops.asset_type == 'MATERIAL': if not hasattr(scene, 'blenderkit_mat'): return; props = scene.blenderkit_mat query = build_query_material() if uiprops.asset_type == 'TEXTURE': if not hasattr(scene, 'blenderkit_tex'): return; # props = scene.blenderkit_tex # query = build_query_texture() if uiprops.asset_type == 'BRUSH': if not hasattr(scene, 'blenderkit_brush'): return; props = scene.blenderkit_brush query = build_query_brush() if props.is_searching and get_next == True: return; query['own'] = own if category != '': query['category'] = category # print('searching') props.is_searching = True params = { 'scene_uuid': bpy.context.scene.get('uuid', None), 'addon_version': version_checker.get_addon_version(), 'get_next': get_next } if free_only: query['keywords'] += '+is_free:true' add_search_process(query, params) props.report = 'BlenderKit searching....'
def add_version(data): app_version = get_app_version() addon_version = version_checker.get_addon_version() data["sourceAppName"] = "blender" data["sourceAppVersion"] = app_version data["addonVersion"] = addon_version
def search(category='', get_next=False, author_id=''): ''' initialize searching''' global search_start_time user_preferences = bpy.context.preferences.addons['blenderkit'].preferences search_start_time = time.time() mt('start') scene = bpy.context.scene uiprops = scene.blenderkitUI if uiprops.asset_type == 'MODEL': if not hasattr(scene, 'blenderkit'): return props = scene.blenderkit_models query = build_query_model() if uiprops.asset_type == 'SCENE': if not hasattr(scene, 'blenderkit_scene'): return props = scene.blenderkit_scene query = build_query_scene() if uiprops.asset_type == 'MATERIAL': if not hasattr(scene, 'blenderkit_mat'): return props = scene.blenderkit_mat query = build_query_material() if uiprops.asset_type == 'TEXTURE': if not hasattr(scene, 'blenderkit_tex'): return # props = scene.blenderkit_tex # query = build_query_texture() if uiprops.asset_type == 'BRUSH': if not hasattr(scene, 'blenderkit_brush'): return props = scene.blenderkit_brush query = build_query_brush() if props.is_searching and get_next == True: return if category != '': query['category_subtree'] = category if author_id != '': query['author_id'] = author_id # utils.p('searching') props.is_searching = True params = { 'scene_uuid': bpy.context.scene.get('uuid', None), 'addon_version': version_checker.get_addon_version(), 'api_key': user_preferences.api_key, 'get_next': get_next } # if free_only: # query['keywords'] += '+is_free:true' add_search_process(query, params) tasks_queue.add_task((ui.add_report, ('BlenderKit searching....', 2))) props.report = 'BlenderKit searching....'
def search(category='', get_next=False, author_id=''): ''' initialize searching''' global search_start_time user_preferences = bpy.context.preferences.addons['blenderkit'].preferences search_start_time = time.time() # mt('start') scene = bpy.context.scene ui_props = scene.blenderkitUI if ui_props.asset_type == 'MODEL': if not hasattr(scene, 'blenderkit'): return props = scene.blenderkit_models query = build_query_model() if ui_props.asset_type == 'SCENE': if not hasattr(scene, 'blenderkit_scene'): return props = scene.blenderkit_scene query = build_query_scene() if ui_props.asset_type == 'MATERIAL': if not hasattr(scene, 'blenderkit_mat'): return props = scene.blenderkit_mat query = build_query_material() if ui_props.asset_type == 'TEXTURE': if not hasattr(scene, 'blenderkit_tex'): return # props = scene.blenderkit_tex # query = build_query_texture() if ui_props.asset_type == 'BRUSH': if not hasattr(scene, 'blenderkit_brush'): return props = scene.blenderkit_brush query = build_query_brush() if props.is_searching and get_next == True: return if category != '': query['category_subtree'] = category if author_id != '': query['author_id'] = author_id elif props.own_only: # if user searches for [another] author, 'only my assets' is invalid. that's why in elif. profile = bpy.context.window_manager.get('bkit profile') if profile is not None: query['author_id'] = str(profile['user']['id']) # utils.p('searching') props.is_searching = True params = { 'scene_uuid': bpy.context.scene.get('uuid', None), 'addon_version': version_checker.get_addon_version(), 'api_key': user_preferences.api_key, 'get_next': get_next } # if free_only: # query['keywords'] += '+is_free:true' orig_results = scene.get(f'bkit {ui_props.asset_type.lower()} search orig', {}) if orig_results != {}: #ensure it's a copy in dict for what we are passing to thread: orig_results = orig_results.to_dict() add_search_process(query, params, orig_results) tasks_queue.add_task((ui.add_report, ('BlenderKit searching....', 2))) props.report = 'BlenderKit searching....'
def download_blenderkit_material(asset_ref): from blenderkit import paths, append_link, utils, version_checker, rerequests import requests def create_asset_data(rdata, asset_type): for r in rdata['results']: if r['assetType'] == asset_type and len(r['files']) > 0: furl = None tname = None allthumbs = [] durl, tname = None, None for f in r['files']: if f['fileType'] == 'thumbnail': tname = paths.extract_filename_from_url( f['fileThumbnailLarge']) small_tname = paths.extract_filename_from_url( f['fileThumbnail']) allthumbs.append( tname) # TODO just first thumb is used now. tdict = {} for i, t in enumerate(allthumbs): tdict['thumbnail_%i'] = t if f['fileType'] == 'blend': durl = f['downloadUrl'].split('?')[0] # fname = paths.extract_filename_from_url(f['filePath']) if durl and tname: tooltip = blenderkit.search.generate_tooltip(r) r['author']['id'] = str(r['author']['id']) asset_data = { 'thumbnail': tname, 'thumbnail_small': small_tname, # 'thumbnails':allthumbs, 'download_url': durl, 'id': r['id'], 'asset_base_id': r['assetBaseId'], 'name': r['name'], 'asset_type': r['assetType'], 'tooltip': tooltip, 'tags': r['tags'], 'can_download': r.get('canDownload', True), 'verification_status': r['verificationStatus'], 'author_id': r['author']['id'], # 'author': r['author']['firstName'] + ' ' + r['author']['lastName'] # 'description': r['description'], } asset_data['downloaded'] = 0 # parse extra params needed for blender here params = utils.params_to_dict(r['parameters']) if asset_type == 'model': if params.get('boundBoxMinX') != None: bbox = { 'bbox_min': (float(params['boundBoxMinX']), float(params['boundBoxMinY']), float(params['boundBoxMinZ'])), 'bbox_max': (float(params['boundBoxMaxX']), float(params['boundBoxMaxY']), float(params['boundBoxMaxZ'])) } else: bbox = { 'bbox_min': (-.5, -.5, 0), 'bbox_max': (.5, .5, 1) } asset_data.update(bbox) if asset_type == 'material': asset_data['texture_size_meters'] = params.get( 'textureSizeMeters', 1.0) asset_data.update(tdict) r.update(asset_data) # main asset_base_id_str, asset_type_str = asset_ref.split() asset_type = asset_type_str.split(':')[1] scene_id = blenderkit.download.get_scene_id() reqstr = '?query=%s+%s+order:_score' % (asset_base_id_str, asset_type_str) reqstr += '&addon_version=%s' % version_checker.get_addon_version() reqstr += '&scene_uuid=%s' % scene_id url = paths.get_api_url() + 'search/' + reqstr api_key = user_preferences = C.preferences.addons[ 'blenderkit'].preferences.api_key headers = utils.get_headers(api_key) r = rerequests.get(url, headers=headers) rdata = r.json() create_asset_data(rdata, asset_type) asset_data = rdata['results'][0] has_url = blenderkit.download.get_download_url(asset_data, scene_id, api_key) file_names = paths.get_download_filenames(asset_data) file_name = file_names[0] if not os.path.exists(file_name): with open(file_name, "wb") as f: print("Downloading %s" % file_name) response = requests.get(asset_data['url'], stream=True) total_length = response.headers.get('Content-Length') if total_length is None: # no content length header f.write(response.content) else: dl = 0 for data in response.iter_content(chunk_size=4096): dl += len(data) f.write(data) material = append_link.append_material(file_names[-1]) return material