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 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()));
254 result r = _AddressbookUtil::DeleteContactRecord(_contacts_address_book._uri, addressbookId);
255 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
261 _AddressbookManagerImpl::GetAddressbooksByAccountN(AccountId accountId) const
263 SysTryReturn(NID_SCL, accountId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. account id is invalid.", GetErrorMessage(E_INVALID_ARG));
264 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
268 IList* pAddressbooks = null;
270 __Filter<__ContactsAddressbook> accountFilter;
271 accountFilter.Construct();
272 accountFilter.AddInt(_contacts_address_book.account_id, CONTACTS_MATCH_EQUAL, accountId);
274 unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
275 if (pRwAbFilter->Get() == null)
277 __Query<__ContactsAddressbook> query;
279 query.SetFilter(accountFilter);
281 pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
282 SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
286 __Filter<__ContactsAddressbook> mainFilter;
287 mainFilter.Construct();
289 mainFilter.AddFilter(*pRwAbFilter);
290 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
291 mainFilter.AddFilter(accountFilter);
293 __Query<__ContactsAddressbook> query;
295 query.SetFilter(mainFilter);
297 pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
298 SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
301 return pAddressbooks;
305 _AddressbookManagerImpl::GetAllAddressbooksN(void) const
307 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
311 __Filter<__ContactsAddressbook> abFilter;
312 abFilter.Construct();
313 abFilter.AddInt(_contacts_address_book.mode, CONTACTS_MATCH_EQUAL, 0);
315 __Query<__ContactsAddressbook> query;
317 query.SetFilter(abFilter);
318 query.SetSort(_contacts_address_book.name, true);
320 IList* pAddressbooks = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query);
321 SysTryReturn(NID_SCL, pAddressbooks != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
323 return pAddressbooks;
327 _AddressbookManagerImpl::GetAddressbookN(AddressbookId addressbookId) const
329 SysTryReturn(NID_SCL, addressbookId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. addressbookId.", GetErrorMessage(E_INVALID_ARG), addressbookId);
330 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
334 result r = E_SUCCESS;
336 char* pCharValue = null;
338 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
339 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
341 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
342 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
344 unique_ptr<Addressbook> pAddressbook(new (std::nothrow) Addressbook());
345 SysTryReturn(NID_SCL, pAddressbook !=null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
347 r = pAddressbook->Construct();
348 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
350 _AddressbookImpl::GetInstance(*pAddressbook)->SetId(addressbookId);
352 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.account_id, &intValue);
353 _AddressbookImpl::GetInstance(*pAddressbook)->SetAccountId(intValue);
355 contacts_record_get_str_p(pAbRecord.get(), _contacts_address_book.name, &pCharValue);
356 _AddressbookImpl::GetInstance(*pAddressbook)->SetName(pCharValue);
358 return pAddressbook.release();
362 _AddressbookManagerImpl::AddContact(Contact& contact, AddressbookId addressbookId)
364 if (_ContactImpl::GetInstance(contact)->IsRemoved())
366 result r = _ContactImpl::GetInstance(contact)->Invalidate();
367 SysTryReturn(NID_SCL, r == E_SUCCESS, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
370 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));
371 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));
372 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
374 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
375 SysTryReturn(NID_SCL, pAbRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
378 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
379 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
381 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
382 contacts_record_set_int(recordHandle, _contacts_contact.address_book_id, addressbookId);
385 result r = _AddressbookUtil::InsertContactRecordN(recordHandle, recordId);
386 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
388 unique_ptr<ContactRecord, ContactRecordDeleter> pContactRecord(_AddressbookUtil::GetContactRecordN(_contacts_contact._uri, recordId));
389 SysTryReturn(NID_SCL, pContactRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
391 _ContactImpl::GetInstance(contact)->SetContactRecordHandle(pContactRecord.release());
392 _RecordImpl::GetInstance(contact)->SetRecordId(recordId);
398 _AddressbookManagerImpl::AddCategory(Category& category, AddressbookId addressbookId)
400 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));
401 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
403 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
404 SysTryReturn(NID_SCL, pAbRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
407 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
408 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
410 contacts_record_h recordHandle = _CategoryImpl::GetInstance(category)->GetRecordHandle();
411 contacts_record_set_int(recordHandle, _contacts_group.address_book_id, addressbookId);
414 result r = _AddressbookUtil::InsertContactRecordN(recordHandle, recordId);
415 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
417 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, recordId));
418 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
420 _CategoryImpl::GetInstance(category)->SetRecordHandle(pCategoryRecord.release());
421 _RecordImpl::GetInstance(category)->SetRecordId(recordId);
423 unique_ptr<IListT<int> > pList(_CategoryImpl::GetInstance(category)->GetAddedMembersN());
424 if (pList != null && pList->GetCount() > 0)
426 unique_ptr<IEnumeratorT<int> > pEnum(pList->GetEnumeratorN());
428 while (pEnum->MoveNext() == E_SUCCESS)
431 pEnum->GetCurrent(tableId);
433 AddMemberToCategory(category.GetRecordId(), tableId);
436 _CategoryImpl::GetInstance(category)->ClearAddedMemberList();
443 _AddressbookManagerImpl::RemoveContact(RecordId contactId)
445 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));
446 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
447 result r = _AddressbookUtil::DeleteContactRecord(_contacts_contact._uri, contactId);
448 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
454 _AddressbookManagerImpl::RemoveCategory(RecordId categoryId)
456 SysTryReturn(NID_SCL, categoryId != INVALID_RECORD_ID, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. The specified categoryId is invalid", GetErrorMessage(E_INVALID_ARG));
457 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
459 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, categoryId));
460 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
462 bool isReadOnly = false;
463 contacts_record_get_bool(pCategoryRecord.get(), _contacts_group.is_read_only, &isReadOnly);
464 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));
466 result r = _AddressbookUtil::DeleteContactRecord(_contacts_group._uri, categoryId);
467 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
473 _AddressbookManagerImpl::UpdateContact(const Contact& contact)
475 RecordId contactId = contact.GetRecordId();
476 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));
477 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));
478 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
480 unique_ptr<ContactRecord, ContactRecordDeleter> pContactRecord(_AddressbookUtil::GetContactRecordN(_contacts_simple_contact._uri, contactId));
481 SysTryReturn(NID_SCL, pContactRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
484 contacts_record_get_int(pContactRecord.get(), _contacts_simple_contact.id, &intValue);
485 SysTryReturn(NID_SCL, intValue == contactId, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
487 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
489 int ret = contacts_db_update_record(recordHandle);
490 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));
491 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_FILE_NO_SPACE, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is insufficient.", GetErrorMessage(E_STORAGE_FULL));
492 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));
494 pContactRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_contact._uri, contact.GetRecordId()));
495 SysTryReturn(NID_SCL, pContactRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
497 _ContactImpl::GetInstance(*const_cast<Contact*>(&contact))->SetContactRecordHandle(pContactRecord.release());
503 _AddressbookManagerImpl::UpdateCategory(const Category& category)
505 RecordId categoryId = category.GetRecordId();
506 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));
507 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));
508 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
510 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, category.GetRecordId()));
511 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
514 contacts_record_get_int(pCategoryRecord.get(), _contacts_group.id, &intValue);
515 SysTryReturn(NID_SCL, intValue == categoryId, E_OBJ_NOT_FOUND, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
517 contacts_record_h recordHandle = _CategoryImpl::GetInstance(category)->GetRecordHandle();
519 int ret = contacts_db_update_record(recordHandle);
520 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));
521 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_FILE_NO_SPACE, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is insufficient.", GetErrorMessage(E_STORAGE_FULL));
522 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
524 pCategoryRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, category.GetRecordId()));
525 SysTryReturn(NID_SCL, pCategoryRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
527 _CategoryImpl::GetInstance(*const_cast<Category*>(&category))->SetRecordHandle(pCategoryRecord.release());
529 unique_ptr<IListT<int> > pList(_CategoryImpl::GetInstance(category)->GetAddedMembersN());
530 if (pList != null && pList->GetCount() > 0)
533 unique_ptr<IEnumeratorT<int> > pEnum(pList->GetEnumeratorN());
534 while (pEnum->MoveNext() == E_SUCCESS)
536 pEnum->GetCurrent(tableId);
538 AddMemberToCategory(category.GetRecordId(), tableId);
541 const_cast<_CategoryImpl*>(_CategoryImpl::GetInstance(category))->ClearAddedMemberList();
544 pList.reset(_CategoryImpl::GetInstance(category)->GetRemovedMembersN());
545 if (pList != null && pList->GetCount() > 0)
548 unique_ptr<IEnumeratorT<int> > pEnum(pList->GetEnumeratorN());
549 while (pEnum->MoveNext() == E_SUCCESS)
551 pEnum->GetCurrent(tableId);
553 RemoveMemberFromCategory(category.GetRecordId(), tableId);
556 const_cast<_CategoryImpl*>(_CategoryImpl::GetInstance(category))->ClearRemovedMemberList();
563 _AddressbookManagerImpl::AddMemberToCategory(RecordId categoryId, RecordId contactId)
565 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);
566 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);
567 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
569 int ret = contacts_group_add_contact(categoryId, contactId);
570 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
571 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));
572 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
578 _AddressbookManagerImpl::RemoveMemberFromCategory(RecordId categoryId, RecordId contactId)
580 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);
581 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);
582 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
584 int ret = contacts_group_remove_contact(categoryId, contactId);
585 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
586 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));
587 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
593 _AddressbookManagerImpl::GetAllCategoriesN(void) const
595 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
599 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
601 __Query<__ContactsGroup> query;
603 query.SetSort(_contacts_group.name, true);
605 if (pRwAbFilter->Get() != null)
607 query.SetFilter(*pRwAbFilter);
610 IList* pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query);
611 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
617 _AddressbookManagerImpl::GetCategoriesByContactN(RecordId contactId) const
619 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
620 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));
623 IList* pCategories = null;
625 unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
627 __Filter<__ContactsContactGroupRel> relFilter;
628 relFilter.Construct();
629 relFilter.AddInt(_contacts_contact_grouprel.contact_id, CONTACTS_MATCH_EQUAL, contactId);
631 if (pRwAbFilter->Get() != null)
633 __Filter<__ContactsContactGroupRel> mainFilter;
634 mainFilter.Construct();
635 mainFilter.AddFilter(*pRwAbFilter);
636 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
637 mainFilter.AddFilter(relFilter);
639 __Query<__ContactsContactGroupRel> query;
641 query.SetFilter(mainFilter);
643 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
644 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
648 __Query<__ContactsContactGroupRel> query;
650 query.SetFilter(relFilter);
652 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
653 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
660 _AddressbookManagerImpl::GetCategoriesByPersonN(PersonId personId) const
662 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
666 IList* pCategories = null;
668 unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
670 __Filter<__ContactsContactGroupRel> relFilter;
671 relFilter.Construct();
672 relFilter.AddInt(_contacts_contact_grouprel.person_id, CONTACTS_MATCH_EQUAL, personId);
673 relFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
674 relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_GREATER_THAN, 0);
676 unsigned int propertyIds[] =
678 _contacts_contact_grouprel.group_id,
681 if (pRwAbFilter->Get() != null)
684 __Filter<__ContactsContactGroupRel> mainFilter;
685 mainFilter.Construct();
686 mainFilter.AddFilter(*pRwAbFilter);
687 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
688 mainFilter.AddFilter(relFilter);
691 __Query<__ContactsContactGroupRel> query;
693 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
694 query.SetFilter(mainFilter);
695 query.SetSort(_contacts_contact_grouprel.group_name, true);
696 query.SetDistinct(true);
698 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
699 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
703 __Query<__ContactsContactGroupRel> query;
705 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
706 query.SetFilter(relFilter);
707 query.SetSort(_contacts_contact_grouprel.group_name, true);
708 query.SetDistinct(true);
710 pCategories = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Category>(query);
711 SysTryReturn(NID_SCL, pCategories != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
719 _AddressbookManagerImpl::GetAllContactsN(void) const
721 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
725 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
727 __Query<__ContactsContact> query;
729 query.SetSort(_contacts_contact.display_name, true);
731 if (pRwAbFilter->Get() != null)
733 query.SetFilter(*pRwAbFilter);
736 IList* pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
737 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
743 _AddressbookManagerImpl::GetContactsByCategoryN(RecordId categoryId) const
745 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));
746 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
750 IList* pContacts = null;
752 unique_ptr< __Filter<__ContactsContactGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactGroupRel>());
754 __Filter<__ContactsContactGroupRel> relFilter;
755 relFilter.Construct();
757 if (categoryId != INVALID_RECORD_ID)
759 relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_EQUAL, categoryId);
763 relFilter.AddInt(_contacts_contact_grouprel.group_id, CONTACTS_MATCH_NONE, 0);
766 if (pRwAbFilter->Get() != null)
768 __Filter<__ContactsContactGroupRel> mainFilter;
769 mainFilter.Construct();
771 mainFilter.AddFilter(*pRwAbFilter);
772 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
773 mainFilter.AddFilter(relFilter);
775 __Query<__ContactsContactGroupRel> query;
777 query.SetFilter(mainFilter);
779 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Contact>(query);
780 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
784 __Query<__ContactsContactGroupRel> query;
786 query.SetFilter(relFilter);
788 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactGroupRel, Contact>(query);
789 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
796 _AddressbookManagerImpl::GetContactsByPersonN(PersonId personId) const
798 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
802 IList* pContacts = null;
804 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
806 __Filter<__ContactsContact> contactFilter;
807 contactFilter.Construct();
808 contactFilter.AddInt(_contacts_contact.person_id, CONTACTS_MATCH_EQUAL, personId);
810 if (pRwAbFilter->Get() != null)
812 __Filter<__ContactsContact> mainFilter;
813 mainFilter.Construct();
815 mainFilter.AddFilter(*pRwAbFilter);
816 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
817 mainFilter.AddFilter(contactFilter);
819 __Query<__ContactsContact> query;
821 query.SetFilter(mainFilter);
822 query.SetSort(_contacts_contact.display_name, true);
824 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
825 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
829 __Query<__ContactsContact> query;
831 query.SetFilter(contactFilter);
832 query.SetSort(_contacts_contact.display_name, true);
834 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
835 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
842 _AddressbookManagerImpl::SearchContactsByEmailN(const String& email) const
844 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));
845 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
849 IList* pContacts = null;
851 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
853 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(email));
854 SysTryReturn(NID_SCL, pCharArray != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
856 __Filter<__ContactsContactEmail> emailFilter;
857 emailFilter.Construct();
858 emailFilter.AddString(_contacts_contact_email.email, CONTACTS_MATCH_CONTAINS, pCharArray.get());
860 if (pRwAbFilter->Get() != null)
862 __Filter<__ContactsContactEmail> mainFilter;
863 mainFilter.Construct();
865 mainFilter.AddFilter(*pRwAbFilter);
866 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
867 mainFilter.AddFilter(emailFilter);
869 __Query<__ContactsContactEmail> query;
871 query.SetFilter(mainFilter);
872 query.SetSort(_contacts_contact_email.display_name, true);
874 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, Contact>(query);
875 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
879 __Query<__ContactsContactEmail> query;
881 query.SetFilter(emailFilter);
882 query.SetSort(_contacts_contact_email.display_name, true);
884 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, Contact>(query);
885 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
893 _AddressbookManagerImpl::SearchContactsByNameN(const String& name) const
895 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
899 IList* pContacts = null;
901 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
903 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));
905 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(name));
906 SysTryReturn(NID_SCL, pCharArray != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
908 __Filter<__ContactsContact> nameFilter;
909 nameFilter.Construct();
910 nameFilter.AddString(_contacts_contact.display_name, CONTACTS_MATCH_CONTAINS, pCharArray.get());
912 if (pRwAbFilter->Get() != null)
914 __Filter<__ContactsContact> mainFilter;
915 mainFilter.Construct();
917 mainFilter.AddFilter(*pRwAbFilter);
918 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
919 mainFilter.AddFilter(nameFilter);
921 __Query<__ContactsContact> query;
923 query.SetFilter(mainFilter);
924 query.SetSort(_contacts_contact.display_name, true);
926 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
927 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
931 __Query<__ContactsContact> query;
933 query.SetFilter(nameFilter);
934 query.SetSort(_contacts_contact.display_name, true);
936 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query);
937 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
944 _AddressbookManagerImpl::SearchContactsByPhoneNumberN(const String& phoneNumber) const
946 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
950 IList* pContacts = null;
952 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));
954 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
956 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(phoneNumber));
957 SysTryReturn(NID_SCL, pCharArray != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
959 __Filter<__ContactsContactNumber> numberFilter;
960 numberFilter.Construct();
961 numberFilter.AddString(_contacts_contact_number.normalized_number, CONTACTS_MATCH_CONTAINS, pCharArray.get());
963 if (pRwAbFilter->Get() != null)
965 __Filter<__ContactsContactNumber> mainFilter;
966 mainFilter.Construct();
968 mainFilter.AddFilter(*pRwAbFilter);
969 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
970 mainFilter.AddFilter(numberFilter);
972 __Query<__ContactsContactNumber> query;
974 query.SetFilter(mainFilter);
975 query.SetDistinct(true);
976 query.SetSort(_contacts_contact_number.display_name, true);
978 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, Contact>(query);
979 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
983 __Query<__ContactsContactNumber> query;
985 query.SetFilter(numberFilter);
986 query.SetDistinct(true);
987 query.SetSort(_contacts_contact_number.display_name, true);
989 pContacts = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, Contact>(query);
990 SysTryReturn(NID_SCL, pContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
998 _AddressbookManagerImpl::GetCategoryCount(void) const
1000 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1004 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1006 int count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(pRwAbFilter->Get());
1007 SysTryReturn(NID_SCL, count >= 0, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1013 _AddressbookManagerImpl::GetContactCount(void) const
1015 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1019 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1021 int count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(pRwAbFilter->Get());
1022 SysTryReturn(NID_SCL, count >= 0, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1028 _AddressbookManagerImpl::GetContactN(RecordId contactId) const
1030 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1031 SysTryReturn(NID_SCL, contactId != INVALID_RECORD_ID, null, E_INVALID_ARG, "[%s] Invalid argument is used. contactId = %d.", GetErrorMessage(E_INVALID_ARG), contactId);
1035 unique_ptr<ContactRecord, ContactRecordDeleter> pContactRecord(_AddressbookUtil::GetContactRecordN(_contacts_contact._uri, contactId));
1036 SysTryReturn(NID_SCL, pContactRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1039 contacts_record_get_int(pContactRecord.get(), _contacts_contact.address_book_id, &intValue);
1041 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, intValue));
1042 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1044 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
1045 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Contact does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
1047 contacts_record_get_int(pContactRecord.get(), _contacts_contact.id, &intValue);
1048 SysTryReturn(NID_SCL, intValue == contactId, null, E_OBJ_NOT_FOUND, "[%s] The contact is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
1050 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
1051 SysTryReturn(NID_SCL, pContact, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1053 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(pContactRecord.release());
1054 _RecordImpl::GetInstance(*pContact)->SetRecordId(intValue);
1056 return pContact.release();
1060 _AddressbookManagerImpl::GetPersonN(PersonId personId) const
1062 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1063 SysTryReturn(NID_SCL, personId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. personId = %d.", GetErrorMessage(E_INVALID_ARG), personId);
1067 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, personId));
1070 contacts_record_get_int(pPersonRecord.get(), _contacts_person.id, &intValue);
1071 SysTryReturn(NID_SCL, intValue == personId, null, E_OBJ_NOT_FOUND, "[%s] The person is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
1073 Person* pPerson = __ContactsPerson::ConvertHandleTo<Person>(pPersonRecord.get());
1074 SysTryReturn(NID_SCL, pPerson != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1080 _AddressbookManagerImpl::GetCategoryN(RecordId categoryId) const
1082 SysTryReturn(NID_SCL, categoryId != INVALID_RECORD_ID, null, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument is used. categoryId = %d.", categoryId);
1083 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1087 unique_ptr<ContactRecord, ContactRecordDeleter> pCategoryRecord(_AddressbookUtil::GetContactRecordN(_contacts_group._uri, categoryId));
1088 SysTryReturn(NID_SCL, pCategoryRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1092 contacts_record_get_int(pCategoryRecord.get(), _contacts_group.id, &intValue);
1093 SysTryReturn(NID_SCL, categoryId == intValue, null, E_OBJ_NOT_FOUND, "[%s] The category is not found.", GetErrorMessage(E_OBJ_NOT_FOUND));
1095 contacts_record_get_int(pCategoryRecord.get(), _contacts_group.address_book_id, &intValue);
1097 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, intValue));
1098 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1100 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &intValue);
1101 SysTryReturn(NID_SCL, intValue == 0, null, E_OBJ_NOT_FOUND, "[%s] Category does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
1103 unique_ptr<Category> pCategory(new (std::nothrow) Category());
1104 SysTryReturn(NID_SCL, pCategory != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1106 __Filter<__ContactsGroupRelation> filter;
1108 filter.AddInt(_contacts_group_relation.group_id, CONTACTS_MATCH_EQUAL, categoryId);
1110 __Query<__ContactsGroupRelation> query;
1112 query.SetFilter(filter);
1114 int count = _AddressbookUtil::GetCountWithQuery(query);
1115 SysTryReturn(NID_SCL, count >= 0, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1117 _CategoryImpl::GetInstance(*pCategory)->SetRecordHandle(pCategoryRecord.release());
1118 _CategoryImpl::GetInstance(*pCategory)->SetMemberCount(count);
1119 _RecordImpl::GetInstance(*pCategory)->SetRecordId(categoryId);
1121 return pCategory.release();
1125 _AddressbookManagerImpl::GetLatestVersion(void) const
1127 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1129 int latestVersion = -1;
1133 int ret = contacts_db_get_current_version(&latestVersion);
1134 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, -1, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1136 return latestVersion;
1140 _AddressbookManagerImpl::GetChangedContactsAfterN(int version, int& latestVersion) const
1142 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);
1143 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1147 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1149 IList* pChangedContacts = _AddressbookUtil::SearchWithVersionN<__ContactsContactUpdatedInfo, ContactChangeInfo>(-1, version, latestVersion, pRwAbIdList.get());
1150 SysTryReturn(NID_SCL, pChangedContacts != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1152 return pChangedContacts;
1156 _AddressbookManagerImpl::GetChangedCategoriesAfterN(int version, int& latestVersion) const
1158 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);
1159 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1163 int latestVersion1 = 0;
1164 int latestVersion2 = 0;
1166 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1168 unique_ptr<IList, AllElementsDeleter> pChangedGroups(_AddressbookUtil::SearchWithVersionN<__ContactsGroupUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion1, pRwAbIdList.get()));
1169 SysTryReturn(NID_SCL, pChangedGroups != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1171 unique_ptr<IList, AllElementsDeleter> pChangedRelations(_AddressbookUtil::SearchWithVersionN<__ContactsGroupRelUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion2, pRwAbIdList.get()));
1172 SysTryReturn(NID_SCL, pChangedRelations != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1174 unique_ptr<ArrayList, AllElementsDeleter> pChangeList(new (std::nothrow) Tizen::Base::Collection::ArrayList());
1175 SysTryReturn(NID_SCL, pChangeList != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1177 result r = pChangeList->AddItems(*pChangedGroups);
1178 SysTryReturn(NID_SCL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1180 r = pChangeList->AddItems(*pChangedRelations);
1181 SysTryReturn(NID_SCL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
1183 pChangedGroups->RemoveAll(false);
1184 pChangedRelations->RemoveAll(false);
1186 latestVersion = latestVersion2 > latestVersion1 ? latestVersion2 : latestVersion1;
1188 return pChangeList.release();
1192 _AddressbookManagerImpl::GetChangedGroupsAfterN(int version, int& latestVersion) const
1194 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);
1195 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1199 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1201 IList* pChangedRelations = _AddressbookUtil::SearchWithVersionN<__ContactsGroupUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion, pRwAbIdList.get());
1202 SysTryReturn(NID_SCL, pChangedRelations != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1204 return pChangedRelations;
1208 _AddressbookManagerImpl::GetChangedRelationsAfterN(int version, int& latestVersion) const
1210 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);
1211 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1215 unique_ptr< IListT<AddressbookId> > pRwAbIdList(_AddressbookUtil::GetRwAbIdListN());
1217 IList* pChangedRelations = _AddressbookUtil::SearchWithVersionN<__ContactsGroupRelUpdatedInfo, CategoryChangeInfo>(-1, version, latestVersion, pRwAbIdList.get());
1218 SysTryReturn(NID_SCL, pChangedRelations != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1220 return pChangedRelations;
1224 _AddressbookManagerImpl::OnContactChanged(void)
1226 if (__pIAddressbookChangeEventListener == null && __pIAddressbookEventListener == null)
1231 IList* pChangedContactList = GetChangedContactsAfterN(__dbVersionForContact, __dbVersionForContact);
1232 SysTryReturnVoidResult(NID_SCL, pChangedContactList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1234 if (pChangedContactList->GetCount() > 0)
1236 if (__pIAddressbookChangeEventListener != null)
1238 __pIAddressbookChangeEventListener->OnContactsChanged(*pChangedContactList);
1242 __pIAddressbookEventListener->OnContactsChanged(*pChangedContactList);
1246 pChangedContactList->RemoveAll(true);
1247 delete pChangedContactList;
1251 _AddressbookManagerImpl::OnCategoryChanged(void)
1253 if (__pIAddressbookChangeEventListener == null && __pIAddressbookEventListener == null)
1258 IList* pChangedCategoryList = GetChangedGroupsAfterN(__dbVersionForGroup, __dbVersionForGroup);
1259 SysTryReturnVoidResult(NID_SCL, pChangedCategoryList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1261 if (pChangedCategoryList->GetCount() > 0)
1263 if (__pIAddressbookChangeEventListener != null)
1265 __pIAddressbookChangeEventListener->OnCategoriesChanged(*pChangedCategoryList);
1269 __pIAddressbookEventListener->OnCategoriesChanged(*pChangedCategoryList);
1273 pChangedCategoryList->RemoveAll(true);
1274 delete pChangedCategoryList;
1278 _AddressbookManagerImpl::OnRelationChanged(void)
1280 if (__pIAddressbookEventListener == null)
1285 IList* pChangedCategoryList = GetChangedRelationsAfterN(__dbVersionForRelation, __dbVersionForRelation);
1286 SysTryReturnVoidResult(NID_SCL, pChangedCategoryList != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1288 if (pChangedCategoryList->GetCount() > 0)
1290 if (__pIAddressbookEventListener != null)
1292 __pIAddressbookEventListener->OnCategoriesChanged(*pChangedCategoryList);
1296 pChangedCategoryList->RemoveAll(true);
1297 delete pChangedCategoryList;
1301 _AddressbookManagerImpl::RemovePerson(PersonId personId)
1303 SysTryReturnResult(NID_SCL, personId > 0, E_INVALID_ARG, "[%s] Invalid argument is used. ", GetErrorMessage(E_INVALID_ARG));
1304 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1306 result r = _AddressbookUtil::DeleteContactRecord(_contacts_person._uri, personId);
1307 SysTryReturn(NID_SCL, !IsFailed(r), r, r, "[%s] Propagating.", GetErrorMessage(r));
1313 _AddressbookManagerImpl::GetAllPersonsN(void) const
1315 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1319 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1321 unsigned int propertyIds[] =
1323 _contacts_person_grouprel.person_id,
1324 _contacts_person_grouprel.display_name,
1325 _contacts_person_grouprel.image_thumbnail_path,
1326 _contacts_person_grouprel.ringtone_path,
1327 _contacts_person_grouprel.is_favorite,
1328 _contacts_person_grouprel.has_phonenumber,
1329 _contacts_person_grouprel.has_email,
1330 _contacts_person_grouprel.addressbook_ids,
1334 __Query<__ContactsPersonGroupRel> query;
1336 query.SetSort(_contacts_person.display_name, true);
1337 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1338 query.SetDistinct(true);
1340 if (pRwAbFilter->Get() != null)
1342 query.SetFilter(*pRwAbFilter);
1345 IList* pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
1346 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1352 _AddressbookManagerImpl::GetPersonsByCategoryN(RecordId categoryId) const
1354 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));
1355 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1359 IList* pPersons = null;
1361 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1363 __Filter<__ContactsPersonGroupRel> groupFilter;
1364 groupFilter.Construct();
1365 if (categoryId != INVALID_RECORD_ID)
1367 groupFilter.AddInt(_contacts_person_grouprel.group_id, CONTACTS_MATCH_EQUAL, categoryId);
1371 groupFilter.AddInt(_contacts_person_grouprel.group_id, CONTACTS_MATCH_NONE, 0);
1374 unsigned int propertyIds[] =
1376 _contacts_person_grouprel.person_id,
1377 _contacts_person_grouprel.display_name,
1378 _contacts_person_grouprel.image_thumbnail_path,
1379 _contacts_person_grouprel.ringtone_path,
1380 _contacts_person_grouprel.is_favorite,
1381 _contacts_person_grouprel.has_phonenumber,
1382 _contacts_person_grouprel.has_email,
1383 _contacts_person_grouprel.addressbook_ids,
1386 if (pRwAbFilter->Get() != null)
1388 __Filter<__ContactsPersonGroupRel> mainFilter;
1389 mainFilter.Construct();
1391 mainFilter.AddFilter(*pRwAbFilter);
1392 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1393 mainFilter.AddFilter(groupFilter);
1395 __Query<__ContactsPersonGroupRel> query;
1397 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1398 query.SetFilter(mainFilter);
1399 query.SetSort(_contacts_person_grouprel.display_name, true);
1400 query.SetDistinct(true);
1402 pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
1403 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1407 __Query<__ContactsPersonGroupRel> query;
1409 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1410 query.SetFilter(groupFilter);
1411 query.SetSort(_contacts_person_grouprel.display_name, true);
1412 query.SetDistinct(true);
1414 pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query);
1415 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1423 _AddressbookManagerImpl::GetFavoritePersonsN() const
1425 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1429 __Filter<__ContactsPerson> filter;
1431 filter.AddBool(_contacts_person.is_favorite, true);
1433 __Query<__ContactsPerson> query;
1435 query.SetFilter(filter);
1436 query.SetSort(_contacts_person.display_name, true);
1438 IList* pPersons = _AddressbookUtil::SearchWithQueryN<__ContactsPerson, Person>(query);
1439 SysTryReturn(NID_SCL, pPersons != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1445 _AddressbookManagerImpl::SearchPersonsN(const Tizen::Base::String& keyword) const
1447 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1448 SysTryReturn(NID_SCL, !keyword.IsEmpty(), null, E_INVALID_ARG, "Invalid argument is used. keyword is empty string.", GetErrorMessage(E_INVALID_ARG));
1452 contacts_record_h currentRecord = null;
1453 unique_ptr<Person> pPerson(null);
1455 unique_ptr<ArrayList, AllElementsDeleter> pPersonList(new (std::nothrow) ArrayList());
1456 SysTryReturn(NID_SCL, pPersonList != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1458 result r = pPersonList->Construct();
1459 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1461 unique_ptr<__SearchResult<__ContactsPerson> > pSearchResult(_AddressbookUtil::Search<__ContactsPerson>(keyword));
1462 SysTryReturn(NID_SCL, pSearchResult != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1464 while (pSearchResult->MoveNext() == E_SUCCESS)
1466 currentRecord = pSearchResult->GetCurrentRecord();
1467 SysTryReturn(NID_SCL, currentRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1469 pPerson.reset(__ContactsPerson::ConvertHandleTo<Person>(currentRecord));
1470 SysTryReturn(NID_SCL, pPerson != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1472 r = pPersonList->Add(*pPerson);
1473 SysTryReturn(NID_SCL, !IsFailed(r), null, r, "[%s] Propagating.", GetErrorMessage(r));
1478 return pPersonList.release();
1482 _AddressbookManagerImpl::SetPersonAsFavorite(PersonId personId, bool isFavorite)
1484 SysTryReturn(NID_SCL, personId > 0, E_INVALID_ARG, E_INVALID_ARG, "[%s] Invalid argument is used. personId = %d.", GetErrorMessage(E_INVALID_ARG), personId);
1485 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1487 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, personId));
1488 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1490 bool boolValue = false;
1491 contacts_record_get_bool(pPersonRecord.get(), _contacts_person.is_favorite, &boolValue);
1493 if (boolValue != isFavorite)
1495 contacts_record_set_bool(pPersonRecord.get(), _contacts_person.is_favorite, isFavorite);
1497 int ret = contacts_db_update_record(pPersonRecord.get());
1498 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));
1499 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1506 _AddressbookManagerImpl::MergePersons(PersonId sourcePersonId, PersonId targetPersonId)
1508 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);
1509 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1511 int ret = contacts_person_link_person(targetPersonId, sourcePersonId);
1512 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1513 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1519 _AddressbookManagerImpl::UnlinkContact(PersonId personId, RecordId contactId, PersonId& newPersonId)
1521 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);
1522 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1524 int ret = contacts_person_unlink_contact(personId, contactId, &newPersonId);
1525 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));
1526 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
1532 _AddressbookManagerImpl::SearchN(const AddressbookFilter& filter, unsigned long propertySortedBy, SortOrder sortOrder, int offset, int maxCount)
1534 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1538 IList* pList = null;
1539 bool ascending = false;
1540 unsigned int viewSortPropertyId = 0;
1542 AddressbookFilterType type = _AddressbookFilterImpl::GetInstance(filter)->GetType();
1543 contacts_filter_h filterHandle = _AddressbookFilterImpl::GetInstance(filter)->GetFilterHandle();
1545 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);
1547 if (propertySortedBy != 0 && sortOrder != SORT_ORDER_NONE)
1549 viewSortPropertyId = _AddressbookFilterImpl::GetViewPropertyId(type, propertySortedBy);
1550 ascending = (sortOrder == SORT_ORDER_ASCENDING) ? true : false;
1555 case AB_FI_TYPE_ADDRESSBOOK:
1557 unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
1559 __Filter<__ContactsAddressbook> abFilter;
1560 abFilter.Construct(filterHandle);
1562 if (pRwAbFilter->Get() != null)
1564 __Filter<__ContactsAddressbook> mainFilter;
1565 mainFilter.Construct();
1566 mainFilter.AddFilter(*pRwAbFilter);
1567 if (abFilter.Get() != null)
1569 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1570 mainFilter.AddFilter(abFilter);
1573 __Query<__ContactsAddressbook> query;
1575 query.SetFilter(mainFilter);
1577 if (viewSortPropertyId != 0)
1579 query.SetSort(viewSortPropertyId, ascending);
1582 pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
1586 __Query<__ContactsAddressbook> query;
1588 query.SetFilter(abFilter);
1590 if (viewSortPropertyId != 0)
1592 query.SetSort(viewSortPropertyId, ascending);
1595 pList = _AddressbookUtil::SearchWithQueryN<__ContactsAddressbook, Addressbook>(query, offset, maxCount);
1600 case AB_FI_TYPE_PERSON:
1602 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1604 __Filter<__ContactsPersonGroupRel> personFilter;
1605 personFilter.Construct(filterHandle);
1607 unsigned int propertyIds[] =
1608 { _contacts_person_grouprel.person_id,
1609 _contacts_person_grouprel.addressbook_ids,
1610 _contacts_person_grouprel.is_favorite,
1611 _contacts_person_grouprel.has_phonenumber,
1612 _contacts_person_grouprel.has_email,
1613 _contacts_person_grouprel.image_thumbnail_path,
1614 _contacts_person_grouprel.ringtone_path,
1615 _contacts_person_grouprel.display_name
1618 if (pRwAbFilter->Get() != null)
1620 __Filter<__ContactsPersonGroupRel> mainFilter;
1621 mainFilter.Construct();
1622 mainFilter.AddFilter(*pRwAbFilter);
1623 if (personFilter.Get() != null)
1625 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1626 mainFilter.AddFilter(personFilter);
1629 __Query<__ContactsPersonGroupRel> query;
1631 query.SetFilter(mainFilter);
1632 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1633 query.SetDistinct(true);
1635 if (viewSortPropertyId != 0)
1637 query.SetSort(viewSortPropertyId, ascending);
1640 pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
1644 __Query<__ContactsPersonGroupRel> query;
1646 query.SetFilter(personFilter);
1647 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1648 query.SetDistinct(true);
1650 if (viewSortPropertyId != 0)
1652 query.SetSort(viewSortPropertyId, ascending);
1655 pList = _AddressbookUtil::SearchWithQueryN<__ContactsPersonGroupRel, Person>(query, offset, maxCount);
1659 case AB_FI_TYPE_CONTACT:
1661 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1663 __Filter<__ContactsContact> contactFilter;
1664 contactFilter.Construct(filterHandle);
1666 if (pRwAbFilter->Get() != null)
1668 __Filter<__ContactsContact> mainFilter;
1669 mainFilter.Construct();
1670 mainFilter.AddFilter(*pRwAbFilter);
1671 if (contactFilter.Get() != null)
1673 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1674 mainFilter.AddFilter(contactFilter);
1677 __Query<__ContactsContact> query;
1679 query.SetFilter(mainFilter);
1681 if (viewSortPropertyId != 0)
1683 query.SetSort(viewSortPropertyId, ascending);
1686 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
1690 __Query<__ContactsContact> query;
1692 query.SetFilter(contactFilter);
1694 if (viewSortPropertyId != 0)
1696 query.SetSort(viewSortPropertyId, ascending);
1699 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContact, Contact>(query, offset, maxCount);
1704 case AB_FI_TYPE_CATEGORY:
1706 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1708 __Filter<__ContactsGroup> groupFilter;
1709 groupFilter.Construct(filterHandle);
1711 if (pRwAbFilter->Get() != null)
1713 __Filter<__ContactsGroup> mainFilter;
1714 mainFilter.Construct();
1715 mainFilter.AddFilter(*pRwAbFilter);
1716 if (groupFilter.Get() != null)
1718 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1719 mainFilter.AddFilter(groupFilter);
1722 __Query<__ContactsGroup> query;
1724 query.SetFilter(mainFilter);
1726 if (viewSortPropertyId != 0)
1728 query.SetSort(viewSortPropertyId, ascending);
1731 pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
1735 __Query<__ContactsGroup> query;
1737 query.SetFilter(groupFilter);
1739 if (viewSortPropertyId != 0)
1741 query.SetSort(viewSortPropertyId, ascending);
1744 pList = _AddressbookUtil::SearchWithQueryN<__ContactsGroup, Category>(query, offset, maxCount);
1748 case AB_FI_TYPE_PHONE_CONTACT:
1750 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
1752 __Filter<__ContactsContactNumber> numberFilter;
1753 numberFilter.Construct(filterHandle);
1755 if (pRwAbFilter->Get() != null)
1757 __Filter<__ContactsContactNumber> mainFilter;
1758 mainFilter.Construct();
1759 mainFilter.AddFilter(*pRwAbFilter);
1760 if (numberFilter.Get() != null)
1762 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1763 mainFilter.AddFilter(numberFilter);
1766 __Query<__ContactsContactNumber> query;
1768 query.SetFilter(mainFilter);
1770 if (viewSortPropertyId != 0)
1772 query.SetSort(viewSortPropertyId, ascending);
1775 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
1779 __Query<__ContactsContactNumber> query;
1781 query.SetFilter(numberFilter);
1783 if (viewSortPropertyId != 0)
1785 query.SetSort(viewSortPropertyId, ascending);
1788 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactNumber, PhoneNumberContact>(query, offset, maxCount);
1792 case AB_FI_TYPE_EMAIL_CONTACT:
1794 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
1796 __Filter<__ContactsContactEmail> emailFilter;
1797 emailFilter.Construct(filterHandle);
1799 if (pRwAbFilter->Get() != null)
1801 __Filter<__ContactsContactEmail> mainFilter;
1802 mainFilter.Construct();
1803 mainFilter.AddFilter(*pRwAbFilter);
1804 if (emailFilter.Get() != null)
1806 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1807 mainFilter.AddFilter(emailFilter);
1810 __Query<__ContactsContactEmail> query;
1812 query.SetFilter(mainFilter);
1814 if (viewSortPropertyId != 0)
1816 query.SetSort(viewSortPropertyId, ascending);
1819 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
1823 __Query<__ContactsContactEmail> query;
1825 query.SetFilter(emailFilter);
1827 if (viewSortPropertyId != 0)
1829 query.SetSort(viewSortPropertyId, ascending);
1832 pList = _AddressbookUtil::SearchWithQueryN<__ContactsContactEmail, EmailContact>(query, offset, maxCount);
1837 SysLogException(NID_SCL, E_INVALID_ARG, "[%s] Invalid argument is used. The filter type is invalid", GetErrorMessage(E_INVALID_ARG));
1845 _AddressbookManagerImpl::GetMatchedItemCount(const AddressbookFilter& filter)
1847 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, -1, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1852 AddressbookFilterType type = _AddressbookFilterImpl::GetInstance(filter)->GetType();
1853 contacts_filter_h filterHandle = _AddressbookFilterImpl::GetInstance(filter)->GetFilterHandle();
1857 case AB_FI_TYPE_ADDRESSBOOK:
1859 unique_ptr< __Filter<__ContactsAddressbook> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsAddressbook>());
1861 __Filter<__ContactsAddressbook> abFilter;
1862 abFilter.Construct(filterHandle);
1864 if (pRwAbFilter->Get() != null)
1866 __Filter<__ContactsAddressbook> mainFilter;
1867 mainFilter.Construct();
1868 mainFilter.AddFilter(*pRwAbFilter);
1869 if (abFilter.Get() != null)
1871 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1872 mainFilter.AddFilter(abFilter);
1875 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(mainFilter.Get());
1879 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsAddressbook>(abFilter.Get());
1883 case AB_FI_TYPE_PERSON:
1885 unique_ptr< __Filter<__ContactsPersonGroupRel> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsPersonGroupRel>());
1887 __Filter<__ContactsPersonGroupRel> personFilter;
1888 personFilter.Construct(filterHandle);
1890 if (pRwAbFilter->Get() != null)
1892 __Filter<__ContactsPersonGroupRel> mainFilter;
1893 mainFilter.Construct();
1894 mainFilter.AddFilter(*pRwAbFilter);
1895 if (personFilter.Get() != null)
1897 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1898 mainFilter.AddFilter(personFilter);
1901 unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
1903 __Query<__ContactsPersonGroupRel> query;
1905 query.SetFilter(mainFilter);
1906 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1907 query.SetDistinct(true);
1909 count = _AddressbookUtil::GetCountWithQuery(query);
1913 unsigned int propertyIds[] = { _contacts_person_grouprel.person_id };
1915 __Query<__ContactsPersonGroupRel> query;
1917 query.SetFilter(personFilter);
1918 query.SetProjection(propertyIds, sizeof(propertyIds)/sizeof(unsigned int));
1919 query.SetDistinct(true);
1921 count = _AddressbookUtil::GetCountWithQuery(query);
1927 case AB_FI_TYPE_CONTACT:
1929 unique_ptr< __Filter<__ContactsContact> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContact>());
1931 __Filter<__ContactsContact> contactFilter;
1932 contactFilter.Construct(filterHandle);
1934 if (pRwAbFilter->Get() != null)
1936 __Filter<__ContactsContact> mainFilter;
1937 mainFilter.Construct();
1938 mainFilter.AddFilter(*pRwAbFilter);
1939 if (contactFilter.Get() != null)
1941 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1942 mainFilter.AddFilter(contactFilter);
1945 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(mainFilter.Get());
1949 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContact>(contactFilter.Get());
1953 case AB_FI_TYPE_CATEGORY:
1955 unique_ptr< __Filter<__ContactsGroup> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsGroup>());
1957 __Filter<__ContactsGroup> groupFilter;
1958 groupFilter.Construct(filterHandle);
1960 if (pRwAbFilter->Get() != null)
1962 __Filter<__ContactsGroup> mainFilter;
1963 mainFilter.Construct();
1964 mainFilter.AddFilter(*pRwAbFilter);
1965 if (groupFilter.Get() != null)
1967 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1968 mainFilter.AddFilter(groupFilter);
1971 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(mainFilter.Get());
1975 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsGroup>(groupFilter.Get());
1979 case AB_FI_TYPE_PHONE_CONTACT:
1981 unique_ptr< __Filter<__ContactsContactNumber> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactNumber>());
1983 __Filter<__ContactsContactNumber> numberFilter;
1984 numberFilter.Construct(filterHandle);
1986 if (pRwAbFilter->Get() != null)
1988 __Filter<__ContactsContactNumber> mainFilter;
1989 mainFilter.Construct();
1990 mainFilter.AddFilter(*pRwAbFilter);
1991 if (numberFilter.Get() != null)
1993 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
1994 mainFilter.AddFilter(numberFilter);
1997 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(mainFilter.Get());
2001 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactNumber>(numberFilter.Get());
2005 case AB_FI_TYPE_EMAIL_CONTACT:
2007 unique_ptr< __Filter<__ContactsContactEmail> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsContactEmail>());
2009 __Filter<__ContactsContactEmail> emailFilter;
2010 emailFilter.Construct(filterHandle);
2012 if (pRwAbFilter->Get() != null)
2014 __Filter<__ContactsContactEmail> mainFilter;
2015 mainFilter.Construct();
2016 mainFilter.AddFilter(*pRwAbFilter);
2017 if (emailFilter.Get() != null)
2019 mainFilter.AddOperator(CONTACTS_FILTER_OPERATOR_AND);
2020 mainFilter.AddFilter(emailFilter);
2023 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(mainFilter.Get());
2027 count = _AddressbookUtil::GetMatchedItemCountWithFilter<__ContactsContactEmail>(emailFilter.Get());
2032 SysLogException(NID_SCL, E_INVALID_ARG, "[%s] Invalid argument is used. The type of the filter is invalid", GetErrorMessage(GetLastResult()));
2040 _AddressbookManagerImpl::OnEachContact(contacts_record_h recordHandle, void* pUserData)
2042 IList* pList = static_cast<IList*>(pUserData);
2046 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
2047 SysTryReturn(NID_SCL, pContact != null, false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2049 contacts_record_h newRecordHandle = null;
2051 contacts_record_clone(recordHandle, &newRecordHandle);
2052 SysTryReturn(NID_SCL, newRecordHandle != null, false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2054 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(newRecordHandle);
2056 result r = pList->Add(*pContact);
2057 SysTryReturn(NID_SCL, !IsFailed(r), false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2065 _AddressbookManagerImpl::ParseContactsFromVcardN(const Tizen::Base::String& vcardPath)
2067 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2072 result r = file.Construct(vcardPath, "r");
2073 SysTryReturn(NID_SCL, r != E_INVALID_ARG, null, E_INVALID_ARG, "[%s] Invalid argument is used..", GetErrorMessage(E_INVALID_ARG));
2074 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));
2075 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));
2076 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2078 unique_ptr<ArrayList, AllElementsDeleter> pList(new (std::nothrow) ArrayList());
2080 unique_ptr<char[]> pCharArray(_StringConverter::CopyToCharArrayN(vcardPath));
2082 int ret = contacts_vcard_parse_to_contact_foreach(pCharArray.get(), OnEachContact, pList.get());
2083 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2084 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2085 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2087 return pList.release();
2091 _AddressbookManagerImpl::ExportPersonToVcard(const Person& person, const Tizen::Base::String& vcardPath)
2093 bool exist = File::IsFileExist(vcardPath);
2094 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2095 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2096 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2099 result r = file.Construct(vcardPath, "w");
2100 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));
2101 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2102 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2104 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, person.GetId()));
2105 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2107 char* pVcardStream = null;
2108 int ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2109 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));
2110 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2112 r = file.Write(pVcardStream, strlen(pVcardStream));
2114 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2115 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2121 _AddressbookManagerImpl::ExportPersonsToVcard(const Tizen::Base::Collection::IList& personList, const Tizen::Base::String& vcardPath)
2123 bool exist = File::IsFileExist(vcardPath);
2124 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2125 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2126 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2128 int ret = CONTACTS_ERROR_NONE;
2129 char* pVcardStream = null;
2132 result r = file.Construct(vcardPath, "w");
2133 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));
2134 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2135 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2138 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(null);
2140 unique_ptr<IEnumerator> pEnum(personList.GetEnumeratorN());
2141 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2143 while (pEnum->MoveNext() == E_SUCCESS)
2145 Person* pPerson = static_cast<Person*>(pEnum->GetCurrent());
2147 pPersonRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, pPerson->GetId()));
2148 SysTryReturn(NID_SCL, pPersonRecord != null, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2150 ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2151 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));
2152 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2154 r = file.Write(pVcardStream, strlen(pVcardStream));
2156 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2157 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2164 _AddressbookManagerImpl::ExportContactToVcard(const Contact& contact, const Tizen::Base::String& vcardPath)
2166 bool exist = File::IsFileExist(vcardPath);
2167 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2168 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2169 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2172 result r = file.Construct(vcardPath, "w");
2173 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));
2174 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2175 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2177 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
2179 char* pVcardStream = null;
2181 int ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2182 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));
2183 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2185 r = file.Write(pVcardStream, strlen(pVcardStream));
2187 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2188 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2194 _AddressbookManagerImpl::ExportContactsToVcard(const Tizen::Base::Collection::IList& contactList, const Tizen::Base::String& vcardPath)
2196 bool exist = File::IsFileExist(vcardPath);
2197 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2198 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2199 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2201 int ret = CONTACTS_ERROR_NONE;
2202 char* pVcardStream = null;
2204 Contact* pContact = null;
2206 result r = file.Construct(vcardPath, "w");
2207 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));
2208 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2209 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2211 contacts_record_h recordHandle = null;
2213 unique_ptr<IEnumerator> pEnum(contactList.GetEnumeratorN());
2214 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2216 while (pEnum->MoveNext() == E_SUCCESS)
2218 pContact = static_cast<Contact*>(pEnum->GetCurrent());
2220 recordHandle = _ContactImpl::GetInstance(*pContact)->GetContactRecordHandle();
2222 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2223 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));
2224 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2226 r = file.Write(pVcardStream, strlen(pVcardStream));
2228 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2229 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2236 _AddressbookManagerImpl::ExportContactToVcardStreamN(const Contact& contact)
2238 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2242 contacts_record_h recordHandle = _ContactImpl::GetInstance(contact)->GetContactRecordHandle();
2244 char* pVcardStream = null;
2245 int ret = CONTACTS_ERROR_NONE;
2247 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2248 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2249 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2250 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2252 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2253 if (pByteBuffer == null)
2256 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2261 result r = pByteBuffer->Construct(strlen(pVcardStream));
2265 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2270 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2272 SysTryReturn(NID_SCL, r != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2273 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2275 return pByteBuffer.release();
2279 _AddressbookManagerImpl::ExportContactsToVcardStreamN(const Tizen::Base::Collection::IList& contactList)
2281 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2285 char* pVcardStream = null;
2286 int ret = CONTACTS_ERROR_NONE;
2287 Contact* pContact = null;
2288 result r = E_SUCCESS;
2291 contacts_record_h recordHandle = null;
2293 unique_ptr<IEnumerator> pEnum(contactList.GetEnumeratorN());
2294 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2296 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2297 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2299 r = pByteBuffer->Construct(capacity);
2300 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2302 if (contactList.GetCount() == 0)
2304 return pByteBuffer.release();
2307 while (pEnum->MoveNext() == E_SUCCESS)
2309 pContact = static_cast<Contact*>(pEnum->GetCurrent());
2311 recordHandle = _ContactImpl::GetInstance(*pContact)->GetContactRecordHandle();
2313 ret = contacts_vcard_make_from_contact(recordHandle, &pVcardStream);
2314 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2315 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2316 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2318 capacity += strlen(pVcardStream);
2319 r = pByteBuffer->ExpandCapacity(capacity);
2323 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2328 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2330 pVcardStream = null;
2331 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.: capacity(%d), size(%d)", GetErrorMessage(E_SYSTEM));
2334 return pByteBuffer.release();
2338 _AddressbookManagerImpl::ExportPersonToVcardStreamN(const Person& person)
2340 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2344 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, person.GetId()));
2345 SysTryReturn(NID_SCL, GetLastResult() != E_OBJ_NOT_FOUND, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2346 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2348 char* pVcardStream = null;
2349 int ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2350 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2351 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2352 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2354 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2355 if (pByteBuffer == null)
2358 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2363 result r = pByteBuffer->Construct(strlen(pVcardStream));
2367 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2372 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2374 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2376 return pByteBuffer.release();
2380 _AddressbookManagerImpl::ExportPersonsToVcardStreamN(const Tizen::Base::Collection::IList& personList)
2382 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2386 int ret = CONTACTS_ERROR_NONE;
2387 Person* pPerson = null;
2388 char* pVcardStream = null;
2392 unique_ptr<ContactRecord, ContactRecordDeleter> pPersonRecord(null);
2394 unique_ptr<IEnumerator> pEnum(personList.GetEnumeratorN());
2395 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2397 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2398 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2400 result r = pByteBuffer->Construct(capacity);
2401 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2403 if (personList.GetCount() == 0)
2405 return pByteBuffer.release();
2408 while (pEnum->MoveNext() == E_SUCCESS)
2410 pPerson = static_cast<Person*>(pEnum->GetCurrent());
2412 pPersonRecord.reset(_AddressbookUtil::GetContactRecordN(_contacts_person._uri, pPerson->GetId()));
2413 SysTryReturn(NID_SCL, GetLastResult() != E_OBJ_NOT_FOUND, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2414 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, null, E_INVALID_ARG, "[%s] Person does not exist.", GetErrorMessage(E_INVALID_ARG));
2416 ret = contacts_vcard_make_from_person(pPersonRecord.get(), &pVcardStream);
2417 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2418 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2419 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2421 capacity += strlen(pVcardStream);
2422 r = pByteBuffer->ExpandCapacity(capacity);
2426 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2431 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2433 pVcardStream = null;
2434 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2437 return pByteBuffer.release();
2441 _AddressbookManagerImpl::ParseVcardStreamN(const Tizen::Base::ByteBuffer& vcardStream)
2443 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2447 contacts_list_h listHandle = null;
2448 result r = E_SUCCESS;
2450 int ret = contacts_vcard_parse_to_contacts(reinterpret_cast<char*>(const_cast<byte*>(vcardStream.GetPointer())), &listHandle);
2451 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2452 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2454 unsigned int count = 0;
2455 contacts_record_h recordHandle = null;
2456 contacts_list_get_count(listHandle, &count);
2458 unique_ptr<ArrayList, AllElementsDeleter> pList(new (std::nothrow) ArrayList());
2461 contacts_list_destroy(listHandle, true);
2462 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2467 r = pList->Construct(count);
2470 contacts_list_destroy(listHandle, true);
2471 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2476 for (unsigned int i = 0; i < count; i++)
2478 unique_ptr<Contact> pContact(new (std::nothrow) Contact());
2479 if (pContact == null)
2481 contacts_list_destroy(listHandle, true);
2482 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2487 r = pList->Add(pContact.get());
2490 contacts_list_destroy(listHandle, true);
2491 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2499 unique_ptr<IEnumerator> pEnum(pList->GetEnumeratorN());
2501 while (pEnum->MoveNext() == E_SUCCESS)
2503 Contact* pContact = static_cast <Contact*> (pEnum->GetCurrent());
2505 contacts_list_get_current_record_p(listHandle, &recordHandle);
2506 _ContactImpl::GetInstance(*pContact)->SetContactRecordHandle(recordHandle);
2508 ret = contacts_list_next(listHandle);
2511 contacts_list_destroy(listHandle, false);
2513 return pList.release();
2517 _AddressbookManagerImpl::ExportUserProfileToVcardStreamN(const UserProfile& userProfile)
2519 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2523 char* pVcardStream = null;
2524 int ret = CONTACTS_ERROR_NONE;
2525 contacts_record_h recordHandle = null;
2527 recordHandle = _UserProfileImpl::GetInstance(userProfile)->GetUserProfileHandle();
2529 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2530 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2531 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2532 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2534 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2535 if (pByteBuffer == null)
2538 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2542 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2544 result r = pByteBuffer->Construct(strlen(pVcardStream));
2548 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2553 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2555 SysTryReturn(NID_SCL, r != E_OUT_OF_MEMORY, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2556 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2558 return pByteBuffer.release();
2562 _AddressbookManagerImpl::ExportUserProfilesToVcardStreamN(const Tizen::Base::Collection::IList& userProfileList)
2564 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2568 char* pVcardStream = null;
2569 int ret = CONTACTS_ERROR_NONE;
2570 UserProfile* pProfile = null;
2571 result r = E_SUCCESS;
2574 unique_ptr<IEnumerator> pEnum(userProfileList.GetEnumeratorN());
2575 SysTryReturn(NID_SCL, pEnum != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2577 unique_ptr<ByteBuffer> pByteBuffer(new (std::nothrow) ByteBuffer);
2578 SysTryReturn(NID_SCL, pByteBuffer != null, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2580 r = pByteBuffer->Construct(capacity);
2581 SysTryReturn(NID_SCL, !IsFailed(r), null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2583 if (userProfileList.GetCount() == 0)
2585 return pByteBuffer.release();
2588 while (pEnum->MoveNext() == E_SUCCESS)
2590 contacts_record_h recordHandle = null;
2592 pProfile = static_cast<UserProfile*>(pEnum->GetCurrent());
2594 recordHandle = _UserProfileImpl::GetInstance(*pProfile)->GetUserProfileHandle();
2596 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2597 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_INVALID_PARAMETER, null, E_INVALID_ARG, "[%s] Invalid argument is used.", GetErrorMessage(E_INVALID_ARG));
2598 SysTryReturn(NID_SCL, ret != CONTACTS_ERROR_SYSTEM, null, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2599 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2601 capacity += strlen(pVcardStream);
2602 r = pByteBuffer->ExpandCapacity(capacity);
2606 SysLogException(NID_SCL, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2611 r = pByteBuffer->SetArray(reinterpret_cast<byte*>(pVcardStream), 0, strlen(pVcardStream));
2613 SysTryReturn(NID_SCL, r == E_SUCCESS, null, E_SYSTEM, "[%s] A system error has been occurred.: capacity(%d), size(%d)", GetErrorMessage(E_SYSTEM));
2616 return pByteBuffer.release();
2620 _AddressbookManagerImpl::ExportUserProfileToVcard(const UserProfile& userProfile, const Tizen::Base::String& vcardPath)
2622 bool exist = File::IsFileExist(vcardPath);
2623 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2624 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2625 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2628 result r = file.Construct(vcardPath, "w");
2629 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));
2630 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2631 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2633 char* pVcardStream = null;
2634 contacts_record_h recordHandle = null;
2636 recordHandle = _UserProfileImpl::GetInstance(userProfile)->GetUserProfileHandle();
2638 int ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2639 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));
2640 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2642 r = file.Write(pVcardStream, strlen(pVcardStream));
2644 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2645 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2651 _AddressbookManagerImpl::ExportUserProfilesToVcard(const Tizen::Base::Collection::IList& userProfileList, const Tizen::Base::String& vcardPath)
2653 bool exist = File::IsFileExist(vcardPath);
2654 SysTryReturn(NID_SCL, GetLastResult() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating..", GetErrorMessage(GetLastResult()));
2655 SysTryReturn(NID_SCL, !exist, E_FILE_ALREADY_EXIST, E_FILE_ALREADY_EXIST, "[%s] The specified vcard file already exist.", GetErrorMessage(E_FILE_ALREADY_EXIST));
2656 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, GetLastResult(), GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2658 int ret = CONTACTS_ERROR_NONE;
2659 char* pVcardStream = null;
2661 UserProfile* pProfile = null;
2663 result r = file.Construct(vcardPath, "w");
2664 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));
2665 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2666 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2668 unique_ptr<IEnumerator> pEnum(userProfileList.GetEnumeratorN());
2669 SysTryReturnResult(NID_SCL, pEnum != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2671 while (pEnum->MoveNext() == E_SUCCESS)
2673 contacts_record_h recordHandle = null;
2675 pProfile = static_cast<UserProfile*>(pEnum->GetCurrent());
2677 recordHandle = _UserProfileImpl::GetInstance(*pProfile)->GetUserProfileHandle();
2679 ret = contacts_vcard_make_from_my_profile(recordHandle, &pVcardStream);
2680 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));
2681 SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2683 r = file.Write(pVcardStream, strlen(pVcardStream));
2685 SysTryReturn(NID_SCL, r != E_STORAGE_FULL, E_STORAGE_FULL, E_STORAGE_FULL, "[%s] The storage is full.", GetErrorMessage(E_STORAGE_FULL));
2686 SysTryReturn(NID_SCL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
2693 _AddressbookManagerImpl::GetAllUserProfilesN(void) const
2695 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2699 unique_ptr< __Filter<__ContactsUserProfile> > pRwAbFilter(_AddressbookUtil::GetRwAbFilterN<__ContactsUserProfile>());
2700 SysTryReturn(NID_SCL, pRwAbFilter != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2702 __Query<__ContactsUserProfile> query;
2704 query.SetSort(_contacts_my_profile.display_name, true);
2706 if (pRwAbFilter->Get() != null)
2708 query.SetFilter(*pRwAbFilter);
2711 IList* pUserProfilesList = _AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query);
2712 SysTryReturn(NID_SCL, pUserProfilesList != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2714 return pUserProfilesList;
2718 _AddressbookManagerImpl::GetUserProfileN(AddressbookId addressbookId) const
2720 SysTryReturn(NID_SCL, _ContactDbConnector::EnsureDbConnection() == E_SUCCESS, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2721 SysTryReturn(NID_SCL, addressbookId >= 0, null, E_INVALID_ARG, "[%s] Invalid argument is used. Addressbook Id(%d).", GetErrorMessage(E_INVALID_ARG), addressbookId);
2726 unique_ptr<ContactRecord, ContactRecordDeleter> pAbRecord(_AddressbookUtil::GetContactRecordN(_contacts_address_book._uri, addressbookId));
2727 SysTryReturn(NID_SCL, pAbRecord != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2729 contacts_record_get_int(pAbRecord.get(), _contacts_address_book.mode, &mode);
2730 SysTryReturn(NID_SCL, mode == 0, null, E_OBJ_NOT_FOUND, "[%s] The addressbook does not exist.", GetErrorMessage(E_OBJ_NOT_FOUND));
2732 __Filter<__ContactsUserProfile> filter;
2734 filter.AddInt(_contacts_my_profile.address_book_id, CONTACTS_MATCH_EQUAL, addressbookId);
2736 __Query<__ContactsUserProfile> query;
2738 query.SetFilter(filter);
2740 unique_ptr<IList, AllElementsDeleter> pUserProfilesList(_AddressbookUtil::SearchWithQueryN<__ContactsUserProfile, UserProfile>(query));
2741 SysTryReturn(NID_SCL, pUserProfilesList.get() != null, null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2742 SysTryReturn(NID_SCL, pUserProfilesList->GetCount() != 0, null, E_SUCCESS, "No UserProfile Set for this Addressbook.");
2743 SysTryReturn(NID_SCL, pUserProfilesList->GetCount() == 1, null, E_SYSTEM, "[%s] Propagating. More than one UserProfile not allowed.", GetErrorMessage(E_SYSTEM));
2745 UserProfile* pProfile = new (std::nothrow) UserProfile(*(static_cast<UserProfile*>(pUserProfilesList->GetAt(0))));
2746 SysTryReturn(NID_SCL, pProfile != null, null, E_OUT_OF_MEMORY, "[%s] Propagating.", GetErrorMessage(E_OUT_OF_MEMORY));
2751 _AddressbookManagerImpl*
2752 _AddressbookManagerImpl::GetInstance(AddressbookManager& addressbookManager)
2754 return addressbookManager.__pAddressbookManagerImpl;
2757 const _AddressbookManagerImpl*
2758 _AddressbookManagerImpl::GetInstance(const AddressbookManager& addressbookManager)
2760 return addressbookManager.__pAddressbookManagerImpl;