2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 * @file ContactObjectP2AConverter.cpp
18 * @author Kisub Song (kisubs.song@samsung.com)
20 * @brief Converter (CTSstruct* -> TizenApis::Api::Contact::ContactPtr)
23 #include "ContactObjectP2AConverter.h"
27 #include <dpl/log/log.h>
28 #include <Commons/Exception.h>
29 #include <Commons/Regex.h>
30 #include "AddressBook.h"
32 #include "ContactUtility.h"
33 #include "query-svc/query-service.h"
39 using namespace TizenApis::Api::Contact;
40 using namespace WrtDeviceApis::Commons;
43 ContactObjectP2AConverter::ContactObjectP2AConverter(CTSstruct* platformContact,
45 m_platformContact(platformContact),
46 m_abstractContact(ContactPtr(NULL)),
47 m_forScratch(forScratch),
48 m_convertFinished(false)
52 ContactObjectP2AConverter::ContactObjectP2AConverter(CTSstruct* platformContact,
54 ContactPtr &abstractContact) :
55 m_platformContact(platformContact),
56 m_abstractContact(abstractContact),
57 m_forScratch(forScratch),
58 m_convertFinished(false)
62 ContactObjectP2AConverter::~ContactObjectP2AConverter()
66 ContactPtr ContactObjectP2AConverter::getAbstractContact()
70 if(m_platformContact == NULL)
72 LogError("Platform contact object did not set");
73 ThrowMsg(InvalidArgumentException, "Platform contact object did not set");
76 if(m_abstractContact == NULL)
78 LogDebug("Abstract contact object did not set, so a new object has been created");
79 m_abstractContact = ContactPtr(new Contact());
82 LogDebug("for scratch : " << m_forScratch);
86 if(m_convertFinished == false)
87 convertToAbstractObject();
91 LogError("Error while converting - " << _rethrown_exception.GetMessage());
92 ThrowMsg(PlatformException, "Fail to convert platform object to abstract object.");
95 return m_abstractContact;
98 void ContactObjectP2AConverter::convertToAbstractObject()
100 exportBaseInfoValue();
102 exportCompanyValue();
103 // exportNoteValue();
106 exportGrouprelList();
110 exportNicknameList();
112 m_convertFinished = true;
115 void ContactObjectP2AConverter::exportBaseInfoValue()
118 CTSvalue *ctsValue = NULL;
120 errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_BASE_INFO_VALUE, &ctsValue);
121 if (errorCode != CTS_SUCCESS)
122 ThrowMsg(UnknownException, "getting base info value (err:" << errorCode << ")");
126 int id = contacts_svc_value_get_int(ctsValue, CTS_BASE_VAL_ID_INT);
127 m_abstractContact->setId(id);
129 int addressBookId = contacts_svc_value_get_int(ctsValue, CTS_BASE_VAL_ADDRESSBOOK_ID_INT);
130 m_abstractContact->setAddressBookId(addressBookId);
132 time_t changedTime = (time_t)contacts_svc_value_get_int(ctsValue, CTS_BASE_VAL_CHANGED_TIME_INT);
133 struct tm *changedTimeTm = gmtime(&changedTime);
134 m_abstractContact->setLastUpdated(*changedTimeTm);
137 const char *charValue = NULL;
139 charValue = contacts_svc_value_get_str(ctsValue, CTS_BASE_VAL_IMG_PATH_STR);
141 m_abstractContact->setPhotoURI(ContactUtility::convertPathToUri(charValue));
144 if(m_abstractContact->getPhotoURIIsSet())
145 m_abstractContact->unsetPhotoURI();
148 charValue = contacts_svc_value_get_str(ctsValue, CTS_BASE_VAL_RINGTONE_PATH_STR);
150 m_abstractContact->setRingtoneURI(ContactUtility::convertPathToUri(charValue));
153 if(m_abstractContact->getRingtoneURIIsSet())
154 m_abstractContact->unsetRingtoneURI();
157 charValue = contacts_svc_value_get_str(ctsValue, CTS_BASE_VAL_NOTE_STR);
159 m_abstractContact->setNote(charValue);
162 if(m_abstractContact->getNoteIsSet())
163 m_abstractContact->unsetNote();
167 void ContactObjectP2AConverter::exportNameValue()
170 CTSvalue *ctsValue = NULL;
172 errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_NAME_VALUE, &ctsValue);
173 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
174 ThrowMsg(UnknownException, "getting name value (err:" << errorCode << ")");
176 if(ctsValue == NULL || errorCode == CTS_ERR_NO_DATA)
178 //LogDebug("Platform contact don't have name value");
179 ContactNamePtr contactName = m_abstractContact->getName();
180 if(contactName != NULL)
182 if(contactName->getFirstNameIsSet())
183 contactName->unsetFirstName();
185 if(contactName->getMiddleNameIsSet())
186 contactName->unsetMiddleName();
188 if(contactName->getLastNameIsSet())
189 contactName->unsetLastName();
191 if(contactName->getPrefixIsSet())
192 contactName->unsetPrefix();
194 if(contactName->getPhoneticFirstNameIsSet())
195 contactName->unsetPhoneticFirstName();
197 if(contactName->getPhoneticLastNameIsSet())
198 contactName->unsetPhoneticLastName();
200 if(contactName->getDisplayNameIsSet())
201 contactName->unsetDisplayName();
206 ContactNamePtr contactName = m_abstractContact->getName();
207 if(contactName == NULL)
209 contactName = ContactNamePtr(new ContactName());
210 m_abstractContact->setName(contactName);
213 const char *charValue = NULL;
215 charValue = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_FIRST_STR);
217 contactName->setFirstName(charValue);
220 if(contactName->getFirstNameIsSet())
221 contactName->unsetFirstName();
224 charValue = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_ADDITION_STR);
226 contactName->setMiddleName(charValue);
229 if(contactName->getMiddleNameIsSet())
230 contactName->unsetMiddleName();
233 charValue = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_LAST_STR);
235 contactName->setLastName(charValue);
238 if(contactName->getLastNameIsSet())
239 contactName->unsetLastName();
242 charValue = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_PREFIX_STR);
244 contactName->setPrefix(charValue);
247 if(contactName->getPrefixIsSet())
248 contactName->unsetPrefix();
251 charValue = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_DISPLAY_STR);
253 contactName->setDisplayName(charValue);
256 if(contactName->getDisplayNameIsSet())
257 contactName->unsetDisplayName();
260 // charValue = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_PHONETIC_NAME_STR);
262 // contactName->setPhoneticFirstName(charValue);
265 // if(contactName->getPhoneticFirstNameIsSet())
266 // contactName->unsetPhoneticFirstName();
269 // charValue = contacts_svc_value_get_str(ctsValue, CTS_NAME_VAL_PHONETIC_LAST_STR);
271 // contactName->setPhoneticLastName(charValue);
274 // if(contactName->getPhoneticLastNameIsSet())
275 // contactName->unsetPhoneticLastName();
280 void ContactObjectP2AConverter::exportCompanyValue()
283 CTSvalue *ctsValue = NULL;
285 errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_COMPANY_VALUE, &ctsValue);
286 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
287 ThrowMsg(UnknownException, "getting company value (err:" << errorCode << ")");
289 if(ctsValue == NULL || errorCode == CTS_ERR_NO_DATA)
291 //LogDebug("Platform contact don't have company value");
292 if(m_abstractContact->getOrganization() != NULL)
293 m_abstractContact->unsetOrganization();
298 ContactOrganizationPtr organization = m_abstractContact->getOrganization();
299 if(organization == NULL)
301 organization = ContactOrganizationPtr(new ContactOrganization());
302 m_abstractContact->setOrganization(organization);
305 const char *charValue = NULL;
307 charValue = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_NAME_STR);
309 organization->setName(charValue);
312 if(organization->getNameIsSet())
313 organization->unsetName();
316 charValue = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_DEPARTMENT_STR);
318 organization->setDepartment(charValue);
321 if(organization->getDepartmentIsSet())
322 organization->unsetDepartment();
325 charValue = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_JOB_TITLE_STR);
327 organization->setTitle(charValue);
330 if(organization->getTitleIsSet())
331 organization->unsetTitle();
334 charValue = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_ROLE_STR);
336 organization->setRole(charValue);
339 if(organization->getRoleIsSet())
340 organization->unsetRole();
343 // charValue = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_LOGOURI_STR);
345 // organization->setLogoURI(charValue);
348 // if(organization->getLogoURIIsSet())
349 // organization->unsetLogoURI();
351 if(organization->getLogoURIIsSet())
352 organization->unsetLogoURI();
355 //void ContactObjectP2AConverter::exportNoteValue()
357 // int errorCode = 0;
358 // CTSvalue *ctsValue = NULL;
360 // errorCode = contacts_svc_struct_get_value(m_platformContact, CTS_CF_NOTE_VALUE, &ctsValue);
361 // if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
362 // ThrowMsg(UnknownException, "getting note value : (err:" << errorCode << ")");
364 // if(ctsValue == NULL || errorCode == CTS_ERR_NO_DATA)
366 // //LogDebug("Platform contact don't have note value");
367 // if(m_abstractContact->getNoteIsSet())
368 // m_abstractContact->unsetNote();
373 // bool boolValue = false;
374 // const char *charValue = NULL;
376 // boolValue = contacts_svc_value_get_bool(ctsValue, CTS_NOTE_VAL_DELETE_BOOL);
377 // charValue = contacts_svc_value_get_str(ctsValue, CTS_COMPANY_VAL_NAME_STR);
378 // if (charValue && boolValue != false)
379 // m_abstractContact->setNote(charValue);
382 // if(m_abstractContact->getNoteIsSet())
383 // m_abstractContact->unsetNote();
387 void ContactObjectP2AConverter::exportNumberList()
390 GSList *numberList = NULL;
392 if(m_abstractContact->getPhoneNumbersNum() > 0)
393 m_abstractContact->clearPhoneNumbers();
395 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_NUMBER_LIST, &numberList);
396 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
397 ThrowMsg(UnknownException, "getting number list (err:" << errorCode << ")");
399 if(numberList == NULL || errorCode == CTS_ERR_NO_DATA)
401 //LogDebug("Platform contact don't have number list");
405 ContactPhoneNumberArrayPtr phoneNumbers = m_abstractContact->getPhoneNumbers();
407 for (; numberList; numberList = g_slist_next(numberList))
409 ContactPhoneNumberPtr phoneNumber(new ContactPhoneNumber());
411 const char *charValue = NULL;
412 bool boolValue = false;
415 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(numberList->data), CTS_NUM_VAL_DELETE_BOOL);
418 //LogDebug("Platform contact have a phone number to be deleted");
422 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(numberList->data), CTS_NUM_VAL_NUMBER_STR);
425 phoneNumber->setNumber(charValue);
426 phoneNumbers->push_back(phoneNumber);
430 //LogDebug("Platform contact have a empty phone number");
434 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(numberList->data), CTS_NUM_VAL_DEFAULT_BOOL);
436 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_PREF);
438 intValue = contacts_svc_value_get_int(static_cast<CTSvalue*>(numberList->data), CTS_NUM_VAL_TYPE_INT);
439 if(intValue & CTS_NUM_TYPE_HOME)
440 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_HOME);
441 if(intValue & CTS_NUM_TYPE_WORK)
442 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_WORK);
443 if(intValue & CTS_NUM_TYPE_VOICE)
444 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_VOICE);
445 if(intValue & CTS_NUM_TYPE_FAX)
446 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_FAX);
447 if(intValue & CTS_NUM_TYPE_MSG)
448 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_MSG);
449 if(intValue & CTS_NUM_TYPE_CELL)
450 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_CELL);
451 if(intValue & CTS_NUM_TYPE_PAGER)
452 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_PAGER);
453 if(intValue & CTS_NUM_TYPE_BBS)
454 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_BBS);
455 if(intValue & CTS_NUM_TYPE_MODEM)
456 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_MODEM);
457 if(intValue & CTS_NUM_TYPE_CAR)
458 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_CAR);
459 if(intValue & CTS_NUM_TYPE_ISDN)
460 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_ISDN);
461 if(intValue & CTS_NUM_TYPE_VIDEO)
462 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_VIDEO);
463 if(intValue & CTS_NUM_TYPE_PCS)
464 phoneNumber->addType(CONTACT_PHONE_NUMBER_TYPE_PCS);
466 // TODO Will be added after type changed to string
467 // if(intValue & CTS_NUM_TYPE_CUSTOM)
469 // charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(numberList->data), CTS_NUMBER_VAL_LABEL_STR);
471 // phoneNumber->addType(CUSTOM);
476 void ContactObjectP2AConverter::exportEmailList()
479 GSList *emailList = NULL;
481 if(m_abstractContact->getEmailsNum() > 0)
482 m_abstractContact->clearEmails();
484 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_EMAIL_LIST, &emailList);
485 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
486 ThrowMsg(UnknownException, "getting email list (err:" << errorCode << ")");
488 if(emailList == NULL || errorCode == CTS_ERR_NO_DATA)
490 //LogDebug("Platform contact don't have email list");
494 ContactEmailAddressArrayPtr emails = m_abstractContact->getEmails();
496 for (; emailList; emailList = g_slist_next(emailList))
498 ContactEmailAddressPtr email(new ContactEmailAddress());
500 const char *charValue = NULL;
501 bool boolValue = false;
504 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(emailList->data), CTS_EMAIL_VAL_DELETE_BOOL);
507 //LogDebug("Platform contact have a email address to be deleted");
511 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(emailList->data), CTS_EMAIL_VAL_ADDR_STR);
514 email->setEmail(charValue);
515 emails->push_back(email);
519 //LogDebug("Platform contact have a empty email address");
523 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(emailList->data), CTS_EMAIL_VAL_DEFAULT_BOOL);
525 email->addType(CONTACT_EMAIL_TYPE_PREF);
527 intValue = contacts_svc_value_get_int(static_cast<CTSvalue*>(emailList->data), CTS_EMAIL_VAL_TYPE_INT);
528 if(intValue & CTS_EMAIL_TYPE_HOME)
529 email->addType(CONTACT_EMAIL_TYPE_HOME);
530 if(intValue & CTS_EMAIL_TYPE_WORK)
531 email->addType(CONTACT_EMAIL_TYPE_WORK);
533 // TODO Will be added after type changed to string
534 // if(intValue & CTS_EMAIL_TYPE_CUSTOM)
536 // charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(emailList->data), CTS_EMAIL_VAL_LABEL_STR);
538 // email->addType(CUSTOM);
543 void ContactObjectP2AConverter::exportGrouprelList()
546 GSList *groupList = NULL;
548 if(m_abstractContact->getCategoriesNum() > 0)
549 m_abstractContact->clearCategories();
551 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_GROUPREL_LIST, &groupList);
552 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
553 ThrowMsg(UnknownException, "getting group list (err:" << errorCode << ")");
555 if(groupList == NULL || errorCode == CTS_ERR_NO_DATA)
557 //LogDebug("Platform contact don't have group list");
561 StringArrayPtr categories = m_abstractContact->getCategories();
563 for (; groupList; groupList = g_slist_next(groupList))
565 const char *charValue = NULL;
566 bool boolValue = false;
568 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(groupList->data), CTS_GROUPREL_VAL_DELETE_BOOL);
571 //LogDebug("Platform contact have a group to be deleted");
575 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(groupList->data), CTS_GROUPREL_VAL_NAME_STR);
577 categories->push_back(charValue);
581 void ContactObjectP2AConverter::exportEventList()
584 GSList *eventList = NULL;
586 if(m_abstractContact->getAnniversariesNum() > 0)
587 m_abstractContact->clearAnniversaries();
589 if(m_abstractContact->getBirthdayIsSet())
590 m_abstractContact->unsetBirthday();
592 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_EVENT_LIST, &eventList);
593 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
594 ThrowMsg(UnknownException, "getting event list (err:" << errorCode << ")");
596 if(eventList == NULL || errorCode == CTS_ERR_NO_DATA)
598 //LogDebug("Platform contact don't have group list");
602 ContactAnniversaryArrayPtr anniversaries = m_abstractContact->getAnniversaries();
604 for (; eventList; eventList = g_slist_next(eventList))
606 const char *charValue = NULL;
607 bool boolValue = false;
608 int intValueType = 0;
609 int intValueDate = 0;
611 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(eventList->data), CTS_GROUPREL_VAL_DELETE_BOOL);
614 //LogDebug("Platform contact have a event to be deleted");
618 intValueDate = contacts_svc_value_get_int(static_cast<CTSvalue*>(eventList->data), CTS_EVENT_VAL_DATE_INT);
620 struct tm tmDate = {0, };
622 tmDate.tm_year = (intValueDate / 10000) - 1900;
623 tmDate.tm_mon = ((intValueDate - ((tmDate.tm_year + 1900) * 10000)) / 100) - 1;
624 tmDate.tm_mday = (intValueDate - ((tmDate.tm_year + 1900) * 10000) - tmDate.tm_mon * 100);
626 intValueType = contacts_svc_value_get_int(static_cast<CTSvalue*>(eventList->data), CTS_EVENT_VAL_TYPE_INT);
627 if (intValueType == CTS_EVENT_TYPE_BIRTH)
629 m_abstractContact->setBirthday(tmDate);
631 else if(intValueType == CTS_EVENT_TYPE_ANNIVERSARY)
633 ContactAnniversaryPtr anniversary = ContactAnniversaryPtr(new ContactAnniversary());
635 anniversary->setDate(tmDate);
636 anniversary->setLabel("Anniversary");
638 anniversaries->push_back(anniversary);
640 // else if(intValueType == CTS_EVENT_TYPE_CUSTOM)
642 // ContactAnniversaryPtr anniversary = ContactAnniversaryPtr(new ContactAnniversary());
644 // anniversary->setDate(tmDate);
646 // charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(eventList->data), CTS_EVENT_VAL_LABEL_STR);
648 // anniversary->setLabel(charValue);
650 // anniversaries->push_back(anniversary);
653 // TODO Check the difference of CTS_EVENT_TYPE_CUSTOM and CTS_EVENT_TYPE_ANNIVERSARY
657 void ContactObjectP2AConverter::exportPostalList()
660 GSList *addressList = NULL;
662 if(m_abstractContact->getAddressesNum() > 0)
663 m_abstractContact->clearAddresses();
665 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_POSTAL_ADDR_LIST, &addressList);
666 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
667 ThrowMsg(UnknownException, "getting address list (err:" << errorCode << ")");
669 if(addressList == NULL || errorCode == CTS_ERR_NO_DATA)
671 //LogDebug("Platform contact don't have address list");
675 ContactAddressArrayPtr addresss = m_abstractContact->getAddresses();
677 for (; addressList; addressList = g_slist_next(addressList))
679 ContactAddressPtr address(new ContactAddress());
681 const char *charValue = NULL;
682 bool boolValue = false;
685 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_DELETE_BOOL);
688 //LogDebug("Platform contact have a address to be deleted");
692 addresss->push_back(address);
694 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_POSTALCODE_STR);
696 address->setPostalCode(charValue);
698 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_REGION_STR);
700 address->setRegion(charValue);
702 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_LOCALITY_STR);
704 address->setCity(charValue);
706 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_STREET_STR);
708 address->setStreetAddress(charValue);
710 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_EXTENDED_STR);
712 address->setAdditionalInformation(charValue);
714 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_COUNTRY_STR);
716 address->setCountry(charValue);
718 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_DEFAULT_BOOL);
720 address->addType(CONTACT_ADDRESS_TYPE_PREF);
722 intValue = contacts_svc_value_get_int(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_TYPE_INT);
723 if(intValue & CTS_ADDR_TYPE_HOME)
724 address->addType(CONTACT_ADDRESS_TYPE_HOME);
725 if(intValue & CTS_ADDR_TYPE_WORK)
726 address->addType(CONTACT_ADDRESS_TYPE_WORK);
728 // TODO Will be added after type changed to string
729 // if(intValue & CTS_ADDR_TYPE_CUSTOM)
731 // charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(addressList->data), CTS_POSTAL_VAL_LABEL_STR);
733 // address->addType(CUSTOM);
738 void ContactObjectP2AConverter::exportWebAddrList()
741 GSList *webAddrList = NULL;
743 if(m_abstractContact->getUrlsNum() > 0)
744 m_abstractContact->clearUrls();
746 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_WEB_ADDR_LIST, &webAddrList);
747 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
748 ThrowMsg(UnknownException, "getting address list (err:" << errorCode << ")");
750 if(webAddrList == NULL || errorCode == CTS_ERR_NO_DATA)
752 //LogDebug("Platform contact don't have address list");
756 ContactWebSiteArrayPtr urls = m_abstractContact->getUrls();
758 for (; webAddrList; webAddrList = g_slist_next(webAddrList))
760 ContactWebSitePtr url(new ContactWebSite());
762 const char *charValue = NULL;
763 bool boolValue = false;
766 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(webAddrList->data), CTS_WEB_VAL_DELETE_BOOL);
769 //LogDebug("Platform contact have a address to be deleted");
773 urls->push_back(url);
775 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(webAddrList->data), CTS_WEB_VAL_ADDR_STR);
777 url->setUrl(charValue);
779 intValue = contacts_svc_value_get_int(static_cast<CTSvalue*>(webAddrList->data), CTS_WEB_VAL_TYPE_INT);
780 if(intValue == CTS_WEB_TYPE_HOME)
781 url->setType(WEBSITE_TYPE_HOMEPAGE);
782 if(intValue & CTS_WEB_TYPE_WORK)
783 url->setType(WEBSITE_TYPE_BLOG);
785 // TODO Will be added after type changed to string
786 // if(intValue & CTS_WEB_TYPE_CUSTOM)
788 // charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(webAddrList->data), CTS_WEB_VAL_LABEL_STR);
790 // url->setType(CUSTOM);
795 void ContactObjectP2AConverter::exportNicknameList()
798 GSList *nicknameList = NULL;
800 ContactNamePtr contactName = m_abstractContact->getName();
801 if(contactName == NULL)
803 contactName = ContactNamePtr(new ContactName());
804 m_abstractContact->setName(contactName);
807 if(contactName->getNicknamesNum() > 0)
808 contactName->clearNicknames();
810 errorCode = contacts_svc_struct_get_list(m_platformContact, CTS_CF_NICKNAME_LIST, &nicknameList);
811 if(errorCode != CTS_SUCCESS && errorCode != CTS_ERR_NO_DATA)
812 ThrowMsg(UnknownException, "getting nickname list (err:" << errorCode << ")");
814 if(nicknameList == NULL || errorCode == CTS_ERR_NO_DATA)
816 //LogDebug("Platform contact don't have nickname list");
820 StringArrayPtr nicknames = contactName->getNicknames();
822 for (; nicknameList; nicknameList = g_slist_next(nicknameList))
824 const char *charValue = NULL;
825 bool boolValue = false;
827 boolValue = contacts_svc_value_get_bool(static_cast<CTSvalue*>(nicknameList->data), CTS_NICKNAME_VAL_DELETE_BOOL);
830 //LogDebug("Platform contact have a nickname to be deleted");
834 charValue = contacts_svc_value_get_str(static_cast<CTSvalue*>(nicknameList->data), CTS_NICKNAME_VAL_NAME_STR);
836 nicknames->push_back(charValue);