53 static void filelist_free_fn(
FileList *list)
59 std::unique_ptr<
FileList,
decltype(&filelist_free_fn)> file_list_;
63 : file_list_(
filelist_new(filesel_type), filelist_free_fn)
76 return file_list_.get();
137 : filelist_(filesel_type), library_ref_(asset_library_ref)
167 if (!asset_lib_path.empty()) {
168 STRNCPY(dirpath, asset_lib_path.c_str());
239 for (
int i = 0; i < numfiles; i++) {
245 if (prefilter_fn && !prefilter_fn(*asset)) {
252 if (!fn(asset_handle)) {
264 for (
int i = 0; i < numfiles; i++) {
281 previews_timer_.
stop(C);
288 if (previews_running) {
293 previews_timer_.
stop(C);
392 list.tag_main_data_dirty();
399 list.remap_id(id_old, id_new);
426 return {*list,
false};
428 storage.
add(library_reference,
AssetList(filesel_type, library_reference));
429 return {storage.
lookup(library_reference),
true};
460 if (is_new || list.needs_refetch()) {
472 if (list->needs_refetch()) {
475 return list->is_loaded();
482 list->update_previews(*C);
520 clear(&all_lib_ref, C);
534 list->iterate(fn, prefilter_fn);
553 return list->asset_library();
560 return list->asset_get_by_index(asset_index);
574 return list->is_asset_preview_loading(*asset_handle);
582 list->ensure_asset_preview_requested(C, *asset_handle);
std::string AS_asset_library_root_path_from_library_ref(const AssetLibraryReference &library_reference)
wmWindow * CTX_wm_window(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
#define LISTBASE_FOREACH(type, var, list)
#define STRNCPY(dst, src)
@ ASSET_LIBRARY_ESSENTIALS
@ FILE_SORT_ASSET_CATALOG
@ FILE_BROWSE_MODE_ASSETS
#define FILE_MAX_LIBEXTRA
#define FILE_SELECT_MAX_RECURSIONS
#define USER_EXPERIMENTAL_TEST(userdef, member)
void ED_fileselect_clear(wmWindowManager *wm, SpaceFile *sfile)
void ED_region_tag_refresh_ui(ARegion *region)
#define ND_ASSET_LIST_READING
#define ND_ASSET_LIST_PREVIEW
const Value * lookup_ptr(const Key &key) const
bool add(const Key &key, const Value &value)
const Value & lookup(const Key &key) const
ValueIterator values() const
static bool listen(const wmNotifier ¬ifier)
AssetList(AssetList &&other)=default
AssetHandle asset_get_by_index(int index) const
void ensure_asset_preview_requested(const bContext &C, AssetHandle &asset)
void remap_id(ID *id_old, ID *id_new) const
asset_system::AssetLibrary * asset_library() const
void clear(const bContext *C)
void fetch(const bContext &C)
void tag_main_data_dirty() const
void iterate(AssetListHandleIterFn fn, FunctionRef< bool(asset_system::AssetRepresentation &)> prefilter_fn) const
bool needs_refetch() const
void previews_job_update(const bContext *C)
bool is_asset_preview_loading(const AssetHandle &asset) const
void update_previews(const bContext &C)
FileListWrapper & operator=(FileListWrapper &&other)=default
FileListWrapper(eFileSelectType filesel_type)
FileListWrapper(FileListWrapper &&other)=default
void stop(const bContext *C)
void ensure_running(const bContext *C)
const FileIndexerType file_indexer_noop
void filelist_freelib(FileList *filelist)
void filelist_tag_force_reset(FileList *filelist)
void filelist_cache_previews_set(FileList *filelist, const bool use_previews)
blender::asset_system::AssetLibrary * filelist_asset_library(FileList *filelist)
bool filelist_needs_force_reset(const FileList *filelist)
bool filelist_file_is_preview_pending(const FileList *filelist, const FileDirEntry *file)
void filelist_clear_from_reset_tag(FileList *filelist)
void filelist_set_no_preview_auto_cache(FileList *filelist)
bool filelist_pending(const FileList *filelist)
bool filelist_cache_previews_running(FileList *filelist)
void filelist_setfilter_options(FileList *filelist, const bool do_filter, const bool hide_dot, const bool hide_parent, const uint64_t filter, const uint64_t filter_id, const bool filter_assets_only, const char *filter_glob, const char *filter_search)
void filelist_free(FileList *filelist)
void filelist_setlibrary(FileList *filelist, const AssetLibraryReference *asset_library_ref)
asset_system::AssetRepresentation * filelist_entry_get_asset_representation(const FileList *filelist, const int index)
bool filelist_cache_previews_done(FileList *filelist)
void filelist_clear(FileList *filelist)
void filelist_setdir(FileList *filelist, char dirpath[FILE_MAX_LIBEXTRA])
void filelist_setrecursion(FileList *filelist, const int recursion_level)
void filelist_setsorting(FileList *filelist, const short sort, bool invert_sort)
bool filelist_file_ensure_preview_requested(FileList *filelist, FileDirEntry *file)
bool filelist_cache_previews_update(FileList *filelist)
FileList * filelist_new(short type)
ImBuf * filelist_file_getimage(const FileDirEntry *file)
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
bool filelist_cache_previews_enabled(const FileList *filelist)
int filelist_needs_reading(const FileList *filelist)
void filelist_filter(FileList *filelist)
void filelist_tag_force_reset_mainfiles(FileList *filelist)
bool filelist_needs_reset_on_main_changes(const FileList *filelist)
int filelist_files_ensure(FileList *filelist)
void filelist_sort(FileList *filelist)
void filelist_setindexer(FileList *filelist, const FileIndexerType *indexer)
FileDirEntry * filelist_file(FileList *filelist, int index)
bool filelist_is_ready(const FileList *filelist)
void filelist_readjob_start(FileList *filelist, const int space_notifier, const bContext *C)
ImBuf * filelist_geticon_image_ex(const FileDirEntry *file)
void MEM_freeN(void *vmemh)
AssetLibraryReference all_library_reference()
const FileIndexerType file_indexer_asset
void storage_fetch(const AssetLibraryReference *library_reference, const bContext *C)
void asset_preview_ensure_requested(const bContext &C, const AssetLibraryReference *library_reference, AssetHandle *asset_handle)
void storage_tag_main_data_dirty()
int size(const AssetLibraryReference *library_reference)
void storage_id_remap(ID *id_old, ID *id_new)
bool asset_image_is_loading(const AssetLibraryReference *library_reference, const AssetHandle *asset_handle)
static std::tuple< AssetList &, is_new_t > ensure_list_storage(const AssetLibraryReference &library_reference, eFileSelectType filesel_type)
asset_system::AssetLibrary * library_get_once_available(const AssetLibraryReference &library_reference)
void clear(const AssetLibraryReference *library_reference, const bContext *C)
bool listen(const wmNotifier *notifier)
static std::optional< eFileSelectType > asset_library_reference_to_fileselect_type(const AssetLibraryReference &library_reference)
bool storage_has_list_for_library(const AssetLibraryReference *library_reference)
void clear_all_library(const bContext *C)
static AssetListMap & global_storage()
void iterate(const AssetLibraryReference &library_reference, AssetListHandleIterFn fn, FunctionRef< bool(asset_system::AssetRepresentation &)> prefilter_fn=nullptr)
bool is_loaded(const AssetLibraryReference *library_reference)
static AssetList * lookup_list(const AssetLibraryReference &library_ref)
asset_system::AssetRepresentation * asset_get_by_index(const AssetLibraryReference &library_reference, int asset_index)
AssetHandle asset_handle_get_by_index(const AssetLibraryReference *library_reference, int asset_index)
ImBuf * asset_image_get(const AssetHandle *asset_handle)
void asset_reading_region_listen_fn(const wmRegionListenerParams *params)
void previews_fetch(const AssetLibraryReference *library_reference, const bContext *C)
const struct FileDirEntry * file_data
AssetLibraryReference asset_library_ref
AssetRepresentationHandle * asset
FileAssetSelectParams * asset_params
void WM_main_add_notifier(uint type, void *reference)
wmTimer * WM_event_timer_add_notifier(wmWindowManager *wm, wmWindow *win, const uint type, const double time_step)
void WM_event_timer_remove_notifier(wmWindowManager *wm, wmWindow *win, wmTimer *timer)
bScreen * WM_window_get_active_screen(const wmWindow *win)