2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FScl_AddressbookUtil.cpp
19 * @brief This is the implementation for _AddressbookUtil class.
21 * This file contains definitions of @e _AddressbookUtil class.
25 #include <FBaseDateTime.h>
26 #include <FBaseColArrayList.h>
27 #include <FBaseColArrayListT.h>
28 #include <FSclTypes.h>
29 #include <FSclContact.h>
30 #include <FSclPerson.h>
31 #include <FSclCategory.h>
32 #include <FSclUserProfile.h>
34 #include <FSclAddress.h>
35 #include <FSclImAddress.h>
36 #include <FSclContactEvent.h>
37 #include <FSclRelationship.h>
38 #include <FSclOrganization.h>
39 #include <FBaseSysLog.h>
40 #include <FBase_StringConverter.h>
41 #include <FSclContactChangeInfo.h>
42 #include <FScl_ContactChangeInfoImpl.h>
43 #include <FSclCategoryChangeInfo.h>
44 #include <FScl_CategoryChangeInfoImpl.h>
45 #include "FScl_AddressbookUtil.h"
46 #include "FScl_ContactImpl.h"
47 #include "FScl_CategoryImpl.h"
48 #include "FScl_RecordImpl.h"
49 #include <FSclPhoneNumberContact.h>
50 #include "FScl_PhoneNumberContactImpl.h"
51 #include <FSclEmailContact.h>
52 #include "FScl_EmailContactImpl.h"
53 #include "FScl_PersonImpl.h"
54 #include "FSclAddressbook.h"
55 #include "FScl_AddressbookImpl.h"
56 #include "FScl_UserProfileImpl.h"
58 using namespace Tizen::Base;
59 using namespace Tizen::Base::Collection;
61 namespace Tizen { namespace Social
66 __ContactsContact::ConvertResultTo<Contact>(__SearchResult<__ContactsContact>& searchResult)
69 contacts_record_h newRecord = null;
71 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
72 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
74 std::unique_ptr<Contact> pContact(new (std::nothrow) Contact());
75 SysTryReturn(NID_SCL, pContact != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
77 contacts_record_clone(currentRecord, &newRecord);
78 SysTryReturn(NID_SCL, newRecord != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
80 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(newRecord);
82 contacts_record_get_int(newRecord, _contacts_contact.id, &intValue);
84 _RecordImpl::GetInstance(*pContact)->SetRecordId(intValue);
86 return pContact.release();
91 __ContactsGroup::ConvertResultTo<Category>(__SearchResult<__ContactsGroup>& searchResult)
94 contacts_record_h newRecord = null;
96 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
97 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
99 std::unique_ptr<Category> pCategory(new (std::nothrow) Category());
100 SysTryReturn(NID_SCL, pCategory != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
102 contacts_record_clone(currentRecord, &newRecord);
103 SysTryReturn(NID_SCL, newRecord != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
105 _CategoryImpl::GetInstance(*pCategory)->SetRecordHandle(newRecord);
107 contacts_record_get_int(newRecord, _contacts_group.id, &intValue);
109 _RecordImpl::GetInstance(*pCategory)->SetRecordId(intValue);
111 __Filter<__ContactsGroupRelation> filter;
113 filter.AddInt(_contacts_group_relation.group_id, CONTACTS_MATCH_EQUAL, intValue);
115 __Query<__ContactsGroupRelation> query;
117 query.SetFilter(filter);
119 int count = _AddressbookUtil::GetCountWithQuery(query);
120 SysTryReturn(NID_SCL, count >= 0, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
122 _CategoryImpl::GetInstance(*pCategory)->SetMemberCount(count);
124 return pCategory.release();
129 __ContactsGroupRelation::ConvertResultTo<Category>(__SearchResult<__ContactsGroupRelation>& searchResult)
131 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
134 contacts_record_h newRecord = null;
136 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
137 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
139 std::unique_ptr<Category> pCategory(new (std::nothrow) Category());
140 SysTryReturn(NID_SCL, pCategory != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
142 contacts_record_get_int(currentRecord, _contacts_group_relation.group_id, &intValue);
143 SysTryReturn(NID_SCL, intValue > 0, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
145 int ret = contacts_db_get_record(_contacts_group._uri, intValue, &newRecord);
146 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
147 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
148 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
150 _CategoryImpl::GetInstance(*pCategory)->SetRecordHandle(newRecord);
151 _RecordImpl::GetInstance(*pCategory)->SetRecordId(intValue);
153 __Filter<__ContactsGroupRelation> filter;
155 filter.AddInt(_contacts_group_relation.group_id, CONTACTS_MATCH_EQUAL, intValue);
157 __Query<__ContactsGroupRelation> query;
159 query.SetFilter(filter);
161 int count = _AddressbookUtil::GetCountWithQuery(query);
164 SysTryReturn(NID_SCL, GetLastResult() != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
165 SysTryReturn(NID_SCL, GetLastResult() != E_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
170 _CategoryImpl::GetInstance(*pCategory)->SetMemberCount(count);
172 return pCategory.release();
177 __ContactsContactGroupRel::ConvertResultTo<Category>(__SearchResult<__ContactsContactGroupRel>& searchResult)
179 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
182 contacts_record_h newRecord = null;
184 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
185 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
187 std::unique_ptr<Category> pCategory(new (std::nothrow) Category());
188 SysTryReturn(NID_SCL, pCategory != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
190 contacts_record_get_int(currentRecord, _contacts_contact_grouprel.group_id, &intValue);
191 SysTryReturn(NID_SCL, intValue > 0, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
193 int ret = contacts_db_get_record(_contacts_group._uri, intValue, &newRecord);
194 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
195 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
196 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
198 _CategoryImpl::GetInstance(*pCategory)->SetRecordHandle(newRecord);
199 _RecordImpl::GetInstance(*pCategory)->SetRecordId(intValue);
201 __Filter<__ContactsGroupRelation> filter;
203 filter.AddInt(_contacts_group_relation.group_id, CONTACTS_MATCH_EQUAL, intValue);
205 __Query<__ContactsGroupRelation> query;
207 query.SetFilter(filter);
209 int count = _AddressbookUtil::GetCountWithQuery(query);
212 SysTryReturn(NID_SCL, GetLastResult() != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
213 SysTryReturn(NID_SCL, GetLastResult() != E_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
218 _CategoryImpl::GetInstance(*pCategory)->SetMemberCount(count);
220 return pCategory.release();
226 __ContactsContactGroupRel::ConvertResultTo<Contact>(__SearchResult<__ContactsContactGroupRel>& searchResult)
228 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
231 contacts_record_h newRecord = null;
233 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
234 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
236 contacts_record_get_int(currentRecord, _contacts_contact_grouprel.contact_id, &intValue);
237 SysTryReturn(NID_SCL, intValue >= 0, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
239 std::unique_ptr<Contact> pContact(new (std::nothrow) Contact());
240 SysTryReturn(NID_SCL, pContact != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
242 int ret = contacts_db_get_record(_contacts_contact._uri, intValue, &newRecord);
243 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
244 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
245 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
247 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(newRecord);
248 _RecordImpl::GetInstance(*pContact)->SetRecordId(intValue);
250 return pContact.release();
255 __ContactsContactEmail::ConvertResultTo<Contact>(__SearchResult<__ContactsContactEmail>& searchResult)
258 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
261 contacts_record_h newRecord = null;
263 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
264 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
266 contacts_record_get_int(currentRecord, _contacts_contact_email.contact_id, &intValue);
267 SysTryReturn(NID_SCL, intValue >= 0, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
269 std::unique_ptr<Contact> pContact(new (std::nothrow) Contact());
270 SysTryReturn(NID_SCL, pContact != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
272 int ret = contacts_db_get_record(_contacts_contact._uri, intValue, &newRecord);
273 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
274 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
275 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
277 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(newRecord);
278 _RecordImpl::GetInstance(*pContact)->SetRecordId(intValue);
280 return pContact.release();
285 __ContactsContactEmail::ConvertResultTo<EmailContact>(__SearchResult<__ContactsContactEmail>& queryResult)
288 EmailType type = EMAIL_TYPE_PERSONAL;
289 char* pCharValue = null;
290 int emailRecordId = 0;
294 contacts_record_h recordHandle = queryResult.GetCurrentRecord();
295 SysTryReturn(NID_SCL, recordHandle != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
297 std::unique_ptr<EmailContact> pEmailContact(new (std::nothrow) EmailContact());
298 SysTryReturn(NID_SCL, pEmailContact != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
300 contacts_record_get_int(recordHandle, _contacts_contact_email.contact_id, &intValue);
301 _EmailContactImpl::GetInstance(*pEmailContact)->SetContactId(intValue);
303 contacts_record_get_int(recordHandle, _contacts_contact_email.person_id, &intValue);
304 _EmailContactImpl::GetInstance(*pEmailContact)->SetPersonId(intValue);
306 contacts_record_get_int(recordHandle, _contacts_contact_email.address_book_id, &intValue);
307 _EmailContactImpl::GetInstance(*pEmailContact)->SetAddressbookId(intValue);
309 contacts_record_get_str_p(recordHandle, _contacts_contact_email.display_name, &pCharValue);
310 _EmailContactImpl::GetInstance(*pEmailContact)->SetDisplayName(pCharValue);
312 contacts_record_get_str_p(recordHandle, _contacts_contact_email.image_thumbnail_path, &pCharValue);
313 _EmailContactImpl::GetInstance(*pEmailContact)->SetThumbnailPath(pCharValue);
315 contacts_record_get_str_p(recordHandle, _contacts_contact_email.ringtone_path, &pCharValue);
316 _EmailContactImpl::GetInstance(*pEmailContact)->SetRingtonePath(pCharValue);
319 contacts_record_get_int(recordHandle, _contacts_contact_email.email_id, &intValue);
320 emailRecordId = intValue;
323 contacts_record_get_str_p(recordHandle, _contacts_contact_email.label, &pCharValue);
327 contacts_record_get_int(recordHandle, _contacts_contact_email.type, &intValue);
330 case CONTACTS_EMAIL_TYPE_HOME:
331 type = EMAIL_TYPE_PERSONAL;
333 case CONTACTS_EMAIL_TYPE_WORK:
334 type = EMAIL_TYPE_WORK;
336 case CONTACTS_EMAIL_TYPE_CUSTOM:
337 type = EMAIL_TYPE_CUSTOM;
340 type = EMAIL_TYPE_OTHER;
345 contacts_record_get_str_p(recordHandle, _contacts_contact_email.email, &pCharValue);
348 _EmailContactImpl::GetInstance(*pEmailContact)->SetEmailData(emailRecordId, type, label, email);
350 return pEmailContact.release();
355 __ContactsContactNumber::ConvertResultTo<Contact>(__SearchResult<__ContactsContactNumber>& searchResult)
357 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
360 contacts_record_h newRecord = null;
362 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
363 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
365 contacts_record_get_int(currentRecord, _contacts_contact_number.contact_id, &intValue);
366 SysTryReturn(NID_SCL, intValue >= 0, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
368 std::unique_ptr<Contact> pContact(new (std::nothrow) Contact());
369 SysTryReturn(NID_SCL, pContact != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
371 int ret = contacts_db_get_record(_contacts_contact._uri, intValue, &newRecord);
372 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
373 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
374 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
376 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(newRecord);
377 _RecordImpl::GetInstance(*pContact)->SetRecordId(intValue);
379 return pContact.release();
384 __ContactsContactNumber::ConvertResultTo<PhoneNumberContact>(__SearchResult<__ContactsContactNumber>& queryResult)
387 PhoneNumberType type = PHONENUMBER_TYPE_HOME;
388 char* pCharValue = null;
389 int numberRecordId = 0;
393 contacts_record_h recordHandle = queryResult.GetCurrentRecord();
394 SysTryReturn(NID_SCL, recordHandle != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
396 std::unique_ptr<PhoneNumberContact> pPhoneNumberContact(new (std::nothrow) PhoneNumberContact());
397 SysTryReturn(NID_SCL, pPhoneNumberContact != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
399 contacts_record_get_int(recordHandle, _contacts_contact_number.contact_id, &intValue);
400 _PhoneNumberContactImpl::GetInstance(*pPhoneNumberContact)->SetContactId(intValue);
402 contacts_record_get_int(recordHandle, _contacts_contact_number.person_id, &intValue);
403 _PhoneNumberContactImpl::GetInstance(*pPhoneNumberContact)->SetPersonId(intValue);
405 contacts_record_get_int(recordHandle, _contacts_contact_number.address_book_id, &intValue);
406 _PhoneNumberContactImpl::GetInstance(*pPhoneNumberContact)->SetAddressbookId(intValue);
408 contacts_record_get_str_p(recordHandle, _contacts_contact_number.display_name, &pCharValue);
409 _PhoneNumberContactImpl::GetInstance(*pPhoneNumberContact)->SetDisplayName(pCharValue);
411 contacts_record_get_str_p(recordHandle, _contacts_contact_number.image_thumbnail_path, &pCharValue);
412 _PhoneNumberContactImpl::GetInstance(*pPhoneNumberContact)->SetThumbnailPath(pCharValue);
414 contacts_record_get_str_p(recordHandle, _contacts_contact_number.ringtone_path, &pCharValue);
415 _PhoneNumberContactImpl::GetInstance(*pPhoneNumberContact)->SetRingtonePath(pCharValue);
418 contacts_record_get_int(recordHandle, _contacts_contact_number.number_id, &intValue);
419 numberRecordId = intValue;
422 contacts_record_get_str_p(recordHandle, _contacts_contact_number.label, &pCharValue);
426 contacts_record_get_int(recordHandle, _contacts_contact_number.type, &intValue);
429 case CONTACTS_NUMBER_TYPE_HOME | CONTACTS_NUMBER_TYPE_VOICE:
430 type = PHONENUMBER_TYPE_HOME;
432 case CONTACTS_NUMBER_TYPE_WORK | CONTACTS_NUMBER_TYPE_VOICE:
433 type = PHONENUMBER_TYPE_WORK;
435 case CONTACTS_NUMBER_TYPE_CELL:
436 type = PHONENUMBER_TYPE_MOBILE;
438 case CONTACTS_NUMBER_TYPE_FAX | CONTACTS_NUMBER_TYPE_HOME:
439 type = PHONENUMBER_TYPE_HOME_FAX;
441 case CONTACTS_NUMBER_TYPE_FAX | CONTACTS_NUMBER_TYPE_WORK:
442 type = PHONENUMBER_TYPE_WORK_FAX;
444 case CONTACTS_NUMBER_TYPE_PAGER:
445 type = PHONENUMBER_TYPE_PAGER;
447 case CONTACTS_NUMBER_TYPE_CUSTOM:
448 type = PHONENUMBER_TYPE_CUSTOM;
451 type = PHONENUMBER_TYPE_OTHER;
456 contacts_record_get_str_p(recordHandle, _contacts_contact_number.number, &pCharValue);
459 _PhoneNumberContactImpl::GetInstance(*pPhoneNumberContact)->SetPhoneNumberData(numberRecordId, type, label, number);
461 return pPhoneNumberContact.release();
466 __ContactsAddressbook::ConvertResultTo<Addressbook>(__SearchResult<__ContactsAddressbook>& queryResult)
469 char* pCharValue = null;
471 contacts_record_h currentRecord = queryResult.GetCurrentRecord();
472 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
474 std::unique_ptr<Addressbook> pAddressbook(new (std::nothrow) Addressbook());
475 SysTryReturn(NID_SCL, pAddressbook != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
477 result r = pAddressbook->Construct();
478 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
480 contacts_record_get_int(currentRecord, _contacts_address_book.id, &intValue);
481 _AddressbookImpl::GetInstance(*pAddressbook)->SetId(intValue);
483 contacts_record_get_str_p(currentRecord, _contacts_address_book.name, &pCharValue);
484 _AddressbookImpl::GetInstance(*pAddressbook)->SetName(pCharValue);
486 contacts_record_get_int(currentRecord, _contacts_address_book.account_id, &intValue);
487 _AddressbookImpl::GetInstance(*pAddressbook)->SetAccountId(intValue);
489 return pAddressbook.release();
496 __ContactsPerson::ConvertResultTo<Person>(__SearchResult<__ContactsPerson>& queryResult)
499 char* pCharValue = null;
500 bool boolValue = false;
502 contacts_record_h currentRecord = queryResult.GetCurrentRecord();
503 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
505 std::unique_ptr<Person> pPerson(_AddressbookUtil::CreatePersonN());
506 SysTryReturn(NID_SCL, pPerson != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
508 contacts_record_get_int(currentRecord, _contacts_person.id, &intValue);
509 _PersonImpl::GetInstance(*pPerson)->SetId(intValue);
511 contacts_record_get_str_p(currentRecord, _contacts_person.addressbook_ids, &pCharValue);
512 _PersonImpl::GetInstance(*pPerson)->SetAddressbookIdString(pCharValue);
514 contacts_record_get_bool(currentRecord, _contacts_person.is_favorite, &boolValue);
515 _PersonImpl::GetInstance(*pPerson)->SetIsFavorite(boolValue);
517 contacts_record_get_bool(currentRecord, _contacts_person.has_phonenumber, &boolValue);
518 _PersonImpl::GetInstance(*pPerson)->SetHasPhoneNumber(boolValue);
520 contacts_record_get_bool(currentRecord, _contacts_person.has_email, &boolValue);
521 _PersonImpl::GetInstance(*pPerson)->SetHasEmail(boolValue);
523 contacts_record_get_str_p(currentRecord, _contacts_person.image_thumbnail_path, &pCharValue);
524 _PersonImpl::GetInstance(*pPerson)->SetThumbnailPath(pCharValue);
526 contacts_record_get_str_p(currentRecord, _contacts_person.ringtone_path, &pCharValue);
527 _PersonImpl::GetInstance(*pPerson)->SetRingtonePath(pCharValue);
529 contacts_record_get_str_p(currentRecord, _contacts_person.display_name, &pCharValue);
530 _PersonImpl::GetInstance(*pPerson)->SetDisplayName(pCharValue);
532 return pPerson.release();
537 _AddressbookUtil::CreatePersonN(void)
539 Person* pPerson = new (std::nothrow) Person();
545 __ContactsPersonGroupRel::ConvertResultTo<Person>(__SearchResult<__ContactsPersonGroupRel>& searchResult)
548 char* pCharValue = null;
549 bool boolValue = false;
551 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
552 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
554 std::unique_ptr<Person> pPerson(_AddressbookUtil::CreatePersonN());
555 SysTryReturn(NID_SCL, pPerson != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
557 contacts_record_get_int(currentRecord, _contacts_person_grouprel.person_id, &intValue);
558 _PersonImpl::GetInstance(*pPerson)->SetId(intValue);
560 contacts_record_get_str_p(currentRecord, _contacts_person_grouprel.addressbook_ids, &pCharValue);
561 _PersonImpl::GetInstance(*pPerson)->SetAddressbookIdString(pCharValue);
563 contacts_record_get_bool(currentRecord, _contacts_person_grouprel.is_favorite, &boolValue);
564 _PersonImpl::GetInstance(*pPerson)->SetIsFavorite(boolValue);
566 contacts_record_get_bool(currentRecord, _contacts_person_grouprel.has_phonenumber, &boolValue);
567 _PersonImpl::GetInstance(*pPerson)->SetHasPhoneNumber(boolValue);
569 contacts_record_get_bool(currentRecord, _contacts_person_grouprel.has_email, &boolValue);
570 _PersonImpl::GetInstance(*pPerson)->SetHasEmail(boolValue);
572 contacts_record_get_str_p(currentRecord, _contacts_person_grouprel.image_thumbnail_path, &pCharValue);
573 _PersonImpl::GetInstance(*pPerson)->SetThumbnailPath(pCharValue);
575 contacts_record_get_str_p(currentRecord, _contacts_person_grouprel.ringtone_path, &pCharValue);
576 _PersonImpl::GetInstance(*pPerson)->SetRingtonePath(pCharValue);
578 contacts_record_get_str_p(currentRecord, _contacts_person_grouprel.display_name, &pCharValue);
579 _PersonImpl::GetInstance(*pPerson)->SetDisplayName(pCharValue);
581 return pPerson.release();
586 __ContactsPersonGroupRel::ConvertResultTo<Category>(__SearchResult<__ContactsPersonGroupRel>& searchResult)
588 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
591 contacts_record_h newRecord = null;
593 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
594 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
596 std::unique_ptr<Category> pCategory(new (std::nothrow) Category());
597 SysTryReturn(NID_SCL, pCategory != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
599 contacts_record_get_int(currentRecord, _contacts_person_grouprel.group_id, &intValue);
600 SysTryReturn(NID_SCL, intValue > 0, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
602 int ret = contacts_db_get_record(_contacts_group._uri, intValue, &newRecord);
603 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
604 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
605 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
607 _CategoryImpl::GetInstance(*pCategory)->SetRecordHandle(newRecord);
608 _RecordImpl::GetInstance(*pCategory)->SetRecordId(intValue);
610 __Filter<__ContactsGroupRelation> filter;
612 filter.AddInt(_contacts_group_relation.group_id, CONTACTS_MATCH_EQUAL, intValue);
614 __Query<__ContactsGroupRelation> query;
616 query.SetFilter(filter);
618 int count = _AddressbookUtil::GetCountWithQuery(query);
621 SysTryReturn(NID_SCL, GetLastResult() != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
622 SysTryReturn(NID_SCL, GetLastResult() != E_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
627 _CategoryImpl::GetInstance(*pCategory)->SetMemberCount(count);
629 return pCategory.release();
634 __ContactsPerson::ConvertHandleTo<Person>(contacts_record_h recordHandle)
637 char* pCharValue = null;
638 bool boolValue = false;
640 std::unique_ptr<Person> pPerson(_AddressbookUtil::CreatePersonN());
641 SysTryReturn(NID_SCL, pPerson != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
643 contacts_record_get_int(recordHandle, _contacts_person.id, &intValue);
644 _PersonImpl::GetInstance(*pPerson)->SetId(intValue);
646 contacts_record_get_str_p(recordHandle, _contacts_person.addressbook_ids, &pCharValue);
647 _PersonImpl::GetInstance(*pPerson)->SetAddressbookIdString(pCharValue);
649 contacts_record_get_bool(recordHandle, _contacts_person.is_favorite, &boolValue);
650 _PersonImpl::GetInstance(*pPerson)->SetIsFavorite(boolValue);
652 contacts_record_get_bool(recordHandle, _contacts_person.has_phonenumber, &boolValue);
653 _PersonImpl::GetInstance(*pPerson)->SetHasPhoneNumber(boolValue);
655 contacts_record_get_bool(recordHandle, _contacts_person.has_email, &boolValue);
656 _PersonImpl::GetInstance(*pPerson)->SetHasEmail(boolValue);
658 contacts_record_get_str_p(recordHandle, _contacts_person.image_thumbnail_path, &pCharValue);
659 _PersonImpl::GetInstance(*pPerson)->SetThumbnailPath(pCharValue);
661 contacts_record_get_str_p(recordHandle, _contacts_person.ringtone_path, &pCharValue);
662 _PersonImpl::GetInstance(*pPerson)->SetRingtonePath(pCharValue);
664 contacts_record_get_str_p(recordHandle, _contacts_person.display_name, &pCharValue);
665 _PersonImpl::GetInstance(*pPerson)->SetDisplayName(pCharValue);
667 return pPerson.release();
672 __ContactsPersonGroupRel::ConvertHandleTo<Person>(contacts_record_h recordHandle)
675 char* pCharValue = null;
676 bool boolValue = false;
678 std::unique_ptr<Person> pPerson(_AddressbookUtil::CreatePersonN());
679 SysTryReturn(NID_SCL, pPerson != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
681 contacts_record_get_int(recordHandle, _contacts_person_grouprel.person_id, &intValue);
682 _PersonImpl::GetInstance(*pPerson)->SetId(intValue);
684 contacts_record_get_str_p(recordHandle, _contacts_person_grouprel.addressbook_ids, &pCharValue);
685 _PersonImpl::GetInstance(*pPerson)->SetAddressbookIdString(pCharValue);
687 contacts_record_get_bool(recordHandle, _contacts_person_grouprel.is_favorite, &boolValue);
688 _PersonImpl::GetInstance(*pPerson)->SetIsFavorite(boolValue);
690 contacts_record_get_bool(recordHandle, _contacts_person_grouprel.has_phonenumber, &boolValue);
691 _PersonImpl::GetInstance(*pPerson)->SetHasPhoneNumber(boolValue);
693 contacts_record_get_bool(recordHandle, _contacts_person_grouprel.has_email, &boolValue);
694 _PersonImpl::GetInstance(*pPerson)->SetHasEmail(boolValue);
696 contacts_record_get_str_p(recordHandle, _contacts_person_grouprel.image_thumbnail_path, &pCharValue);
697 _PersonImpl::GetInstance(*pPerson)->SetThumbnailPath(pCharValue);
699 contacts_record_get_str_p(recordHandle, _contacts_person_grouprel.ringtone_path, &pCharValue);
700 _PersonImpl::GetInstance(*pPerson)->SetRingtonePath(pCharValue);
702 contacts_record_get_str_p(recordHandle, _contacts_person_grouprel.display_name, &pCharValue);
703 _PersonImpl::GetInstance(*pPerson)->SetDisplayName(pCharValue);
705 return pPerson.release();
710 __ContactsContactUpdatedInfo::ConvertResultTo(__SearchResult<__ContactsContactUpdatedInfo>& searchResult)
713 bool boolValue = false;
714 RecordChangeType changeType = RECORD_CHANGE_TYPE_ADDED;
716 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
717 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
719 std::unique_ptr<ContactChangeInfo> pContactChagneInfo(new (std::nothrow) ContactChangeInfo());
720 SysTryReturn(NID_SCL, pContactChagneInfo != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
722 contacts_record_get_int(currentRecord, _contacts_contact_updated_info.contact_id, &intValue);
723 _ContactChangeInfoImpl::GetInstance(*pContactChagneInfo)->SetContactId(intValue);
725 contacts_record_get_int(currentRecord, _contacts_contact_updated_info.address_book_id, &intValue);
726 _ContactChangeInfoImpl::GetInstance(*pContactChagneInfo)->SetAddressbookId(intValue);
728 contacts_record_get_int(currentRecord, _contacts_contact_updated_info.type, &intValue);
732 case CONTACTS_CHANGE_INSERTED:
733 changeType = RECORD_CHANGE_TYPE_ADDED;
735 case CONTACTS_CHANGE_UPDATED:
736 changeType = RECORD_CHANGE_TYPE_UPDATED;
738 case CONTACTS_CHANGE_DELETED:
741 changeType = RECORD_CHANGE_TYPE_REMOVED;
745 _ContactChangeInfoImpl::GetInstance(*pContactChagneInfo)->SetChangeType(changeType);
747 contacts_record_get_int(currentRecord, _contacts_contact_updated_info.version, &intValue);
748 _ContactChangeInfoImpl::GetInstance(*pContactChagneInfo)->SetVersion(intValue);
750 contacts_record_get_bool(currentRecord, _contacts_contact_updated_info.image_changed, &boolValue);
751 _ContactChangeInfoImpl::GetInstance(*pContactChagneInfo)->SetThumbnailChangeStatus(boolValue);
753 return pContactChagneInfo.release();
758 __ContactsGroupUpdatedInfo::ConvertResultTo(__SearchResult<__ContactsGroupUpdatedInfo>& searchResult)
761 RecordChangeType changeType = RECORD_CHANGE_TYPE_ADDED;
763 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
764 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
766 std::unique_ptr<CategoryChangeInfo> pCategoryChangeInfo(new (std::nothrow) CategoryChangeInfo());
767 SysTryReturn(NID_SCL, pCategoryChangeInfo != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
769 contacts_record_get_int(currentRecord, _contacts_group_updated_info.group_id, &intValue);
770 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetCategoryId(intValue);
772 contacts_record_get_int(currentRecord, _contacts_group_updated_info.address_book_id, &intValue);
773 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetAddressbookId(intValue);
775 contacts_record_get_int(currentRecord, _contacts_group_updated_info.type, &intValue);
779 case CONTACTS_CHANGE_INSERTED:
780 changeType = RECORD_CHANGE_TYPE_ADDED;
782 case CONTACTS_CHANGE_UPDATED:
783 changeType = RECORD_CHANGE_TYPE_UPDATED;
785 case CONTACTS_CHANGE_DELETED:
788 changeType = RECORD_CHANGE_TYPE_REMOVED;
792 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetChangeType(changeType);
794 contacts_record_get_int(currentRecord, _contacts_group_updated_info.version, &intValue);
795 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetVersion(intValue);
797 return pCategoryChangeInfo.release();
802 __ContactsGroupRelUpdatedInfo::ConvertResultTo(__SearchResult<__ContactsGroupRelUpdatedInfo>& searchResult)
806 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
807 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
809 std::unique_ptr<CategoryChangeInfo> pCategoryChangeInfo(new (std::nothrow) CategoryChangeInfo());
810 SysTryReturn(NID_SCL, pCategoryChangeInfo != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
812 contacts_record_get_int(currentRecord, _contacts_grouprel_updated_info.group_id, &intValue);
813 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetCategoryId(intValue);
815 contacts_record_get_int(currentRecord, _contacts_grouprel_updated_info.version, &intValue);
816 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetVersion(intValue);
818 contacts_record_get_int(currentRecord, _contacts_grouprel_updated_info.address_book_id, &intValue);
819 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetAddressbookId(intValue);
821 contacts_record_get_int(currentRecord, _contacts_grouprel_updated_info.type, &intValue);
823 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetChangeType(RECORD_CHANGE_TYPE_UPDATED);
825 contacts_record_get_int(currentRecord, _contacts_grouprel_updated_info.version, &intValue);
826 _CategoryChangeInfoImpl::GetInstance(*pCategoryChangeInfo)->SetVersion(intValue);
828 return pCategoryChangeInfo.release();
833 __ContactsUserProfile::ConvertResultTo<UserProfile>(__SearchResult<__ContactsUserProfile>& searchResult)
835 contacts_record_h newRecord = null;
837 contacts_record_h currentRecord = searchResult.GetCurrentRecord();
838 SysTryReturn(NID_SCL, currentRecord != null, null, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(E_SYSTEM));
840 std::unique_ptr<UserProfile> pProfile(new (std::nothrow) UserProfile());
841 SysTryReturn(NID_SCL, pProfile != null, null, E_OUT_OF_MEMORY, "[%s] Propagating.", GetErrorMessage(E_OUT_OF_MEMORY));
843 contacts_record_clone(currentRecord, &newRecord);
844 SysTryReturn(NID_SCL, newRecord != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
846 _UserProfileImpl::GetInstance(*pProfile)->SetUserProfileHandle(newRecord);
848 return pProfile.release();
852 __SearchResult<__ContactsPerson>*
853 _AddressbookUtil::Search(const Tizen::Base::String& keyword)
855 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
857 __SearchResult<__ContactsPerson>* pQueryResult = null;
859 contacts_list_h list = null;
860 std::unique_ptr<char[]> pKeyword(_StringConverter::CopyToCharArrayN(keyword));
862 int ret = contacts_db_search_records(__ContactsPerson::GetUri(), pKeyword.get(), 0, 0, &list);
863 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
864 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[E_SYSTEM] A system error has occurred.");
866 pQueryResult = new (std::nothrow) __SearchResult<__ContactsPerson>(list);
867 SysTryReturn(NID_SCL, pQueryResult, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));