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()
void ContactWrapper::freePlatformObject()
{
- if (m_platformContact)
+ if (m_platformContact && m_platformContactOwnership)
{
contacts_svc_struct_free(m_platformContact);
m_platformContact = NULL;
+ m_platformContactOwnership = false;
}
}
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)
{
LogDebug("creating new contact");
m_platformContact = contacts_svc_struct_new(CTS_STRUCT_CONTACT);
+ m_platformContactOwnership = true;
}
if (!m_platformContact)
return true;
}
-bool ContactWrapper::convertToAbstractObject()
+bool ContactWrapper::convertToAbstractObject(bool isConvertingVCard)
{
LogDebug("entered");
- freeAbstractObject();
-
if (!m_platformContact)
return false;
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;