-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * 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.
- */
-/**
- * @file ContactWrapper.cpp
- * @author Lukasz Marek(l.marek@samsung.com)
- * @author Yujie Zeng(yj.zengk@samsung.com)
- * @version 0.1
- */
-
-#include <vector>
-#include <pcrecpp.h>
-#include <dpl/log/log.h>
-#include <Commons/Exception.h>
-#include "ContactWrapper.h"
-#include "AddressBook.h"
-
-namespace {
-// Custom Type Name
-const char* CONTACT_ATTRIBUTE_PHONETIC_NAME = "phoneticName";
-}
-
-namespace WrtDeviceApis {
-namespace Contact {
-
-using namespace Api;
-
-ContactWrapper::ContactWrapper(IAddressBookObject::BookType /*type*/) :
- m_abstractContact(NULL),
- m_platformContact(NULL)
-{
- LogDebug("entered");
- //platform layer seems to not support different storage types yet
- /*
- if ( type == IAddressBookObject::PhoneBook ) {
- }
- else if ( type == IAddressBookObject::SIMBook ) {
- }
- else {
- LogError("invalid storage type");
- }
- */
-}
-
-ContactWrapper::~ContactWrapper()
-{
- LogDebug("entered");
- freePlatformObject();
-}
-
-void ContactWrapper::freePlatformObject()
-{
- if (m_platformContact) {
- contacts_svc_struct_free(m_platformContact);
- m_platformContact = NULL;
- }
-}
-
-void ContactWrapper::freeAbstractObject()
-{
- m_abstractContact = ContactPtr(NULL);
-}
-
-Api::ContactPtr ContactWrapper::getAbstractContact() const
-{
- return m_abstractContact;
-}
-
-void ContactWrapper::setAbstractContact(const ContactPtr &contact)
-{
- m_abstractContact = contact;
- convertToPlatformObject();
-}
-
-CTSstruct* ContactWrapper::getPlatformContact() const
-{
- return m_platformContact;
-}
-
-void ContactWrapper::setPlatformContact(CTSstruct* contact)
-{
- freePlatformObject();
- m_platformContact = contact;
- convertToAbstractObject();
-}
-
-bool ContactWrapper::convertToPlatformObject()
-{
- LogDebug("entered");
- freePlatformObject();
- if (!m_abstractContact) {
- LogError("abstract object is not set");
- return false;
- }
- //if abstrat object has id set then we have to read existing object and update it
- if (m_abstractContact->getIdIsSet()) {
- LogDebug("reading existing contact");
- contacts_svc_get_contact(m_abstractContact->getId(), &m_platformContact);
- }
- //if no id is set then create new platform object
- else {
- LogDebug("creating new contact");
- m_platformContact = contacts_svc_struct_new(CTS_STRUCT_CONTACT);
- }
- if (!m_platformContact) {
- LogError("contact structure not created properly");
- return false;
- }
- try
- {
- //store name
- if (!convertToPlatformBaseData()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting base data");
- }
- //store address
- if (!convertToPlatformAddressObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting address object");
- }
- //store email
- if (!convertToPlatformEmailObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting email object");
- }
- //store phone
- if (!convertToPlatformPhoneObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting phone object");
- }
- //nickname
- if (!convertToPlatformNicknameObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting nickname object");
- }
- //phoneticName
- if (!convertToPlatformPhoneticnameObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting Phoneticname object");
- }
- //group
- if (!convertToPlatformGroupObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting group object");
- }
- }
- catch (const Commons::UnknownException &ex)
- {
- LogError(ex.GetMessage());
- freePlatformObject();
- return false;
- }
- return true;
-}
-
-bool ContactWrapper::convertToAbstractObject()
-{
- LogDebug("entered");
- freeAbstractObject();
- if (!m_platformContact) {
- return false;
- }
- CTSvalue *value = NULL;
- //store id
- 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));
- const char *charValue = contacts_svc_value_get_str(
- value,
- CTS_BASE_VAL_IMG_PATH_STR);
- if (charValue) {
- m_abstractContact->setPhotoUri(charValue);
- }
- charValue = contacts_svc_value_get_str(value,
- CTS_BASE_VAL_RINGTONE_PATH_STR);
- if (charValue) {
- m_abstractContact->setRingTonePath(charValue);
- }
- try
- {
- //store base information
- if (!convertToAbstractBaseData()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting base data");
- }
- //store address
- if (!convertToAbstractAddressObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting address object");
- }
- //store email
- if (!convertToAbstractEmailObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting email object");
- }
- //store phone
- if (!convertToAbstractPhoneObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting phone object");
- }
- //nickname
- if (!convertToAbstractNicknameObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting nickname object");
- }
- //phoneticName
- if (!convertToAbstractPhoneticnameObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting phoneticName object");
- }
- //group
- if (!convertToAbstractGroupObject()) {
- ThrowMsg(Commons::UnknownException,
- "error during converting group object");
- }
- }
- catch (const Commons::UnknownException &ex)
- {
- LogError(ex.GetMessage());
- freeAbstractObject();
- return false;
- }
- return true;
-}
-
-bool ContactWrapper::convertToAbstractBaseData()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- CTSvalue *value = NULL;
- int errorCode;
- const char *charValue = NULL;
- errorCode = contacts_svc_struct_get_value(m_platformContact,
- CTS_CF_NAME_VALUE,
- &value);
- if (CTS_SUCCESS == errorCode) {
- if (value) {
- charValue = contacts_svc_value_get_str(value,
- CTS_NAME_VAL_FIRST_STR);
- if (charValue) {
- m_abstractContact->setFirstName(charValue);
- }
- charValue = contacts_svc_value_get_str(value, CTS_NAME_VAL_LAST_STR);
- if (charValue) {
- m_abstractContact->setLastName(charValue);
- }
- charValue = contacts_svc_value_get_str(value,
- CTS_NAME_VAL_DISPLAY_STR);
- if (charValue) {
- m_abstractContact->setFullName(charValue);
- }
- charValue = contacts_svc_value_get_str(value,
- CTS_NAME_VAL_PREFIX_STR);
- if (charValue) {
- m_abstractContact->setTitle(charValue);
- }
- } else {
- return false;
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- value = NULL;
- errorCode = contacts_svc_struct_get_value(m_platformContact,
- CTS_CF_COMPANY_VALUE,
- &value);
- if (CTS_SUCCESS == errorCode) {
- if (value) {
- charValue = contacts_svc_value_get_str(value,
- CTS_COMPANY_VAL_NAME_STR);
- if (charValue) {
- m_abstractContact->setCompany(charValue);
- }
- } else {
- return false;
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- return true;
-}
-
-bool ContactWrapper::convertToAbstractAddressObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- GSList *addressList = NULL;
- const char *charValue = NULL;
- std::vector<ContactAddressPtr> addresses;
- int errorCode = contacts_svc_struct_get_list(m_platformContact,
- CTS_CF_POSTAL_ADDR_LIST,
- &addressList);
- if (CTS_SUCCESS == errorCode) {
- for (; addressList; addressList = g_slist_next(addressList)) {
- ContactAddressPtr address(new ContactAddress());
- addresses.push_back(address);
- int type = contacts_svc_value_get_int(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_TYPE_INT);
- //TODO "no enumeration for address type. Temporarly use email type"
- switch (type) {
- case CTS_ADDR_TYPE_NONE:
- address->addType(ContactAddress::CONTACT_ADDRESS_TYPE_PREF);
- break;
- case CTS_ADDR_TYPE_HOME:
- address->addType(ContactAddress::CONTACT_ADDRESS_TYPE_HOME);
- break;
- case CTS_ADDR_TYPE_WORK:
- address->addType(ContactAddress::CONTACT_ADDRESS_TYPE_WORK);
- break;
- default:
- LogError("invalid address type");
- address->addType(ContactAddress::CONTACT_ADDRESS_TYPE_PREF);
- break;
- }
- //TODO "no place to store: county, premises, additional information in platform struct"
- #if 0
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data), );
- if (charValue) {
- address->setCounty(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data), );
- if (charValue) {
- address->setPremises(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data), );
- if (charValue) {
- address->setAdditionalInformation(charValue);
- }
- #endif
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_COUNTRY_STR);
- if (charValue) {
- address->setCountry(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_REGION_STR);
- if (charValue) {
- address->setRegion(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_LOCALITY_STR);
- if (charValue) {
- address->setCity(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_STREET_STR);
- if (charValue) {
- address->setStreet(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_POBOX_STR);
- if (charValue) {
- address->setStreetNumber(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_POSTALCODE_STR);
- if (charValue) {
- address->setPostalCode(charValue);
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(addressList->data),
- CTS_POSTAL_VAL_EXTENDED_STR);
- if (charValue) {
- address->setAddress(charValue);
- }
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- m_abstractContact->setAddresses(addresses);
- return true;
-}
-
-bool ContactWrapper::convertToAbstractEmailObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- GSList *emailList = NULL;
- const char *charValue = NULL;
- std::vector<ContactEmailPtr> emails;
- int errorCode = contacts_svc_struct_get_list(m_platformContact,
- CTS_CF_EMAIL_LIST,
- &emailList);
- if (CTS_SUCCESS == errorCode) {
- for (; emailList; emailList = g_slist_next(emailList)) {
- ContactEmailPtr email(new ContactEmail());
- emails.push_back(email);
- int type = contacts_svc_value_get_int(
- static_cast<CTSvalue*>(emailList->data),
- CTS_EMAIL_VAL_TYPE_INT);
- switch (type) {
- case CTS_EMAIL_TYPE_NONE:
- email->addType(ContactEmail::CONTACT_EMAIL_TYPE_PREF);
- break;
- case CTS_EMAIL_TYPE_HOME:
- email->addType(ContactEmail::CONTACT_EMAIL_TYPE_HOME);
- break;
- case CTS_EMAIL_TYPE_WORK:
- email->addType(ContactEmail::CONTACT_EMAIL_TYPE_WORK);
- break;
- default:
- LogError("invalid phone type");
- email->addType(ContactEmail::CONTACT_EMAIL_TYPE_PREF);
- break;
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(emailList->data),
- CTS_EMAIL_VAL_ADDR_STR);
- if (charValue) {
- email->setEmail(charValue);
- }
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- m_abstractContact->setEmails(emails);
- return true;
-}
-
-bool ContactWrapper::convertToAbstractPhoneObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- GSList *phoneList = NULL;
- const char *charValue = NULL;
- std::vector<ContactPhoneNumberPtr> phoneNumbers;
- int errorCode = contacts_svc_struct_get_list(m_platformContact,
- CTS_CF_NUMBER_LIST,
- &phoneList);
- if (CTS_SUCCESS == errorCode) {
- for (; phoneList; phoneList = g_slist_next(phoneList)) {
- ContactPhoneNumberPtr phoneNumber(new ContactPhoneNumber());
- phoneNumbers.push_back(phoneNumber);
- int type = contacts_svc_value_get_int(
- static_cast<CTSvalue*>(phoneList->data),
- CTS_NUM_VAL_TYPE_INT);
- switch (type) {
- case CTS_NUM_TYPE_WORK:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_WORK);
- break;
- case CTS_NUM_TYPE_NONE:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_PREF);
- break;
- case CTS_NUM_TYPE_HOME:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_HOME);
- break;
- case CTS_NUM_TYPE_FAX:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_FAX);
- break;
- case CTS_NUM_TYPE_CELL:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_CELL);
- break;
- case CTS_NUM_TYPE_PAGER:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_PAGER);
- break;
- case CTS_NUM_TYPE_CAR:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_CAR);
- break;
- case CTS_NUM_TYPE_VOICE:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_VOICE);
- break;
- case CTS_NUM_TYPE_MSG:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_MSG);
- break;
- case CTS_NUM_TYPE_BBS:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_BBS);
- break;
- case CTS_NUM_TYPE_MODEM:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_MODEM);
- break;
- case CTS_NUM_TYPE_ISDN:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_ISDN);
- break;
- case CTS_NUM_TYPE_VIDEO:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_VIDEO);
- break;
- case CTS_NUM_TYPE_PCS:
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_PCS);
- break;
- default:
- LogError("invalid phone type");
- phoneNumber->addType(
- ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_PREF);
- break;
- }
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(phoneList->data),
- CTS_NUM_VAL_NUMBER_STR);
- if (charValue) {
- phoneNumber->setNumber(charValue);
- }
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- m_abstractContact->setPhoneNumbers(phoneNumbers);
- return true;
-}
-
-bool ContactWrapper::convertToAbstractNicknameObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- GSList *nicknNameList = NULL;
- const char *charValue = NULL;
- std::vector<std::string> nickNames;
- int errorCode = contacts_svc_struct_get_list(m_platformContact,
- CTS_CF_NICKNAME_LIST,
- &nicknNameList);
- if (CTS_SUCCESS == errorCode) {
- for (; nicknNameList; nicknNameList = g_slist_next(nicknNameList)) {
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(nicknNameList->data),
- CTS_NICKNAME_VAL_NAME_STR);
- if (charValue) {
- nickNames.push_back(charValue);
- }
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- m_abstractContact->setNickNames(nickNames);
- return true;
-}
-
-bool ContactWrapper::convertToAbstractPhoneticnameObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- CTSvalue *value = NULL;
- int errorCode;
- int structFieldType = 0;
- const char *charValue = NULL;
-
- structFieldType = getCustomTypeInContactsSvc(
- CONTACT_ATTRIBUTE_PHONETIC_NAME);
- if (structFieldType < CTS_SUCCESS) {
- LogError("Phonetic name struct type is not found!!");
- return false;
- }
-
- errorCode =
- contacts_svc_struct_get_value(m_platformContact,
- static_cast<cts_struct_field>(
- structFieldType), &value);
- if (CTS_SUCCESS == errorCode) {
- if (value) {
- charValue = contacts_svc_value_get_str(value,
- CTS_EXTEND_VAL_DATA2_STR);
- if (charValue) {
- m_abstractContact->setPhoneticName(charValue);
- }
- } else {
- return false;
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- return true;
-}
-
-bool ContactWrapper::convertToAbstractGroupObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- GSList *groupList = NULL;
- const char *charValue = NULL;
- std::vector<std::string> groups;
- int errorCode = contacts_svc_struct_get_list(m_platformContact,
- CTS_CF_GROUPREL_LIST,
- &groupList);
- if (CTS_SUCCESS == errorCode) {
- for (; groupList; groupList = g_slist_next(groupList)) {
- charValue = contacts_svc_value_get_str(
- static_cast<CTSvalue*>(groupList->data),
- CTS_GROUPREL_VAL_NAME_STR);
- if (charValue) {
- groups.push_back(charValue);
- }
- }
- } else if (CTS_ERR_NO_DATA != errorCode) {
- return false;
- }
- m_abstractContact->setGroups(groups);
- return true;
-}
-
-bool ContactWrapper::convertToPlatformNicknameObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- const std::vector<std::string> &nicknames =
- m_abstractContact->getNickNames();
-
- if (nicknames.size() == 0) {
- return true;
- }
-
- CTSvalue *nickname = NULL;
- bool properlyCreated = true;
- GSList *nicknameList = NULL;
- //mark existing items to delete them.
-
- if (CTS_SUCCESS ==
- contacts_svc_struct_get_list(m_platformContact, CTS_CF_NICKNAME_LIST,
- &nicknameList)) {
- GSList *nicknameListSave = nicknameList;
- for (; nicknameList; nicknameList = g_slist_next(nicknameList)) {
- CTSvalue* nickname = static_cast<CTSvalue*>(nicknameList->data);
- contacts_svc_value_set_bool(nickname,
- CTS_NICKNAME_VAL_DELETE_BOOL,
- true);
- }
- nicknameList = nicknameListSave;
- }
- //add new items
- for (std::size_t i = 0; i < nicknames.size(); ++i) {
- nickname = contacts_svc_value_new(CTS_VALUE_NICKNAME);
- if (nickname) {
- if (CTS_SUCCESS ==
- contacts_svc_value_set_str(nickname, CTS_NICKNAME_VAL_NAME_STR,
- nicknames[i].c_str())) {
- nicknameList = g_slist_append(nicknameList, nickname);
- } else {
- contacts_svc_value_free(nickname);
- properlyCreated = false;
- break;
- }
- } else {
- properlyCreated = false;
- break;
- }
- }
-
- if (properlyCreated) {
- if (CTS_SUCCESS !=
- contacts_svc_struct_store_list(m_platformContact,
- CTS_CF_NICKNAME_LIST,
- nicknameList)) {
- properlyCreated = false;
- }
- }
-
- return properlyCreated;
-}
-
-bool ContactWrapper::convertToPlatformPhoneticnameObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- CTSvalue *value = NULL;
- int structFieldType = 0;
-
- structFieldType = getCustomTypeInContactsSvc(
- CONTACT_ATTRIBUTE_PHONETIC_NAME);
- if (structFieldType < CTS_SUCCESS) {
- LogError("Phonetic name struct type is not found!!");
- return false;
- }
-
- /**
- *If phonetic name information is not existed, add phonetic name information
- *If phonetic name information is existed,update phonetic name information
- */
- if (CTS_SUCCESS !=
- contacts_svc_struct_get_value(m_platformContact,
- static_cast<cts_struct_field>(
- structFieldType), &value)) {
- value = contacts_svc_value_new(CTS_VALUE_EXTEND);
- if (!value) {
- return false;
- }
- }
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_EXTEND_VAL_DATA2_STR,
- m_abstractContact->getPhoneticName().c_str())
- ||
- CTS_SUCCESS !=
- contacts_svc_struct_store_value(m_platformContact,
- static_cast<cts_struct_field>(
- structFieldType), value)) {
- contacts_svc_value_free(value);
- return false;
- }
- contacts_svc_value_free(value);
-
- LogDebug("RETURN TRUE!!!");
- return true;
-}
-
-bool ContactWrapper::convertToPlatformGroupObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- const std::vector<std::string> &groups =
- m_abstractContact->getGroups();
- if (groups.size() == 0) {
- return true;
- }
- CTSvalue *group = NULL;
- bool properlyCreated = true;
- GSList *groupList = NULL;
- //mark existing items to delete them.
- if (CTS_SUCCESS ==
- contacts_svc_struct_get_list(m_platformContact, CTS_CF_GROUPREL_LIST,
- &groupList)) {
- GSList *groupListSave = groupList;
- for (; groupList; groupList = g_slist_next(groupList)) {
- LogDebug("clearing group list");
- CTSvalue* delgroup = static_cast<CTSvalue*>(groupList->data);
- contacts_svc_value_set_bool(delgroup,
- CTS_GROUPREL_VAL_DELETE_BOOL,
- true);
- }
- groupList = groupListSave;
- }
- //add new items
- for (std::size_t i = 0; i < groups.size(); ++i) {
- group = contacts_svc_value_new(CTS_VALUE_GROUP_RELATION);
- if (group) {
- int groupId = -1;
- //groupId = AddressBook::getGroupId(groups[i]);
-
- CTSiter *iter = NULL;
- if (CTS_SUCCESS ==
- contacts_svc_get_list(CTS_LIST_ALL_GROUP, &iter)) {
- while (CTS_SUCCESS == contacts_svc_iter_next(iter)) {
- CTSvalue *findgroup = contacts_svc_iter_get_info(iter);
- if (findgroup) {
- const char *foundGroupName = contacts_svc_value_get_str(
- findgroup,
- CTS_LIST_GROUP_NAME_STR);
- if (foundGroupName && groups[i] == foundGroupName) {
- groupId = contacts_svc_value_get_int(
- findgroup,
- CTS_LIST_GROUP_ID_INT);
- }
- }
- }
- contacts_svc_iter_remove(iter);
- }
- LogDebug("group id " << groupId);
- if (groupId != -1) {
- if (CTS_SUCCESS ==
- contacts_svc_value_set_int(group, CTS_GROUPREL_VAL_ID_INT,
- groupId)) {
- groupList = g_slist_append(groupList, group);
- } else {
- contacts_svc_value_free(group);
- properlyCreated = false;
- break;
- }
- } else {
- contacts_svc_value_free(group);
- properlyCreated = false;
- break;
- }
- } else {
- properlyCreated = false;
- break;
- }
- }
- if (properlyCreated) {
- LogDebug("storing group list");
- if (CTS_SUCCESS !=
- contacts_svc_struct_store_list(m_platformContact,
- CTS_CF_GROUPREL_LIST,
- groupList)) {
- properlyCreated = false;
- }
- }
- for (; groupList; groupList = g_slist_next(groupList)) {
- contacts_svc_value_free(static_cast<CTSvalue*>(groupList->data));
- }
- g_slist_free(groupList);
- return properlyCreated;
-}
-
-bool ContactWrapper::convertToPlatformPhoneObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- int type;
- const std::vector<ContactPhoneNumberPtr> &phoneNumbers =
- m_abstractContact->getPhoneNumbers();
- if (phoneNumbers.size() == 0) {
- return true;
- }
- bool properlyCreated = true;
- CTSvalue *number = NULL;
- GSList *numberList = NULL;
- //mark existing items to delete them.
- if (CTS_SUCCESS ==
- contacts_svc_struct_get_list(m_platformContact, CTS_CF_NUMBER_LIST,
- &numberList)) {
- GSList *numberListSave = numberList;
- for (; numberList; numberList = g_slist_next(numberList)) {
- LogDebug("clearing phone list");
- CTSvalue* number = static_cast<CTSvalue*>(numberList->data);
- contacts_svc_value_set_bool(number, CTS_NUM_VAL_DELETE_BOOL, true);
- }
- numberList = numberListSave;
- }
- //add new items
- for (std::size_t i = 0; i < phoneNumbers.size(); ++i) {
- std::vector<ContactPhoneNumber::ContactPhoneNumberType> types =
- phoneNumbers[i]->getTypes();
- for (std::size_t j = 0; j < types.size(); ++j)
- {
- number = contacts_svc_value_new(CTS_VALUE_NUMBER);
- if (number) {
- if(types.size() > 0)
- {
- switch (types[j]) {
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_WORK:
- type = CTS_NUM_TYPE_WORK;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_PREF:
- type = CTS_NUM_TYPE_NONE;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_HOME:
- type = CTS_NUM_TYPE_HOME;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_FAX:
- type = CTS_NUM_TYPE_FAX;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_CELL:
- type = CTS_NUM_TYPE_CELL;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_PAGER:
- type = CTS_NUM_TYPE_PAGER;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_CAR:
- type = CTS_NUM_TYPE_CAR;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_BBS:
- type = CTS_NUM_TYPE_BBS;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_MODEM:
- type = CTS_NUM_TYPE_MODEM;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_ISDN:
- type = CTS_NUM_TYPE_ISDN;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_VIDEO:
- type = CTS_NUM_TYPE_VIDEO;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_PCS:
- type = CTS_NUM_TYPE_PCS;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_VOICE:
- type = CTS_NUM_TYPE_VOICE;
- break;
- case ContactPhoneNumber::CONTACT_PHONE_NUMBER_TYPE_MSG:
- type = CTS_NUM_TYPE_MSG;
- break;
- default:
- LogError("invalid phone type");
- type = CTS_NUM_TYPE_NONE;
- break;
- }
- }
- else
- {
- type = CTS_NUM_TYPE_NONE;
- }
- if (CTS_SUCCESS ==
- contacts_svc_value_set_str(number, CTS_NUM_VAL_NUMBER_STR,
- phoneNumbers[i]->getNumber().
- c_str()) &&
- CTS_SUCCESS ==
- contacts_svc_value_set_bool(number,
- CTS_NUM_VAL_DEFAULT_BOOL,
- type == CTS_NUM_TYPE_NONE) &&
- CTS_SUCCESS ==
- contacts_svc_value_set_int(number, CTS_NUM_VAL_TYPE_INT,
- type)) {
- numberList = g_slist_append(numberList, number);
- } else {
- contacts_svc_value_free(number);
- properlyCreated = false;
- break;
- }
- } else {
- properlyCreated = false;
- break;
- }
- }
- if (!properlyCreated) {
- break;
- }
- }
- if (properlyCreated) {
- if (CTS_SUCCESS !=
- contacts_svc_struct_store_list(m_platformContact,
- CTS_CF_NUMBER_LIST,
- numberList)) {
- properlyCreated = false;
- }
- }
- for (; numberList; numberList = g_slist_next(numberList)) {
- contacts_svc_value_free(static_cast<CTSvalue*>(numberList->data));
- }
- g_slist_free(numberList);
- return properlyCreated;
-}
-
-bool ContactWrapper::convertToPlatformEmailObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- int type;
- const std::vector<ContactEmailPtr> &emails =
- m_abstractContact->getEmails();
- if (emails.size() == 0) {
- return true;
- }
- CTSvalue *email = NULL;
- bool properlyCreated = true;
- GSList *emailList = NULL;
- //mark existing items to delete them.
- if (CTS_SUCCESS ==
- contacts_svc_struct_get_list(m_platformContact, CTS_CF_EMAIL_LIST,
- &emailList)) {
- GSList *emailListSave = emailList;
- for (; emailList; emailList = g_slist_next(emailList)) {
- LogDebug("clearing email list");
- CTSvalue* email = static_cast<CTSvalue*>(emailList->data);
- contacts_svc_value_set_bool(email, CTS_EMAIL_VAL_DELETE_BOOL, true);
- }
- emailList = emailListSave;
- }
- //add new items
- for (std::size_t i = 0; i < emails.size(); ++i) {
- std::vector<ContactEmail::ContactEmailType> types =
- emails[i]->getTypes();
- for (std::size_t j = 0; j < types.size(); ++j)
- {
- email = contacts_svc_value_new(CTS_VALUE_EMAIL);
- if(email)
- {
- if(types.size() > 0)
- {
- switch (types[j]) {
- case ContactEmail::CONTACT_EMAIL_TYPE_HOME:
- type = CTS_EMAIL_TYPE_HOME;
- break;
- case ContactEmail::CONTACT_EMAIL_TYPE_WORK:
- type = CTS_EMAIL_TYPE_WORK;
- break;
- case ContactEmail::CONTACT_EMAIL_TYPE_PREF:
- type = CTS_EMAIL_TYPE_NONE;
- break;
- default:
- LogError("invalid phone type");
- type = CTS_EMAIL_TYPE_NONE;
- break;
- }
- }
- else
- {
- type = CTS_EMAIL_TYPE_NONE;
- }
- if (CTS_SUCCESS ==
- contacts_svc_value_set_int(email, CTS_EMAIL_VAL_TYPE_INT,
- type) &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(email, CTS_EMAIL_VAL_ADDR_STR,
- emails[i]->getEmail().c_str()))
- {
- emailList = g_slist_append(emailList, email);
- } else {
- contacts_svc_value_free(email);
- properlyCreated = false;
- break;
- }
- }
- else
- {
- properlyCreated = false;
- break;
- }
- }
-
- if (!properlyCreated) {
- break;
- }
- }
- if (properlyCreated) {
- if (CTS_SUCCESS !=
- contacts_svc_struct_store_list(m_platformContact, CTS_CF_EMAIL_LIST,
- emailList)) {
- properlyCreated = false;
- }
- }
- for (; emailList; emailList = g_slist_next(emailList)) {
- contacts_svc_value_free(static_cast<CTSvalue*>(emailList->data));
- }
- g_slist_free(emailList);
- return properlyCreated;
-}
-
-bool ContactWrapper::convertToPlatformAddressObject()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- int type;
- const std::vector<ContactAddressPtr> &addresses =
- m_abstractContact->getAddresses();
- if (addresses.size() == 0) {
- return true;
- }
- CTSvalue *address = NULL;
- bool properlyCreated = true;
- GSList *addressList = NULL;
- //mark existing items to delete them.
- if (CTS_SUCCESS ==
- contacts_svc_struct_get_list(m_platformContact, CTS_CF_POSTAL_ADDR_LIST,
- &addressList)) {
- GSList *addressListSave = addressList;
- for (; addressList; addressList = g_slist_next(addressList)) {
- LogDebug("clearing address list");
- CTSvalue* address = static_cast<CTSvalue*>(addressList->data);
- contacts_svc_value_set_bool(address,
- CTS_POSTAL_VAL_DELETE_BOOL,
- true);
- }
- addressList = addressListSave;
- }
- //add new items
- for (std::size_t i = 0; i < addresses.size(); ++i) {
- std::vector<ContactAddress::ContactAddressType> types =
- addresses[i]->getTypes();
- for (std::size_t j = 0; j < types.size(); ++j) {
- address = contacts_svc_value_new(CTS_VALUE_POSTAL);
- if (address) {
- //TODO "no place to store: county, premises, additional information in platform struct"
- switch (types[j]) {
- case ContactAddress::CONTACT_ADDRESS_TYPE_PREF:
- type = CTS_ADDR_TYPE_NONE;
- break;
- case ContactAddress::CONTACT_ADDRESS_TYPE_WORK:
- type = CTS_ADDR_TYPE_WORK;
- break;
- case ContactAddress::CONTACT_ADDRESS_TYPE_HOME:
- type = CTS_ADDR_TYPE_HOME;
- break;
- default:
- LogError("invalid address type");
- type = CTS_EMAIL_TYPE_NONE;
- break;
- }
- //CTS_SUCCESS == contacts_svc_value_set_str(address, , addresses[i]->getCounty().c_str()) &&
- //CTS_SUCCESS == contacts_svc_value_set_str(address, , addresses[i]->getPremises().c_str()) &&
- //CTS_SUCCESS == contacts_svc_value_set_str(address, , addresses[i]->getAdditionalInformation().c_str()) &&
- if (CTS_SUCCESS ==
- contacts_svc_value_set_int(address, CTS_POSTAL_VAL_TYPE_INT,
- type) &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(address,
- CTS_POSTAL_VAL_COUNTRY_STR,
- addresses[i]->getCountry().c_str())
- &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(address,
- CTS_POSTAL_VAL_REGION_STR,
- addresses[i]->getRegion().c_str())
- &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(address,
- CTS_POSTAL_VAL_LOCALITY_STR,
- addresses[i]->getCity().c_str())
- &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(address,
- CTS_POSTAL_VAL_STREET_STR,
- addresses[i]->getStreet().c_str())
- &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(address,
- CTS_POSTAL_VAL_POBOX_STR,
- addresses[i]->getStreetNumber().
- c_str()) &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(address,
- CTS_POSTAL_VAL_POSTALCODE_STR,
- addresses[i]->getPostalCode().
- c_str()) &&
- CTS_SUCCESS ==
- contacts_svc_value_set_str(address,
- CTS_POSTAL_VAL_EXTENDED_STR,
- addresses[i]->
- getAdditionalInformation().
- c_str())) {
- addressList = g_slist_append(addressList, address);
- } else {
- contacts_svc_value_free(address);
- properlyCreated = false;
- break;
- }
- } else {
- properlyCreated = false;
- break;
- }
- }
- if (!properlyCreated) {
- break;
- }
- }
- if (properlyCreated) {
- if (CTS_SUCCESS !=
- contacts_svc_struct_store_list(m_platformContact,
- CTS_CF_POSTAL_ADDR_LIST,
- addressList)) {
- properlyCreated = false;
- }
- }
- for (; addressList; addressList = g_slist_next(addressList)) {
- contacts_svc_value_free(static_cast<CTSvalue*>(addressList->data));
- }
- g_slist_free(addressList);
- return properlyCreated;
-}
-
-bool ContactWrapper::convertToPlatformBaseData()
-{
- LogDebug("entered");
- if (NULL == m_abstractContact) {
- LogError("you should create empty abstract contact object first");
- return false;
- }
-
- if (NULL == m_platformContact) {
- LogError("you should provide platform contact object first");
- return false;
- }
-
- /**
- *If name information is not existed, add name information
- * If name information is existed,update name information
- */
- CTSvalue *value = NULL;
-
- if (CTS_SUCCESS !=
- contacts_svc_struct_get_value(m_platformContact, CTS_CF_NAME_VALUE,
- &value)) {
- CTSvalue *value = contacts_svc_value_new(CTS_VALUE_NAME);
- if (value) {
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_FIRST_STR,
- m_abstractContact->getFirstName().
- c_str()) ||
- CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_LAST_STR,
- m_abstractContact->getLastName().
- c_str()) ||
- CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_DISPLAY_STR,
- m_abstractContact->getFullName().
- c_str()) ||
- CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_PREFIX_STR,
- m_abstractContact->getTitle().c_str())
- ||
- CTS_SUCCESS !=
- contacts_svc_struct_store_value(m_platformContact,
- CTS_CF_NAME_VALUE, value)) {
- contacts_svc_value_free(value);
- return false;
- }
- contacts_svc_value_free(value);
- } else {
- return false;
- }
- } else {
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_FIRST_STR,
- m_abstractContact->getFirstName().c_str())
- ||
- CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_LAST_STR,
- m_abstractContact->getLastName().c_str())
- ||
- CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_DISPLAY_STR,
- m_abstractContact->getFullName().c_str())
- ||
- CTS_SUCCESS !=
- contacts_svc_value_set_str(value, CTS_NAME_VAL_PREFIX_STR,
- m_abstractContact->getTitle().c_str()))
- {
- contacts_svc_value_free(value);
- return false;
- }
- contacts_svc_value_free(value);
- }
-
- /**
- *If photo and ringtone uri information is not existed, add the information
- * If photo and ringtone uri is existed,update the information
- */
- CTSvalue *baseinfo = NULL;
- if (CTS_SUCCESS !=
- contacts_svc_struct_get_value(m_platformContact, CTS_CF_BASE_INFO_VALUE,
- &baseinfo)) {
- baseinfo = contacts_svc_value_new(CTS_VALUE_CONTACT_BASE_INFO);
- if (baseinfo) {
- if (m_abstractContact->getPhotoIsSet()) {
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(baseinfo,
- CTS_BASE_VAL_IMG_PATH_STR,
- m_abstractContact->getPhotoUri()
- .c_str())) {
- contacts_svc_value_free(baseinfo);
- return false;
- }
- }
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(baseinfo,
- CTS_BASE_VAL_RINGTONE_PATH_STR,
- m_abstractContact->getRingTonePath()
- .c_str()) ||
- CTS_SUCCESS !=
- contacts_svc_struct_store_value(m_platformContact,
- CTS_CF_BASE_INFO_VALUE,
- baseinfo)) {
- contacts_svc_value_free(baseinfo);
- return false;
- }
-
- contacts_svc_value_free(baseinfo);
- } else {
- return false;
- }
- } else {
- const char * oldimgpath = NULL;
- oldimgpath = contacts_svc_value_get_str(baseinfo,
- CTS_BASE_VAL_IMG_PATH_STR);
-
- std::string stroldimgpath = "";
- if (NULL != oldimgpath) {
- stroldimgpath = static_cast<std::string>(oldimgpath);
- }
-
- std::string strnewimgpath = m_abstractContact->getPhotoUri();
- if (stroldimgpath != strnewimgpath) {
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_IMG_PATH_STR,
- strnewimgpath.c_str())) {
- contacts_svc_value_free(value);
- return false;
- }
- }
-
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(baseinfo, CTS_BASE_VAL_RINGTONE_PATH_STR,
- m_abstractContact->getRingTonePath().
- c_str())) {
- return false;
- }
- contacts_svc_value_free(value);
- }
-
- //save company information
- CTSvalue *company = NULL;
- company = contacts_svc_value_new(CTS_VALUE_COMPANY);
- if (company) {
- if (CTS_SUCCESS !=
- contacts_svc_value_set_str(company, CTS_COMPANY_VAL_NAME_STR,
- m_abstractContact->getCompany().c_str())
- ||
- CTS_SUCCESS !=
- contacts_svc_struct_store_value(m_platformContact,
- CTS_CF_COMPANY_VALUE,
- company)) {
- contacts_svc_value_free(company);
- return false;
- }
- contacts_svc_value_free(value);
- } else {
- return false;
- }
-
- return true;
-}
-
-int ContactWrapper::getCustomTypeInContactsSvc(const std::string &typeName)
-const
-{
- int structFieldType = -1;
-
- LogDebug("typeName : " << typeName);
- structFieldType = contacts_svc_find_custom_type(CTS_TYPE_CLASS_EXTEND_DATA,
- const_cast<char*>(typeName.
- c_str()));
- if (CTS_ERR_DB_RECORD_NOT_FOUND == structFieldType) {
- LogDebug("CTS_ERR_DB_RECORD_NOT_FOUND!!");
- structFieldType = contacts_svc_insert_custom_type(
- CTS_TYPE_CLASS_EXTEND_DATA,
- const_cast<char*>(typeName.c_str()));
- if (CTS_SUCCESS > structFieldType) {
- LogDebug("Create fail");
- }
- } else if (CTS_SUCCESS > structFieldType) {
- LogDebug("contacts_svc_find_custom_type is fail");
- }
-
- LogDebug("structFieldType : " << structFieldType);
- return structFieldType;
-}
-
-void ContactWrapper::printPlatformObject()
-{
- LogDebug("entered");
-}
-
-void ContactWrapper::printAbstractObject()
-{
- LogDebug("entered");
-}
-}
-}