PyAPI: minor cleanup with library linking
This commit is contained in:
@@ -39,7 +39,6 @@
|
||||
|
||||
#include "BLO_readfile.h"
|
||||
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_library.h"
|
||||
#include "BKE_idcode.h"
|
||||
@@ -186,6 +185,7 @@ PyDoc_STRVAR(bpy_lib_load_doc,
|
||||
static PyObject *bpy_lib_load(PyObject *UNUSED(self), PyObject *args, PyObject *kwds)
|
||||
{
|
||||
static const char *kwlist[] = {"filepath", "link", "relative", NULL};
|
||||
Main *bmain = CTX_data_main(BPy_GetContext());
|
||||
BPy_Library *ret;
|
||||
const char *filename = NULL;
|
||||
bool is_rel = false, is_link = false;
|
||||
@@ -204,7 +204,7 @@ static PyObject *bpy_lib_load(PyObject *UNUSED(self), PyObject *args, PyObject *
|
||||
|
||||
BLI_strncpy(ret->relpath, filename, sizeof(ret->relpath));
|
||||
BLI_strncpy(ret->abspath, filename, sizeof(ret->abspath));
|
||||
BLI_path_abs(ret->abspath, G.main->name);
|
||||
BLI_path_abs(ret->abspath, bmain->name);
|
||||
|
||||
ret->blo_handle = NULL;
|
||||
ret->flag = ((is_link ? FILE_LINK : 0) |
|
||||
@@ -222,19 +222,16 @@ static PyObject *_bpy_names(BPy_Library *self, int blocktype)
|
||||
int totnames;
|
||||
|
||||
names = BLO_blendhandle_get_datablock_names(self->blo_handle, blocktype, &totnames);
|
||||
list = PyList_New(totnames);
|
||||
|
||||
if (names) {
|
||||
int counter = 0;
|
||||
list = PyList_New(totnames);
|
||||
for (l = names; l; l = l->next) {
|
||||
PyList_SET_ITEM(list, counter, PyUnicode_FromString((char *)l->link));
|
||||
counter++;
|
||||
}
|
||||
BLI_linklist_free(names, free); /* free linklist *and* each node's data */
|
||||
}
|
||||
else {
|
||||
list = PyList_New(0);
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
@@ -354,9 +351,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
|
||||
|
||||
for (i = 0; i < size; i++) {
|
||||
PyObject *item_src = PyList_GET_ITEM(ls, i);
|
||||
#ifdef USE_RNA_DATABLOCKS
|
||||
PyObject *item_dst = NULL;
|
||||
#endif
|
||||
PyObject *item_dst; /* must be set below */
|
||||
const char *item_idname = _PyUnicode_AsString(item_src);
|
||||
|
||||
// printf(" %s\n", item_idname);
|
||||
@@ -367,15 +362,16 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
|
||||
#ifdef USE_RNA_DATABLOCKS
|
||||
/* swap name for pointer to the id */
|
||||
item_dst = PyCapsule_New((void *)id, NULL, NULL);
|
||||
#else
|
||||
/* leave as is */
|
||||
continue;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
bpy_lib_exit_warn_idname(self, name_plural, item_idname);
|
||||
/* just warn for now */
|
||||
/* err = -1; */
|
||||
#ifdef USE_RNA_DATABLOCKS
|
||||
item_dst = Py_INCREF_RET(Py_None);
|
||||
#endif
|
||||
}
|
||||
|
||||
/* ID or None */
|
||||
@@ -384,19 +380,12 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
|
||||
/* XXX, could complain about this */
|
||||
bpy_lib_exit_warn_type(self, item_src);
|
||||
PyErr_Clear();
|
||||
|
||||
#ifdef USE_RNA_DATABLOCKS
|
||||
item_dst = Py_INCREF_RET(Py_None);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef USE_RNA_DATABLOCKS
|
||||
if (item_dst) {
|
||||
/* item_dst must be new or already incref'd */
|
||||
Py_DECREF(item_src);
|
||||
PyList_SET_ITEM(ls, i, item_dst);
|
||||
}
|
||||
#endif
|
||||
/* item_dst must be new or already incref'd */
|
||||
Py_DECREF(item_src);
|
||||
PyList_SET_ITEM(ls, i, item_dst);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -419,7 +408,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
|
||||
/* copied from wm_operator.c */
|
||||
{
|
||||
/* mark all library linked objects to be updated */
|
||||
BKE_main_lib_objects_recalc_all(G.main);
|
||||
BKE_main_lib_objects_recalc_all(bmain);
|
||||
|
||||
/* append, rather than linking */
|
||||
if ((self->flag & FILE_LINK) == 0) {
|
||||
@@ -431,6 +420,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
|
||||
|
||||
/* finally swap the capsules for real bpy objects
|
||||
* important since BLO_library_append_end initializes NodeTree types used by srna->refine */
|
||||
#ifdef USE_RNA_DATABLOCKS
|
||||
{
|
||||
int idcode_step = 0, idcode;
|
||||
while ((idcode = BKE_idcode_iter_step(&idcode_step))) {
|
||||
@@ -460,6 +450,7 @@ static PyObject *bpy_lib_exit(BPy_Library *self, PyObject *UNUSED(args))
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* USE_RNA_DATABLOCKS */
|
||||
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user