[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