PyObject *PyMAPIObject_FromSPropValueArray(SPropValue *pv, ULONG nvalues) { PyObject *ret = PyList_New(nvalues); if (!ret) return NULL; ULONG i; for (i=0; i<nvalues; i++) { PyObject *sub = PyMAPIObject_FromSPropValue(pv+i); if (!sub) { Py_DECREF(ret); return NULL; } PyList_SET_ITEM(ret, i, sub); } return ret; }
// @object PySRow|Identical to a <o PySValue> object PyObject *PyMAPIObject_FromSRow(SRow *pr) { PyObject *result = PyTuple_New(pr->cValues); if (result==NULL) { PyErr_SetString(PyExc_MemoryError, "Allocating SRow result"); return NULL; } for (ULONG i=0; i<pr->cValues; i++) { PyObject *obNew = PyMAPIObject_FromSPropValue(pr->lpProps+i); if (obNew==NULL) { Py_DECREF(result); return NULL; } PyTuple_SET_ITEM(result, i, obNew); } return result; }
// @doc - This file contains autoduck documentation // --------------------------------------------------- // PyObject *PyObject_FromNOTIFICATION(NOTIFICATION *n) { PyObject *ret = NULL; switch (n->ulEventType) { case fnevCriticalError: { ERROR_NOTIFICATION &err = n->info.err; ret = Py_BuildValue("k(s#iiN)", n->ulEventType, err.lpEntryID, err.cbEntryID, err.scode, err.ulFlags, PyObject_FromMAPIERROR(err.lpMAPIError, err.ulFlags&MAPI_UNICODE, FALSE)); break; } case fnevExtended: { EXTENDED_NOTIFICATION &ext = n->info.ext; ret = Py_BuildValue("k(ks#)", n->ulEventType, ext.ulEvent, ext.pbEventParameters, ext.cb); break; } case fnevNewMail: { NEWMAIL_NOTIFICATION &newmail = n->info.newmail; PyObject *msg_class = newmail.ulFlags&MAPI_UNICODE? PyWinObject_FromWCHAR((const WCHAR *)newmail.lpszMessageClass) : PyString_FromString((const char *)newmail.lpszMessageClass); if (!msg_class) return NULL; ret = Py_BuildValue("k(s#s#kNk)", n->ulEventType, newmail.lpEntryID, newmail.cbEntryID, newmail.lpParentID, newmail.cbParentID, newmail.ulFlags, msg_class, newmail.ulMessageFlags); break; } case fnevObjectCopied: case fnevObjectCreated: case fnevObjectDeleted: case fnevObjectModified: case fnevObjectMoved: case fnevSearchComplete: { OBJECT_NOTIFICATION &obj = n->info.obj; PyObject *obArray = PyMAPIObject_FromSPropTagArray(obj.lpPropTagArray); if (!obArray) return NULL; ret = Py_BuildValue("k(s#is#s#s#N)", n->ulEventType, obj.lpEntryID, obj.cbEntryID, obj.ulObjType, obj.lpParentID, obj.cbParentID, obj.lpOldID, obj.cbOldID, obj.lpOldParentID, obj.cbOldParentID, obArray); break; } case fnevTableModified: { TABLE_NOTIFICATION &tab = n->info.tab; ret = Py_BuildValue("k(kiNNN)", n->ulEventType, tab.ulTableEvent, tab.hResult, PyMAPIObject_FromSPropValue(&tab.propIndex), PyMAPIObject_FromSPropValue(&tab.propPrior), PyMAPIObject_FromSRow(&tab.row)); break; } case fnevStatusObjectModified: { STATUS_OBJECT_NOTIFICATION &statobj = n->info.statobj; ret = Py_BuildValue("k(s#N)", n->ulEventType, statobj.lpEntryID, statobj.cbEntryID, PyMAPIObject_FromSPropValueArray(statobj.lpPropVals, statobj.cValues)); break; } default: { PyCom_LoggerWarning(NULL, "unknown MAPI notification type %x", n->ulEventType); ret = Py_BuildValue("k(O)", n->ulEventType, Py_None); break; } } return ret; }