[Bf-blender-cvs] [b4861a9] asset-engine: Merge branch 'asset-experiments' into asset-engine
Bastien Montagne
noreply at git.blender.org
Thu Sep 10 14:35:24 CEST 2015
Commit: b4861a9ec1983dce70debd998728c1624f597a2e
Author: Bastien Montagne
Date: Wed Sep 9 21:45:37 2015 +0200
Branches: asset-engine
https://developer.blender.org/rBb4861a9ec1983dce70debd998728c1624f597a2e
Merge branch 'asset-experiments' into asset-engine
===================================================================
===================================================================
diff --cc source/blender/editors/space_file/filelist.c
index fad2b84,192866e..c07ecb0
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -1258,6 -1223,12 +1268,12 @@@ static void filelist_cache_free(FileLis
MEM_freeN(cache->misc_entries_indices);
BLI_ghash_free(cache->uuids, NULL, NULL);
+
+ for (entry = cache->cached_entries.first; entry; entry = entry_next) {
+ entry_next = entry->next;
- filelist_entry_free(entry);
++ BKE_filedir_entry_free(entry);
+ }
+ BLI_listbase_clear(&cache->cached_entries);
}
static void filelist_cache_clear(FileListEntryCache *cache, size_t new_size)
@@@ -1284,6 -1256,12 +1301,12 @@@
BLI_ghash_clear_ex(cache->uuids, NULL, NULL, new_size * 2);
cache->size = new_size;
+
+ for (entry = cache->cached_entries.first; entry; entry = entry_next) {
+ entry_next = entry->next;
- filelist_entry_free(entry);
++ BKE_filedir_entry_free(entry);
+ }
+ BLI_listbase_clear(&cache->cached_entries);
}
FileList *filelist_new(short type)
@@@ -1328,7 -1306,7 +1351,8 @@@ void filelist_clear_ex(struct FileList
filelist_intern_free(&filelist->filelist_intern);
- filelist_direntryarr_free(&filelist->filelist);
++ BLI_assert(BLI_listbase_is_empty(&filelist->filelist.entries));
+ BKE_filedir_entryarr_clear(&filelist->filelist);
if (do_selection && filelist->selection_state) {
BLI_ghash_clear(filelist->selection_state, MEM_freeN, NULL);
@@@ -1493,101 -1437,36 +1517,102 @@@ int filelist_files_ensure(FileList *fil
return filelist->filelist.nbr_entries_filtered;;
}
+
+static FileDirEntry *filelist_file_create_entries_block(FileList *filelist, const int index, const int size);
+
static FileDirEntry *filelist_file_create_entry(FileList *filelist, const int index)
{
- FileListInternEntry *entry = filelist->filelist_intern.filtered[index];
+ FileListEntryCache *cache = &filelist->filelist_cache;
FileDirEntry *ret;
- FileDirEntryRevision *rev;
- ret = MEM_callocN(sizeof(*ret), __func__);
- rev = MEM_callocN(sizeof(*rev), __func__);
+ if (filelist->ae) {
+ ret = filelist_file_create_entries_block(filelist, index, 1);
+
+ BLI_assert(!ret || !ret->next);
+ }
+ else {
+ FileListInternEntry *entry = filelist->filelist_intern.filtered[index];
+ FileDirEntryRevision *rev;
- rev->size = (uint64_t)entry->st.st_size;
+ ret = MEM_callocN(sizeof(*ret), __func__);
+ rev = MEM_callocN(sizeof(*rev), __func__);
- rev->time = (int64_t)entry->st.st_mtime;
+ rev->size = (uint64_t)entry->st.st_size;
- ret->entry = rev;
- ret->relpath = BLI_strdup(entry->relpath);
- ret->name = BLI_strdup(entry->name);
- ret->description = BLI_strdupcat(filelist->filelist.root, entry->relpath);
- memcpy(ret->uuid, entry->uuid, sizeof(ret->uuid));
- ret->blentype = entry->blentype;
- ret->typeflag = entry->typeflag;
+ rev->time = (int64_t)entry->st.st_mtime;
+
+ ret->entry = rev;
+ ret->relpath = BLI_strdup(entry->relpath);
+ ret->name = BLI_strdup(entry->name);
+ ret->description = BLI_strdupcat(filelist->filelist.root, entry->relpath);
+ memcpy(ret->uuid, entry->uuid, sizeof(ret->uuid));
+ ret->blentype = entry->blentype;
+ ret->typeflag = entry->typeflag;
+ }
- BLI_addtail(&filelist->filelist.entries, ret);
+ BLI_addtail(&cache->cached_entries, ret);
return ret;
}
+static FileDirEntry *filelist_file_create_entries_block(FileList *filelist, const int index, const int size)
+{
+ FileDirEntry *entry = NULL;
+ FileDirEntryArr tmp_arr;
+ int i;
+
+ tmp_arr = filelist->filelist;
+ BLI_listbase_clear(&tmp_arr.entries);
+
+ if (filelist->ae) {
+ if (!filelist->ae->type->entries_block_get) {
+ printf("%s: Asset Engine %s does not implement 'entries_block_get'...\n", __func__, filelist->ae->type->name);
+ return entry;
+ }
+
+ if (!filelist->ae->type->entries_block_get(filelist->ae, index, index + size, &tmp_arr)) {
+ printf("%s: Failed to get [%d:%d] from AE %s\n", __func__, index, index + size, filelist->ae->type->name);
+ BKE_filedir_entryarr_clear(&tmp_arr);
+ return entry;
+ }
+
+ for (i = 0, entry = tmp_arr.entries.first; i < size && entry; i++, entry = entry->next) {
+ BLI_assert(!BLI_listbase_is_empty(&entry->variants) && entry->nbr_variants);
+ BLI_assert(entry->act_variant < entry->nbr_variants);
+ if (!entry->name) {
+ char buff[FILE_MAX_LIBEXTRA];
+ entry->name = BLI_strdup(fileentry_uiname(filelist->filelist.root,
+ entry->relpath, entry->typeflag, buff));
+ }
+ if (!entry->entry) {
+ FileDirEntryVariant *variant = BLI_findlink(&entry->variants, entry->act_variant);
+ BLI_assert(!BLI_listbase_is_empty(&variant->revisions) && variant->nbr_revisions);
+ BLI_assert(variant->act_revision < variant->nbr_revisions);
+ entry->entry = BLI_findlink(&variant->revisions, variant->act_revision);
+ BLI_assert(entry->entry);
+ }
+ }
+
+ BLI_assert(i == size && !entry);
+
+ entry = tmp_arr.entries.first;
- /* Using filelist->filelist.entries as owner of that mem! */
- BLI_movelisttolist(&filelist->filelist.entries, &tmp_arr.entries);
++ /* Using filelist->filelist_cache.cached_entries as owner of that mem! */
++ BLI_movelisttolist(&filelist->filelist_cache.cached_entries, &tmp_arr.entries);
+ }
+#if 0 /* UNUSED */
+ else {
+ entry = filelist_file_create_entry(filelist, index);
+ for (i = 1, idx = index + 1; i < size; i++, idx++) {
+ filelist_file_create_entry(filelist, idx);
+ }
+ }
+#endif
+ return entry;
+}
+
static void filelist_file_release_entry(FileList *filelist, FileDirEntry *entry)
{
- BLI_remlink(&filelist->filelist.entries, entry);
+ BLI_remlink(&filelist->filelist_cache.cached_entries, entry);
- filelist_entry_free(entry);
+ BKE_filedir_entry_free(entry);
}
static FileDirEntry *filelist_file_ex(struct FileList *filelist, const int index, const bool use_request)
More information about the Bf-blender-cvs
mailing list