From c282825f6a93a006101a95133eb631f37b30e16c Mon Sep 17 00:00:00 2001 From: Gwangbok Kim Date: Mon, 3 Jun 2013 18:07:13 +0900 Subject: [PATCH] fix N_SE-38966 Change-Id: I18b3240fb617a8b6d702821a0c88980f6a13a0b2 Signed-off-by: Gwangbok Kim --- src/FScl_ContactImpl.cpp | 76 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 64 insertions(+), 12 deletions(-) diff --git a/src/FScl_ContactImpl.cpp b/src/FScl_ContactImpl.cpp index 5a20a13..39b6464 100644 --- a/src/FScl_ContactImpl.cpp +++ b/src/FScl_ContactImpl.cpp @@ -171,25 +171,46 @@ _ContactImpl::SetThumbnailPath(const Tizen::Base::String& filePath) { SysTryReturn(NID_SCL, filePath.IsEmpty() || File::IsFileExist(filePath), E_FILE_NOT_FOUND, E_FILE_NOT_FOUND, "[%s] The specified file is not found.", GetErrorMessage(E_FILE_NOT_FOUND)); + int ret = CONTACTS_ERROR_NONE; unsigned int count = 0; contacts_record_h imageHandle = null; contacts_record_get_child_record_count(__contactHandle, _contacts_contact.image, &count); if (count > 0) { - contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, 0, &imageHandle); - if (!filePath.IsEmpty()) { std::unique_ptr pCharArray( _StringConverter::CopyToCharArrayN(filePath)); SysTryReturnResult(NID_SCL, pCharArray != null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); + bool isDefault = false; + + for (unsigned int i = 0; i < count; i++) + { + contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, i, &imageHandle); + contacts_record_get_bool(imageHandle, _contacts_image.is_default, &isDefault); + if (isDefault) + { + break; + } + } + contacts_record_set_bool(imageHandle, _contacts_image.is_default, true); contacts_record_set_str(imageHandle, _contacts_image.path, pCharArray.get()); } else { - contacts_record_remove_child_record(__contactHandle, _contacts_contact.image, imageHandle); - contacts_record_destroy(imageHandle, true); + while (true) + { + ret = contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, 0, &imageHandle); + if (ret != CONTACTS_ERROR_NONE) + { + break; + } + + contacts_record_remove_child_record(__contactHandle, _contacts_contact.image, imageHandle); + contacts_record_destroy(imageHandle, true); + } + } } else @@ -202,6 +223,7 @@ _ContactImpl::SetThumbnailPath(const Tizen::Base::String& filePath) int ret = contacts_record_create(_contacts_image._uri, &imageHandle); SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); + contacts_record_set_bool(imageHandle, _contacts_image.is_default, true); contacts_record_set_str(imageHandle, _contacts_image.path, pCharArray.get()); contacts_record_add_child_record(__contactHandle, _contacts_contact.image, imageHandle); @@ -215,6 +237,7 @@ String _ContactImpl::GetThumbnailPath(void) const { unsigned int count = 0; + bool isDefault = false; contacts_record_get_child_record_count(__contactHandle, _contacts_contact.image, &count); if (count == 0) @@ -225,8 +248,17 @@ _ContactImpl::GetThumbnailPath(void) const char* pCharValue = null; contacts_record_h imageHandle = null; - contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, 0, &imageHandle); - contacts_record_get_str_p(imageHandle, _contacts_image.path, &pCharValue); + for (unsigned int i = 0; i < count; i++) + { + contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, i, &imageHandle); + contacts_record_get_str_p(imageHandle, _contacts_image.path, &pCharValue); + + contacts_record_get_bool(imageHandle, _contacts_image.is_default, &isDefault); + if (isDefault) + { + break; + } + } return String(pCharValue); } @@ -236,6 +268,7 @@ _ContactImpl::GetThumbnailN(void) const { unsigned int count = 0; char* pCharValue = null; + bool isDefault = false; contacts_record_h imageHandle = null; ClearLastResult(); @@ -246,8 +279,17 @@ _ContactImpl::GetThumbnailN(void) const return null; } - contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, 0, &imageHandle); - contacts_record_get_str_p(imageHandle, _contacts_image.path, &pCharValue); + for (unsigned int i = 0; i < count; i++) + { + contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, i, &imageHandle); + contacts_record_get_str_p(imageHandle, _contacts_image.path, &pCharValue); + + contacts_record_get_bool(imageHandle, _contacts_image.is_default, &isDefault); + if (isDefault) + { + break; + } + } String thumbnailPath(pCharValue); @@ -430,13 +472,23 @@ _ContactImpl::GetValue(const ContactPropertyId id, String& value) const break; case CONTACT_PROPERTY_ID_THUMBNAIL: { + bool isDefault = false; contacts_record_get_child_record_count(__contactHandle, _contacts_contact.image, &count); if (count > 0) { contacts_record_h imageHandle = null; - contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, 0, &imageHandle); - contacts_record_get_str_p(imageHandle, _contacts_image.path, &pCharValue); + for (unsigned int i = 0; i < count; i++) + { + contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, i, &imageHandle); + contacts_record_get_str_p(imageHandle, _contacts_image.path, &pCharValue); + + contacts_record_get_bool(imageHandle, _contacts_image.is_default, &isDefault); + if (isDefault) + { + break; + } + } } } value = pCharValue; @@ -4061,9 +4113,9 @@ _ContactImpl::Invalidate(void) // image ///////////////////////////////////////////////////////////////////////////////////////////////////////////// contacts_record_get_child_record_count(__contactHandle, _contacts_contact.image, &count); - if (count > 0) + for (i = 0; i < count; i++) { - contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, 0, &sourceRecordHandle); + contacts_record_get_child_record_at_p(__contactHandle, _contacts_contact.image, i, &sourceRecordHandle); ret = contacts_record_create(_contacts_image._uri, &destRecordHandle); SysTryReturn(NID_SCL, ret == CONTACTS_ERROR_NONE, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY)); -- 2.7.4