129 const ::bUUID *catalog_id)
137 const bool needs_update = file_set_asset_catalog_filter_settings(
152 if (library_a->
type != library_b->
type) {
159 return (library_ptr_a !=
nullptr) &&
169 if (!asset_library_ref) {
206 const std::string asset_path = file->
asset->full_path();
253 ImBuf *ibuf =
nullptr;
279 const bool ignore_libdir)
287 return is_main ? ICON_FILE_PARENT : ICON_NONE;
290 return ICON_UGLYPACKAGE;
293 return ICON_FILE_BLEND;
312 char *target = fullpath;
320 for (; tfsm; tfsm = tfsm->
next) {
323 return (tfsm->
icon == ICON_FILE_FOLDER) ? ICON_NONE : tfsm->
icon;
332 return ICON_FILE_CACHE;
340 return (is_main || file->
preview_icon_id) ? ICON_FILE_BLEND : ICON_BLENDER;
343 return ICON_FILE_BACKUP;
346 return ICON_FILE_IMAGE;
349 return ICON_FILE_MOVIE;
352 return ICON_FILE_SCRIPT;
355 return ICON_FILE_SOUND;
358 return ICON_FILE_FONT;
361 return ICON_FILE_BLANK;
370 return ICON_FILE_VOLUME;
376 return ICON_FILE_TEXT;
379 return ICON_FILE_ARCHIVE;
383 if (
ret != ICON_NONE) {
387 return is_main ? ICON_FILE_BLANK : ICON_NONE;
426 const bool do_change)
441 const bool do_change)
450 if (do_change && !is_valid) {
460 const bool do_change)
501 for (entry =
array->entries.first; entry; entry = entry_next) {
502 entry_next = entry->
next;
515 if (
auto asset_ptr = entry->
asset.lock()) {
549 int removed_counter = 0;
560 if (removed_counter > 0) {
563 return removed_counter;
611 preview_taskdata->
preview =
nullptr;
624 if (preview_taskdata->
preview) {
751 preview->
index = index;
755 if (preview_in_memory) {
776 preview_taskdata->
preview = preview;
823 if (new_size != cache->
size) {
829 if (new_size != cache->
size) {
837 cache->
size = new_size;
849 p->
filelist_cache = MEM_new<FileListEntryCache>(
"FileListEntryCache");
860 if (filelist->
type == type) {
867 switch (filelist->
type) {
920 const bool do_asset_library,
922 const bool do_selection)
942 if (do_asset_library) {
948 const bool do_asset_library,
950 const bool do_selection)
960 if (removed_files == 0) {
978 if (do_asset_library) {
1005 printf(
"Attempting to delete empty filelist.\n");
1057 const char *relpath = entry->
relpath;
1059 char *
name =
nullptr;
1084 name = (
char *)relpath;
1102 return filelist->
check_dir_fn(filelist, (
char *)path,
false);
1112 const bool is_valid_path = filelist->
check_dir_fn(filelist, dirpath, !allow_invalid);
1328 BLI_assert(index >= 0 && index < filelist->filelist.entries_filtered_num);
1339 const FileList *filelist,
const int index)
1356#define FILE_UID_UNSET 0
1370 return unset_uid != uid;
1385 while (
size < window_size &&
size < 8192) {
1396 const int start_index,
1404 for (
i = 0, idx = start_index;
i <
size;
i++, idx++, cursor++) {
1425 for (
i = 0;
i <
size;
i++, cursor++) {
1428 printf(
"%s: release cacheidx %d (%%p %%s)\n",
1443 const size_t cache_size = cache->
size;
1446 int start_index =
max_ii(0, index - (cache_size / 2));
1447 int end_index =
min_ii(entries_num, index + (cache_size / 2));
1451 if ((index < 0) || (index >= entries_num)) {
1457 if ((end_index - start_index) < cache_size) {
1458 if (start_index == 0) {
1459 end_index =
min_ii(entries_num, start_index + cache_size);
1461 else if (end_index == entries_num) {
1462 start_index =
max_ii(0, end_index - cache_size);
1466 BLI_assert((end_index - start_index) <= cache_size);
1476 (end_index <= cache->block_start_index))
1488 if (idx1 + size1 > cache_size) {
1489 size2 = idx1 + size1 - cache_size;
1527 if (idx1 + size1 > cache_size) {
1528 size2 = idx1 + size1 - cache_size;
1534 cache->
block_cursor = (idx1 + size1 + size2) % cache_size;
1537 if (end_index < cache->block_end_index) {
1543 printf(
"\tcache releasing: [%d:%d] (%d)\n",
1550 if (idx1 + size1 > cache_size) {
1551 size2 = idx1 + size1 - cache_size;
1562 if (start_index < cache->block_start_index) {
1575 idx1 = cache_size - size1;
1603 if ((idx1 + size1) > cache_size) {
1605 size1 = cache_size - idx1;
1635 int block_index = cache->
block_cursor + (index - start_index);
1636 int offs_max =
max_ii(end_index - index, index - start_index);
1637 for (
i = 0;
i <= offs_max;
i++) {
1640 int offs_idx = index + offs;
1641 if (start_index <= offs_idx && offs_idx < end_index) {
1642 int offs_block_idx = (block_index + offs) %
int(cache_size);
1645 }
while ((offs = -offs) < 0);
1685 bool changed =
false;
1761 const size_t a = strlen(
str);
1763 bool retval =
false;
1765 if (a == 0 ||
b >= a) {
1847 path,
".obj",
".mtl",
".3ds",
".fbx",
".glb",
".gltf",
".svg",
".ply",
".stl",
nullptr))
1875 return ICON_FILE_BLEND;
1877 return ICON_FILE_BACKUP;
1879 return ICON_FILE_IMAGE;
1881 return ICON_FILE_MOVIE;
1883 return ICON_FILE_SCRIPT;
1885 return ICON_FILE_SOUND;
1887 return ICON_FILE_FONT;
1889 return ICON_FILE_BLANK;
1892 return ICON_FILE_3D;
1894 return ICON_FILE_TEXT;
1896 return ICON_FILE_ARCHIVE;
1898 return ICON_FILE_VOLUME;
1900 return ICON_FILE_BLANK;
1929 entry_flag &=
~flag;
1940 if (entry_flag != org_entry_flag) {
1950 else if (entry_flag) {
1983 for (current_file = sel->
first; current_file <= sel->last; current_file++) {
2022 BLI_assert(index >= 0 && index < filelist->filelist.entries_filtered_num);
2030 return selection_state != 0;
2148 const char *filter_glob,
2150 const char *main_filepath,
2151 const bool skip_currpar)
2154 int entries_num = 0;
2168 entry = MEM_new<FileListInternEntry>(__func__);
2170 entry->
st = files[
i].
s;
2173 char *target = full_path;
2258 const FileListReadJob *job_params,
const int idcode,
const char *group_name)
2274 const bool prefix_relpath_with_group_name,
2276 const char *group_name)
2279 if (prefix_relpath_with_group_name) {
2287 if (datablock_info) {
2290 if (datablock_info->
name[0] ==
'.') {
2300 std::unique_ptr metadata = std::make_unique<AssetMetaData>(
2309 entry->
relpath, datablock_info->
name, idcode, std::move(metadata));
2320 const bool prefix_relpath_with_group_name,
2322 const char *group_name)
2324 for (
LinkNode *ln = datablock_infos; ln; ln = ln->
next) {
2327 job_params, entries, datablock_info, prefix_relpath_with_group_name, idcode, group_name);
2335 const bool prefix_relpath_with_group_name)
2343 prefix_relpath_with_group_name,
2373 const int read_from_index,
2376 int navigate_to_parent_len = 0;
2381 navigate_to_parent_len = 1;
2385 return read_from_index + navigate_to_parent_len;
2402 BlendHandle *libfiledata =
nullptr;
2411 return std::nullopt;
2415 const bool has_group = group !=
nullptr;
2425 const bool use_indexer = !has_group;
2428 int read_from_index = 0;
2430 dir, &indexer_entries, &read_from_index, indexer_runtime->
user_data);
2433 job_params, entries,
options, read_from_index, &indexer_entries);
2435 return entries_read;
2442 if (libfiledata ==
nullptr) {
2443 return std::nullopt;
2450 int navigate_to_parent_len = 0;
2455 navigate_to_parent_len = 1;
2459 int datablock_len = 0;
2466 job_params, entries, datablock_infos,
false, idcode, group);
2475 const char *group_name =
static_cast<char *
>(ln->link);
2478 job_params, idcode, group_name);
2482 int group_datablock_len;
2486 job_params, entries, group_datablock_infos,
true, idcode, group_name);
2489 &indexer_entries, group_datablock_infos, idcode);
2492 datablock_len += group_datablock_len;
2508 int added_entries_len = group_len + datablock_len + navigate_to_parent_len;
2509 return added_entries_len;
2516static void filelist_readjob_main_recursive(
Main *bmain,
FileList *filelist)
2521 int a, fake, idcode, ok, totlib, totbl;
2538 if (filelist->dir[0] == 0) {
2540# ifdef WITH_FREESTYLE
2577# ifdef WITH_FREESTYLE
2586 if (lb ==
nullptr) {
2591 for (
id = lb->
first;
id;
id = id->
next) {
2616 for (
id = lb->
first;
id;
id = id->
next) {
2630 if (!filelist->has_func) {
2631 if (idcode ==
ID_OB) {
2636 else if (idcode ==
ID_SCE) {
2644 files->entry->poin = id;
2650 if (id->
lib && fake) {
2690 int from_entries_num)
2693 if (from_entries_num <= 0) {
2698 std::scoped_lock
lock(job_params->
lock);
2707 const int current_recursion_level,
2710 if (max_recursion == 0) {
2714 if (!is_lib && current_recursion_level > max_recursion) {
2720 if (!is_lib && (current_recursion_level >= max_recursion) &&
2756 int dirs_done_count = 0, dirs_todo_count = 1;
2777 int entries_num = 0;
2781 int recursion_level;
2785 subdir = td_dir->
dir;
2786 recursion_level = td_dir->
level;
2787 skip_currpar = (recursion_level > 1);
2804 bool is_lib =
false;
2807 if (!skip_currpar) {
2813 if (max_recursion > 0) {
2822 job_params, subdir, &entries, list_lib_options, &indexer_runtime);
2823 if (lib_entries_num) {
2825 entries_num += *lib_entries_num;
2842 entry->free_name =
true;
2845 max_recursion, is_lib, recursion_level, entry))
2853 td_dir->
level = recursion_level + 1;
2864 *progress =
float(dirs_done_count) /
float(dirs_todo_count);
2958 int entries_num = 0;
2971 entry = MEM_new<FileListInternEntry>(__func__);
3106 int library_count = 0;
3111 int libraries_done_count = 0;
3120 if (&nested_library == current_file_library) {
3129 float progress_this = 0.0f;
3131 true, job_params, stop, do_update, &progress_this);
3133 libraries_done_count++;
3134 *progress =
float(libraries_done_count) / library_count;
3198 int entries_num, new_entries_num = 0;
3221 if (new_entries_num) {
3279 const int space_notifier,
3281 const bool force_blocking_read)
3292 flrj = MEM_new<FileListReadJob>(__func__);
3315 if (force_blocking_read || no_threads) {
3330 "Listing directories...",
blender::asset_system::AssetLibrary * AS_asset_library_load(const Main *bmain, const AssetLibraryReference &library_reference)
Main runtime representation of an asset.
PreviewImage * BKE_asset_metadata_preview_get_from_id(const AssetMetaData *asset_data, const ID *owner_id)
bool BKE_blendfile_library_path_explode(const char *path, char *r_dir, char **r_group, char **r_name)
bool BKE_blendfile_extension_check(const char *str)
wmWindow * CTX_wm_window(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
int BKE_icon_imbuf_create(struct ImBuf *ibuf) ATTR_WARN_UNUSED_RESULT
struct ImBuf * BKE_icon_imbuf_get_buffer(int icon_id) ATTR_WARN_UNUSED_RESULT
bool BKE_icon_delete(int icon_id)
const char * BKE_idtype_idcode_to_name(short idcode)
short BKE_idtype_idcode_from_name(const char *idtype_name)
#define FOREACH_MAIN_ID_END
ListBase * which_libbase(Main *bmain, short type)
void BKE_main_lock(Main *bmain)
#define FOREACH_MAIN_ID_BEGIN(_bmain, _id)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
void BKE_main_unlock(Main *bmain)
const char * BKE_main_blendfile_path_from_global()
struct bUserAssetLibrary * BKE_preferences_asset_library_find_index(const struct UserDef *userdef, int index) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
ImBuf * BKE_previewimg_to_imbuf(const PreviewImage *prv, int size)
bool BKE_previewimg_is_finished(const PreviewImage *prv, int size)
char * BLF_display_name_from_file(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define BLI_assert_msg(a, msg)
File and directory operations.
eFileAttributes BLI_file_attributes(const char *path)
#define FILE_ATTR_ANY_LINK
unsigned int BLI_filelist_dir_contents(const char *dirname, struct direntry **r_filelist)
bool BLI_is_file(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
bool BLI_file_alias_target(const char *filepath, char r_targetpath[768]) ATTR_WARN_UNUSED_RESULT
bool BLI_is_dir(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_filelist_free(struct direntry *filelist, unsigned int nrentries)
Some types for dealing with directories.
void BLI_ghash_clear(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
GHash * BLI_ghash_new(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void ** BLI_ghash_lookup_p(GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_popkey(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp) ATTR_WARN_UNUSED_RESULT
GHash * BLI_ghash_ptr_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
bool BLI_ghashutil_intcmp(const void *a, const void *b)
GHash * BLI_ghash_new_ex(GHashHashFP hashfp, GHashCmpFP cmpfp, const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghashutil_inthash_p(const void *ptr)
bool BLI_ghash_remove(GHash *gh, const void *key, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_ghash_clear_ex(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp, unsigned int nentries_reserve)
int BLI_linklist_count(const LinkNode *list) ATTR_WARN_UNUSED_RESULT
void BLI_linklist_freeN(LinkNode *list)
void void void BLI_movelisttolist(ListBase *dst, ListBase *src) ATTR_NONNULL(1
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
void copy_vn_i(int *array_tar, int size, int val)
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
bool BLI_path_parent_dir_until_exists(char *path) ATTR_NONNULL(1)
bool bool BLI_path_extension_strip(char *path) ATTR_NONNULL(1)
void void void const char * BLI_path_basename(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
int BLI_path_normalize_dir(char *dir, size_t dir_maxncpy) ATTR_NONNULL(1)
bool BLI_path_has_hidden_component(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
bool BLI_path_extension_check_array(const char *path, const char **ext_array) ATTR_NONNULL(1
bool BLI_path_contains(const char *container_path, const char *containee_path) ATTR_NONNULL(1
#define BLI_path_join(...)
bool BLI_path_is_abs_from_cwd(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
#define FILENAME_IS_CURRPAR(_n)
bool BLI_path_is_rel(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
bool BLI_path_extension_check(const char *path, const char *ext) ATTR_NONNULL(1
bool void BLI_path_rel(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1)
bool BLI_path_extension_check_n(const char *path,...) ATTR_NONNULL(1) ATTR_SENTINEL(0)
int BLI_path_slash_ensure(char *path, size_t path_maxncpy) ATTR_NONNULL(1)
const char * BLI_path_slash_rfind(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
bool BLI_path_extension_check_glob(const char *path, const char *ext_fnmatch) ATTR_NONNULL(1
#define FILENAME_IS_PARENT(_n)
bool BLI_stack_is_empty(const BLI_Stack *stack) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_stack_free(BLI_Stack *stack) ATTR_NONNULL()
void * BLI_stack_peek(BLI_Stack *stack) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void * BLI_stack_push_r(BLI_Stack *stack) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_stack_discard(BLI_Stack *stack) ATTR_NONNULL()
#define BLI_stack_new(esize, descr)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
char * BLI_strdupn(const char *str, size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define SNPRINTF(dst, format,...)
char * STRNCPY(char(&dst)[N], const char *src)
int char * BLI_strcasestr(const char *s, const char *find) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define SNPRINTF_UTF8(dst, format,...)
#define BLI_string_join(...)
void * BLI_task_pool_user_data(TaskPool *pool)
void BLI_task_pool_cancel(TaskPool *pool)
TaskPool * BLI_task_pool_create_background(void *userdata, eTaskPriority priority)
void BLI_task_pool_free(TaskPool *pool)
void BLI_task_pool_push(TaskPool *pool, TaskRunFunction run, void *taskdata, bool free_taskdata, TaskFreeFunction freedata)
@ BLI_THREAD_QUEUE_WORK_PRIORITY_NORMAL
void * BLI_thread_queue_pop(ThreadQueue *queue)
ThreadQueue * BLI_thread_queue_init(void)
void BLI_thread_queue_free(ThreadQueue *queue)
bool BLI_thread_queue_is_empty(ThreadQueue *queue)
uint64_t BLI_thread_queue_push(ThreadQueue *queue, void *work, ThreadQueueWorkPriority priority)
void BLI_thread_queue_nowait(ThreadQueue *queue)
void * BLI_thread_queue_pop_timeout(ThreadQueue *queue, int ms)
#define ARRAY_SET_ITEMS(...)
#define ENUM_OPERATORS(_type, _max)
#define POINTER_FROM_INT(i)
#define POINTER_AS_UINT(i)
#define UNUSED_VARS_NDEBUG(...)
#define POINTER_FROM_UINT(i)
Compatibility-like things for windows.
void BLI_windows_get_default_root_dir(char root_dir[4])
void BLO_datablock_info_linklist_free(LinkNode *datablock_infos)
LinkNode * BLO_blendhandle_get_datablock_info(BlendHandle *bh, int ofblocktype, bool use_assets_only, int *r_tot_info_items)
BlendHandle * BLO_blendhandle_from_file(const char *filepath, BlendFileReadReport *reports)
void BLO_blendhandle_close(BlendHandle *bh) ATTR_NONNULL(1)
LinkNode * BLO_blendhandle_get_linkable_groups(BlendHandle *bh)
#define ID_IS_LINKED(_id)
@ FILE_TYPE_BLENDER_BACKUP
eFileSel_Params_AssetCatalogVisibility
@ FILE_ENTRY_BLENDERLIB_NO_PREVIEW
@ FILE_ENTRY_PREVIEW_LOADING
@ FILE_ENTRY_INVALID_PREVIEW
#define FILE_MAX_LIBEXTRA
@ FILE_INDEXER_ENTRIES_LOADED
void ED_file_indexer_entries_clear(FileIndexerEntries *indexer_entries)
void ED_file_indexer_entries_extend_from_datablock_infos(FileIndexerEntries *indexer_entries, LinkNode *datablock_infos, int idcode)
@ FS_CATEGORY_SYSTEM_BOOKMARKS
FSMenuEntry * ED_fsmenu_get_category(FSMenu *fsmenu, FSMenuCategory category)
int ED_path_extension_type(const char *path)
void IMB_freeImBuf(ImBuf *ibuf)
const char * imb_ext_movie[]
const char * imb_ext_audio[]
const char * imb_ext_image[]
void IMB_thumb_path_unlock(const char *path)
void IMB_thumb_locks_acquire()
ImBuf * IMB_thumb_manage(const char *file_or_lib_path, ThumbSize size, ThumbSource source)
void IMB_thumb_path_lock(const char *path)
void IMB_thumb_locks_release()
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
int UI_icon_from_idcode(int idcode)
ImBuf * UI_svg_icon_bitmap(uint icon_id, float size, bool multicolor=false)
@ WM_JOB_TYPE_ASSET_LIBRARY_LOAD
@ WM_JOB_TYPE_FILESEL_READDIR
Provides wrapper around system-specific atomic primitives, and some extensions (faked-atomic operatio...
ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x)
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
constexpr bool is_empty() const
constexpr int64_t size() const
constexpr const char * c_str() const
std::weak_ptr< AssetRepresentation > add_local_id_asset(ID &id)
static void foreach_loaded(FunctionRef< void(AssetLibrary &)> fn, bool include_all_library)
bool remove_asset(AssetRepresentation &asset)
StringRefNull root_path() const
std::weak_ptr< AssetRepresentation > add_external_asset(StringRef relative_asset_path, StringRef name, int id_type, std::unique_ptr< AssetMetaData > metadata)
CCL_NAMESPACE_BEGIN struct Options options
const FileIndexerType file_indexer_noop
eDirEntry_SelectFlag filelist_entry_select_index_get(FileList *filelist, const int index, FileCheckType check)
int ED_file_icon(const FileDirEntry *file)
static char * current_relpath_append(const FileListReadJob *job_params, const char *filename)
static bool filelist_readjob_should_recurse_into_entry(const int max_recursion, const bool is_lib, const int current_recursion_level, FileListInternEntry *entry)
void filelist_freelib(FileList *filelist)
void filelist_entry_parent_select_set(FileList *filelist, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
void filelist_tag_force_reset(FileList *filelist)
int filelist_files_num_entries(FileList *filelist)
static eWM_JobType filelist_jobtype_get(const FileList *filelist)
static std::optional< int > filelist_readjob_list_lib(FileListReadJob *job_params, const char *root, ListBase *entries, const ListLibOptions options, FileIndexer *indexer_runtime)
bool filelist_islibrary(FileList *filelist, char *dir, char **r_group)
void filelist_entries_select_index_range_set(FileList *filelist, FileSelection *sel, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
void filelist_cache_clear(FileListEntryCache *cache, size_t new_size)
static void filelist_readjob_list_lib_add_datablocks(FileListReadJob *job_params, ListBase *entries, LinkNode *datablock_infos, const bool prefix_relpath_with_group_name, const int idcode, const char *group_name)
const char * filelist_dir(const FileList *filelist)
BlendHandle * filelist_lib(FileList *filelist)
static void filelist_cache_previews_clear(FileListEntryCache *cache)
void filelist_cache_previews_set(FileList *filelist, const bool use_previews)
static bool filelist_readjob_append_entries(FileListReadJob *job_params, ListBase *from_entries, int from_entries_num)
static void assetlibrary_readjob_startjob(void *flrjv, wmJobWorkerStatus *worker_status)
static void filelist_cache_preview_runf(TaskPool *__restrict pool, void *taskdata)
static bool filelist_checkdir_main(const FileList *filelist, char dirpath[FILE_MAX_LIBEXTRA], const bool do_change)
static FileListInternEntry * filelist_entry_intern_get(const FileList *filelist, const int index)
static void filelist_file_cache_block_release(FileList *filelist, const int size, int cursor)
static void filelist_intern_free(FileList *filelist)
static void filelist_cache_preview_freef(TaskPool *__restrict, void *taskdata)
static void filelist_clear_main_files(FileList *filelist, const bool do_asset_library, const bool do_cache, const bool do_selection)
blender::asset_system::AssetLibrary * filelist_asset_library(FileList *filelist)
bool filelist_needs_force_reset(const FileList *filelist)
static void filelist_readjob_lib(FileListReadJob *job_params, bool *stop, bool *do_update, float *progress)
void filelist_readjob_blocking_run(FileList *filelist, int space_notifier, const bContext *C)
bool filelist_file_is_preview_pending(const FileList *filelist, const FileDirEntry *file)
static int filelist_readjob_list_dir(FileListReadJob *job_params, const char *root, ListBase *entries, const char *filter_glob, const bool do_lib, const char *main_filepath, const bool skip_currpar)
static void filelist_readjob_start_ex(FileList *filelist, const int space_notifier, const bContext *C, const bool force_blocking_read)
static FileDirEntry * filelist_file_create_entry(FileList *filelist, const int index)
void filelist_clear_from_reset_tag(FileList *filelist)
static void filelist_readjob_startjob(void *flrjv, wmJobWorkerStatus *worker_status)
bool filelist_pending(const FileList *filelist)
static void filelist_direntryarr_free(FileDirEntryArr *array)
bool filelist_cache_previews_running(FileList *filelist)
static FileDirEntry * filelist_cache_file_lookup(FileListEntryCache *cache, const int index)
static void parent_dir_until_exists_or_default_root(char *dir)
static bool filelist_checkdir_dir(const FileList *, char dirpath[FILE_MAX_LIBEXTRA], const bool do_change)
static void filelist_readjob_do(const bool do_lib, FileListReadJob *job_params, const bool *stop, bool *do_update, float *progress)
void filelist_set_asset_catalog_filter_options(FileList *filelist, eFileSel_Params_AssetCatalogVisibility catalog_visibility, const ::bUUID *catalog_id)
void filelist_free(FileList *filelist)
static void filelist_readjob_all_asset_library(FileListReadJob *job_params, bool *stop, bool *do_update, float *progress)
void filelist_setlibrary(FileList *filelist, const AssetLibraryReference *asset_library_ref)
static void filelist_cache_previews_free(FileListEntryCache *cache)
bool filelist_file_cache_block(FileList *filelist, const int index)
asset_system::AssetRepresentation * filelist_entry_get_asset_representation(const FileList *filelist, const int index)
bool filelist_cache_previews_done(FileList *filelist)
static int groupname_to_code(const char *group)
static void filelist_readjob_dir(FileListReadJob *job_params, bool *stop, bool *do_update, float *progress)
void filelist_clear(FileList *filelist)
static void filelist_readjob_main_assets(FileListReadJob *job_params, bool *stop, bool *do_update, float *progress)
ImBuf * filelist_get_preview_image(FileList *filelist, const int index)
static void filelist_readjob_endjob(void *flrjv)
void filelist_clear_ex(FileList *filelist, const bool do_asset_library, const bool do_cache, const bool do_selection)
void filelist_free_icons()
static void filelist_file_release_entry(FileList *filelist, FileDirEntry *entry)
static bool filelist_cache_previews_push(FileList *filelist, FileDirEntry *entry, const int index)
const char * filelist_entry_get_relpath(const FileList *filelist, int index)
void filelist_setdir(FileList *filelist, char dirpath[FILE_MAX_LIBEXTRA])
void filelist_tag_reload_asset_library(FileList *filelist)
ImBuf * filelist_geticon_special_file_image_ex(const FileDirEntry *file)
int ED_file_extension_icon(const char *path)
void filelist_setrecursion(FileList *filelist, const int recursion_level)
ID * filelist_file_get_id(const FileDirEntry *file)
bool filelist_cache_previews_update(FileList *filelist)
int filelist_file_find_path(FileList *filelist, const char *filename)
static FileListInternEntry * filelist_readjob_list_lib_group_create(const FileListReadJob *job_params, const int idcode, const char *group_name)
static FileDirEntry * filelist_geticon_get_file(FileList *filelist, const int index)
static void filelist_entry_free(FileDirEntry *entry)
void filelist_settype(FileList *filelist, short type)
static void filelist_readjob_main_assets_add_items(FileListReadJob *job_params, bool *, bool *do_update, float *)
FileList * filelist_new(short type)
void filelist_entry_select_index_set(FileList *filelist, const int index, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
int filelist_file_find_id(const FileList *filelist, const ID *id)
static bool filelist_contains_main(const FileList *filelist, const Main *bmain)
static void filelist_clear_asset_library(FileList *filelist)
static FileListInternEntry * filelist_readjob_list_lib_navigate_to_parent_entry_create(const FileListReadJob *job_params)
FileDirEntry * filelist_file_ex(FileList *filelist, const int index, const bool use_request)
bool filelist_uid_is_set(const FileUID uid)
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
static int filelist_readjob_list_lib_populate_from_index(FileListReadJob *job_params, ListBase *entries, const ListLibOptions options, const int read_from_index, const FileIndexerEntries *indexer_entries)
static void filelist_readjob_update(void *flrjv)
static void filelist_readjob_list_lib_add_from_indexer_entries(FileListReadJob *job_params, ListBase *entries, const FileIndexerEntries *indexer_entries, const bool prefix_relpath_with_group_name)
int filelist_geticon_file_type(FileList *filelist, const int index, const bool is_main)
static bool filelist_compare_asset_libraries(const AssetLibraryReference *library_a, const AssetLibraryReference *library_b)
static void filelist_cache_preview_ensure_running(FileListEntryCache *cache)
int filelist_needs_reading(const FileList *filelist)
static void filelist_readjob_recursive_dir_add_items(const bool do_lib, FileListReadJob *job_params, const bool *stop, bool *do_update, float *progress)
ID * filelist_entry_get_id(const FileList *filelist, const int index)
static void filelist_readjob_load_asset_library_data(FileListReadJob *job_params, bool *do_update)
void filelist_file_cache_slidingwindow_set(FileList *filelist, size_t window_size)
static bool filelist_file_cache_block_create(FileList *filelist, const int start_index, const int size, int cursor)
static void filelist_intern_entry_free(FileList *filelist, FileListInternEntry *entry)
int ED_path_extension_type(const char *path)
int filelist_readjob_running(FileList *filelist, wmWindowManager *wm)
ImBuf * filelist_file_get_preview_image(const FileDirEntry *file)
void filelist_tag_force_reset_mainfiles(FileList *filelist)
bool filelist_intern_entry_is_main_file(const FileListInternEntry *intern_entry)
static void filelist_entry_clear(FileDirEntry *entry)
bool filelist_is_dir(const FileList *filelist, const char *path)
static int filelist_intern_free_main_files(FileList *filelist)
bool filelist_needs_reset_on_main_changes(const FileList *filelist)
int filelist_files_ensure(FileList *filelist)
static void filelist_readjob_main(FileListReadJob *job_params, bool *stop, bool *do_update, float *progress)
static const char * fileentry_uiname(const char *root, FileListInternEntry *entry, char *buff)
static int filelist_geticon_file_type_ex(const FileList *filelist, const FileDirEntry *file, const bool is_main, const bool ignore_libdir)
bool filelist_entry_is_selected(FileList *filelist, const int index)
void filelist_setindexer(FileList *filelist, const FileIndexerType *indexer)
void filelist_file_get_full_path(const FileList *filelist, const FileDirEntry *file, char r_filepath[FILE_MAX_LIBEXTRA])
FileDirEntry * filelist_file(FileList *filelist, int index)
bool filelist_is_ready(const FileList *filelist)
uint filelist_entry_select_set(const FileList *filelist, const FileDirEntry *entry, FileSelType select, const eDirEntry_SelectFlag flag, FileCheckType check)
static bool filelist_checkdir_return_always_valid(const FileList *, char[FILE_MAX_LIBEXTRA], const bool)
static bool filelist_readjob_is_partial_read(const FileListReadJob *read_job)
ImBuf * filelist_geticon_special_file_image(FileList *filelist, const int index)
void filelist_readjob_start(FileList *filelist, const int space_notifier, const bContext *C)
static void filelist_readjob_free(void *flrjv)
eDirEntry_SelectFlag filelist_entry_select_get(FileList *filelist, FileDirEntry *entry, FileCheckType check)
static void filelist_readjob_list_lib_add_datablock(FileListReadJob *job_params, ListBase *entries, BLODataBlockInfo *datablock_info, const bool prefix_relpath_with_group_name, const int idcode, const char *group_name)
static bool filelist_checkdir_lib(const FileList *, char dirpath[FILE_MAX_LIBEXTRA], const bool do_change)
static ImBuf * filelist_ensure_special_file_image(SpecialFileImages image, int icon)
void filelist_uid_unset(FileUID *r_uid)
static bool file_is_blend_backup(const char *str)
static FileUID filelist_uid_generate(FileList *filelist)
static ImBuf * gSpecialFileImages[int(SpecialFileImages::_Max)]
static void filelist_readjob_asset_library(FileListReadJob *job_params, bool *stop, bool *do_update, float *progress)
static bool filelist_file_preview_load_poll(const FileDirEntry *entry)
void filelist_tag_needs_filtering(FileList *filelist)
void filelist_filter(FileList *filelist)
void filelist_sort(FileList *filelist)
bool is_filtered_asset_library(FileListInternEntry *file, const char *root, FileListFilter *filter)
bool is_filtered_main_assets(FileListInternEntry *file, const char *, FileListFilter *filter)
bool is_filtered_file(FileListInternEntry *file, const char *, FileListFilter *filter)
bool is_filtered_lib(FileListInternEntry *file, const char *root, FileListFilter *filter)
void prepare_filter_asset_library(const FileList *filelist, FileListFilter *filter)
bool is_filtered_main(FileListInternEntry *file, const char *, FileListFilter *filter)
#define FILELIST_ENTRYCACHESIZE_DEFAULT
#define FILEDIR_NBR_ENTRIES_UNSET
@ FILELIST_TAGS_USES_MAIN_DATA
@ FILELIST_TAGS_NO_THREADS
@ FL_FORCE_RESET_MAIN_FILES
@ FL_RELOAD_ASSET_LIBRARY
static int compare_name(void *user_data, const void *a1, const void *a2)
void * MEM_mallocN(size_t len, const char *str)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_dupallocN(const void *vmemh)
void MEM_freeN(void *vmemh)
bool MOV_is_movie_file(const char *filepath)
AssetLibraryReference current_file_library_reference()
AssetCatalogFilterSettings * file_create_asset_catalog_filter_settings()
AssetMetaData * asset_data
struct FileDirEntry * next
AssetRepresentationHandle * asset
BLODataBlockInfo datablock_info
FileIndexerUpdateIndexFunc update_index
FileIndexerFinishedFunc filelist_finished
FileIndexerReadIndexFunc read_index
FileIndexerFreeUserDataFunc free_user_data
FileIndexerInitUserDataFunc init_user_data
const FileIndexerType * callbacks
ThreadQueue * previews_done
int * misc_entries_indices
FileDirEntry ** block_entries
FileListEntryPreview * preview
char filepath[FILE_MAX_LIBEXTRA]
char filter_glob[FILE_MAXFILE]
blender::ed::asset_browser::AssetCatalogFilterSettings * asset_catalog_filter
struct FileListInternEntry::@364374371172256277004264162343271025307331240316 local_data
PreviewImage * preview_image
eFileAttributes attributes
eFileSel_File_Types typeflag
bool blenderlib_has_no_preview
std::weak_ptr< blender::asset_system::AssetRepresentation > asset
blender::asset_system::AssetRepresentation * get_asset() const
FileListInternEntry ** filtered
asset_system::AssetLibrary * load_asset_library
char cur_relbase[FILE_MAX_LIBEXTRA]
char main_filepath[FILE_MAX]
bool reload_asset_library
void(* prepare_filter_fn)(const FileList *filelist, FileListFilter *filter)
bool(* filter_fn)(FileListInternEntry *file, const char *root, FileListFilter *filter)
bool(* check_dir_fn)(const FileList *filelist, char dirpath[FILE_MAX_LIBEXTRA], const bool do_change)
FileListEntryCache * filelist_cache
AssetLibraryReference * asset_library_ref
void(* read_job_fn)(FileListReadJob *job_params, bool *stop, bool *do_update, float *progress)
FileListIntern filelist_intern
BlendHandle * libfiledata
FileListFilter filter_data
const FileIndexerType * indexer
blender::asset_system::AssetLibrary * asset_library
struct AssetMetaData * asset_data
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_jobs_timer(wmJob *wm_job, double time_step, uint note, uint endnote)
void WM_jobs_start(wmWindowManager *wm, wmJob *wm_job)
void WM_jobs_kill_type(wmWindowManager *wm, const void *owner, int job_type)
wmJob * WM_jobs_get(wmWindowManager *wm, wmWindow *win, const void *owner, const char *name, const eWM_JobFlag flag, const eWM_JobType job_type)
void WM_jobs_callbacks(wmJob *wm_job, wm_jobs_start_callback startjob, void(*initjob)(void *), void(*update)(void *), void(*endjob)(void *))
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
void WM_jobs_customdata_set(wmJob *wm_job, void *customdata, void(*free)(void *customdata))