2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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 FScl_AddressbookManagerImpl.cpp
18 * @brief This is the implementation for _AddressbookManagerImpl class.
20 * This file contains definitions of @e _AddressbookManagerImpl class.
23 #include <unique_ptr.h>
24 #include <FBaseColIListT.h>
25 #include <FBaseColArrayListT.h>
26 #include <FBaseColHashMapT.h>
27 #include <FBaseResult.h>
28 #include <FBaseLongLong.h>
29 #include <FBaseInteger.h>
31 #include <FSclAddressbook.h>
32 #include <FSclAddressbookManager.h>
33 #include <FSclIAddressbookChangeEventListener.h>
34 #include <FSclContact.h>
35 #include <FSclCategory.h>
36 #include <FSclUserProfile.h>
37 #include <FSclContactChangeInfo.h>
38 #include <FSclCategoryChangeInfo.h>
39 #include <FSclPerson.h>
40 #include <FSclPhoneNumberContact.h>
41 #include <FScl_PhoneNumberContactImpl.h>
42 #include <FSclEmailContact.h>
43 #include <FScl_EmailContactImpl.h>
44 #include <FSclAddressbookFilter.h>
45 #include <FSclIAddressbookEventListener.h>
46 #include <FSclIRecordEventListener.h>
47 #include <FBaseSysLog.h>
48 #include <FApp_AppInfo.h>
49 #include <FBase_StringConverter.h>
50 #include "FScl_AddressbookImpl.h"
51 #include "FScl_AddressbookFilterImpl.h"
52 #include "FScl_AddressbookManagerImpl.h"
53 #include "FScl_AddressbookUtil.h"
54 #include "FScl_RecordImpl.h"
55 #include "FScl_ContactImpl.h"
56 #include "FScl_CategoryImpl.h"
57 #include "FScl_PersonImpl.h"
58 #include "FScl_AddressbookUtil.h"
59 #include "FScl_ContactChangeInfoImpl.h"
60 #include "FScl_CategoryChangeInfoImpl.h"
61 #include "FScl_ContactDbMonitor.h"
62 #include "FScl_ContactDbConnector.h"
63 #include "FScl_UserProfileImpl.h"
66 using namespace Tizen::App;
67 using namespace Tizen::Base;
68 using namespace Tizen::Base::Collection;
69 using namespace Tizen::Io;
70 using namespace Tizen::Graphics;
72 namespace Tizen { namespace Social
75 _AddressbookManagerImpl::_AddressbookManagerImpl(void)
76 : __pIAddressbookEventListener(null)
77 , __pIAddressbookChangeEventListener(null)
78 , __dbVersionForContact(0)
79 , __dbVersionForGroup(0)
80 , __dbVersionForRelation(0)
85 _AddressbookManagerImpl::~_AddressbookManagerImpl(void)
87 if (__pIAddressbookEventListener != null || __pIAddressbookChangeEventListener != null)
89 _ContactDbMonitor* pContactDbMonitor = _ContactDbMonitor::GetInstance();
90 if (pContactDbMonitor != null)
92 pContactDbMonitor->RemoveListener(*this);
98 _AddressbookManagerImpl::Construct(void)
100 result r = _ContactDbConnector::EnsureDbConnection();
101 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
107 _AddressbookManagerImpl::SetEventListener(IAddressbookEventListener* pListener)
109 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
111 result r = E_SUCCESS;
113 if (pListener != null)
115 if (__pIAddressbookEventListener == null && __pIAddressbookChangeEventListener == null)
117 _ContactDbMonitor* pContactDbMonitor = _ContactDbMonitor::GetInstance();
118 SysTryReturn(NID_SCL, pContactDbMonitor != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
120 r = pContactDbMonitor->AddListener(*this);
121 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
124 __dbVersionForContact = GetLatestVersion();
125 SysTryReturn(NID_SCL, __dbVersionForContact != -1, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
127 __dbVersionForGroup = __dbVersionForContact;
128 __dbVersionForRelation = __dbVersionForContact;
130 __pIAddressbookChangeEventListener = null;
131 __pIAddressbookEventListener = pListener;
135 if (__pIAddressbookEventListener != null || __pIAddressbookChangeEventListener != null)
138 _ContactDbMonitor* pContactDbMonitor = _ContactDbMonitor::GetInstance();
139 SysTryReturn(NID_SCL, pContactDbMonitor != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
141 pContactDbMonitor->RemoveListener(*this);
144 __pIAddressbookEventListener = null;
145 __pIAddressbookChangeEventListener = null;
152 _AddressbookManagerImpl::SetAddressbookChangeEventListener(IAddressbookChangeEventListener* pListener)
154 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
156 result r = E_SUCCESS;
158 if (pListener != null)
160 if (__pIAddressbookChangeEventListener == null && __pIAddressbookEventListener == null)
162 _ContactDbMonitor* pContactDbMonitor = _ContactDbMonitor::GetInstance();
163 SysTryReturn(NID_SCL, pContactDbMonitor != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
165 r = pContactDbMonitor->AddListener(*this);
166 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
169 __dbVersionForContact = GetLatestVersion();
170 SysTryReturn(NID_SCL, __dbVersionForContact != -1, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
172 __dbVersionForGroup = __dbVersionForContact;
173 __dbVersionForRelation = __dbVersionForContact;
175 __pIAddressbookEventListener = null;
176 __pIAddressbookChangeEventListener = pListener;
180 if (__pIAddressbookChangeEventListener != null || __pIAddressbookEventListener != null)
183 _ContactDbMonitor* pContactDbMonitor = _ContactDbMonitor::GetInstance();
184 SysTryReturn(NID_SCL, pContactDbMonitor != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
186 pContactDbMonitor->RemoveListener(*this);
189 __pIAddressbookChangeEventListener = null;
190 __pIAddressbookEventListener = null;
197 _AddressbookManagerImpl::CreateAddressbookN(AccountId accountId, const String& name)
199 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
200 SysTryReturn(NID_SCL, accountId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. account id is invalid.", GetErrorMessage(E_INVALID_ARG));
201 SysTryReturn(NID_SCL, !name.IsEmpty(), null, E_INVALID_ARG, "[%s] Invalid argument is used. The name is empty.", GetErrorMessage(E_INVALID_ARG));
205 result r = E_SUCCESS;
208 unique_ptr<char[]> pNameString(_StringConverter::CopyToCharArrayN(name));
209 SysTryReturn(NID_SCL, pNameString !=null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
211 __Filter<__ContactsAddressbook> filter;
213 filter.AddString(_contacts_address_book.name, CONTACTS_MATCH_EXACTLY, pNameString.get());
216 filter.AddOperator(CONTACTS_FILTER_OPERATOR_OR);
217 filter.AddInt(_contacts_address_book.account_id, CONTACTS_MATCH_EQUAL, accountId);
220 __Query<__ContactsAddressbook> query;
222 query.SetFilter(filter);
224 int count = _AddressbookUtil::GetCountWithQuery(query);
225 SysTryReturn(NID_SCL, count == 0, null, E_OBJ_ALREADY_EXIST, "[%s] The name is already being used by other addressbook.", GetErrorMessage(E_OBJ_ALREADY_EXIST));
227 unique_ptr<Addressbook> pAddressbook(new (std::nothrow) Addressbook());
228 SysTryReturn(NID_SCL, pAddressbook != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
230 r = pAddressbook->Construct();
231 SysTryReturn(NID_SCL, !IsFailed(r), null, r, "[%s] Propagating.", GetErrorMessage(r));
233 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::CreateContactRecordN(_contacts_address_book._uri));
234 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
236 contacts_record_set_str(pAbRecord.get(), _contacts_address_book.name, pNameString.get());
237 contacts_record_set_int(pAbRecord.get(), _contacts_address_book.account_id, accountId);
239 r = _AddressbookUtil::InsertContactRecordN(pAbRecord.get(), recordId);
240 SysTryReturn(NID_SCL, !IsFailed(r), null, r, "[%s] Propagating.", GetErrorMessage(r));
242 _AddressbookImpl::GetInstance(*pAddressbook)->SetAccountId(accountId);
243 _AddressbookImpl::GetInstance(*pAddressbook)->SetName(name);
244 _AddressbookImpl::GetInstance(*pAddressbook)->SetId(recordId);
246 return pAddressbook.release();
250 _AddressbookManagerImpl::DeleteAddressbook(AddressbookId addressbookId)
252 SysTryReturn(NID_SCL, addressbookId > 0, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The addressbook ID is invalid or the default addressbook ID.", GetErrorMessage(E_INVALID_ARG));
253 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
255 int ret = contacts_db_delete_record(_contacts_address_book._uri, addressbookId);
256 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
257 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The addressbook is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
258 // SysTryReturnResult(NID_SCL, ret == CONTACTS_ERROR_NONE, E_OPERATION_FAILED, "Failed to delete an addressbook.(%d)", ret); // temp
264 _AddressbookManagerImpl::GetAddressbooksByAccountN(AccountId accountId) const
266 SysTryReturn(NID_SCL, accountId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. account id is invalid.", GetErrorMessage(E_INVALID_ARG));
267 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
271 IList* pAddressbooks = null;
273 __Filter<__ContactsAddressbook> accountFilter;
274 accountFilter.Construct();
275 accountFilter.AddInt(_contacts_address_book.account_id, CONTACTS_MATCH_EQUAL, accountId);
277 unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
278 if (pRwAbFilter->Get() == null)
280 __Query<__ContactsAddressbook> query;
282 query.SetFilter(accountFilter);
284 pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
285 SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
289 __Filter<__ContactsAddressbook> mainFilter;
290 mainFilter.Construct();
292 mainFilter.AddFilter(*pRwAbFilter);
293 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
294 mainFilter.AddFilter(accountFilter);
296 __Query<__ContactsAddressbook> query;
298 query.SetFilter(mainFilter);
300 pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
301 SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
304 return pAddressbooks;
308 _AddressbookManagerImpl::GetAllAddressbooksN(void) const
310 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
314 __Filter<__ContactsAddressbook> abFilter;
315 abFilter.Construct();
316 abFilter.AddInt(_contacts_address_book.mode, CONTACTS_MATCH_EQUAL, 0);
318 __Query<__ContactsAddressbook> query;
320 query.SetFilter(abFilter);
321 query.SetSort(_contacts_address_book.name, true);
323 IList* pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
324 SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
326 return pAddressbooks;
330 _AddressbookManagerImpl::GetAddressbookN(AddressbookId addressbookId) const
332 SysTryReturn(NID_SCL, addressbookId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. addressbookId.", GetErrorMessage(E_INVALID_ARG), addressbookId);
333 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
337 result r = E_SUCCESS;
339 char* pCharValue = null;
341 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
342 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
344 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
345 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
347 unique_ptr<Addressbook> pAddressbook(new (std::nothrow) Addressbook());
348 SysTryReturn(NID_SCL, pAddressbook !=null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
350 r = pAddressbook->Construct();
351 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
353 _AddressbookImpl::GetInstance(*pAddressbook)->SetId(addressbookId);
355 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.account_id, &intValue);
356 _AddressbookImpl::GetInstance(*pAddressbook)->SetAccountId(intValue);
358 contacts_record_get_str_p(pAbRecord.get(), _contacts_address_book.name, &pCharValue);
359 _AddressbookImpl::GetInstance(*pAddressbook)->SetName(pCharValue);
361 return pAddressbook.release();
365 _AddressbookManagerImpl::AddContact(Contact& contact, AddressbookId addressbookId)
367 if (_ContactImpl::GetInstance(contact)->IsRemoved())
369 result r = _ContactImpl::GetInstance(contact)->Invalidate();
370 SysTryReturn(NID_SCL, r == E_SUCCESS, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
373 SysTryReturn(NID_SCL, contact.GetRecordId() == INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The ID of specified contact is not INVALID_RECORD_ID.", GetErrorMessage(E_INVALID_ARG));
374 SysTryReturn(NID_SCL, !_ContactImpl::GetInstance(contact)->IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified contact does not have any property.", GetErrorMessage(E_INVALID_ARG));
375 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
377 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
378 SysTryReturn(NID_SCL, pAbRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
381 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
382 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
384 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
385 contacts_record_set_int(recordHandle, _contacts_contact.address_book_id, addressbookId);
388 result r = _AddressbookUtil::InsertContactRecordN(recordHandle, recordId);
389 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
391 unique_ptr<ContactRecord, ContactRecordDeleter> pContactRecord(_AddressbookUtil::GetContactRecordN(_contacts_contact._uri, recordId));
392 SysTryReturn(NID_SCL, pContactRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
394 _ContactImpl::GetInstance(contact)->SetContactRecordHandle(pContactRecord.release());
395 _RecordImpl::GetInstance(contact)->SetRecordId(recordId);
401 _AddressbookManagerImpl::AddCategory(Category& category, AddressbookId addressbookId)
403 SysTryReturn(NID_SCL, category.GetRecordId() == INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified categoryId is not INVALID_RECORD_ID.", GetErrorMessage(E_INVALID_ARG));
404 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
406 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
407 SysTryReturn(NID_SCL, pAbRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
410 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
411 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
413 contacts_record_h recordHandle = _CategoryImpl::GetInstance(category)->GetRecordHandle();
414 contacts_record_set_int(recordHandle, _contacts_group.address_book_id, addressbookId);
417 result r = _AddressbookUtil::InsertContactRecordN(recordHandle, recordId);
418 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
420 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, recordId));
421 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
423 _CategoryImpl::GetInstance(category)->SetRecordHandle(pCategoryRecord.release());
424 _RecordImpl::GetInstance(category)->SetRecordId(recordId);
426 unique_ptr<IListT<int> > pList(_CategoryImpl::GetInstance(category)->GetAddedMembersN());
427 if (pList != null && pList->GetCount() > 0)
429 unique_ptr<IEnumeratorT<int> > pEnum(pList->GetEnumeratorN());
431 while (pEnum->MoveNext() == E_SUCCESS)
434 pEnum->GetCurrent(tableId);
436 AddMemberToCategory(category.GetRecordId(), tableId);
439 _CategoryImpl::GetInstance(category)->ClearAddedMemberList();
446 _AddressbookManagerImpl::RemoveContact(RecordId contactId)
448 SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified contactId is invalid.", GetErrorMessage(E_INVALID_ARG));
449 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
451 unique_ptr<ContactRecord, ContactRecordDeleter> pContactRecord(_AddressbookUtil::GetContactRecordN(_contacts_simple_contact._uri, contactId));
452 SysTryReturn(NID_SCL, pContactRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
455 contacts_record_get_int(pContactRecord.get(), _contacts_simple_contact.id, &intValue);
456 SysTryReturn(NID_SCL, intValue == contactId, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
458 int ret = contacts_db_delete_record(_contacts_contact._uri, contactId);
459 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
460 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
461 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
467 _AddressbookManagerImpl::RemoveCategory(RecordId categoryId)
469 SysTryReturn(NID_SCL, categoryId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. categoryId = %d.", GetErrorMessage(E_INVALID_ARG), categoryId);
470 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
472 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, categoryId));
473 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
476 contacts_record_get_int(pCategoryRecord.get(), _contacts_group.id, &intValue);
477 SysTryReturn(NID_SCL, intValue == categoryId, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
479 bool isReadOnly = false;
480 contacts_record_get_bool(pCategoryRecord.get(), _contacts_group.is_read_only, &isReadOnly);
481 SysTryReturn(NID_SCL, !isReadOnly, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified category is a default category.", GetErrorMessage(E_INVALID_ARG));
483 int ret = contacts_db_delete_record(_contacts_group._uri, categoryId);
484 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
485 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
486 // SysTryReturnResult(NID_SCL, ret == CONTACTS_ERROR_NONE, E_OPERATION_FAILED, "Failed to delete a category.(%d)", ret); // temp
492 _AddressbookManagerImpl::UpdateContact(const Contact& contact)
494 RecordId contactId = contact.GetRecordId();
495 SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified contactId is not INVALID_RECORD_ID.", GetErrorMessage(E_INVALID_ARG));
496 SysTryReturn(NID_SCL, !_ContactImpl::GetInstance(contact)->IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified contact does not have any property.", GetErrorMessage(E_INVALID_ARG));
497 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
499 unique_ptr<ContactRecord, ContactRecordDeleter> pContactRecord(_AddressbookUtil::GetContactRecordN(_contacts_simple_contact._uri, contactId));
500 SysTryReturn(NID_SCL, pContactRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
503 contacts_record_get_int(pContactRecord.get(), _contacts_simple_contact.id, &intValue);
504 SysTryReturn(NID_SCL, intValue == contactId, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
506 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
508 int ret = contacts_db_update_record(recordHandle);
509 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
510 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_FILE_NO_SPACE, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is insufficient.", GetErrorMessage(E_STORAGE_FULL));
511 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred. Failed to update a contact.", GetErrorMessage(E_SYSTEM));
513 pContactRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_contact._uri, contact.GetRecordId()));
514 SysTryReturn(NID_SCL, pContactRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
516 _ContactImpl::GetInstance(*const_cast<Contact*>(&contact))->SetContactRecordHandle(pContactRecord.release());
522 _AddressbookManagerImpl::UpdateCategory(const Category& category)
524 RecordId categoryId = category.GetRecordId();
525 SysTryReturn(NID_SCL, categoryId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified category is invalid.", GetErrorMessage(E_INVALID_ARG));
526 SysTryReturn(NID_SCL, !category.GetName().IsEmpty(), E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified category does not have name.", GetErrorMessage(E_INVALID_ARG));
527 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
529 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, category.GetRecordId()));
530 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
533 contacts_record_get_int(pCategoryRecord.get(), _contacts_group.id, &intValue);
534 SysTryReturn(NID_SCL, intValue == categoryId, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
536 contacts_record_h recordHandle = _CategoryImpl::GetInstance(category)->GetRecordHandle();
538 int ret = contacts_db_update_record(recordHandle);
539 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
540 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_FILE_NO_SPACE, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is insufficient.", GetErrorMessage(E_STORAGE_FULL));
541 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
543 pCategoryRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, category.GetRecordId()));
544 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
546 _CategoryImpl::GetInstance(*const_cast<Category*>(&category))->SetRecordHandle(pCategoryRecord.release());
548 unique_ptr<IListT<int> > pList(_CategoryImpl::GetInstance(category)->GetAddedMembersN());
549 if (pList != null && pList->GetCount() > 0)
552 unique_ptr<IEnumeratorT<int> > pEnum(pList->GetEnumeratorN());
553 while (pEnum->MoveNext() == E_SUCCESS)
555 pEnum->GetCurrent(tableId);
557 AddMemberToCategory(category.GetRecordId(), tableId);
560 const_cast<_CategoryImpl*>(_CategoryImpl::GetInstance(category))->ClearAddedMemberList();
563 pList.reset(_CategoryImpl::GetInstance(category)->GetRemovedMembersN());
564 if (pList != null && pList->GetCount() > 0)
567 unique_ptr<IEnumeratorT<int> > pEnum(pList->GetEnumeratorN());
568 while (pEnum->MoveNext() == E_SUCCESS)
570 pEnum->GetCurrent(tableId);
572 RemoveMemberFromCategory(category.GetRecordId(), tableId);
575 const_cast<_CategoryImpl*>(_CategoryImpl::GetInstance(category))->ClearRemovedMemberList();
582 _AddressbookManagerImpl::AddMemberToCategory(RecordId categoryId, RecordId contactId)
584 SysTryReturn(NID_SCL, categoryId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. categoryId = %d.", GetErrorMessage(E_INVALID_ARG), categoryId);
585 SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. contactId = %d.", GetErrorMessage(E_INVALID_ARG), contactId);
586 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
588 int ret = contacts_group_add_contact(categoryId, contactId);
589 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
590 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
591 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
597 _AddressbookManagerImpl::RemoveMemberFromCategory(RecordId categoryId, RecordId contactId)
599 SysTryReturn(NID_SCL, categoryId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. categoryId = %d.", GetErrorMessage(E_INVALID_ARG), categoryId);
600 SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. contactId = %d.", GetErrorMessage(E_INVALID_ARG), contactId);
601 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
603 int ret = contacts_group_remove_contact(categoryId, contactId);
604 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
605 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
606 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
612 _AddressbookManagerImpl::GetAllCategoriesN(void) const
614 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
618 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
620 __Query<__ContactsGroup> query;
622 query.SetSort(_contacts_group.name, true);
624 if (pRwAbFilter->Get() != null)
626 query.SetFilter(*pRwAbFilter);
629 IList* pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query);
630 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
636 _AddressbookManagerImpl::GetCategoriesByContactN(RecordId contactId) const
638 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
639 SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified contact is invalid.", GetErrorMessage(E_INVALID_ARG));
642 IList* pCategories = null;
644 unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
646 __Filter<__ContactsContactGroupRel> relFilter;
647 relFilter.Construct();
648 relFilter.AddInt(_contacts_contact_grouprel.contact_id, CONTACTS_MATCH_EQUAL, contactId);
650 if (pRwAbFilter->Get() != null)
652 __Filter<__ContactsContactGroupRel> mainFilter;
653 mainFilter.Construct();
654 mainFilter.AddFilter(*pRwAbFilter);
655 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
656 mainFilter.AddFilter(relFilter);
658 __Query<__ContactsContactGroupRel> query;
660 query.SetFilter(mainFilter);
662 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
663 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
667 __Query<__ContactsContactGroupRel> query;
669 query.SetFilter(relFilter);
671 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
672 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
679 _AddressbookManagerImpl::GetCategoriesByPersonN(PersonId personId) const
681 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
685 IList* pCategories = null;
687 unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
689 __Filter<__ContactsContactGroupRel> relFilter;
690 relFilter.Construct();
691 relFilter.AddInt(_contacts_contact_grouprel.person_id, CONTACTS_MATCH_EQUAL, personId);
692 relFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
693 relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_GREATER_THAN, 0);
695 unsigned int propertyIds[] =
697 _contacts_contact_grouprel.group_id,
700 if (pRwAbFilter->Get() != null)
703 __Filter<__ContactsContactGroupRel> mainFilter;
704 mainFilter.Construct();
705 mainFilter.AddFilter(*pRwAbFilter);
706 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
707 mainFilter.AddFilter(relFilter);
710 __Query<__ContactsContactGroupRel> query;
712 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
713 query.SetFilter(mainFilter);
714 query.SetSort(_contacts_contact_grouprel.group_name, true);
715 query.SetDistinct(true);
717 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
718 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
722 __Query<__ContactsContactGroupRel> query;
724 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
725 query.SetFilter(relFilter);
726 query.SetSort(_contacts_contact_grouprel.group_name, true);
727 query.SetDistinct(true);
729 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
730 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
738 _AddressbookManagerImpl::GetAllContactsN(void) const
740 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
744 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
746 __Query<__ContactsContact> query;
748 query.SetSort(_contacts_contact.display_name, true);
750 if (pRwAbFilter->Get() != null)
752 query.SetFilter(*pRwAbFilter);
755 IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
756 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
762 _AddressbookManagerImpl::GetContactsByCategoryN(RecordId categoryId) const
764 SysTryReturn(NID_SCL, categoryId >= INVALID_RECORD_ID, null, E_INVALID_ARG, "[%s] Invalid argument is used. The category ID must be greater than or equal to INVALID_RECORD_ID.", GetErrorMessage(E_INVALID_ARG));
765 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
769 IList* pContacts = null;
771 unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
773 __Filter<__ContactsContactGroupRel> relFilter;
774 relFilter.Construct();
776 if (categoryId != INVALID_RECORD_ID)
778 relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_EQUAL, categoryId);
782 relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_NONE, 0);
785 if (pRwAbFilter->Get() != null)
787 __Filter<__ContactsContactGroupRel> mainFilter;
788 mainFilter.Construct();
790 mainFilter.AddFilter(*pRwAbFilter);
791 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
792 mainFilter.AddFilter(relFilter);
794 __Query<__ContactsContactGroupRel> query;
796 query.SetFilter(mainFilter);
798 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Contact>(query);
799 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
803 __Query<__ContactsContactGroupRel> query;
805 query.SetFilter(relFilter);
807 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Contact>(query);
808 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
815 _AddressbookManagerImpl::GetContactsByPersonN(PersonId personId) const
817 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
821 IList* pContacts = null;
823 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
825 __Filter<__ContactsContact> contactFilter;
826 contactFilter.Construct();
827 contactFilter.AddInt(_contacts_contact.person_id, CONTACTS_MATCH_EQUAL, personId);
829 if (pRwAbFilter->Get() != null)
831 __Filter<__ContactsContact> mainFilter;
832 mainFilter.Construct();
834 mainFilter.AddFilter(*pRwAbFilter);
835 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
836 mainFilter.AddFilter(contactFilter);
838 __Query<__ContactsContact> query;
840 query.SetFilter(mainFilter);
841 query.SetSort(_contacts_contact.display_name, true);
843 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
844 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
848 __Query<__ContactsContact> query;
850 query.SetFilter(contactFilter);
851 query.SetSort(_contacts_contact.display_name, true);
853 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
854 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
861 _AddressbookManagerImpl::SearchContactsByEmailN(const String& email) const
863 SysTryReturn(NID_SCL, !email.IsEmpty(), null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified email is an empty string.", GetErrorMessage(E_INVALID_ARG));
864 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
868 IList* pContacts = null;
870 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
872 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(email));
873 SysTryReturn(NID_SCL, pCharArray != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
875 __Filter<__ContactsContactEmail> emailFilter;
876 emailFilter.Construct();
877 emailFilter.AddString(_contacts_contact_email.email, CONTACTS_MATCH_CONTAINS, pCharArray.get());
879 if (pRwAbFilter->Get() != null)
881 __Filter<__ContactsContactEmail> mainFilter;
882 mainFilter.Construct();
884 mainFilter.AddFilter(*pRwAbFilter);
885 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
886 mainFilter.AddFilter(emailFilter);
888 __Query<__ContactsContactEmail> query;
890 query.SetFilter(mainFilter);
891 query.SetSort(_contacts_contact_email.display_name, true);
893 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, Contact>(query);
894 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
898 __Query<__ContactsContactEmail> query;
900 query.SetFilter(emailFilter);
901 query.SetSort(_contacts_contact_email.display_name, true);
903 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, Contact>(query);
904 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
912 _AddressbookManagerImpl::SearchContactsByNameN(const String& name) const
914 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
918 IList* pContacts = null;
920 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
922 SysTryReturn(NID_SCL, !name.IsEmpty(), null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified email is an name string.", GetErrorMessage(E_INVALID_ARG));
924 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(name));
925 SysTryReturn(NID_SCL, pCharArray != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
927 __Filter<__ContactsContact> nameFilter;
928 nameFilter.Construct();
929 nameFilter.AddString(_contacts_contact.display_name, CONTACTS_MATCH_CONTAINS, pCharArray.get());
931 if (pRwAbFilter->Get() != null)
933 __Filter<__ContactsContact> mainFilter;
934 mainFilter.Construct();
936 mainFilter.AddFilter(*pRwAbFilter);
937 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
938 mainFilter.AddFilter(nameFilter);
940 __Query<__ContactsContact> query;
942 query.SetFilter(mainFilter);
943 query.SetSort(_contacts_contact.display_name, true);
945 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
946 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
950 __Query<__ContactsContact> query;
952 query.SetFilter(nameFilter);
953 query.SetSort(_contacts_contact.display_name, true);
955 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
956 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
963 _AddressbookManagerImpl::SearchContactsByPhoneNumberN(const String& phoneNumber) const
965 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
969 IList* pContacts = null;
971 SysTryReturn(NID_SCL, !phoneNumber.IsEmpty(), null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified phoneNumber is an empty string.", GetErrorMessage(E_INVALID_ARG));
973 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
975 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(phoneNumber));
976 SysTryReturn(NID_SCL, pCharArray != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
978 __Filter<__ContactsContactNumber> numberFilter;
979 numberFilter.Construct();
980 numberFilter.AddString(_contacts_contact_number.number, CONTACTS_MATCH_CONTAINS, pCharArray.get());
982 if (pRwAbFilter->Get() != null)
984 __Filter<__ContactsContactNumber> mainFilter;
985 mainFilter.Construct();
987 mainFilter.AddFilter(*pRwAbFilter);
988 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
989 mainFilter.AddFilter(numberFilter);
991 __Query<__ContactsContactNumber> query;
993 query.SetFilter(mainFilter);
994 query.SetDistinct(true);
995 query.SetSort(_contacts_contact_number.display_name, true);
997 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, Contact>(query);
998 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1002 __Query<__ContactsContactNumber> query;
1004 query.SetFilter(numberFilter);
1005 query.SetDistinct(true);
1006 query.SetSort(_contacts_contact_number.display_name, true);
1008 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, Contact>(query);
1009 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1017 _AddressbookManagerImpl::GetCategoryCount(void) const
1019 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1023 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1025 int count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(pRwAbFilter->Get());
1026 SysTryReturn(NID_SCL, count >= 0, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1032 _AddressbookManagerImpl::GetContactCount(void) const
1034 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1038 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1040 int count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(pRwAbFilter->Get());
1041 SysTryReturn(NID_SCL, count >= 0, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1047 _AddressbookManagerImpl::GetContactN(RecordId contactId) const
1049 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1050 SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, null, E_INVALID_ARG, "[%s] Invalid argument is used. contactId = %d.", GetErrorMessage(E_INVALID_ARG), contactId);
1054 unique_ptr<ContactRecord, ContactRecordDeleter> pContactRecord(_AddressbookUtil::GetContactRecordN(_contacts_contact._uri, contactId));
1055 SysTryReturn(NID_SCL, pContactRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1058 contacts_record_get_int(pContactRecord.get(), _contacts_contact.address_book_id, &intValue);
1060 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, intValue));
1061 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1063 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
1064 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Contact does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
1066 contacts_record_get_int(pContactRecord.get(), _contacts_contact.id, &intValue);
1067 SysTryReturn(NID_SCL, intValue == contactId, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
1069 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
1070 SysTryReturn(NID_SCL, pContact, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1072 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(pContactRecord.release());
1073 _RecordImpl::GetInstance(*pContact)->SetRecordId(intValue);
1075 return pContact.release();
1079 _AddressbookManagerImpl::GetPersonN(PersonId personId) const
1081 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1082 SysTryReturn(NID_SCL, personId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. personId = %d.", GetErrorMessage(E_INVALID_ARG), personId);
1086 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, personId));
1089 contacts_record_get_int(pPersonRecord.get(), _contacts_person.id, &intValue);
1090 SysTryReturn(NID_SCL, intValue == personId, null, E_OBJ_NOT_FOUND, "[%s] The person is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
1092 Person* pPerson = __ContactsPerson::ConvertHandleTo<Person>(pPersonRecord.get());
1093 SysTryReturn(NID_SCL, pPerson != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1099 _AddressbookManagerImpl::GetCategoryN(RecordId categoryId) const
1101 SysTryReturn(NID_SCL, categoryId != INVALID_RECORD_ID, null, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. categoryId = %d.", categoryId);
1102 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1106 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, categoryId));
1107 SysTryReturn(NID_SCL, pCategoryRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1111 contacts_record_get_int(pCategoryRecord.get(), _contacts_group.id, &intValue);
1112 SysTryReturn(NID_SCL, categoryId == intValue, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
1114 contacts_record_get_int(pCategoryRecord.get(), _contacts_group.address_book_id, &intValue);
1116 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, intValue));
1117 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1119 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
1120 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Category does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
1122 unique_ptr<Category> pCategory(new (std::nothrow) Category());
1123 SysTryReturn(NID_SCL, pCategory != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1125 __Filter<__ContactsGroupRelation> filter;
1127 filter.AddInt(_contacts_group_relation.group_id, CONTACTS_MATCH_EQUAL, categoryId);
1129 __Query<__ContactsGroupRelation> query;
1131 query.SetFilter(filter);
1133 int count = _AddressbookUtil::GetCountWithQuery(query);
1134 SysTryReturn(NID_SCL, count >= 0, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1136 _CategoryImpl::GetInstance(*pCategory)->SetRecordHandle(pCategoryRecord.release());
1137 _CategoryImpl::GetInstance(*pCategory)->SetMemberCount(count);
1138 _RecordImpl::GetInstance(*pCategory)->SetRecordId(categoryId);
1140 return pCategory.release();
1144 _AddressbookManagerImpl::GetLatestVersion(void) const
1146 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1148 int latestVersion = -1;
1152 int ret = contacts_db_get_current_version(&latestVersion);
1153 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, -1, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1155 return latestVersion;
1159 _AddressbookManagerImpl::GetChangedContactsAfterN(int version, int& latestVersion) const
1161 SysTryReturn(NID_SCL, version >= 0, null, E_INVALID_ARG, "[%s] Invalid arguent is used. version %d must be greater that or equal 0.", GetErrorMessage(E_INVALID_ARG), version);
1162 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1166 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1168 IList* pChangedContacts = _AddressbookUtil::SearchWithVersionN<__ContactsContactUpdatedInfo, ContactChangeInfo>(-1, version, latestVersion, pRwAbIdList.get());
1169 SysTryReturn(NID_SCL, pChangedContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1171 return pChangedContacts;
1175 _AddressbookManagerImpl::GetChangedCategoriesAfterN(int version, int& latestVersion) const
1177 SysTryReturn(NID_SCL, version >= 0, null, E_INVALID_ARG, "[%s] Invalid arguemnt is used. version %d must be greater that or equal 0.", GetErrorMessage(E_INVALID_ARG), version);
1178 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1182 int latestVersion1 = 0;
1183 int latestVersion2 = 0;
1185 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1187 unique_ptr<IList, AllElementsDeleter> pChangedGroups(_AddressbookUtil::SearchWithVersionN<__ContactsGroupUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion1, pRwAbIdList.get()));
1188 SysTryReturn(NID_SCL, pChangedGroups != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1190 unique_ptr<IList, AllElementsDeleter> pChangedRelations(_AddressbookUtil::SearchWithVersionN<__ContactsGroupRelUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion2, pRwAbIdList.get()));
1191 SysTryReturn(NID_SCL, pChangedRelations != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1193 unique_ptr<ArrayList, AllElementsDeleter> pChangeList(new (std::nothrow) Tizen::Base::Collection::ArrayList());
1194 SysTryReturn(NID_SCL, pChangeList != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1196 result r = pChangeList->AddItems(*pChangedGroups);
1197 SysTryReturn(NID_SCL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1199 r = pChangeList->AddItems(*pChangedRelations);
1200 SysTryReturn(NID_SCL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1202 pChangedGroups->RemoveAll(false);
1203 pChangedRelations->RemoveAll(false);
1205 latestVersion = latestVersion2 > latestVersion1 ? latestVersion2 : latestVersion1;
1207 return pChangeList.release();
1211 _AddressbookManagerImpl::GetChangedGroupsAfterN(int version, int& latestVersion) const
1213 SysTryReturn(NID_SCL, version >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. version %d must be greater that or equal 0.", GetErrorMessage(E_INVALID_ARG), version);
1214 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1218 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1220 IList* pChangedRelations = _AddressbookUtil::SearchWithVersionN<__ContactsGroupUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion, pRwAbIdList.get());
1221 SysTryReturn(NID_SCL, pChangedRelations != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1223 return pChangedRelations;
1227 _AddressbookManagerImpl::GetChangedRelationsAfterN(int version, int& latestVersion) const
1229 SysTryReturn(NID_SCL, version >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. version %d must be greater that or equal 0.", GetErrorMessage(E_INVALID_ARG), version);
1230 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1234 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1236 IList* pChangedRelations = _AddressbookUtil::SearchWithVersionN<__ContactsGroupRelUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion, pRwAbIdList.get());
1237 SysTryReturn(NID_SCL, pChangedRelations != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1239 return pChangedRelations;
1243 _AddressbookManagerImpl::OnContactChanged(void)
1245 if (__pIAddressbookChangeEventListener == null && __pIAddressbookEventListener == null)
1250 IList* pChangedContactList = GetChangedContactsAfterN(__dbVersionForContact, __dbVersionForContact);
1251 SysTryReturnVoidResult(NID_SCL, pChangedContactList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1253 if (pChangedContactList->GetCount() > 0)
1255 if (__pIAddressbookChangeEventListener != null)
1257 __pIAddressbookChangeEventListener->OnContactsChanged(*pChangedContactList);
1261 __pIAddressbookEventListener->OnContactsChanged(*pChangedContactList);
1265 pChangedContactList->RemoveAll(true);
1266 delete pChangedContactList;
1270 _AddressbookManagerImpl::OnCategoryChanged(void)
1272 if (__pIAddressbookChangeEventListener == null && __pIAddressbookEventListener == null)
1277 IList* pChangedCategoryList = GetChangedGroupsAfterN(__dbVersionForGroup, __dbVersionForGroup);
1278 SysTryReturnVoidResult(NID_SCL, pChangedCategoryList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1280 if (pChangedCategoryList->GetCount() > 0)
1282 if (__pIAddressbookChangeEventListener != null)
1284 __pIAddressbookChangeEventListener->OnCategoriesChanged(*pChangedCategoryList);
1288 __pIAddressbookEventListener->OnCategoriesChanged(*pChangedCategoryList);
1292 pChangedCategoryList->RemoveAll(true);
1293 delete pChangedCategoryList;
1297 _AddressbookManagerImpl::OnRelationChanged(void)
1299 if (__pIAddressbookEventListener == null)
1304 IList* pChangedCategoryList = GetChangedRelationsAfterN(__dbVersionForRelation, __dbVersionForRelation);
1305 SysTryReturnVoidResult(NID_SCL, pChangedCategoryList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1307 if (pChangedCategoryList->GetCount() > 0)
1309 if (__pIAddressbookEventListener != null)
1311 __pIAddressbookEventListener->OnCategoriesChanged(*pChangedCategoryList);
1315 pChangedCategoryList->RemoveAll(true);
1316 delete pChangedCategoryList;
1320 _AddressbookManagerImpl::RemovePerson(PersonId personId)
1322 SysTryReturnResult(NID_SCL, personId > 0, E_INVALID_ARG, "[%s] Invalid argument is used. personId = %d.", GetErrorMessage(E_INVALID_ARG), personId);
1323 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1325 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, personId));
1326 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1328 int ret = contacts_db_delete_record(_contacts_person._uri, personId);
1329 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_NO_DATA, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] The person is not found.");
1330 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1331 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred. Failed remove a person.", GetErrorMessage(E_SYSTEM));
1337 _AddressbookManagerImpl::GetAllPersonsN(void) const
1339 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1343 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1345 unsigned int propertyIds[] =
1347 _contacts_person_grouprel.person_id,
1348 _contacts_person_grouprel.display_name,
1349 _contacts_person_grouprel.image_thumbnail_path,
1350 _contacts_person_grouprel.ringtone_path,
1351 _contacts_person_grouprel.is_favorite,
1352 _contacts_person_grouprel.has_phonenumber,
1353 _contacts_person_grouprel.has_email,
1354 _contacts_person_grouprel.addressbook_ids,
1358 __Query<__ContactsPersonGroupRel> query;
1360 query.SetSort(_contacts_person.display_name, true);
1361 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1362 query.SetDistinct(true);
1364 if (pRwAbFilter->Get() != null)
1366 query.SetFilter(*pRwAbFilter);
1369 IList* pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
1370 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1376 _AddressbookManagerImpl::GetPersonsByCategoryN(RecordId categoryId) const
1378 SysTryReturn(NID_SCL, categoryId >= INVALID_RECORD_ID, null, E_INVALID_ARG, "[%s] Invalid argument is used. The specified categoryId is less than INVALID_RECORD_ID.", GetErrorMessage(E_INVALID_ARG));
1379 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1383 IList* pPersons = null;
1385 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1387 __Filter<__ContactsPersonGroupRel> groupFilter;
1388 groupFilter.Construct();
1389 if (categoryId != INVALID_RECORD_ID)
1391 groupFilter.AddInt(_contacts_person_grouprel.group_id, CONTACTS_MATCH_EQUAL, categoryId);
1395 groupFilter.AddInt(_contacts_person_grouprel.group_id, CONTACTS_MATCH_NONE, 0);
1398 unsigned int propertyIds[] =
1400 _contacts_person_grouprel.person_id,
1401 _contacts_person_grouprel.display_name,
1402 _contacts_person_grouprel.image_thumbnail_path,
1403 _contacts_person_grouprel.ringtone_path,
1404 _contacts_person_grouprel.is_favorite,
1405 _contacts_person_grouprel.has_phonenumber,
1406 _contacts_person_grouprel.has_email,
1407 _contacts_person_grouprel.addressbook_ids,
1410 if (pRwAbFilter->Get() != null)
1412 __Filter<__ContactsPersonGroupRel> mainFilter;
1413 mainFilter.Construct();
1415 mainFilter.AddFilter(*pRwAbFilter);
1416 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1417 mainFilter.AddFilter(groupFilter);
1419 __Query<__ContactsPersonGroupRel> query;
1421 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1422 query.SetFilter(mainFilter);
1423 query.SetSort(_contacts_person_grouprel.display_name, true);
1424 query.SetDistinct(true);
1426 pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
1427 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1431 __Query<__ContactsPersonGroupRel> query;
1433 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1434 query.SetFilter(groupFilter);
1435 query.SetSort(_contacts_person_grouprel.display_name, true);
1436 query.SetDistinct(true);
1438 pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
1439 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1447 _AddressbookManagerImpl::GetFavoritePersonsN() const
1449 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1453 __Filter<__ContactsPerson> filter;
1455 filter.AddBool(_contacts_person.is_favorite, true);
1457 __Query<__ContactsPerson> query;
1459 query.SetFilter(filter);
1460 query.SetSort(_contacts_person.display_name, true);
1462 IList* pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPerson, Person>(query);
1463 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1469 _AddressbookManagerImpl::SearchPersonsN(const Tizen::Base::String& keyword) const
1471 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1472 SysTryReturn(NID_SCL, !keyword.IsEmpty(), null, E_INVALID_ARG, "Invalid argument is used. keyword is empty string.", GetErrorMessage(E_INVALID_ARG));
1476 contacts_record_h currentRecord = null;
1477 unique_ptr<Person> pPerson(null);
1479 unique_ptr<ArrayList, AllElementsDeleter> pPersonList(new (std::nothrow) ArrayList());
1480 SysTryReturn(NID_SCL, pPersonList != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1482 result r = pPersonList->Construct();
1483 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1485 unique_ptr<__SearchResult<__ContactsPerson> > pSearchResult(_AddressbookUtil::Search<__ContactsPerson>(keyword));
1486 SysTryReturn(NID_SCL, pSearchResult != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1488 while (pSearchResult->MoveNext() == E_SUCCESS)
1490 currentRecord = pSearchResult->GetCurrentRecord();
1491 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1493 pPerson.reset(__ContactsPerson::ConvertHandleTo<Person>(currentRecord));
1494 SysTryReturn(NID_SCL, pPerson != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1496 r = pPersonList->Add(*pPerson);
1497 SysTryReturn(NID_SCL, !IsFailed(r), null, r, "[%s] Propagating.", GetErrorMessage(r));
1502 return pPersonList.release();
1506 _AddressbookManagerImpl::SetPersonAsFavorite(PersonId personId, bool isFavorite)
1508 SysTryReturn(NID_SCL, personId > 0, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. personId = %d.", GetErrorMessage(E_INVALID_ARG), personId);
1509 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1511 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, personId));
1512 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1514 bool boolValue = false;
1515 contacts_record_get_bool(pPersonRecord.get(), _contacts_person.is_favorite, &boolValue);
1517 if (boolValue != isFavorite)
1519 contacts_record_set_bool(pPersonRecord.get(), _contacts_person.is_favorite, isFavorite);
1521 int ret = contacts_db_update_record(pPersonRecord.get());
1522 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1523 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1530 _AddressbookManagerImpl::MergePersons(PersonId sourcePersonId, PersonId targetPersonId)
1532 SysTryReturn(NID_SCL, sourcePersonId > 0 && targetPersonId > 0, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. sourcePersonId %d and targetPersonId must be greater than 0.", GetErrorMessage(E_INVALID_ARG), sourcePersonId, targetPersonId);
1533 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1535 int ret = contacts_person_link_person(targetPersonId, sourcePersonId);
1536 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1537 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1543 _AddressbookManagerImpl::UnlinkContact(PersonId personId, RecordId contactId, PersonId& newPersonId)
1545 SysTryReturn(NID_SCL, personId > 0 && contactId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. personId %d must be greater thant 0 and contactId %d must not be INVALID_RECORD_ID.", GetErrorMessage(E_INVALID_ARG), personId, contactId);
1546 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1548 int ret = contacts_person_unlink_contact(personId, contactId, &newPersonId);
1549 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1550 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1556 _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long propertySortedBy, SortOrder sortOrder, int offset, int maxCount)
1558 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1562 IList* pList = null;
1563 bool ascending = false;
1564 unsigned int viewSortPropertyId = 0;
1566 AddressbookFilterType type = _AddressbookFilterImpl::GetInstance(filter)->GetType();
1567 contacts_filter_h filterHandle = _AddressbookFilterImpl::GetInstance(filter)->GetFilterHandle();
1569 SysTryReturn(NID_SCL, propertySortedBy == 0 || _AddressbookFilterImpl::IsValidProperty(type, propertySortedBy), null, E_INVALID_ARG, "[%s] Invalid argument is used. The protertyToSort %d can not be used for property for sorting.", GetErrorMessage(E_INVALID_ARG), propertySortedBy);
1571 if (propertySortedBy != 0 && sortOrder != SORT_ORDER_NONE)
1573 viewSortPropertyId = _AddressbookFilterImpl::GetViewPropertyId(type, propertySortedBy);
1574 ascending = (sortOrder == SORT_ORDER_ASCENDING) ? true : false;
1579 case AB_FI_TYPE_ADDRESSBOOK:
1581 unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
1583 __Filter<__ContactsAddressbook> abFilter;
1584 abFilter.Construct(filterHandle);
1586 if (pRwAbFilter->Get() != null)
1588 __Filter<__ContactsAddressbook> mainFilter;
1589 mainFilter.Construct();
1591 mainFilter.AddFilter(*pRwAbFilter);
1592 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1593 mainFilter.AddFilter(abFilter);
1595 __Query<__ContactsAddressbook> query;
1597 query.SetFilter(mainFilter);
1599 if (viewSortPropertyId != 0)
1601 query.SetSort(viewSortPropertyId, ascending);
1604 pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
1608 __Query<__ContactsAddressbook> query;
1610 query.SetFilter(abFilter);
1612 if (viewSortPropertyId != 0)
1614 query.SetSort(viewSortPropertyId, ascending);
1617 pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
1622 case AB_FI_TYPE_PERSON:
1624 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1626 __Filter<__ContactsPersonGroupRel> personFilter;
1627 personFilter.Construct(filterHandle);
1629 unsigned int propertyIds[] =
1630 { _contacts_person_grouprel.person_id,
1631 _contacts_person_grouprel.addressbook_ids,
1632 _contacts_person_grouprel.is_favorite,
1633 _contacts_person_grouprel.has_phonenumber,
1634 _contacts_person_grouprel.has_email,
1635 _contacts_person_grouprel.image_thumbnail_path,
1636 _contacts_person_grouprel.ringtone_path,
1637 _contacts_person_grouprel.display_name
1640 if (pRwAbFilter->Get() != null)
1642 __Filter<__ContactsPersonGroupRel> mainFilter;
1643 mainFilter.Construct();
1645 mainFilter.AddFilter(*pRwAbFilter);
1646 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1647 mainFilter.AddFilter(personFilter);
1649 __Query<__ContactsPersonGroupRel> query;
1651 query.SetFilter(mainFilter);
1652 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1653 query.SetDistinct(true);
1655 if (viewSortPropertyId != 0)
1657 query.SetSort(viewSortPropertyId, ascending);
1660 pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
1664 __Query<__ContactsPersonGroupRel> query;
1666 query.SetFilter(personFilter);
1667 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1668 query.SetDistinct(true);
1670 if (viewSortPropertyId != 0)
1672 query.SetSort(viewSortPropertyId, ascending);
1675 pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
1679 case AB_FI_TYPE_CONTACT:
1681 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1683 __Filter<__ContactsContact> contactFilter;
1684 contactFilter.Construct(filterHandle);
1686 if (pRwAbFilter->Get() != null)
1688 __Filter<__ContactsContact> mainFilter;
1689 mainFilter.Construct();
1691 mainFilter.AddFilter(*pRwAbFilter);
1692 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1693 mainFilter.AddFilter(contactFilter);
1695 __Query<__ContactsContact> query;
1697 query.SetFilter(mainFilter);
1699 if (viewSortPropertyId != 0)
1701 query.SetSort(viewSortPropertyId, ascending);
1704 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
1708 __Query<__ContactsContact> query;
1710 query.SetFilter(contactFilter);
1712 if (viewSortPropertyId != 0)
1714 query.SetSort(viewSortPropertyId, ascending);
1717 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
1722 case AB_FI_TYPE_CATEGORY:
1724 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1726 __Filter<__ContactsGroup> groupFilter;
1727 groupFilter.Construct(filterHandle);
1729 if (pRwAbFilter->Get() != null)
1731 __Filter<__ContactsGroup> mainFilter;
1732 mainFilter.Construct();
1734 mainFilter.AddFilter(*pRwAbFilter);
1735 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1736 mainFilter.AddFilter(groupFilter);
1738 __Query<__ContactsGroup> query;
1740 query.SetFilter(mainFilter);
1742 if (viewSortPropertyId != 0)
1744 query.SetSort(viewSortPropertyId, ascending);
1747 pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
1751 __Query<__ContactsGroup> query;
1753 query.SetFilter(groupFilter);
1755 if (viewSortPropertyId != 0)
1757 query.SetSort(viewSortPropertyId, ascending);
1760 pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
1764 case AB_FI_TYPE_PHONE_CONTACT:
1766 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
1768 __Filter<__ContactsContactNumber> numberFilter;
1769 numberFilter.Construct(filterHandle);
1771 if (pRwAbFilter->Get() != null)
1773 __Filter<__ContactsContactNumber> mainFilter;
1774 mainFilter.Construct();
1776 mainFilter.AddFilter(*pRwAbFilter);
1777 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1778 mainFilter.AddFilter(numberFilter);
1780 __Query<__ContactsContactNumber> query;
1782 query.SetFilter(mainFilter);
1784 if (viewSortPropertyId != 0)
1786 query.SetSort(viewSortPropertyId, ascending);
1789 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
1793 __Query<__ContactsContactNumber> query;
1795 query.SetFilter(numberFilter);
1797 if (viewSortPropertyId != 0)
1799 query.SetSort(viewSortPropertyId, ascending);
1802 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
1806 case AB_FI_TYPE_EMAIL_CONTACT:
1808 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
1810 __Filter<__ContactsContactEmail> emailFilter;
1811 emailFilter.Construct(filterHandle);
1813 if (pRwAbFilter->Get() != null)
1815 __Filter<__ContactsContactEmail> mainFilter;
1816 mainFilter.Construct();
1818 mainFilter.AddFilter(*pRwAbFilter);
1819 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1820 mainFilter.AddFilter(emailFilter);
1822 __Query<__ContactsContactEmail> query;
1824 query.SetFilter(mainFilter);
1826 if (viewSortPropertyId != 0)
1828 query.SetSort(viewSortPropertyId, ascending);
1831 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
1835 __Query<__ContactsContactEmail> query;
1837 query.SetFilter(emailFilter);
1839 if (viewSortPropertyId != 0)
1841 query.SetSort(viewSortPropertyId, ascending);
1844 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
1849 SysLogException(NID_SCL, E_INVALID_ARG, "[%s] Invalid argument is used. The filter type is invalid", GetErrorMessage(E_INVALID_ARG));
1857 _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
1859 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1864 AddressbookFilterType type = _AddressbookFilterImpl::GetInstance(filter)->GetType();
1865 contacts_filter_h filterHandle = _AddressbookFilterImpl::GetInstance(filter)->GetFilterHandle();
1869 case AB_FI_TYPE_ADDRESSBOOK:
1871 unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
1873 __Filter<__ContactsAddressbook> abFilter;
1874 abFilter.Construct(filterHandle);
1876 if (pRwAbFilter->Get() != null)
1878 __Filter<__ContactsAddressbook> mainFilter;
1879 mainFilter.Construct();
1880 mainFilter.AddFilter(*pRwAbFilter);
1881 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1882 mainFilter.AddFilter(abFilter);
1884 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(mainFilter.Get());
1888 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(abFilter.Get());
1892 case AB_FI_TYPE_PERSON:
1894 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1896 __Filter<__ContactsPersonGroupRel> personFilter;
1897 personFilter.Construct(filterHandle);
1899 if (pRwAbFilter->Get() != null)
1901 __Filter<__ContactsPersonGroupRel> mainFilter;
1902 mainFilter.Construct();
1903 mainFilter.AddFilter(*pRwAbFilter);
1904 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1905 mainFilter.AddFilter(personFilter);
1907 unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
1909 __Query<__ContactsPersonGroupRel> query;
1911 query.SetFilter(mainFilter);
1912 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1913 query.SetDistinct(true);
1915 count = _AddressbookUtil::GetCountWithQuery(query);
1919 unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
1921 __Query<__ContactsPersonGroupRel> query;
1923 query.SetFilter(personFilter);
1924 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1925 query.SetDistinct(true);
1927 count = _AddressbookUtil::GetCountWithQuery(query);
1933 case AB_FI_TYPE_CONTACT:
1935 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1937 __Filter<__ContactsContact> contactFilter;
1938 contactFilter.Construct(filterHandle);
1940 if (pRwAbFilter->Get() != null)
1942 __Filter<__ContactsContact> mainFilter;
1943 mainFilter.Construct();
1944 mainFilter.AddFilter(*pRwAbFilter);
1945 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1946 mainFilter.AddFilter(contactFilter);
1948 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(mainFilter.Get());
1952 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(contactFilter.Get());
1956 case AB_FI_TYPE_CATEGORY:
1958 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1960 __Filter<__ContactsGroup> groupFilter;
1961 groupFilter.Construct(filterHandle);
1963 if (pRwAbFilter->Get() != null)
1965 __Filter<__ContactsGroup> mainFilter;
1966 mainFilter.Construct();
1967 mainFilter.AddFilter(*pRwAbFilter);
1968 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1969 mainFilter.AddFilter(groupFilter);
1971 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(mainFilter.Get());
1975 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(groupFilter.Get());
1979 case AB_FI_TYPE_PHONE_CONTACT:
1981 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
1983 __Filter<__ContactsContactNumber> numberFilter;
1984 numberFilter.Construct(filterHandle);
1986 if (pRwAbFilter->Get() != null)
1988 __Filter<__ContactsContactNumber> mainFilter;
1989 mainFilter.Construct();
1990 mainFilter.AddFilter(*pRwAbFilter);
1991 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1992 mainFilter.AddFilter(numberFilter);
1994 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(mainFilter.Get());
1998 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(numberFilter.Get());
2002 case AB_FI_TYPE_EMAIL_CONTACT:
2004 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
2006 __Filter<__ContactsContactEmail> emailFilter;
2007 emailFilter.Construct(filterHandle);
2009 if (pRwAbFilter->Get() != null)
2011 __Filter<__ContactsContactEmail> mainFilter;
2012 mainFilter.Construct();
2013 mainFilter.AddFilter(*pRwAbFilter);
2014 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
2015 mainFilter.AddFilter(emailFilter);
2017 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(mainFilter.Get());
2021 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(emailFilter.Get());
2026 SysLogException(NID_SCL, E_INVALID_ARG, "[%s] Invalid argument is used. The type of the filter is invalid", GetErrorMessage(GetLastResult()));
2034 _AddressbookManagerImpl::OnEachContact(contacts_record_h recordHandle, void* pUserData)
2036 IList* pList = static_cast<IList*>(pUserData);
2040 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
2041 SysTryReturn(NID_SCL, pContact != null, false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2043 contacts_record_h newRecordHandle = null;
2045 contacts_record_clone(recordHandle, &newRecordHandle);
2046 SysTryReturn(NID_SCL, newRecordHandle != null, false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2048 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(newRecordHandle);
2050 result r = pList->Add(*pContact);
2051 SysTryReturn(NID_SCL, !IsFailed(r), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2059 _AddressbookManagerImpl::ParseContactsFromVcardN(const Tizen::Base::String& vcardPath)
2061 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2066 result r = file.Construct(vcardPath, "r");
2067 SysTryReturn(NID_SCL, r != E_INVALID_ARG, null, E_INVALID_ARG, "[%s] Invalid argument is used..", GetErrorMessage(E_INVALID_ARG));
2068 SysTryReturn(NID_SCL, r != E_ILLEGAL_ACCESS, null, E_ILLEGAL_ACCESS, "[%s] Access to the vcard file is denied due to insufficient permission.", GetErrorMessage(E_ILLEGAL_ACCESS));
2069 SysTryReturn(NID_SCL, r != E_FILE_NOT_FOUND, null, E_FILE_NOT_FOUND, "[%s] The specified file does not exist.", GetErrorMessage(E_FILE_NOT_FOUND));
2070 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2072 unique_ptr<ArrayList, AllElementsDeleter> pList(new (std::nothrow) ArrayList());
2074 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(vcardPath));
2076 int ret = contacts_vcard_parse_to_contact_foreach(pCharArray.get(), OnEachContact, pList.get());
2077 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2078 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2079 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2081 return pList.release();
2085 _AddressbookManagerImpl::ExportPersonToVcard(const Person& person, const Tizen::Base::String& vcardPath)
2087 bool exist = File::IsFileExist(vcardPath);
2088 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2089 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2090 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2093 result r = file.Construct(vcardPath, "w");
2094 SysTryReturn(NID_SCL, r != E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, "[%s] Access to the vcard file is denied due to insufficient permission.", GetErrorMessage(E_ILLEGAL_ACCESS));
2095 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2096 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2098 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, person.GetId()));
2099 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2101 char* pVcardStream = null;
2102 int ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2103 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2104 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2106 r = file.Write(pVcardStream, strlen(pVcardStream));
2108 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2109 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2115 _AddressbookManagerImpl::ExportPersonsToVcard(const Tizen::Base::Collection::IList& personList, const Tizen::Base::String& vcardPath)
2117 bool exist = File::IsFileExist(vcardPath);
2118 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2119 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2120 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2122 int ret = CONTACTS_ERROR_NONE;
2123 char* pVcardStream = null;
2126 result r = file.Construct(vcardPath, "w");
2127 SysTryReturn(NID_SCL, r != E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, "[%s] Access to the vcard file is denied due to insufficient permission.", GetErrorMessage(E_ILLEGAL_ACCESS));
2128 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2129 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2132 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(null);
2134 unique_ptr<IEnumerator> pEnum(personList.GetEnumeratorN());
2135 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2137 while (pEnum->MoveNext() == E_SUCCESS)
2139 Person* pPerson = static_cast<Person*>(pEnum->GetCurrent());
2141 pPersonRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, pPerson->GetId()));
2142 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2144 ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2145 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2146 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2148 r = file.Write(pVcardStream, strlen(pVcardStream));
2150 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2151 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2158 _AddressbookManagerImpl::ExportContactToVcard(const Contact& contact, const Tizen::Base::String& vcardPath)
2160 bool exist = File::IsFileExist(vcardPath);
2161 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2162 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2163 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2166 result r = file.Construct(vcardPath, "w");
2167 SysTryReturn(NID_SCL, r != E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, "[%s] Access to the vcard file is denied due to insufficient permission.", GetErrorMessage(E_ILLEGAL_ACCESS));
2168 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2169 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2171 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
2173 char* pVcardStream = null;
2175 int ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2176 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2177 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2179 r = file.Write(pVcardStream, strlen(pVcardStream));
2181 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2182 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2188 _AddressbookManagerImpl::ExportContactsToVcard(const Tizen::Base::Collection::IList& contactList, const Tizen::Base::String& vcardPath)
2190 bool exist = File::IsFileExist(vcardPath);
2191 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2192 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2193 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2195 int ret = CONTACTS_ERROR_NONE;
2196 char* pVcardStream = null;
2198 Contact* pContact = null;
2200 result r = file.Construct(vcardPath, "w");
2201 SysTryReturn(NID_SCL, r != E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, "[%s] Access to the vcard file is denied due to insufficient permission.", GetErrorMessage(E_ILLEGAL_ACCESS));
2202 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2203 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2205 contacts_record_h recordHandle = null;
2207 unique_ptr<IEnumerator> pEnum(contactList.GetEnumeratorN());
2208 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2210 while (pEnum->MoveNext() == E_SUCCESS)
2212 pContact = static_cast<Contact*>(pEnum->GetCurrent());
2214 recordHandle = _ContactImpl::GetInstance(*pContact)->GetContactRecordHandle();
2216 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2217 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2218 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2220 r = file.Write(pVcardStream, strlen(pVcardStream));
2222 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2223 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2230 _AddressbookManagerImpl::ExportContactToVcardStreamN(const Contact& contact)
2232 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2236 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
2238 char* pVcardStream = null;
2239 int ret = CONTACTS_ERROR_NONE;
2241 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2242 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2243 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2244 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2246 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2247 if (pByteBuffer == null)
2250 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2255 result r = pByteBuffer->Construct(strlen(pVcardStream));
2259 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2264 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2266 SysTryReturn(NID_SCL, r != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2267 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2269 return pByteBuffer.release();
2273 _AddressbookManagerImpl::ExportContactsToVcardStreamN(const Tizen::Base::Collection::IList& contactList)
2275 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2279 char* pVcardStream = null;
2280 int ret = CONTACTS_ERROR_NONE;
2281 Contact* pContact = null;
2282 result r = E_SUCCESS;
2285 contacts_record_h recordHandle = null;
2287 unique_ptr<IEnumerator> pEnum(contactList.GetEnumeratorN());
2288 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2290 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2291 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2293 r = pByteBuffer->Construct(capacity);
2294 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2296 if (contactList.GetCount() == 0)
2298 return pByteBuffer.release();
2301 while (pEnum->MoveNext() == E_SUCCESS)
2303 pContact = static_cast<Contact*>(pEnum->GetCurrent());
2305 recordHandle = _ContactImpl::GetInstance(*pContact)->GetContactRecordHandle();
2307 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2308 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2309 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2310 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2312 capacity += strlen(pVcardStream);
2313 r = pByteBuffer->ExpandCapacity(capacity);
2317 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2322 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2324 pVcardStream = null;
2325 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.: capacity(%d), size(%d)", GetErrorMessage(E_SYSTEM));
2328 return pByteBuffer.release();
2332 _AddressbookManagerImpl::ExportPersonToVcardStreamN(const Person& person)
2334 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2338 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, person.GetId()));
2339 SysTryReturn(NID_SCL, GetLastResult() != E_OBJ_NOT_FOUND, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2340 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2342 char* pVcardStream = null;
2343 int ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2344 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2345 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2346 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2348 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2349 if (pByteBuffer == null)
2352 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2357 result r = pByteBuffer->Construct(strlen(pVcardStream));
2361 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2366 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2368 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2370 return pByteBuffer.release();
2374 _AddressbookManagerImpl::ExportPersonsToVcardStreamN(const Tizen::Base::Collection::IList& personList)
2376 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2380 int ret = CONTACTS_ERROR_NONE;
2381 Person* pPerson = null;
2382 char* pVcardStream = null;
2386 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(null);
2388 unique_ptr<IEnumerator> pEnum(personList.GetEnumeratorN());
2389 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2391 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2392 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2394 result r = pByteBuffer->Construct(capacity);
2395 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2397 if (personList.GetCount() == 0)
2399 return pByteBuffer.release();
2402 while (pEnum->MoveNext() == E_SUCCESS)
2404 pPerson = static_cast<Person*>(pEnum->GetCurrent());
2406 pPersonRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, pPerson->GetId()));
2407 SysTryReturn(NID_SCL, GetLastResult() != E_OBJ_NOT_FOUND, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2408 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2410 ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2411 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2412 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2413 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2415 capacity += strlen(pVcardStream);
2416 r = pByteBuffer->ExpandCapacity(capacity);
2420 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2425 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2427 pVcardStream = null;
2428 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2431 return pByteBuffer.release();
2435 _AddressbookManagerImpl::ParseVcardStreamN(const Tizen::Base::ByteBuffer& vcardStream)
2437 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2441 contacts_list_h listHandle = null;
2442 result r = E_SUCCESS;
2444 int ret = contacts_vcard_parse_to_contacts(reinterpret_cast<char*>(const_cast<byte*>(vcardStream.GetPointer())), &listHandle);
2445 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2446 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2448 unsigned int count = 0;
2449 contacts_record_h recordHandle = null;
2450 contacts_list_get_count(listHandle, &count);
2452 unique_ptr<ArrayList, AllElementsDeleter> pList(new (std::nothrow) ArrayList());
2455 contacts_list_destroy(listHandle, true);
2456 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2461 r = pList->Construct(count);
2464 contacts_list_destroy(listHandle, true);
2465 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2470 for (unsigned int i = 0; i < count; i++)
2472 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
2473 if (pContact == null)
2475 contacts_list_destroy(listHandle, true);
2476 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2481 r = pList->Add(pContact.get());
2484 contacts_list_destroy(listHandle, true);
2485 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2493 unique_ptr<IEnumerator> pEnum(pList->GetEnumeratorN());
2495 while (pEnum->MoveNext() == E_SUCCESS)
2497 Contact* pContact = static_cast <Contact*> (pEnum->GetCurrent());
2499 contacts_list_get_current_record_p(listHandle, &recordHandle);
2500 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(recordHandle);
2502 ret = contacts_list_next(listHandle);
2505 contacts_list_destroy(listHandle, false);
2507 return pList.release();
2511 _AddressbookManagerImpl::ExportUserProfileToVcardStreamN(const UserProfile& userProfile)
2513 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2517 char* pVcardStream = null;
2518 int ret = CONTACTS_ERROR_NONE;
2519 contacts_record_h recordHandle = null;
2521 recordHandle = _UserProfileImpl::GetInstance(userProfile)->GetUserProfileHandle();
2523 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2524 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2525 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2526 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2528 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2529 if (pByteBuffer == null)
2532 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2536 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2538 result r = pByteBuffer->Construct(strlen(pVcardStream));
2542 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2547 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2549 SysTryReturn(NID_SCL, r != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2550 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2552 return pByteBuffer.release();
2556 _AddressbookManagerImpl::ExportUserProfilesToVcardStreamN(const Tizen::Base::Collection::IList& userProfileList)
2558 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2562 char* pVcardStream = null;
2563 int ret = CONTACTS_ERROR_NONE;
2564 UserProfile* pProfile = null;
2565 result r = E_SUCCESS;
2568 unique_ptr<IEnumerator> pEnum(userProfileList.GetEnumeratorN());
2569 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2571 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2572 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2574 r = pByteBuffer->Construct(capacity);
2575 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2577 if (userProfileList.GetCount() == 0)
2579 return pByteBuffer.release();
2582 while (pEnum->MoveNext() == E_SUCCESS)
2584 contacts_record_h recordHandle = null;
2586 pProfile = static_cast<UserProfile*>(pEnum->GetCurrent());
2588 recordHandle = _UserProfileImpl::GetInstance(*pProfile)->GetUserProfileHandle();
2590 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2591 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2592 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2593 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2595 capacity += strlen(pVcardStream);
2596 r = pByteBuffer->ExpandCapacity(capacity);
2600 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2605 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2607 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.: capacity(%d), size(%d)", GetErrorMessage(E_SYSTEM));
2610 return pByteBuffer.release();
2614 _AddressbookManagerImpl::ExportUserProfileToVcard(const UserProfile& userProfile, const Tizen::Base::String& vcardPath)
2616 bool exist = File::IsFileExist(vcardPath);
2617 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2618 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2619 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2622 result r = file.Construct(vcardPath, "w");
2623 SysTryReturn(NID_SCL, r != E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, "[%s] Access to the vcard file is denied due to insufficient permission.", GetErrorMessage(E_ILLEGAL_ACCESS));
2624 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2625 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2627 char* pVcardStream = null;
2628 contacts_record_h recordHandle = null;
2630 recordHandle = _UserProfileImpl::GetInstance(userProfile)->GetUserProfileHandle();
2632 int ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2633 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2634 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2636 r = file.Write(pVcardStream, strlen(pVcardStream));
2638 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2639 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2645 _AddressbookManagerImpl::ExportUserProfilesToVcard(const Tizen::Base::Collection::IList& userProfileList, const Tizen::Base::String& vcardPath)
2647 bool exist = File::IsFileExist(vcardPath);
2648 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2649 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2650 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2652 int ret = CONTACTS_ERROR_NONE;
2653 char* pVcardStream = null;
2655 UserProfile* pProfile = null;
2657 result r = file.Construct(vcardPath, "w");
2658 SysTryReturn(NID_SCL, r != E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, E_ILLEGAL_ACCESS, "[%s] Access to the vcard file is denied due to insufficient permission.", GetErrorMessage(E_ILLEGAL_ACCESS));
2659 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2660 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2662 unique_ptr<IEnumerator> pEnum(userProfileList.GetEnumeratorN());
2663 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2665 while (pEnum->MoveNext() == E_SUCCESS)
2667 contacts_record_h recordHandle = null;
2669 pProfile = static_cast<UserProfile*>(pEnum->GetCurrent());
2671 recordHandle = _UserProfileImpl::GetInstance(*pProfile)->GetUserProfileHandle();
2673 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2674 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2675 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2677 r = file.Write(pVcardStream, strlen(pVcardStream));
2679 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2680 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2687 _AddressbookManagerImpl::GetAllUserProfilesN(void) const
2689 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2693 unique_ptr< __Filter<__ContactsUserProfile> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsUserProfile>());
2694 SysTryReturn(NID_SCL, pRwAbFilter != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2696 __Query<__ContactsUserProfile> query;
2698 query.SetSort(_contacts_my_profile.display_name, true);
2700 if (pRwAbFilter->Get() != null)
2702 query.SetFilter(*pRwAbFilter);
2705 IList* pUserProfilesList = _AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query);
2706 SysTryReturn(NID_SCL, pUserProfilesList != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2708 return pUserProfilesList;
2712 _AddressbookManagerImpl::GetUserProfileN(AddressbookId addressbookId) const
2714 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2715 SysTryReturn(NID_SCL, addressbookId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. Addressbook Id(%d).", GetErrorMessage(E_INVALID_ARG), addressbookId);
2720 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
2721 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2723 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &mode);
2724 SysTryReturn(NID_SCL, mode == 0, null, E_OBJ_NOT_FOUND, "[%s] The addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
2726 __Filter<__ContactsUserProfile> filter;
2728 filter.AddInt(_contacts_my_profile.address_book_id, CONTACTS_MATCH_EQUAL, addressbookId);
2730 __Query<__ContactsUserProfile> query;
2732 query.SetFilter(filter);
2734 unique_ptr<IList, AllElementsDeleter> pUserProfilesList(_AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query));
2735 SysTryReturn(NID_SCL, pUserProfilesList.get() != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2736 SysTryReturn(NID_SCL, pUserProfilesList->GetCount() != 0, null, E_SUCCESS, "No UserProfile Set for this Addressbook.");
2737 SysTryReturn(NID_SCL, pUserProfilesList->GetCount() == 1, null, E_SYSTEM, "[%s] Propagating. More than one UserProfile not allowed.", GetErrorMessage(E_SYSTEM));
2739 UserProfile* pProfile = new (std::nothrow) UserProfile(*(static_cast<UserProfile*>(pUserProfilesList->GetAt(0))));
2740 SysTryReturn(NID_SCL, pProfile != null, null, E_OUT_OF_MEMORY, "[%s] Propagating.", GetErrorMessage(E_OUT_OF_MEMORY));
2745 _AddressbookManagerImpl*
2746 _AddressbookManagerImpl::GetInstance(AddressbookManager& addressbookManager)
2748 return addressbookManager.__pAddressbookManagerImpl;
2751 const _AddressbookManagerImpl*
2752 _AddressbookManagerImpl::GetInstance(const AddressbookManager& addressbookManager)
2754 return addressbookManager.__pAddressbookManagerImpl;