30 #include "../space_file/file_indexer.h"
31 #include "../space_file/filelist.h"
51 static void filelist_free_fn(
FileList *list)
57 std::unique_ptr<
FileList, decltype(&filelist_free_fn)> file_list_;
61 : file_list_(
filelist_new(filesel_type), filelist_free_fn)
74 return file_list_.get();
126 : filelist_(filesel_type), library_ref_(asset_library_ref)
201 for (
int i = 0; i < numfiles; i++) {
208 if (!fn(asset_handle)) {
229 if (previews_running) {
234 previews_timer_.
stop(
C);
327 static std::optional<eFileSelectType> asset_library_reference_to_fileselect_type(
330 using is_new_t =
bool;
331 static std::tuple<AssetList &, is_new_t> ensure_list_storage(
340 std::optional filesel_type = asset_library_reference_to_fileselect_type(library_reference);
345 auto [list, is_new] = ensure_list_storage(library_reference, *filesel_type);
346 if (is_new || list.needsRefetch()) {
354 global_storage().~AssetListMap();
359 return global_storage().
lookup_ptr(library_ref);
364 for (
AssetList &list : global_storage().values()) {
365 list.tagMainDataDirty();
371 for (
AssetList &list : global_storage().values()) {
372 list.remapID(id_new, id_old);
376 std::optional<eFileSelectType> AssetListStorage::asset_library_reference_to_fileselect_type(
379 switch (library_reference.
type) {
389 std::tuple<AssetList &, AssetListStorage::is_new_t> AssetListStorage::ensure_list_storage(
392 AssetListMap &storage = global_storage();
394 if (
AssetList *list = storage.lookup_ptr(library_reference)) {
395 return {*list,
false};
397 storage.add(library_reference,
AssetList(filesel_type, library_reference));
398 return {storage.lookup(library_reference),
true};
406 static AssetListMap global_storage_;
407 return global_storage_;
465 if (!asset_select_params) {
481 if (!library_path &&
C) {
519 return list->
listen(*notifier);
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct SpaceFile * CTX_wm_space_file(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
struct bUserAssetLibrary * BKE_preferences_asset_library_find_from_index(const struct UserDef *userdef, int index) ATTR_NONNULL() ATTR_WARN_UNUSED_RESULT
void BLI_join_dirfile(char *__restrict dst, size_t maxlen, const char *__restrict dir, const char *__restrict file) ATTR_NONNULL()
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
#define FILE_MAX_LIBEXTRA
#define FILE_SELECT_MAX_RECURSIONS
#define USER_EXPERIMENTAL_TEST(userdef, member)
struct ID * ED_asset_handle_get_local_id(const struct AssetHandle *asset)
struct AssetMetaData * ED_asset_handle_get_metadata(const struct AssetHandle *asset)
const FileIndexerType file_indexer_asset
struct FileAssetSelectParams * ED_fileselect_get_asset_params(const struct SpaceFile *sfile)
bool ED_fileselect_is_asset_browser(const struct SpaceFile *sfile)
#define ND_ASSET_LIST_READING
#define ND_ASSET_LIST_PREVIEW
void ED_assetlist_storage_tag_main_data_dirty()
void ED_assetlist_iterate(const AssetLibraryReference &library_reference, AssetListIterFn fn)
bool ED_assetlist_listen(const AssetLibraryReference *library_reference, const wmNotifier *notifier)
void ED_assetlist_clear(const AssetLibraryReference *library_reference, bContext *C)
void ED_assetlist_storage_fetch(const AssetLibraryReference *library_reference, const bContext *C)
void ED_assetlist_storage_exit()
static const char * assetlist_library_path_from_sfile_get_hack(const bContext *C)
ImBuf * ED_assetlist_asset_image_get(const AssetHandle *asset_handle)
const char * ED_assetlist_library_path(const AssetLibraryReference *library_reference)
std::string ED_assetlist_asset_filepath_get(const bContext *C, const AssetLibraryReference &library_reference, const AssetHandle &asset_handle)
int ED_assetlist_size(const AssetLibraryReference *library_reference)
void ED_assetlist_storage_id_remap(ID *id_old, ID *id_new)
bool ED_assetlist_storage_has_list_for_library(const AssetLibraryReference *library_reference)
void ED_assetlist_ensure_previews_job(const AssetLibraryReference *library_reference, bContext *C)
const Value * lookup_ptr(const Key &key) const
constexpr const char * data() const
static void tagMainDataDirty()
static AssetList * lookup_list(const AssetLibraryReference &library_ref)
static void remapID(ID *id_new, ID *id_old)
static void fetch_library(const AssetLibraryReference &library_reference, const bContext &C)
AssetListStorage()=delete
StringRef filepath() const
void remapID(ID *id_old, ID *id_new) const
void tagMainDataDirty() const
AssetList(AssetList &&other)=default
bool listen(const wmNotifier ¬ifier) const
void ensurePreviewsJob(bContext *C)
bool needsRefetch() const
void fetch(const bContext &C)
void iterate(AssetListIterFn fn) const
FileListWrapper(FileListWrapper &&other)=default
FileListWrapper(eFileSelectType filesel_type)
FileListWrapper & operator=(FileListWrapper &&other)=default
void stop(const bContext *C)
void ensureRunning(const bContext *C)
const FileIndexerType file_indexer_noop
void filelist_free(struct FileList *filelist)
void filelist_cache_previews_set(FileList *filelist, const bool use_previews)
void filelist_setsorting(struct FileList *filelist, const short sort, bool invert_sort)
int filelist_needs_reading(FileList *filelist)
void filelist_sort(struct FileList *filelist)
void filelist_clear_from_reset_tag(FileList *filelist)
bool filelist_cache_previews_running(FileList *filelist)
void filelist_freelib(struct 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_setlibrary(FileList *filelist, const AssetLibraryReference *asset_library_ref)
bool filelist_cache_previews_done(FileList *filelist)
void filelist_setdir(struct FileList *filelist, char *r_dir)
void filelist_clear(FileList *filelist)
FileList * filelist_new(short type)
void filelist_setrecursion(struct FileList *filelist, const int recursion_level)
bool filelist_cache_previews_update(FileList *filelist)
void filelist_readjob_stop(FileList *filelist, wmWindowManager *wm)
bool filelist_file_cache_block(struct FileList *filelist, const int index)
void filelist_file_cache_slidingwindow_set(FileList *filelist, size_t window_size)
ImBuf * filelist_geticon_image_ex(const FileDirEntry *file)
FileDirEntry * filelist_file(struct FileList *filelist, int index)
bool filelist_pending(struct 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_setindexer(FileList *filelist, const FileIndexerType *indexer)
ImBuf * filelist_file_getimage(const FileDirEntry *file)
bool filelist_needs_force_reset(FileList *filelist)
void filelist_readjob_start(FileList *filelist, const int space_notifier, const bContext *C)
const char * filelist_dir(struct FileList *filelist)
void(* MEM_freeN)(void *vmemh)
const struct FileDirEntry * file_data
void WM_main_add_notifier(unsigned int type, void *reference)
wmTimer * WM_event_add_timer_notifier(wmWindowManager *wm, wmWindow *win, unsigned int type, double timestep)
void WM_event_remove_timer_notifier(wmWindowManager *wm, wmWindow *win, wmTimer *timer)