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