From 6da63b19fff2f690aa155bfd877cb8574d8c2987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Mon, 25 Oct 2021 16:25:38 +0200 Subject: Fix T87627: Asset Browser Search Bar not working The asset browser search bar was filtering on the filename containing the asset, and not the asset name. This is now fixed. --- source/blender/editors/space_file/filelist.c | 30 ++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index c3fff43d192..af26de1a3bd 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -920,14 +920,32 @@ static void prepare_filter_asset_library(const FileList *filelist, FileListFilte static bool is_filtered_asset(FileListInternEntry *file, FileListFilter *filter) { + const AssetMetaData *asset_data = filelist_file_internal_get_asset_data(file); + /* Not used yet for the asset view template. */ - if (!filter->asset_catalog_filter) { + if (filter->asset_catalog_filter && !file_is_asset_visible_in_catalog_filter_settings( + filter->asset_catalog_filter, asset_data)) { + return false; + } + + if (filter->filter_search[0] == '\0') { + /* If there is no filter text, everything matches. */ return true; } - const AssetMetaData *asset_data = filelist_file_internal_get_asset_data(file); - return file_is_asset_visible_in_catalog_filter_settings(filter->asset_catalog_filter, - asset_data); + /* filter->filter_search contains "*the search text*"; this code strips the asterisks. + * For a simple name search it would work to call fnmatch() here, but that + * would be inefficient when expanding to searching for tags as well.*/ + char filter_search[64]; /* sizeof(filter->filter_search) - 1 */ + const size_t string_length = STRNCPY_RLEN(filter_search, filter->filter_search + 1); + filter_search[string_length - 1] = '\0'; + + if (BLI_strcasestr(file->name, filter_search) != NULL) { + return true; + } + + /* TODO: search for matching tag. */ + return false; } static bool is_filtered_lib_type(FileListInternEntry *file, @@ -953,7 +971,7 @@ static bool is_filtered_asset_library(FileListInternEntry *file, const char *root, FileListFilter *filter) { - return is_filtered_lib(file, root, filter) && is_filtered_asset(file, filter); + return is_filtered_lib_type(file, root, filter) && is_filtered_asset(file, filter); } static bool is_filtered_main(FileListInternEntry *file, @@ -969,7 +987,7 @@ static bool is_filtered_main_assets(FileListInternEntry *file, { /* "Filtered" means *not* being filtered out... So return true if the file should be visible. */ return is_filtered_id_file_type(file, file->relpath, file->name, filter) && - is_filtered_file_relpath(file, filter) && is_filtered_asset(file, filter); + is_filtered_asset(file, filter); } void filelist_tag_needs_filtering(FileList *filelist) -- cgit v1.2.3