⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 contactsmodule.cpp

📁 python s60 1.4.5版本的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
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 + -