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();
1590 mainFilter.AddFilter(*pRwAbFilter);
1591 if (abFilter.Get() != null)
1593 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1594 mainFilter.AddFilter(abFilter);
1597 __Query<__ContactsAddressbook> query;
1599 query.SetFilter(mainFilter);
1601 if (viewSortPropertyId != 0)
1603 query.SetSort(viewSortPropertyId, ascending);
1606 pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
1610 __Query<__ContactsAddressbook> query;
1612 query.SetFilter(abFilter);
1614 if (viewSortPropertyId != 0)
1616 query.SetSort(viewSortPropertyId, ascending);
1619 pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
1624 case AB_FI_TYPE_PERSON:
1626 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1628 __Filter<__ContactsPersonGroupRel> personFilter;
1629 personFilter.Construct(filterHandle);
1631 unsigned int propertyIds[] =
1632 { _contacts_person_grouprel.person_id,
1633 _contacts_person_grouprel.addressbook_ids,
1634 _contacts_person_grouprel.is_favorite,
1635 _contacts_person_grouprel.has_phonenumber,
1636 _contacts_person_grouprel.has_email,
1637 _contacts_person_grouprel.image_thumbnail_path,
1638 _contacts_person_grouprel.ringtone_path,
1639 _contacts_person_grouprel.display_name
1642 if (pRwAbFilter->Get() != null)
1644 __Filter<__ContactsPersonGroupRel> mainFilter;
1645 mainFilter.Construct();
1646 mainFilter.AddFilter(*pRwAbFilter);
1647 if (personFilter.Get() != null)
1649 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1650 mainFilter.AddFilter(personFilter);
1653 __Query<__ContactsPersonGroupRel> query;
1655 query.SetFilter(mainFilter);
1656 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1657 query.SetDistinct(true);
1659 if (viewSortPropertyId != 0)
1661 query.SetSort(viewSortPropertyId, ascending);
1664 pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
1668 __Query<__ContactsPersonGroupRel> query;
1670 query.SetFilter(personFilter);
1671 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1672 query.SetDistinct(true);
1674 if (viewSortPropertyId != 0)
1676 query.SetSort(viewSortPropertyId, ascending);
1679 pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
1683 case AB_FI_TYPE_CONTACT:
1685 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1687 __Filter<__ContactsContact> contactFilter;
1688 contactFilter.Construct(filterHandle);
1690 if (pRwAbFilter->Get() != null)
1692 __Filter<__ContactsContact> mainFilter;
1693 mainFilter.Construct();
1694 mainFilter.AddFilter(*pRwAbFilter);
1695 if (contactFilter.Get() != null)
1697 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1698 mainFilter.AddFilter(contactFilter);
1701 __Query<__ContactsContact> query;
1703 query.SetFilter(mainFilter);
1705 if (viewSortPropertyId != 0)
1707 query.SetSort(viewSortPropertyId, ascending);
1710 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
1714 __Query<__ContactsContact> query;
1716 query.SetFilter(contactFilter);
1718 if (viewSortPropertyId != 0)
1720 query.SetSort(viewSortPropertyId, ascending);
1723 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
1728 case AB_FI_TYPE_CATEGORY:
1730 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1732 __Filter<__ContactsGroup> groupFilter;
1733 groupFilter.Construct(filterHandle);
1735 if (pRwAbFilter->Get() != null)
1737 __Filter<__ContactsGroup> mainFilter;
1738 mainFilter.Construct();
1739 mainFilter.AddFilter(*pRwAbFilter);
1740 if (groupFilter.Get() != null)
1742 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1743 mainFilter.AddFilter(groupFilter);
1746 __Query<__ContactsGroup> query;
1748 query.SetFilter(mainFilter);
1750 if (viewSortPropertyId != 0)
1752 query.SetSort(viewSortPropertyId, ascending);
1755 pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
1759 __Query<__ContactsGroup> query;
1761 query.SetFilter(groupFilter);
1763 if (viewSortPropertyId != 0)
1765 query.SetSort(viewSortPropertyId, ascending);
1768 pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
1772 case AB_FI_TYPE_PHONE_CONTACT:
1774 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
1776 __Filter<__ContactsContactNumber> numberFilter;
1777 numberFilter.Construct(filterHandle);
1779 if (pRwAbFilter->Get() != null)
1781 __Filter<__ContactsContactNumber> mainFilter;
1782 mainFilter.Construct();
1783 mainFilter.AddFilter(*pRwAbFilter);
1784 if (numberFilter.Get() != null)
1786 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1787 mainFilter.AddFilter(numberFilter);
1790 __Query<__ContactsContactNumber> query;
1792 query.SetFilter(mainFilter);
1794 if (viewSortPropertyId != 0)
1796 query.SetSort(viewSortPropertyId, ascending);
1799 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
1803 __Query<__ContactsContactNumber> query;
1805 query.SetFilter(numberFilter);
1807 if (viewSortPropertyId != 0)
1809 query.SetSort(viewSortPropertyId, ascending);
1812 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
1816 case AB_FI_TYPE_EMAIL_CONTACT:
1818 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
1820 __Filter<__ContactsContactEmail> emailFilter;
1821 emailFilter.Construct(filterHandle);
1823 if (pRwAbFilter->Get() != null)
1825 __Filter<__ContactsContactEmail> mainFilter;
1826 mainFilter.Construct();
1827 mainFilter.AddFilter(*pRwAbFilter);
1828 if (emailFilter.Get() != null)
1830 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1831 mainFilter.AddFilter(emailFilter);
1834 __Query<__ContactsContactEmail> query;
1836 query.SetFilter(mainFilter);
1838 if (viewSortPropertyId != 0)
1840 query.SetSort(viewSortPropertyId, ascending);
1843 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
1847 __Query<__ContactsContactEmail> query;
1849 query.SetFilter(emailFilter);
1851 if (viewSortPropertyId != 0)
1853 query.SetSort(viewSortPropertyId, ascending);
1856 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
1861 SysLogException(NID_SCL, E_INVALID_ARG, "[%s] Invalid argument is used. The filter type is invalid", GetErrorMessage(E_INVALID_ARG));
1869 _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
1871 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1876 AddressbookFilterType type = _AddressbookFilterImpl::GetInstance(filter)->GetType();
1877 contacts_filter_h filterHandle = _AddressbookFilterImpl::GetInstance(filter)->GetFilterHandle();
1881 case AB_FI_TYPE_ADDRESSBOOK:
1883 unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
1885 __Filter<__ContactsAddressbook> abFilter;
1886 abFilter.Construct(filterHandle);
1888 if (pRwAbFilter->Get() != null)
1890 __Filter<__ContactsAddressbook> mainFilter;
1891 mainFilter.Construct();
1892 mainFilter.AddFilter(*pRwAbFilter);
1893 if (abFilter.Get() != null)
1895 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1896 mainFilter.AddFilter(abFilter);
1899 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(mainFilter.Get());
1903 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(abFilter.Get());
1907 case AB_FI_TYPE_PERSON:
1909 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1911 __Filter<__ContactsPersonGroupRel> personFilter;
1912 personFilter.Construct(filterHandle);
1914 if (pRwAbFilter->Get() != null)
1916 __Filter<__ContactsPersonGroupRel> mainFilter;
1917 mainFilter.Construct();
1918 mainFilter.AddFilter(*pRwAbFilter);
1919 if (personFilter.Get() != null)
1921 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1922 mainFilter.AddFilter(personFilter);
1925 unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
1927 __Query<__ContactsPersonGroupRel> query;
1929 query.SetFilter(mainFilter);
1930 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1931 query.SetDistinct(true);
1933 count = _AddressbookUtil::GetCountWithQuery(query);
1937 unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
1939 __Query<__ContactsPersonGroupRel> query;
1941 query.SetFilter(personFilter);
1942 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1943 query.SetDistinct(true);
1945 count = _AddressbookUtil::GetCountWithQuery(query);
1951 case AB_FI_TYPE_CONTACT:
1953 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1955 __Filter<__ContactsContact> contactFilter;
1956 contactFilter.Construct(filterHandle);
1958 if (pRwAbFilter->Get() != null)
1960 __Filter<__ContactsContact> mainFilter;
1961 mainFilter.Construct();
1962 mainFilter.AddFilter(*pRwAbFilter);
1963 if (contactFilter.Get() != null)
1965 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1966 mainFilter.AddFilter(contactFilter);
1969 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(mainFilter.Get());
1973 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(contactFilter.Get());
1977 case AB_FI_TYPE_CATEGORY:
1979 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1981 __Filter<__ContactsGroup> groupFilter;
1982 groupFilter.Construct(filterHandle);
1984 if (pRwAbFilter->Get() != null)
1986 __Filter<__ContactsGroup> mainFilter;
1987 mainFilter.Construct();
1988 mainFilter.AddFilter(*pRwAbFilter);
1989 if (groupFilter.Get() != null)
1991 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1992 mainFilter.AddFilter(groupFilter);
1995 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(mainFilter.Get());
1999 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(groupFilter.Get());
2003 case AB_FI_TYPE_PHONE_CONTACT:
2005 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
2007 __Filter<__ContactsContactNumber> numberFilter;
2008 numberFilter.Construct(filterHandle);
2010 if (pRwAbFilter->Get() != null)
2012 __Filter<__ContactsContactNumber> mainFilter;
2013 mainFilter.Construct();
2014 mainFilter.AddFilter(*pRwAbFilter);
2015 if (numberFilter.Get() != null)
2017 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
2018 mainFilter.AddFilter(numberFilter);
2021 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(mainFilter.Get());
2025 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(numberFilter.Get());
2029 case AB_FI_TYPE_EMAIL_CONTACT:
2031 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
2033 __Filter<__ContactsContactEmail> emailFilter;
2034 emailFilter.Construct(filterHandle);
2036 if (pRwAbFilter->Get() != null)
2038 __Filter<__ContactsContactEmail> mainFilter;
2039 mainFilter.Construct();
2040 mainFilter.AddFilter(*pRwAbFilter);
2041 if (emailFilter.Get() != null)
2043 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
2044 mainFilter.AddFilter(emailFilter);
2047 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(mainFilter.Get());
2051 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(emailFilter.Get());
2056 SysLogException(NID_SCL, E_INVALID_ARG, "[%s] Invalid argument is used. The type of the filter is invalid", GetErrorMessage(GetLastResult()));
2064 _AddressbookManagerImpl::OnEachContact(contacts_record_h recordHandle, void* pUserData)
2066 IList* pList = static_cast<IList*>(pUserData);
2070 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
2071 SysTryReturn(NID_SCL, pContact != null, false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2073 contacts_record_h newRecordHandle = null;
2075 contacts_record_clone(recordHandle, &newRecordHandle);
2076 SysTryReturn(NID_SCL, newRecordHandle != null, false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2078 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(newRecordHandle);
2080 result r = pList->Add(*pContact);
2081 SysTryReturn(NID_SCL, !IsFailed(r), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2089 _AddressbookManagerImpl::ParseContactsFromVcardN(const Tizen::Base::String& vcardPath)
2091 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2096 result r = file.Construct(vcardPath, "r");
2097 SysTryReturn(NID_SCL, r != E_INVALID_ARG, null, E_INVALID_ARG, "[%s] Invalid argument is used..", GetErrorMessage(E_INVALID_ARG));
2098 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));
2099 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));
2100 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2102 unique_ptr<ArrayList, AllElementsDeleter> pList(new (std::nothrow) ArrayList());
2104 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(vcardPath));
2106 int ret = contacts_vcard_parse_to_contact_foreach(pCharArray.get(), OnEachContact, pList.get());
2107 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2108 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2109 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2111 return pList.release();
2115 _AddressbookManagerImpl::ExportPersonToVcard(const Person& person, 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()));
2123 result r = file.Construct(vcardPath, "w");
2124 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));
2125 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2126 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2128 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, person.GetId()));
2129 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2131 char* pVcardStream = null;
2132 int ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2133 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));
2134 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2136 r = file.Write(pVcardStream, strlen(pVcardStream));
2138 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2139 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2145 _AddressbookManagerImpl::ExportPersonsToVcard(const Tizen::Base::Collection::IList& personList, const Tizen::Base::String& vcardPath)
2147 bool exist = File::IsFileExist(vcardPath);
2148 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2149 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2150 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2152 int ret = CONTACTS_ERROR_NONE;
2153 char* pVcardStream = null;
2156 result r = file.Construct(vcardPath, "w");
2157 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));
2158 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2159 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2162 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(null);
2164 unique_ptr<IEnumerator> pEnum(personList.GetEnumeratorN());
2165 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2167 while (pEnum->MoveNext() == E_SUCCESS)
2169 Person* pPerson = static_cast<Person*>(pEnum->GetCurrent());
2171 pPersonRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, pPerson->GetId()));
2172 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2174 ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2175 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));
2176 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2178 r = file.Write(pVcardStream, strlen(pVcardStream));
2180 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2181 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2188 _AddressbookManagerImpl::ExportContactToVcard(const Contact& contact, 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()));
2196 result r = file.Construct(vcardPath, "w");
2197 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));
2198 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2199 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2201 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
2203 char* pVcardStream = null;
2205 int ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2206 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));
2207 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2209 r = file.Write(pVcardStream, strlen(pVcardStream));
2211 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2212 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2218 _AddressbookManagerImpl::ExportContactsToVcard(const Tizen::Base::Collection::IList& contactList, const Tizen::Base::String& vcardPath)
2220 bool exist = File::IsFileExist(vcardPath);
2221 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2222 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2223 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2225 int ret = CONTACTS_ERROR_NONE;
2226 char* pVcardStream = null;
2228 Contact* pContact = null;
2230 result r = file.Construct(vcardPath, "w");
2231 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));
2232 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2233 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2235 contacts_record_h recordHandle = null;
2237 unique_ptr<IEnumerator> pEnum(contactList.GetEnumeratorN());
2238 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2240 while (pEnum->MoveNext() == E_SUCCESS)
2242 pContact = static_cast<Contact*>(pEnum->GetCurrent());
2244 recordHandle = _ContactImpl::GetInstance(*pContact)->GetContactRecordHandle();
2246 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2247 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));
2248 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2250 r = file.Write(pVcardStream, strlen(pVcardStream));
2252 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2253 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2260 _AddressbookManagerImpl::ExportContactToVcardStreamN(const Contact& contact)
2262 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2266 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
2268 char* pVcardStream = null;
2269 int ret = CONTACTS_ERROR_NONE;
2271 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2272 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2273 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2274 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2276 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2277 if (pByteBuffer == null)
2280 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2285 result r = pByteBuffer->Construct(strlen(pVcardStream));
2289 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2294 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2296 SysTryReturn(NID_SCL, r != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2297 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2299 return pByteBuffer.release();
2303 _AddressbookManagerImpl::ExportContactsToVcardStreamN(const Tizen::Base::Collection::IList& contactList)
2305 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2309 char* pVcardStream = null;
2310 int ret = CONTACTS_ERROR_NONE;
2311 Contact* pContact = null;
2312 result r = E_SUCCESS;
2315 contacts_record_h recordHandle = null;
2317 unique_ptr<IEnumerator> pEnum(contactList.GetEnumeratorN());
2318 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2320 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2321 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2323 r = pByteBuffer->Construct(capacity);
2324 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2326 if (contactList.GetCount() == 0)
2328 return pByteBuffer.release();
2331 while (pEnum->MoveNext() == E_SUCCESS)
2333 pContact = static_cast<Contact*>(pEnum->GetCurrent());
2335 recordHandle = _ContactImpl::GetInstance(*pContact)->GetContactRecordHandle();
2337 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2338 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2339 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2340 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2342 capacity += strlen(pVcardStream);
2343 r = pByteBuffer->ExpandCapacity(capacity);
2347 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2352 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2354 pVcardStream = null;
2355 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.: capacity(%d), size(%d)", GetErrorMessage(E_SYSTEM));
2358 return pByteBuffer.release();
2362 _AddressbookManagerImpl::ExportPersonToVcardStreamN(const Person& person)
2364 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2368 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, person.GetId()));
2369 SysTryReturn(NID_SCL, GetLastResult() != E_OBJ_NOT_FOUND, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2370 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2372 char* pVcardStream = null;
2373 int ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2374 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2375 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2376 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2378 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2379 if (pByteBuffer == null)
2382 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2387 result r = pByteBuffer->Construct(strlen(pVcardStream));
2391 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2396 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2398 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2400 return pByteBuffer.release();
2404 _AddressbookManagerImpl::ExportPersonsToVcardStreamN(const Tizen::Base::Collection::IList& personList)
2406 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2410 int ret = CONTACTS_ERROR_NONE;
2411 Person* pPerson = null;
2412 char* pVcardStream = null;
2416 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(null);
2418 unique_ptr<IEnumerator> pEnum(personList.GetEnumeratorN());
2419 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2421 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2422 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2424 result r = pByteBuffer->Construct(capacity);
2425 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2427 if (personList.GetCount() == 0)
2429 return pByteBuffer.release();
2432 while (pEnum->MoveNext() == E_SUCCESS)
2434 pPerson = static_cast<Person*>(pEnum->GetCurrent());
2436 pPersonRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, pPerson->GetId()));
2437 SysTryReturn(NID_SCL, GetLastResult() != E_OBJ_NOT_FOUND, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2438 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2440 ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2441 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2442 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2443 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2445 capacity += strlen(pVcardStream);
2446 r = pByteBuffer->ExpandCapacity(capacity);
2450 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2455 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2457 pVcardStream = null;
2458 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2461 return pByteBuffer.release();
2465 _AddressbookManagerImpl::ParseVcardStreamN(const Tizen::Base::ByteBuffer& vcardStream)
2467 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2471 contacts_list_h listHandle = null;
2472 result r = E_SUCCESS;
2474 int ret = contacts_vcard_parse_to_contacts(reinterpret_cast<char*>(const_cast<byte*>(vcardStream.GetPointer())), &listHandle);
2475 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2476 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2478 unsigned int count = 0;
2479 contacts_record_h recordHandle = null;
2480 contacts_list_get_count(listHandle, &count);
2482 unique_ptr<ArrayList, AllElementsDeleter> pList(new (std::nothrow) ArrayList());
2485 contacts_list_destroy(listHandle, true);
2486 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2491 r = pList->Construct(count);
2494 contacts_list_destroy(listHandle, true);
2495 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2500 for (unsigned int i = 0; i < count; i++)
2502 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
2503 if (pContact == null)
2505 contacts_list_destroy(listHandle, true);
2506 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2511 r = pList->Add(pContact.get());
2514 contacts_list_destroy(listHandle, true);
2515 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2523 unique_ptr<IEnumerator> pEnum(pList->GetEnumeratorN());
2525 while (pEnum->MoveNext() == E_SUCCESS)
2527 Contact* pContact = static_cast <Contact*> (pEnum->GetCurrent());
2529 contacts_list_get_current_record_p(listHandle, &recordHandle);
2530 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(recordHandle);
2532 ret = contacts_list_next(listHandle);
2535 contacts_list_destroy(listHandle, false);
2537 return pList.release();
2541 _AddressbookManagerImpl::ExportUserProfileToVcardStreamN(const UserProfile& userProfile)
2543 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2547 char* pVcardStream = null;
2548 int ret = CONTACTS_ERROR_NONE;
2549 contacts_record_h recordHandle = null;
2551 recordHandle = _UserProfileImpl::GetInstance(userProfile)->GetUserProfileHandle();
2553 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2554 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2555 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2556 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2558 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2559 if (pByteBuffer == null)
2562 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2566 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2568 result r = pByteBuffer->Construct(strlen(pVcardStream));
2572 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2577 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2579 SysTryReturn(NID_SCL, r != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2580 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2582 return pByteBuffer.release();
2586 _AddressbookManagerImpl::ExportUserProfilesToVcardStreamN(const Tizen::Base::Collection::IList& userProfileList)
2588 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2592 char* pVcardStream = null;
2593 int ret = CONTACTS_ERROR_NONE;
2594 UserProfile* pProfile = null;
2595 result r = E_SUCCESS;
2598 unique_ptr<IEnumerator> pEnum(userProfileList.GetEnumeratorN());
2599 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2601 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2602 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2604 r = pByteBuffer->Construct(capacity);
2605 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2607 if (userProfileList.GetCount() == 0)
2609 return pByteBuffer.release();
2612 while (pEnum->MoveNext() == E_SUCCESS)
2614 contacts_record_h recordHandle = null;
2616 pProfile = static_cast<UserProfile*>(pEnum->GetCurrent());
2618 recordHandle = _UserProfileImpl::GetInstance(*pProfile)->GetUserProfileHandle();
2620 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2621 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2622 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2623 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2625 capacity += strlen(pVcardStream);
2626 r = pByteBuffer->ExpandCapacity(capacity);
2630 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2635 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2637 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.: capacity(%d), size(%d)", GetErrorMessage(E_SYSTEM));
2640 return pByteBuffer.release();
2644 _AddressbookManagerImpl::ExportUserProfileToVcard(const UserProfile& userProfile, const Tizen::Base::String& vcardPath)
2646 bool exist = File::IsFileExist(vcardPath);
2647 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2648 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2649 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2652 result r = file.Construct(vcardPath, "w");
2653 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));
2654 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2655 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2657 char* pVcardStream = null;
2658 contacts_record_h recordHandle = null;
2660 recordHandle = _UserProfileImpl::GetInstance(userProfile)->GetUserProfileHandle();
2662 int ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2663 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));
2664 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2666 r = file.Write(pVcardStream, strlen(pVcardStream));
2668 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2669 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2675 _AddressbookManagerImpl::ExportUserProfilesToVcard(const Tizen::Base::Collection::IList& userProfileList, const Tizen::Base::String& vcardPath)
2677 bool exist = File::IsFileExist(vcardPath);
2678 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2679 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2680 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2682 int ret = CONTACTS_ERROR_NONE;
2683 char* pVcardStream = null;
2685 UserProfile* pProfile = null;
2687 result r = file.Construct(vcardPath, "w");
2688 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));
2689 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2690 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2692 unique_ptr<IEnumerator> pEnum(userProfileList.GetEnumeratorN());
2693 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2695 while (pEnum->MoveNext() == E_SUCCESS)
2697 contacts_record_h recordHandle = null;
2699 pProfile = static_cast<UserProfile*>(pEnum->GetCurrent());
2701 recordHandle = _UserProfileImpl::GetInstance(*pProfile)->GetUserProfileHandle();
2703 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2704 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));
2705 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2707 r = file.Write(pVcardStream, strlen(pVcardStream));
2709 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2710 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2717 _AddressbookManagerImpl::GetAllUserProfilesN(void) const
2719 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2723 unique_ptr< __Filter<__ContactsUserProfile> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsUserProfile>());
2724 SysTryReturn(NID_SCL, pRwAbFilter != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2726 __Query<__ContactsUserProfile> query;
2728 query.SetSort(_contacts_my_profile.display_name, true);
2730 if (pRwAbFilter->Get() != null)
2732 query.SetFilter(*pRwAbFilter);
2735 IList* pUserProfilesList = _AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query);
2736 SysTryReturn(NID_SCL, pUserProfilesList != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2738 return pUserProfilesList;
2742 _AddressbookManagerImpl::GetUserProfileN(AddressbookId addressbookId) const
2744 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2745 SysTryReturn(NID_SCL, addressbookId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. Addressbook Id(%d).", GetErrorMessage(E_INVALID_ARG), addressbookId);
2750 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
2751 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2753 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &mode);
2754 SysTryReturn(NID_SCL, mode == 0, null, E_OBJ_NOT_FOUND, "[%s] The addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
2756 __Filter<__ContactsUserProfile> filter;
2758 filter.AddInt(_contacts_my_profile.address_book_id, CONTACTS_MATCH_EQUAL, addressbookId);
2760 __Query<__ContactsUserProfile> query;
2762 query.SetFilter(filter);
2764 unique_ptr<IList, AllElementsDeleter> pUserProfilesList(_AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query));
2765 SysTryReturn(NID_SCL, pUserProfilesList.get() != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2766 SysTryReturn(NID_SCL, pUserProfilesList->GetCount() != 0, null, E_SUCCESS, "No UserProfile Set for this Addressbook.");
2767 SysTryReturn(NID_SCL, pUserProfilesList->GetCount() == 1, null, E_SYSTEM, "[%s] Propagating. More than one UserProfile not allowed.", GetErrorMessage(E_SYSTEM));
2769 UserProfile* pProfile = new (std::nothrow) UserProfile(*(static_cast<UserProfile*>(pUserProfilesList->GetAt(0))));
2770 SysTryReturn(NID_SCL, pProfile != null, null, E_OUT_OF_MEMORY, "[%s] Propagating.", GetErrorMessage(E_OUT_OF_MEMORY));
2775 _AddressbookManagerImpl*
2776 _AddressbookManagerImpl::GetInstance(AddressbookManager& addressbookManager)
2778 return addressbookManager.__pAddressbookManagerImpl;
2781 const _AddressbookManagerImpl*
2782 _AddressbookManagerImpl::GetInstance(const AddressbookManager& addressbookManager)
2784 return addressbookManager.__pAddressbookManagerImpl;