Fix an issue not to call download_destroy()
[platform/framework/native/content.git] / src / FCnt_PlayListImpl.cpp
index 3701429..ba3f2c9 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);
@@ -48,6 +47,7 @@ namespace Tizen { namespace Content
 _PlayListImpl::_PlayListImpl(void)
        : Object()
        , __pFilterHandle(NULL)
+       , __playListName(L"")
 {
 
 }
@@ -61,6 +61,8 @@ _PlayListImpl::~_PlayListImpl(void)
        ret = media_content_disconnect();
        r = MapCoreErrorToNativeResult(ret);
        SysTryLog(r == E_SUCCESS, "[%s] Propagating for media_content_disconnect", GetErrorMessage(r));
+
+       SysLog(NID_CNT, "media_content_disconnect result[%d].", ret);
 }
 
  _PlayListImpl*
@@ -82,16 +84,21 @@ _PlayListImpl::Construct(const Tizen::Base::String& playListName, bool isAdd)
        result r = MapCoreErrorToNativeResult(ret);
        SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Propagating for media_content_connect");
 
+       SysLog(NID_CNT, "media_content_connect result[%d].", ret);
+
+       __playListName = playListName;
+
        if (isAdd == true)
        {
-               std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
-
                std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
-               SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_OUT_OF_MEMORY, "The memory is insufficient.");
+               SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
-               media_playlist_h tempHandle = pPlaylistHandle.get();
+               media_playlist_h tempHandle = null;
                ret = media_playlist_insert_to_db(pInputCond.get(), &tempHandle);
                r = MapCoreErrorToNativeResult(ret);
+
+               std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle(tempHandle);
+               SysTryReturnResult(NID_CNT, pPlaylistHandle != null, E_OUT_OF_MEMORY, "pPlaylistHandle is null.");
        }
 
        return r;
@@ -101,14 +108,19 @@ result
 _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
 {
        std::unique_ptr<char[]> pInputCond;
-       std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
+       filter_h tempFilter = NULL;
        String uuidStr = L"";
+       String playListName = L"";
        String inputCondition = L"MEDIA_ID = ";
+       String inputListNameCondition = L"PLAYLIST_NAME = ";
 
-       int ret = media_filter_create(pFilterHandle.get());
+       int ret = media_filter_create(&tempFilter);
        result r = MapCoreErrorToNativeResult(ret);
        SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
 
+       std::unique_ptr<filter_s, FilterHandleDeleter> pFilterHandle(tempFilter);
+       SysTryReturnResult(NID_CNT, pFilterHandle != null, E_OUT_OF_MEMORY, "pFilterHandle is null.");
+
        uuidStr = contentId.ToString();
        r = uuidStr.Insert('"', 0);
        SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
@@ -118,20 +130,32 @@ _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
        r = inputCondition.Append(uuidStr);
        SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
 
+       playListName = __playListName;
+       r = playListName.Insert('"', 0);
+       SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
+       r = playListName.Insert('"', playListName.GetLength());
+       SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
+
+       r = inputListNameCondition.Append(playListName);
+       SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputListNameCondition.");
+
+       r = inputCondition.Append(" AND ");
+       SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
+
+       r = inputCondition.Append(inputListNameCondition);
+       SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
+
        if (!inputCondition.IsEmpty())
        {
                //CopyToCharArrayN: utility function, converts a osp string to char*
                pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
-               SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_SYSTEM, "pInputCond is NULL.");
+               SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
 
                SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
 
-               if ((pInputCond.get())[0])
-               {
-                       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());
@@ -145,18 +169,24 @@ _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
        std::unique_ptr<char[]> pInputCond;
        String inputCondition = L"PLAYLIST_NAME = ";
        String nameExpr(playListName);
+       filter_h tempFilter = NULL;
 
-       std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
-
-       int ret = media_filter_create(pFilterHandle.get());
+       int ret = media_filter_create(&tempFilter);
        result r = MapCoreErrorToNativeResult(ret);
        SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
 
+       std::unique_ptr<filter_s, FilterHandleDeleter> pFilterHandle(tempFilter);
+       SysTryReturnResult(NID_CNT, pFilterHandle != null, E_OUT_OF_MEMORY, "pFilterHandle is null.");
+
        if (!nameExpr.IsEmpty())
        {
-               r = nameExpr.Insert('"', 0);
+               r = nameExpr.Replace("\'", "''");
+               SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Replace operation for nameExpr.");
+
+               r = nameExpr.Insert('\'', 0);
                SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
-               r = nameExpr.Insert('"', nameExpr.GetLength());
+
+               r = nameExpr.Insert('\'', nameExpr.GetLength());
                SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
 
                r = inputCondition.Append(nameExpr);
@@ -167,16 +197,13 @@ _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
        {
                //CopyToCharArrayN: utility function, converts a osp string to char*
                pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
-               SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_SYSTEM, "pInputCond is NULL.");
+               SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
 
                SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
 
-               if ((pInputCond.get())[0])
-               {
-                       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());
@@ -198,7 +225,7 @@ _PlayListImpl::GetPlayListItemCount(const Tizen::Base::String& playlistName) con
        SysTryReturn(NID_CNT, r == E_SUCCESS, 0, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
 
        pTemp = pItemList.get();
-       ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
+       ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
        r = MapCoreDatabaseErrorToNativeResult(ret);
        SysTryReturn(NID_CNT, r == E_SUCCESS , 0, r,
                        "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
@@ -242,7 +269,7 @@ _PlayListImpl::GetContentInfoListN(const Tizen::Base::String& playlistName) cons
        SysTryReturn(NID_CNT, r == E_SUCCESS, NULL, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
 
        pTemp = pItemList.get();
-       ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
+       ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
        r = MapCoreDatabaseErrorToNativeResult(ret);
        SysTryReturn(NID_CNT, r == E_SUCCESS , NULL, r,
                        "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
@@ -424,7 +451,7 @@ _PlayListImpl::AddItemInternal(media_playlist_h playListHandle, const ContentId&
 
        uuidStr = contentId.ToString();
        std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(uuidStr));
-       SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_SYSTEM, "Failed to perform CopyToCharArrayN operation.");
+       SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
        ret = media_playlist_add_media(playListHandle, pInputCond.get());
        r = MapCoreErrorToNativeResult(ret);
@@ -507,7 +534,7 @@ _PlayListImpl::RemoveItem(const ContentId& contentId)
                SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
 
                pTemp = pItemList.get();
-               int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
+               int ret = media_playlist_foreach_media_from_db(playlistId, __pFilterHandle.get(), PlaylistImplItemCb, &pTemp);
                result r = MapCoreErrorToNativeResult(ret);
                SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_media_from_db operation.");
 
@@ -545,7 +572,7 @@ _PlayListImpl::RemoveItems(const Tizen::Base::Collection::IList& contentIdList)
 }
 
 result
-_PlayListImpl::SetPlalyListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
+_PlayListImpl::SetPlayListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
 {
        std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
        media_playlist_h tempHandle = NULL;
@@ -559,7 +586,7 @@ _PlayListImpl::SetPlalyListName(const Tizen::Base::String& oldName, const Tizen:
        SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
 
        std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(newName));
-       SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_OUT_OF_MEMORY, "Failed to perform CopyToCharArrayN operation.");
+       SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
 
        ret = media_playlist_set_name(tempHandle, pInputCond.get());
        r = MapCoreErrorToNativeResult(ret);
@@ -599,7 +626,7 @@ _PlayListImpl::SetorGetPlayOrder(const ContentId& contentId, int& playOrder, boo
                SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
 
                pTemp = pItemList.get();
-               int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
+               int ret = media_playlist_foreach_media_from_db(playlistId, __pFilterHandle.get(), PlaylistImplItemCb, &pTemp);
                result r = MapCoreErrorToNativeResult(ret);
                SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "media_playlist_foreach_media_from_db failed.");
 
@@ -658,7 +685,7 @@ _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
        GList* pTemp = NULL;
 
        pTemp = pItemList.get();
-       int ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
+       int ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
        result r = MapCoreErrorToNativeResult(ret);
        SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_playlist_from_db operation.");
 
@@ -668,7 +695,7 @@ _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
        }
        else
        {
-               *pPlayListHandle = (media_playlist_h)g_list_nth_data(pTemp, 0);
+               *pPlayListHandle = static_cast< media_playlist_h >(g_list_nth_data(pTemp, 0));
        }
 
        return r;