[Bf-blender-cvs] [449e1d8] asset-engine: Merge branch 'asset-experiments' into asset-engine

Bastien Montagne noreply at git.blender.org
Mon Apr 13 20:25:02 CEST 2015


Commit: 449e1d8074f4fa3cf13945f332de17b4902245b1
Author: Bastien Montagne
Date:   Mon Apr 13 20:22:27 2015 +0200
Branches: asset-engine
https://developer.blender.org/rB449e1d8074f4fa3cf13945f332de17b4902245b1

Merge branch 'asset-experiments' into asset-engine

Conflicts:
	source/blender/editors/space_file/filelist.c

... And fixes for code specific to that branch.

===================================================================



===================================================================

diff --cc source/blender/editors/space_file/filelist.c
index b82a700,6c827f4..7b422ae
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -1230,6 -1232,8 +1182,8 @@@ void filelist_clear(struct FileList *fi
  
  	filelist_intern_free(&filelist->filelist_intern);
  
 -	filelist_direntryarr_free(&filelist->filelist);
++	BKE_filedir_entryarr_clear(&filelist->filelist);
+ 
  	if (filelist->selection_state) {
  		BLI_ghash_clear(filelist->selection_state, MEM_freeN, NULL);
  	}
@@@ -1393,6 -1362,39 +1347,105 @@@ void filelist_clear_refresh(struct File
  	filelist->force_refresh = false;
  }
  
++
++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];
+ 	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;
 -	BLI_filelist_entry_size_to_string(&entry->st, rev->size_str);
++		ret = MEM_callocN(sizeof(*ret), __func__);
++		rev = MEM_callocN(sizeof(*rev), __func__);
+ 
 -	rev->time = (int64_t)entry->st.st_mtime;
 -	BLI_filelist_entry_datetime_to_string(&entry->st, rev->time_str, rev->date_str);
++		rev->size = (uint64_t)entry->st.st_size;
++		BLI_filelist_entry_size_to_string(&entry->st, rev->size_str);
+ 
 -	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;
++		BLI_filelist_entry_datetime_to_string(&entry->st, rev->time_str, rev->date_str);
++
++		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);
+ 	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);
++	}
++#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);
 -	filelist_entry_free(entry);
++	BKE_filedir_entry_free(entry);
+ }
+ 
  static FileDirEntry *filelist_file_ex(struct FileList *filelist, const int index, const bool use_request)
  {
  	FileDirEntry *ret = NULL, *old;
@@@ -1419,66 -1421,20 +1472,22 @@@
  	printf("requesting file %d (not yet cached)\n", index);
  
  	/* Else, we have to add new entry to 'misc' cache - and possibly make room for it first! */
- 	if (filelist->ae) {
- 		FileDirEntryArr tmp_arr;
- 
- 		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 NULL;
- 		}
- 
- 		tmp_arr = filelist->filelist;
- 		BLI_listbase_clear(&tmp_arr.entries);
- 		if (!filelist->ae->type->entries_block_get(filelist->ae, index, index + 1, &tmp_arr)) {
- 			printf("%s: Failed to get [%d:%d] from AE %s\n", __func__, index, index + 1, filelist->ae->type->name);
- 			BKE_filedir_entryarr_clear(&tmp_arr);
- 			return NULL;
- 		}
- 
- 		ret = tmp_arr.entries.first;
- 		BLI_assert(!BLI_listbase_is_empty(&ret->variants) && ret->nbr_variants);
- 		BLI_assert(ret->act_variant < ret->nbr_variants);
- 		if (!ret->name) {
- 			char buff[FILE_MAX_LIBEXTRA];
- 			ret->name = BLI_strdup(fileentry_uiname(filelist->filelist.root,
- 			                                        ret->relpath, ret->typeflag, buff));
- 		}
- 		if (!ret->entry) {
- 			FileDirEntryVariant *variant = BLI_findlink(&ret->variants, ret->act_variant);
- 			BLI_assert(!BLI_listbase_is_empty(&variant->revisions) && variant->nbr_revisions);
- 			BLI_assert(variant->act_revision < variant->nbr_revisions);
- 			ret->entry = BLI_findlink(&variant->revisions, variant->act_revision);
- 			BLI_assert(ret->entry);
- 		}
- 
- 		old_index = cache->misc_entries_indices[cache->misc_cursor];
- 		if ((old = BLI_ghash_popkey(cache->misc_entries, SET_INT_IN_POINTER(old_index), NULL))) {
- 			BLI_remlink(&filelist->filelist.entries, old);
- 			BKE_filedir_entry_free(old);
- 		}
- 		BLI_ghash_insert(cache->misc_entries, SET_INT_IN_POINTER(index), ret);
- 		cache->misc_entries_indices[cache->misc_cursor] = index;
- 		cache->misc_cursor = (cache->misc_cursor + 1) % FILELIST_ENTRYCACHESIZE;
- 
- 		/* Using filelist->filelist.entries as owner of that mem! */
- 		BLI_movelisttolist(&filelist->filelist.entries, &tmp_arr.entries);
- 	}
- 	else {
- 		ret = filelist_intern_create_entry(filelist, index);
+ 	ret = filelist_file_create_entry(filelist, index);
 -	old_index = cache->misc_entries_indices[cache->misc_cursor];
 -	if ((old = BLI_ghash_popkey(cache->misc_entries, SET_INT_IN_POINTER(old_index), NULL))) {
 -		filelist_file_release_entry(filelist, old);
 -	}
 -	BLI_ghash_insert(cache->misc_entries, SET_INT_IN_POINTER(index), ret);
 -	cache->misc_entries_indices[cache->misc_cursor] = index;
 -	cache->misc_cursor = (cache->misc_cursor + 1) % FILELIST_ENTRYCACHESIZE;
++	if (ret) {
 +		old_index = cache->misc_entries_indices[cache->misc_cursor];
 +		if ((old = BLI_ghash_popkey(cache->misc_entries, SET_INT_IN_POINTER(old_index), NULL))) {
- 			filelist_intern_release_entry(filelist, old);
++			filelist_file_release_entry(filelist, old);
 +		}
 +		BLI_ghash_insert(cache->misc_entries, SET_INT_IN_POINTER(index), ret);
 +		cache->misc_entries_indices[cache->misc_cursor] = index;
 +		cache->misc_cursor = (cache->misc_cursor + 1) % FILELIST_ENTRYCACHESIZE;
- 	}
  
  #if 0  /* Actually no, only block cached entries should have preview imho. */
--	if (cache->previews_pool) {
--		filelist_cache_previews_push(filelist, ret, index);
--	}
++		if (cache->previews_pool) {
++			filelist_cache_previews_push(filelist, ret, index);
++		}
  #endif
++	}
  
  	return ret;
  }
@@@ -1534,48 -1490,7 +1543,19 @@@ static bool filelist_file_cache_block_c
  {
  	FileListEntryCache *cache = &filelist->filelist_cache;
  
 -	{
 +	if (filelist->ae) {
- 		FileDirEntryArr tmp_arr;
 +		FileDirEntry *tmp_entry;
 +		int i;
 +
- 		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 false;
- 		}
- 
- 		tmp_arr = filelist->filelist;
- 		BLI_listbase_clear(&tmp_arr.entries);
- 		if (!filelist->ae->type->entries_block_get(filelist->ae, start_index, start_index + size, &tmp_arr)) {
- 			printf("%s: Failed to get [%d:%d] from AE %s\n", __func__, start_index, start_index + size, filelist->ae->type->name);
- 			BKE_filedir_entryarr_clear(&tmp_arr);
- 			return false;
- 		}
- 
- 		for (i = 0, tmp_entry = tmp_arr.entries.first; i < size; i++, cursor++, tmp_entry = tmp_entry->next) {
- 			BLI_assert(!BLI_listbase_is_empty(&tmp_entry->variants) && tmp_entry->nbr_variants);
- 			BLI_assert(tmp_entry->act_variant < tmp_entry->nbr_variants);
- 			if (!tmp_entry->name) {
- 				char buff[FILE_MAX_LIBEXTRA];
- 				tmp_entry->name = BLI_strdup(fileentry_uiname(filelist->filelist.root,
- 				                                              tmp_entry->relpath, tmp_entry->typeflag, buff));
- 			}
- 			if (!tmp_entry->entry) {
- 				FileDirEntryVariant *variant = BLI_findlink(&tmp_entry->variants, tmp_entry->act_variant);
- 				BLI_assert(!BLI_listbase_is_empty(&variant->revisions) && variant->nbr_revisions);
- 				BLI_assert(variant->act_revision < variant->nbr_revisions);
- 				tmp_entry->entry = BLI_findlink(&variant->revisions, variant->act_revision);
- 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list