Commit: 0d8e70600bb783920a403d70a92713a9b5bfc568
Author: Bastien Montagne
Date:   Tue Jun 14 16:39:47 2016 +0200
Branches: asset-experiments
https://developer.blender.org/rB0d8e70600bb783920a403d70a92713a9b5bfc568

Merge branch 'asset-engine' into asset-experiments

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



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

diff --cc source/blender/windowmanager/intern/wm_files_link.c
index 72443c3,5b88f59..64e9a5a
--- a/source/blender/windowmanager/intern/wm_files_link.c
+++ b/source/blender/windowmanager/intern/wm_files_link.c
@@@ -220,9 -222,80 +222,81 @@@ static WMLinkAppendDataItem *wm_link_ap
        return item;
  }
  
+ static int path_to_idcode(const char *path)
+ {
+       const int filetype = ED_path_extension_type(path);
+       switch (filetype) {
+               case FILE_TYPE_IMAGE:
+               case FILE_TYPE_MOVIE:
+                       return ID_IM;
+               case FILE_TYPE_FTFONT:
+                       return ID_VF;
+               case FILE_TYPE_SOUND:
+                       return ID_SO;
+               case FILE_TYPE_PYSCRIPT:
+               case FILE_TYPE_TEXT:
+                       return ID_TXT;
+               default:
+                       return 0;
+       }
+ }
+ 
+ static void wm_link_virtual_lib(WMLinkAppendData *lapp_data, Main *bmain, 
AssetEngineType *aet, const int lib_idx)
+ {
+       LinkNode *itemlink;
+       int item_idx;
+ 
+       BLI_assert(aet);
+ 
+       /* Find or add virtual library matching current asset engine. */
+       Library *virtlib = BKE_library_asset_virtual_ensure(bmain, aet);
+ 
+       for (item_idx = 0, itemlink = lapp_data->items.list; itemlink; 
item_idx++, itemlink = itemlink->next) {
+               WMLinkAppendDataItem *item = itemlink->link;
+               ID *new_id = NULL;
+               bool id_exists = false;
+ 
+               if (!BLI_BITMAP_TEST(item->libraries, lib_idx)) {
+                       continue;
+               }
+ 
+               switch (item->idcode) {
+                       case ID_IM:
+                               new_id = (ID 
*)BKE_image_load_exists_ex(item->name, &id_exists);
+                               if (id_exists) {
+                                       if (!new_id->uuid || 
!ASSETUUID_COMPARE(new_id->uuid, item->uuid)) {
+                                               /* Fake 'same ID' (same path, 
but different uuid or whatever), force loading into new ID. */
+                                               BLI_assert(new_id->lib != 
virtlib);
+                                               new_id = (ID 
*)BKE_image_load(bmain, item->name);
+                                               id_exists = false;
+                                       }
+                               }
+                               break;
+                       default:
+                               break;
+               }
+ 
+               if (new_id) {
+                       new_id->lib = virtlib;
+                       new_id->tag |= LIB_TAG_EXTERN | LIB_ASSET;
+ 
+                       if (!id_exists) {
+                               new_id->uuid = 
MEM_mallocN(sizeof(*new_id->uuid), __func__);
+                               *new_id->uuid = *item->uuid;
+                       }
+ 
+                       /* If the link is sucessful, clear item's libs 'todo' 
flags.
+                        * This avoids trying to link same item with other 
libraries to come. */
+                       BLI_BITMAP_SET_ALL(item->libraries, false, 
lapp_data->num_libraries);
+                       item->new_id = new_id;
+               }
+       }
+       BKE_libraries_asset_repositories_rebuild(bmain);
+ }
+ 
  static void wm_link_do(
 -        WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, 
AssetEngineType *aet, Scene *scene, View3D *v3d)
 +        WMLinkAppendData *lapp_data, ReportList *reports, Main *bmain, 
AssetEngineType *aet, Scene *scene, View3D *v3d,
 +        const bool use_placeholders, const bool force_indirect)
  {
        Main *mainl;
        BlendHandle *bh;

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

Reply via email to