upload tizen1.0 source
[profile/ivi/wrt-plugins-tizen.git] / src / platform / Tizen / Contact / ContactWrapper.cpp
index 9487a62..7023781 100755 (executable)
@@ -47,21 +47,10 @@ using namespace std;
 
 ContactWrapper::ContactWrapper(IAddressBook::AddressBookType type) :
                m_abstractContact(NULL),
-               m_platformContact(NULL)
+               m_platformContact(NULL),
+               m_platformContactOwnership(false)
 {
        //platform layer seems to not support different storage types yet
-       /*
-       if ( type == IAddressBook::PhoneBook )
-       {
-       }
-       else if ( type == IAddressBook::SIMBook )
-       {
-       }
-       else
-       {
-               LogError("invalid storage type");
-       }
-       */
 }
 
 ContactWrapper::~ContactWrapper()
@@ -71,10 +60,11 @@ ContactWrapper::~ContactWrapper()
 
 void ContactWrapper::freePlatformObject()
 {
-       if (m_platformContact)
+       if (m_platformContact && m_platformContactOwnership)
        {
                contacts_svc_struct_free(m_platformContact);
                m_platformContact = NULL;
+               m_platformContactOwnership = false;
        }
 }
 
@@ -99,11 +89,38 @@ CTSstruct* ContactWrapper::getPlatformContact() const
        return m_platformContact;
 }
 
-void ContactWrapper::setPlatformContact(CTSstruct* contact)
+void ContactWrapper::setPlatformContact(CTSstruct* contact, bool isConvertingVCard)
 {
        freePlatformObject();
+       freeAbstractObject();
+
        m_platformContact = contact;
-       convertToAbstractObject();
+       m_platformContactOwnership = false;
+       convertToAbstractObject(isConvertingVCard);
+}
+
+bool ContactWrapper::convertAbstractToPlatform(const ContactPtr &abstract, CTSstruct* platform, bool isConvertingVCard)
+{
+       freePlatformObject();
+       freeAbstractObject();
+
+       m_abstractContact = abstract;
+       m_platformContact = platform;
+       m_platformContactOwnership = false;
+
+       return convertToPlatformObject(isConvertingVCard);
+}
+
+bool ContactWrapper::convertPlatformToAbstract(CTSstruct* platform, ContactPtr &abstract, bool isConvertingVCard)
+{
+       freeAbstractObject();
+       freePlatformObject();
+
+       m_platformContact = platform;
+       m_platformContactOwnership = false;
+       m_abstractContact = abstract;
+
+       return convertToAbstractObject(isConvertingVCard);
 }
 
 bool ContactWrapper::convertToPlatformObject(bool isConvertingVCard)
@@ -128,6 +145,7 @@ bool ContactWrapper::convertToPlatformObject(bool isConvertingVCard)
        {
                LogDebug("creating new contact");
                m_platformContact = contacts_svc_struct_new(CTS_STRUCT_CONTACT);
+               m_platformContactOwnership = true;
        }
 
        if (!m_platformContact)
@@ -183,12 +201,10 @@ bool ContactWrapper::convertToPlatformObject(bool isConvertingVCard)
        return true;
 }
 
-bool ContactWrapper::convertToAbstractObject()
+bool ContactWrapper::convertToAbstractObject(bool isConvertingVCard)
 {
        LogDebug("entered");
 
-       freeAbstractObject();
-
        if (!m_platformContact)
                return false;
 
@@ -197,8 +213,11 @@ bool ContactWrapper::convertToAbstractObject()
        if (CTS_SUCCESS != contacts_svc_struct_get_value(m_platformContact, CTS_CF_BASE_INFO_VALUE, &value))
                return false;
 
-       m_abstractContact = ContactPtr(new Contact());
-       m_abstractContact->setId(contacts_svc_value_get_int(value, CTS_BASE_VAL_ID_INT));
+       if(m_abstractContact == NULL)
+               m_abstractContact = ContactPtr(new Contact());
+
+       if(!isConvertingVCard)
+               m_abstractContact->setId(contacts_svc_value_get_int(value, CTS_BASE_VAL_ID_INT));
 
        const char *charValue;