Commit: 026f967dff977d603407073e19b03ccd2b3e05e2
Author: Bastien Montagne
Date:   Mon Apr 13 17:27:06 2015 +0200
Branches: asset-engine
https://developer.blender.org/rB026f967dff977d603407073e19b03ccd2b3e05e2

Various fixes with asset engine and new code...

Still not working completely, and need small rework in asset-experiments first.

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

M       release/scripts/startup/bl_operators/amber.py
M       source/blender/editors/space_file/filelist.c

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

diff --git a/release/scripts/startup/bl_operators/amber.py 
b/release/scripts/startup/bl_operators/amber.py
index 4f51f9a..9b6cfb4 100644
--- a/release/scripts/startup/bl_operators/amber.py
+++ b/release/scripts/startup/bl_operators/amber.py
@@ -215,13 +215,8 @@ class AssetEngineAmber(AssetEngine):
     def __init__(self):
         self.executor = futures.ThreadPoolExecutor(8)  # Using threads for 
now, if issues arise we'll switch to process.
         self.jobs = {}
-        self.root = ""
-        self.uuids = {}
-        self.repo = {}
-        self.dirs = []
-        self.tags_source = []
 
-        self.sortedfiltered = []
+        self.reset()
 
         self.job_uuid = 1
 
@@ -231,6 +226,15 @@ class AssetEngineAmber(AssetEngine):
         #     Even though it does not seem to be an issue, this is not nice 
and shall be fixed somehow.
         #~ self.executor.shutdown(wait=False)
 
+    def reset(self):
+        print("Amber Reset!")
+        self.root = ""
+        self.uuids = {}
+        self.repo = {}
+        self.dirs = []
+        self.tags_source = []
+
+        self.sortedfiltered = []
 
     def status(self, job_id):
         if job_id:
@@ -261,10 +265,12 @@ class AssetEngineAmber(AssetEngine):
         #~ print(entries.root_path, job_id, job)
         if job is not None and isinstance(job, AmberJobList):
             if job.root != entries.root_path:
+                self.reset()
                 self.jobs[job_id] = AmberJobList(self.executor, job_id, 
entries.root_path)
             else:
                 job.update(self.repo, self.dirs, self.uuids)
         elif self.root != entries.root_path:
+            self.reset()
             job_id = self.job_uuid
             self.job_uuid += 1
             self.jobs[job_id] = AmberJobList(self.executor, job_id, 
entries.root_path)
@@ -317,6 +323,7 @@ class AssetEngineAmber(AssetEngine):
 
     def entries_block_get(self, start_index, end_index, entries):
         if self.repo:
+            print("self repo", len(self.sortedfiltered), start_index, 
end_index)
             for _n, euuid, e in self.sortedfiltered[start_index:end_index]:
                 uuid = binascii.unhexlify(euuid)
                 entry = entries.entries.add()
@@ -330,26 +337,22 @@ class AssetEngineAmber(AssetEngine):
                 act_rev = None
                 for vuuid, v in e["variants"].items():
                     variant_uuid = binascii.unhexlify(vuuid)
-                    variant, existing_ruuids = 
existing_vuuids.get(variant_uuid, (None, {}))
-                    if variant is None:
-                        variant = entry.variants.add()
-                        variant.uuid = variant_uuid
-                        variant.name = v["name"]
-                        variant.description = v["description"]
-                        existing_vuuids[variant_uuid] = (variant, 
existing_ruuids)  # Not really needed, but for sake of consistency...
-                        ruuids = vuuids[variant_uuid] = {}
+                    variant = entry.variants.add()
+                    variant.uuid = variant_uuid
+                    variant.name = v["name"]
+                    variant.description = v["description"]
+                    ruuids = {}
+                    vuuids[variant_uuid] = (variant, ruuids)  # Not really 
needed, but for sake of consistency...
                     if vuuid == e["variant_default"]:
                         entry.variants.active = variant
                     for ruuid, r in v["revisions"].items():
                         revision_uuid = binascii.unhexlify(ruuid)
-                        revision = existing_ruuids.get(revision_uuid, None)
-                        if revision is None:
-                            revision = variant.revisions.add()
-                            revision.uuid = revision_uuid
-                            #~ revision.comment = r["comment"]
-                            revision.size = r["size"]
-                            revision.timestamp = r["timestamp"]
-                            ruuids[revision_uuid] = (r["path_archive"], 
r["path"])
+                        revision = variant.revisions.add()
+                        revision.uuid = revision_uuid
+                        #~ revision.comment = r["comment"]
+                        revision.size = r["size"]
+                        revision.timestamp = r["timestamp"]
+                        ruuids[revision_uuid] = (r["path_archive"], r["path"])
                         if ruuid == v["revision_default"]:
                             variant.revisions.active = revision
                             if vuuid == e["variant_default"]:
@@ -357,6 +360,7 @@ class AssetEngineAmber(AssetEngine):
                 if act_rev:
                     entry.relpath = act_rev["path"]
         else:
+            print("self dirs", len(self.sortedfiltered), start_index, 
end_index)
             for path, size, timestamp, uuid in 
self.sortedfiltered[start_index:end_index]:
                 entry = entries.entries.add()
                 entry.type = {'DIR'}
diff --git a/source/blender/editors/space_file/filelist.c 
b/source/blender/editors/space_file/filelist.c
index c757fb9..b82a700 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -667,7 +667,11 @@ void filelist_sort_filter(struct FileList *filelist)
                                                                             
filelist->filter_data.filter_glob,
                                                                             
filelist->filter_data.filter_search,
                                                                             
&filelist->filelist);
+                       printf("%s: changed: %d\n", __func__, changed);
                }
+               filelist_cache_clear(&filelist->filelist_cache);
+               filelist->need_sorting = false;
+               filelist->need_filtering = false;
        }
        else {
                if (filelist_need_sorting(filelist)) {
@@ -1350,6 +1354,7 @@ void filelist_setdir(struct FileList *filelist, char 
*r_dir)
 
        if (!STREQ(filelist->filelist.root, r_dir)) {
                BLI_strncpy(filelist->filelist.root, r_dir, 
sizeof(filelist->filelist.root));
+               printf("%s: Forcing Reset!!!\n", __func__);
                filelist->force_reset = true;
        }
 }
@@ -1414,14 +1419,60 @@ static FileDirEntry *filelist_file_ex(struct FileList 
*filelist, const int index
        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! */
-       ret = filelist_intern_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_intern_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 (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);
+               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);
+               }
+               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) {

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to