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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to