📄 contactsmodule.cpp
字号:
Contact_get_field(Contact_object* self, PyObject* args)
{
TInt fieldIndex = -1;
if (!PyArg_ParseTuple(args, "i", &fieldIndex)){
return NULL;
}
return Contact_build_field_data_object(self,fieldIndex);
}
/*
* Returns the number of fields in the contact object.
*/
extern "C" PyObject *
Contact_num_of_fields(Contact_object* self, PyObject* /*args*/)
{
return Py_BuildValue("i", self->contactItem->CardFields().Count());
}
/*
* Removes specified field of the contact.
*/
extern "C" PyObject *
Contact_remove_field(Contact_object* self, PyObject* args)
{
ASSERT_CONTACT_READ_WRITE
TInt fieldIndex = -1;
if (!PyArg_ParseTuple(args, "i", &fieldIndex)){
return NULL;
}
CContactItemFieldSet& fieldArray = self->contactItem->CardFields();
if (fieldIndex < 0 || fieldIndex >= fieldArray.Count()){
PyErr_SetString(PyExc_IndexError, "illegal field index");
return NULL;
}
self->contactItem->RemoveField(fieldIndex);
Py_INCREF(Py_None);
return Py_None;
}
/*
* Deallocate Contact_object.
*/
extern "C" {
static void Contact_dealloc(Contact_object *contact)
{
Contact_delete_entry(contact);
Py_DECREF(contact->contactsDb);
PyObject_Del(contact);
}
}
/*
* Field iterator methods.
*/
/*
* Create new FieldIterator object.
*/
extern "C" PyObject *
new_FieldIterator_object(Contact_object* self, PyObject /**args*/)
{
ASSERT_CONTACTOPEN
FieldIterator_object* fi =
PyObject_New(FieldIterator_object, FieldIterator_type);
if (fi == NULL){
return PyErr_NoMemory();
}
fi->contact = self;
fi->initialized = false;
fi->iterationIndex = 0;
Py_INCREF(fi->contact);
return (PyObject*)fi;
}
/*
* Returns data of the next field of the contact.
*/
extern "C" PyObject *
FieldIterator_next_field(FieldIterator_object* self, PyObject /**args*/)
{
ASSERT_CONTACTOPEN_FI
if (!self->initialized) {
self->iterationIndex = 0;
self->initialized = true;
}
CContactItemFieldSet& fieldArray = self->contact->contactItem->CardFields();
if(self->iterationIndex < fieldArray.Count()){
PyObject* ret =
Contact_build_field_data_object(self->contact, self->iterationIndex);
self->iterationIndex++;
return ret;
}
PyErr_SetObject(PyExc_StopIteration, Py_None);
return NULL;
}
/*
* Deallocate FieldIterator_object.
*/
extern "C" {
static void FieldIterator_dealloc(FieldIterator_object *fieldIterator)
{
Py_DECREF(fieldIterator->contact);
fieldIterator->contact = NULL;
PyObject_Del(fieldIterator);
}
}
extern "C" {
const static PyMethodDef ContactsDb_methods[] = {
{"get_entry", (PyCFunction)ContactsDb_get_entry, METH_VARARGS},
{"create_entry", (PyCFunction)ContactsDb_create_entry, METH_NOARGS},
{"field_type_info", (PyCFunction)ContactsDB_field_type_info, METH_VARARGS, NULL},
{"field_types", (PyCFunction)ContactsDB_field_types, METH_NOARGS, NULL},
{"export_vcards", (PyCFunction)ContactsDb_export_vcards, METH_VARARGS},
{"import_vcards", (PyCFunction)ContactsDb_import_vcards, METH_VARARGS},
{"delete_entry", (PyCFunction)ContactsDb_delete_entry, METH_VARARGS},
{"entry_count", (PyCFunction)ContactsDb_entry_count, METH_VARARGS},
{"find", (PyCFunction)ContactsDb_find, METH_VARARGS},
{"contact_groups", (PyCFunction)ContactsDb_contact_groups, METH_NOARGS},
{"contact_group_label", (PyCFunction)ContactsDb_contact_group_label, METH_VARARGS},
{"contact_group_set_label", (PyCFunction)ContactsDb_contact_group_set_label, METH_VARARGS},
{"contact_group_ids", (PyCFunction)ContactsDb_contact_group_ids, METH_VARARGS},
{"add_contact_to_group", (PyCFunction)ContactsDb_add_contact_to_group, METH_VARARGS},
{"remove_contact_from_group", (PyCFunction)ContactsDb_remove_contact_from_group, METH_VARARGS},
{"create_contact_group", (PyCFunction)ContactsDb_create_contact_group, METH_NOARGS},
{"contact_group_count", (PyCFunction)ContactsDb_contact_group_count, METH_NOARGS},
{"compact", (PyCFunction)ContactsDb_compact, METH_NOARGS},
{"compact_recommended", (PyCFunction)ContactsDb_compact_recommended, METH_NOARGS},
{"_determine_field_name", (PyCFunction)ContactsDb_determine_field_name, METH_VARARGS},
{NULL, NULL}
};
const static PyMethodDef ContactIterator_methods[] = {
{"next", (PyCFunction)ContactIterator_next, METH_NOARGS},
{NULL, NULL}
};
const static PyMethodDef Contact_methods[] = {
{"num_of_fields", (PyCFunction)Contact_num_of_fields, METH_NOARGS, NULL},
{"entry_data", (PyCFunction)Contact_entry_data, METH_NOARGS, NULL},
{"get_field", (PyCFunction)Contact_get_field, METH_VARARGS, NULL},
{"begin", (PyCFunction)Contact_begin, METH_NOARGS, NULL},
{"commit", (PyCFunction)Contact_commit, METH_NOARGS, NULL},
{"rollback", (PyCFunction)Contact_rollback, METH_NOARGS, NULL},
{"add_field", (PyCFunction)Contact_add_field, METH_VARARGS | METH_KEYWORDS, NULL},
{"modify_field", (PyCFunction)Contact_modify_field, METH_VARARGS | METH_KEYWORDS, NULL},
{"find_field_indexes", (PyCFunction)Contact_find_field_indexes, METH_VARARGS, NULL},
{"remove_field", (PyCFunction)Contact_remove_field, METH_VARARGS, NULL},
{"is_contact_group", (PyCFunction)Contact_is_contact_group, METH_NOARGS},
{NULL, NULL, 0 , NULL}
};
const static PyMethodDef FieldIterator_methods[] = {
{"next", (PyCFunction)FieldIterator_next_field, METH_NOARGS},
{NULL, NULL}
};
static PyObject *
ContactsDb_getattr(ContactsDb_object *op, char *name)
{
return Py_FindMethod((PyMethodDef*)ContactsDb_methods, (PyObject *)op, name);
}
static PyObject *
ContactIterator_getattr(ContactIterator_object *op, char *name)
{
return Py_FindMethod((PyMethodDef*)ContactIterator_methods, (PyObject *)op, name);
}
static PyObject *
Contact_getattr(Contact_object *op, char *name)
{
return Py_FindMethod((PyMethodDef*)Contact_methods, (PyObject *)op, name);
}
static PyObject *
FieldIterator_getattr(FieldIterator_object *op, char *name)
{
return Py_FindMethod((PyMethodDef*)FieldIterator_methods, (PyObject *)op, name);
}
const PyTypeObject c_ContactsDb_type = {
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"_contacts.ContactsDb", /*tp_name*/
sizeof(ContactsDb_object), /*tp_basicsize*/
0, /*tp_itemsize*/
(destructor)ContactsDb_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)ContactsDb_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"", /*tp_doc */
0, /*tp_traverse */
0, /*tp_clear */
0, /*tp_richcompare */
0, /*tp_weaklistoffset */
(getiterfunc)new_ContactIterator_object, /*tp_iter */
};
static const PyTypeObject c_ContactIterator_type = {
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"_contacts.ContactIterator", /*tp_name*/
sizeof(ContactIterator_object), /*tp_basicsize*/
0, /*tp_itemsize*/
(destructor)ContactIterator_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)ContactIterator_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"", /*tp_doc */
0, /*tp_traverse */
0, /*tp_clear */
0, /*tp_richcompare */
0, /*tp_weaklistoffset */
0, /*tp_iter*/
(iternextfunc)ContactIterator_next, /*tp_iternext */
};
const PyTypeObject c_Contact_type = {
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"_contacts.Contact", /*tp_name*/
sizeof(Contact_object), /*tp_basicsize*/
0, /*tp_itemsize*/
(destructor)Contact_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)Contact_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"", /*tp_doc */
0, /*tp_traverse */
0, /*tp_clear */
0, /*tp_richcompare */
0, /*tp_weaklistoffset */
(getiterfunc)new_FieldIterator_object, /*tp_iter */
};
static const PyTypeObject c_FieldIterator_type = {
PyObject_HEAD_INIT(NULL)
0, /*ob_size*/
"_contacts.FieldIterator", /*tp_name*/
sizeof(FieldIterator_object), /*tp_basicsize*/
0, /*tp_itemsize*/
(destructor)FieldIterator_dealloc, /*tp_dealloc*/
0, /*tp_print*/
(getattrfunc)FieldIterator_getattr, /*tp_getattr*/
0, /*tp_setattr*/
0, /*tp_compare*/
0, /*tp_repr*/
0, /*tp_as_number*/
0, /*tp_as_sequence*/
0, /*tp_as_mapping*/
0, /*tp_hash */
0, /*tp_call*/
0, /*tp_str*/
0, /*tp_getattro*/
0, /*tp_setattro*/
0, /*tp_as_buffer*/
Py_TPFLAGS_DEFAULT, /*tp_flags*/
"", /*tp_doc */
0, /*tp_traverse */
0, /*tp_clear */
0, /*tp_richcompare */
0, /*tp_weaklistoffset */
0, /*tp_iter */
(iternextfunc)FieldIterator_next_field, /*tp_iternext */
};
} //extern C
//////////////INIT//////////////
extern "C" {
static const PyMethodDef contacts_methods[] = {
{"open", (PyCFunction)open_db, METH_VARARGS, NULL},
#ifdef CONTACTS_MAINTENANCE
{"_create_api_mappings", (PyCFunction)_create_api_mappings, METH_NOARGS, NULL},
#endif
{NULL, NULL} /* sentinel */
};
DL_EXPORT(void) initcontacts(void)
{
PyTypeObject* contacts_db_type = PyObject_New(PyTypeObject, &PyType_Type);
*contacts_db_type = c_ContactsDb_type;
contacts_db_type->ob_type = &PyType_Type;
SPyAddGlobalString("ContactsDbType", (PyObject*)contacts_db_type);
PyTypeObject* contact_iterator_type = PyObject_New(PyTypeObject, &PyType_Type);
*contact_iterator_type = c_ContactIterator_type;
contact_iterator_type->ob_type = &PyType_Type;
SPyAddGlobalString("ContactIteratorType", (PyObject*)contact_iterator_type);
PyTypeObject* contact_type = PyObject_New(PyTypeObject, &PyType_Type);
*contact_type = c_Contact_type;
contact_type->ob_type = &PyType_Type;
SPyAddGlobalString("ContactType", (PyObject*)contact_type);
PyTypeObject* field_iterator_type = PyObject_New(PyTypeObject, &PyType_Type);
*field_iterator_type = c_FieldIterator_type;
field_iterator_type->ob_type = &PyType_Type;
SPyAddGlobalString("FieldIteratorType", (PyObject*)field_iterator_type);
PyObject *m, *d;
m = Py_InitModule("_contacts", (PyMethodDef*)contacts_methods);
d = PyModule_GetDict(m);
// Storage types.
PyDict_SetItemString(d,"storage_type_text", PyInt_FromLong(KStorageTypeText));
PyDict_SetItemString(d,"storage_type_store", PyInt_FromLong(KStorageTypeStore));
PyDict_SetItemString(d,"storage_type_contact_item_id", PyInt_FromLong(KStorageTypeContactItemId));
PyDict_SetItemString(d,"storage_type_datetime", PyInt_FromLong(KStorageTypeDateTime));
// Field types
PyDict_SetItemString(d,"address_value", PyInt_FromLong(KUidContactFieldAddressValue));
PyDict_SetItemString(d,"post_office_value", PyInt_FromLong(KUidContactFieldPostOfficeValue));
PyDict_SetItemString(d,"extended_address_value", PyInt_FromLong(KUidContactFieldExtendedAddressValue));
PyDict_SetItemString(d,"locality_value", PyInt_FromLong(KUidContactFieldLocalityValue));
PyDict_SetItemString(d,"post_code_value", PyInt_FromLong(KUidContactFieldPostCodeValue));
PyDict_SetItemString(d,"company_name_value", PyInt_FromLong(KUidContactFieldCompanyNameValue));
PyDict_SetItemString(d,"company_name_pronunciation_value", PyInt_FromLong(KUidContactFieldCompanyNamePronunciationValue));
PyDict_SetItemString(d,"phone_number_value", PyInt_FromLong(KUidContactFieldPhoneNumberValue));
PyDict_SetItemString(d,"given_name_value", PyInt_FromLong(KUidContactFieldGivenNameValue));
PyDict_SetItemString(d,"family_name_value", PyInt_FromLong(KUidContactFieldFamilyNameValue));
PyDict_SetItemString(d,"given_name_pronunciation_value", PyInt_FromLong(KUidContactFieldGivenNamePronunciationValue));
PyDict_SetItemString(d,"family_name_pronunciation_value", PyInt_FromLong(KUidContactFieldFamilyNamePronunciationValue));
PyDict_SetItemString(d,"additional_name_value", PyInt_FromLong(KUidContactFieldAdditionalNameValue));
PyDict_SetItemString(d,"suffix_name_value", PyInt_FromLong(KUidContactFieldSuffixNameValue));
PyDict_SetItemString(d,"prefix_name_value", PyInt_FromLong(KUidContactFieldPrefixNameValue));
PyDict_SetItemString(d,"hidden_value", PyInt_FromLong(KUidContactFieldHiddenValue));
PyDict_SetItemString(d,"defined_text_value", PyInt_FromLong(KUidContactFieldDefinedTextValue));
PyDict_SetItemString(d,"email_value", PyInt_FromLong(KUidContactFieldEMailValue));
PyDict_SetItemString(d,"gsg_value", PyInt_FromLong(KUidContactFieldMsgValue));
PyDict_SetItemString(d,"sms_value", PyInt_FromLong(KUidContactFieldSmsValue));
PyDict_SetItemString(d,"fax_value", PyInt_FromLong(KUidContactFieldFaxValue));
PyDict_SetItemString(d,"note_value", PyInt_FromLong(KUidContactFieldNoteValue));
PyDict_SetItemString(d,"storage_value", PyInt_FromLong(KUidContactFieldStorageInlineValue));
PyDict_SetItemString(d,"birthday_value", PyInt_FromLong(KUidContactFieldBirthdayValue));
PyDict_SetItemString(d,"url_value", PyInt_FromLong(KUidContactFieldUrlValue));
PyDict_SetItemString(d,"template_label_value", PyInt_FromLong(KUidContactFieldTemplateLabelValue));
PyDict_SetItemString(d,"picture_value", PyInt_FromLong(KUidContactFieldPictureValue));
PyDict_SetItemString(d,"dtmf_value", PyInt_FromLong(KUidContactFieldDTMFValue));
PyDict_SetItemString(d,"ring_tone_value", PyInt_FromLong(KUidContactFieldRingToneValue));
PyDict_SetItemString(d,"job_title_value", PyInt_FromLong(KUidContactFieldJobTitleValue));
PyDict_SetItemString(d,"im_address_value", PyInt_FromLong(KUidContactFieldIMAddressValue));
PyDict_SetItemString(d,"second_name_value", PyInt_FromLong(KUidContactFieldSecondNameValue));
PyDict_SetItemString(d,"sip_id_value", PyInt_FromLong(KUidContactFieldSIPIDValue));
PyDict_SetItemString(d,"icc_phonebook_value", PyInt_FromLong(KUidContactFieldICCPhonebookValue));
PyDict_SetItemString(d,"icc_group_value", PyInt_FromLong(KUidContactFieldICCGroupValue));
PyDict_SetItemString(d,"voice_dial_value", PyInt_FromLong(KUidContactsVoiceDialFieldValue));
PyDict_SetItemString(d,"none_value", PyInt_FromLong(KUidContactFieldNoneValue));
PyDict_SetItemString(d,"match_all_value", PyInt_FromLong(KUidContactFieldMatchAllValue));
PyDict_SetItemString(d,"country_value", PyInt_FromLong(KUidContactFieldCountryValue));
PyDict_SetItemString(d,"region_value", PyInt_FromLong(KUidContactFieldRegionValue));
// Field mappings
PyDict_SetItemString(d,"map_post_office", PyInt_FromLong(KIntContactFieldVCardMapPOSTOFFICE));
PyDict_SetItemString(d,"map_extended_address", PyInt_FromLong(KIntContactFieldVCardMapEXTENDEDADR));
PyDict_SetItemString(d,"map_adr", PyInt_FromLong(KIntContactFieldVCardMapADR));
PyDict_SetItemString(d,"map_locality", PyInt_FromLong(KIntContactFieldVCardMapLOCALITY));
PyDict_SetItemString(d,"map_region", PyInt_FromLong(KIntContactFieldVCardMapREGION));
PyDict_SetItemString(d,"map_postcode", PyInt_FromLong(KIntContactFieldVCardMa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -