fix N_SE-38966
authorGwangbok Kim <gwangbok.kim@samsung.com>
Mon, 3 Jun 2013 09:07:13 +0000 (18:07 +0900)
committerGwangbok Kim <gwangbok.kim@samsung.com>
Mon, 3 Jun 2013 10:40:35 +0000 (19:40 +0900)
Change-Id: I18b3240fb617a8b6d702821a0c88980f6a13a0b2
Signed-off-by: Gwangbok Kim <gwangbok.kim@samsung.com>
src/FScl_ContactImpl.cpp

index 5a20a13..39b6464 100644 (file)
@@ -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<char[]> 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));