[content] Fix a bug on ContentDirectory
[platform/framework/native/content.git] / src / FCnt_ContentDirectoryImpl.cpp
index fc1225f..9b717e4 100644 (file)
@@ -1,5 +1,4 @@
 //
-// Open Service Platform
 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
 //
 // Licensed under the Apache License, Version 2.0 (the License);
@@ -66,6 +65,8 @@ _ContentDirectoryImpl::~_ContentDirectoryImpl(void)
        ret = media_content_disconnect();
        r = MapCoreErrorToNativeResult(ret);
        SysTryLog(NID_CNT, r == E_SUCCESS, "[%s] Propagating for media_content_disconnect.", GetErrorMessage(r));
+
+       SysLog(NID_CNT, "media_content_disconnect result[%d].", ret);
 }
 
  _ContentDirectoryImpl*
@@ -91,6 +92,8 @@ _ContentDirectoryImpl::Construct(ContentType type)
        r = MapCoreErrorToNativeResult(ret);
        SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Propagating for media_content_connect.");
 
+       SysLog(NID_CNT, "media_content_connect result[%d].", ret);
+
        __contentType = type;
        __isMultiContentType = false;
        __multiContentTypeExpr.Clear();
@@ -110,6 +113,8 @@ _ContentDirectoryImpl::Construct(const Tizen::Base::Collection::IListT<ContentTy
        r = MapCoreErrorToNativeResult(ret);
        SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Propagating for media_content_connect.");
 
+       SysLog(NID_CNT, "media_content_connect result[%d].", ret);
+
        __multiContentTypeExpr.Clear();
 
        std::unique_ptr<IEnumeratorT<ContentType> > pEnum(contentTypeList.GetEnumeratorN());
@@ -216,10 +221,14 @@ _ContentDirectoryImpl::CreateFolderFilter(bool isMultiContentType, const Tizen::
                        SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation.");
                }
 
-               r = folderPath.Insert('"', 0);
-               SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation.");
-               r = folderPath.Insert('"', folderPath.GetLength());
-               SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation.");
+               r = folderPath.Replace("\'", "''");
+               SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Replace operation for nameExpr.");
+
+               r = folderPath.Insert('\'', 0);
+               SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
+
+               r = folderPath.Insert('\'', folderPath.GetLength());
+               SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
 
                r = inputCondition.Append(folderPath);
                SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation.");
@@ -229,16 +238,13 @@ _ContentDirectoryImpl::CreateFolderFilter(bool isMultiContentType, const Tizen::
        {
                //CopyToCharArrayN: utility function, converts a osp string to char*
                std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(inputCondition));
-               SysTryReturnResult(NID_CNT, (pInputCond.get())[0] != null, E_SYSTEM, "pInputCond is NULL.");
+               SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
                SysLog(NID_CNT, "pInputCond is [%s].", pInputCond.get());
 
-               if ((pInputCond.get())[0] != null)
-               {
-                       ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
-                       r = MapCoreErrorToNativeResult(ret);
-                       SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
-               }
+               ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
+               r = MapCoreErrorToNativeResult(ret);
+               SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
        }
 
        __pFilterHandle.reset(pFilterHandle.release());
@@ -523,32 +529,6 @@ _ContentDirectoryImpl::GetContentDirectoryItemListN(const Tizen::Base::String& c
        r = CreateFolderFilter(__isMultiContentType, detachedPath);
        SysTryReturn(NID_CNT, !IsFailed(r), null, E_SYSTEM, "[E_SYSTEM] Failed to perform CreateFolderFilter operation.");
 
-       if ((!column.IsEmpty()) && (sortOrder != SORT_ORDER_NONE))
-       {
-               //__inputColumnName (osp column name) is replaced with slpColumn (slp column name).
-               r = GetSlpColumnName(slpColumn, column);
-               SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[%s] Failed to perform GetSlpColumnName operation.", GetErrorMessage(r));
-
-               //CopyToCharArrayN: utility function, converts a osp string to char*
-               std::unique_ptr<char[]> pSortCol(_StringConverter::CopyToCharArrayN(slpColumn));
-               SysTryReturn(NID_CNT, pSortCol.get() != null, null, E_SYSTEM, "[E_SYSTEM] pFolderId is NULL.");
-
-               if (sortOrder == SORT_ORDER_ASCENDING)
-               {
-                       ret = media_filter_set_order(*(__pFilterHandle.get()), MEDIA_CONTENT_ORDER_ASC, pSortCol.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
-                       r = MapCoreErrorToNativeResult(ret);
-                       SysTryReturn(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, null, r,
-                                       "[%s] Failed to perform media_filter_set_order operation.", GetErrorMessage(r));
-               }
-               else if (sortOrder == SORT_ORDER_DESCENDING)
-               {
-                       ret = media_filter_set_order(*(__pFilterHandle.get()), MEDIA_CONTENT_ORDER_DESC, pSortCol.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
-                       r = MapCoreErrorToNativeResult(ret);
-                       SysTryReturn(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, null, r,
-                                       "[%s] Failed to perform media_filter_set_order operation.", GetErrorMessage(r));
-               }
-       }
-
        pTempList = pItemList.get();
        ret = media_folder_foreach_folder_from_db(*(__pFilterHandle.get()), MediaFoldersCb, &pTempList);
        r = MapCoreErrorToNativeResult(ret);
@@ -610,6 +590,32 @@ _ContentDirectoryImpl::GetContentDirectoryItemListN(const Tizen::Base::String& c
                SysLog(NID_CNT, "totalCount [%d] totalPageCount[%d] __countPerPage[%d] __pageNo[%d] offset[%d]",
                                totalCount, totalPageCount, countPerPage, pageNo, offset);
 
+               if ((!column.IsEmpty()) && (sortOrder != SORT_ORDER_NONE))
+               {
+                       //__inputColumnName (osp column name) is replaced with slpColumn (slp column name).
+                       r = GetSlpColumnName(slpColumn, column);
+                       SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[%s] Failed to perform GetSlpColumnName operation.", GetErrorMessage(r));
+
+                       //CopyToCharArrayN: utility function, converts a osp string to char*
+                       std::unique_ptr<char[]> pSortCol(_StringConverter::CopyToCharArrayN(slpColumn));
+                       SysTryReturn(NID_CNT, pSortCol, null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+
+                       if (sortOrder == SORT_ORDER_ASCENDING)
+                       {
+                               ret = media_filter_set_order(*(__pFilterHandle.get()), MEDIA_CONTENT_ORDER_ASC, pSortCol.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
+                               r = MapCoreErrorToNativeResult(ret);
+                               SysTryReturn(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, null, r,
+                                               "[%s] Failed to perform media_filter_set_order operation.", GetErrorMessage(r));
+                       }
+                       else if (sortOrder == SORT_ORDER_DESCENDING)
+                       {
+                               ret = media_filter_set_order(*(__pFilterHandle.get()), MEDIA_CONTENT_ORDER_DESC, pSortCol.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
+                               r = MapCoreErrorToNativeResult(ret);
+                               SysTryReturn(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, null, r,
+                                               "[%s] Failed to perform media_filter_set_order operation.", GetErrorMessage(r));
+                       }
+               }
+
                ret = media_filter_set_offset(*(__pFilterHandle.get()),offset,countPerPage);
                r = MapCoreErrorToNativeResult(ret);
                SysTryReturn(NID_CNT, !IsFailed(r), null, r, "[%s] Failed to perform media_filter_set_offset operation.", GetErrorMessage(r));