src/ext/amaretto/contacts/inc/contactsmodule.h
changeset 0 ca70ae20a155
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ext/amaretto/contacts/inc/contactsmodule.h	Tue Feb 16 10:07:05 2010 +0530
@@ -0,0 +1,156 @@
+/*
+ * ====================================================================
+ *  contactsmodule.h
+ *
+ *  Python API to Series 60 contacts database.
+ *
+ * Copyright (c) 2006-2007 Nokia Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ====================================================================
+ */
+
+
+#include "Python.h"
+#include "symbian_python_ext_util.h"
+
+
+#include <CNTDB.H>
+#include <CNTITEM.H> 
+#include <CNTFLDST.H>
+#include <e32cmn.h>
+#include <CNTFIELD.H>
+#include <S32MEM.H>
+
+
+#include <CPbkFieldsInfo.h> 
+
+
+//////////////CONSTANTS//////////////
+
+
+_LIT8(KKeyStrUniqueId, "uniqueid");
+_LIT8(KKeyStrTitle, "title");
+_LIT8(KKeyStrLastModified, "lastmodified");
+
+_LIT8(KKeyStrFieldId, "fieldid");
+_LIT8(KKeyStrFieldLocation, "fieldlocation");
+_LIT8(KKeyStrFieldName, "fieldname");
+
+
+#define KContactGroupTypeId 268440330
+
+
+//////////////TYPE DEFINITION//////////////
+
+
+struct Contact_object;
+
+
+/*
+ * Contact database (database = contacts.open())
+ */
+#define ContactsDb_type ((PyTypeObject*)SPyGetGlobalString("ContactsDbType"))
+struct ContactsDb_object {
+  PyObject_VAR_HEAD
+  CContactDatabase* contactDatabase;
+};
+
+
+/*
+ * Contact (contact = database[unique_contact_id])
+ */
+#define CONTACT_NOT_OPEN 0x0
+#define CONTACT_READ_ONLY 0x1
+#define CONTACT_READ_WRITE 0x2
+#define Contact_type ((PyTypeObject*)SPyGetGlobalString("ContactType"))
+struct Contact_object {
+  PyObject_VAR_HEAD
+  TInt mode;
+  TContactItemId uniqueID;
+  CContactItem* contactItem;
+  ContactsDb_object* contactsDb;
+};
+
+
+/*
+ * Contact iterator (for unique_contact_id in database:)
+ */
+#define ContactIterator_type ((PyTypeObject*)SPyGetGlobalString("ContactIteratorType"))
+struct ContactIterator_object { 
+  PyObject_VAR_HEAD
+  TContactIter* iterator;
+  bool initialized; 
+  ContactsDb_object* contactsDb;  
+};
+
+
+/*
+ * Field iterator (for field in contact:)
+ */
+#define FieldIterator_type ((PyTypeObject*)SPyGetGlobalString("FieldIteratorType"))
+struct FieldIterator_object {
+  PyObject_VAR_HEAD
+  Contact_object* contact;
+  bool initialized;
+  TInt iterationIndex;
+};
+
+
+//////////////MACRO DEFINITION///////////////
+
+
+#define ASSERT_CONTACTOPEN \
+  if (self->mode == CONTACT_NOT_OPEN){ \
+    PyErr_SetString(PyExc_RuntimeError, "contact not open"); \
+    return NULL; \
+  }
+
+#define ASSERT_CONTACT_READ_WRITE \
+  if (self->mode != CONTACT_READ_WRITE || \
+      self->contactsDb->contactDatabase == NULL) { \
+    PyErr_SetString(PyExc_RuntimeError, "contact not open for writing"); \
+    return NULL; \
+  }
+
+#define ASSERT_CONTACTOPEN_FI \
+  if (self->contact->mode == CONTACT_NOT_OPEN){\
+    PyErr_SetString(PyExc_RuntimeError, "contact not open"); \
+    return NULL; \
+  }
+
+
+//////////////METHODS///////////////
+
+
+/*
+ * Create new Contact object.
+ * - if (uniqueId == KNullContactId) completely new contact entry is created.
+ * Else only new (python) contact object is created (wrapper object to 
+ * existing contact entry that the uniqueId identifies).
+ */
+extern "C" PyObject *
+new_Contact_object(ContactsDb_object* self, TContactItemId uniqueId);
+
+
+/*
+ * Create new ContactsDb object.
+ */
+extern "C" PyObject *
+new_ContactsDb_object(CContactDatabase* contactDatabase);
+
+
+/*
+ * Deletes the CPbkContactItem inside the contact object.
+ */
+void Contact_delete_entry(Contact_object* self);