* This file contains implementation of the %_PlayListImpl class.
*/
+#include <new>
#include <FBaseSysLog.h>
#include <FBaseInteger.h>
#include <FBaseLongLong.h>
#include <FBaseFloat.h>
#include <FCntPlayList.h>
#include <FBase_StringConverter.h>
-#include <FCnt_PlayListImpl.h>
-#include <FCnt_ContentUtility.h>
+#include "FCnt_PlayListImpl.h"
+#include "FCnt_ContentUtility.h"
+#include "FCnt_ImageContentInfoImpl.h"
+#include "FCnt_AudioContentInfoImpl.h"
+#include "FCnt_VideoContentInfoImpl.h"
+#include "FCnt_OtherContentInfoImpl.h"
+#include "FCnt_ContentInfoHelper.h"
using namespace Tizen::Base;
using namespace Tizen::Base::Collection;
bool PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData);
_PlayListImpl::_PlayListImpl(void)
- : Object()
- , __pFilterHandle(NULL)
+ : __pFilterHandle(NULL)
, __playListName(L"")
{
if (isAdd == true)
{
- std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
-
std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
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);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_insert_to_db operation.");
+
+ std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle(tempHandle);
+ SysTryReturnResult(NID_CNT, pPlaylistHandle != null, E_OUT_OF_MEMORY, "pPlaylistHandle is null.");
}
return r;
_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.");
SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
- ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
+ 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.");
}
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.Replace("\'", "''");
SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
- ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
+ 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.");
}
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));
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));
GList* pTemp = NULL;
std::unique_ptr<media_info_s, MediaHandleDeleter> pMediaHandle;
- ContentInfo::_ContentData* pContentData = null;
- ImageContentInfo::_ImageContentData* pImageContentData = null;
- AudioContentInfo::_AudioContentData* pAudioContentData = null;
- VideoContentInfo::_VideoContentData* pVideoContentData = null;
-
std::unique_ptr<ImageContentInfo> pImageContentInfo;
std::unique_ptr<AudioContentInfo> pAudioContentInfo;
std::unique_ptr<VideoContentInfo> pVideoContentInfo;
std::unique_ptr<OtherContentInfo> pOtherContentInfo;
+ _ImageContentInfoImpl* pImageContentInfoImpl = null;
+ _AudioContentInfoImpl* pAudioContentInfoImpl = null;
+ _VideoContentInfoImpl* pVideoContentInfoImpl = null;
+ _OtherContentInfoImpl* pOtherContentInfoImpl = null;
+
//SysTryReturn(NID_CNT, pPlayListItemList != NULL , r, r, "[E_SUCCESS] pPlayListItemList is null");
pTemp = pItemList.get();
r = MapCoreErrorToNativeResult(ret);
SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_media_type.");
+ std::unique_ptr<char, UtilCharDeleter> pMediaPath;
+ char* pTempPath = null;
+
+ ret = media_info_get_file_path(pMediaHandle.get(), &pTempPath);
+ r = MapCoreErrorToNativeResult(ret);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_file_path operation.");
+
+ pMediaPath.reset(pTempPath);
+ String contentPath(pMediaPath.get());
+
switch (mediaType)
{
case MEDIA_CONTENT_TYPE_IMAGE:
pImageContentInfo = std::unique_ptr<ImageContentInfo>(new (std::nothrow) ImageContentInfo);
SysTryReturnResult(NID_CNT, pImageContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pImageContentInfo.");
- pContentData = pImageContentInfo->GetContentData();
- SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ r = pImageContentInfo->Construct(&contentPath);
+ r = ConvertErrorToResult(r);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Construct operation to ImageContentInfo.");
+
+ pImageContentInfoImpl = null;
+ pImageContentInfoImpl = _ImageContentInfoImpl::GetInstance(*(pImageContentInfo.get()));
+ SysTryReturnResult(NID_CNT, pImageContentInfoImpl != null, E_OUT_OF_MEMORY, "Failed to assign operation to pImageContentInfoImpl.");
- pImageContentData = pImageContentInfo->GetImageContentData();
- SysTryReturnResult(NID_CNT, pImageContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ r = _ContentUtility::FillContentData(pMediaHandle.get(), pImageContentInfoImpl);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_DATABASE, "Failed to perform FillContentData operation.");
- r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
- SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
+ r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentInfoImpl);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_DATABASE, "Failed to perform GetDataFromImageTable operation.");
- r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentData);
- SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform GetDataFromImageTable operation.");
+ _ContentInfoHelper::SetContentInfoImpl(pImageContentInfo.get(), pImageContentInfoImpl);
// Shallow copy, adds just the pointer: not the element
r = pPlayListItemList->Add(*(pImageContentInfo.release()));
pAudioContentInfo = std::unique_ptr<AudioContentInfo>(new (std::nothrow) AudioContentInfo);
SysTryReturnResult(NID_CNT, pAudioContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pAudioContentInfo.");
- pContentData = pAudioContentInfo->GetContentData();
- SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ r = pAudioContentInfo->Construct(&contentPath);
+ r = ConvertErrorToResult(r);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Construct operation to AudioContentInfo.");
- pAudioContentData = pAudioContentInfo->GetAudioContentData();
- SysTryReturnResult(NID_CNT, pAudioContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ pAudioContentInfoImpl = null;
+ pAudioContentInfoImpl = _AudioContentInfoImpl::GetInstance(*(pAudioContentInfo.get()));
+ SysTryReturnResult(NID_CNT, pAudioContentInfoImpl != null, E_OUT_OF_MEMORY, "Failed to assign operation to pAudioContentInfoImpl.");
- r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
- SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
+ r = _ContentUtility::FillContentData(pMediaHandle.get(), pAudioContentInfoImpl);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_DATABASE, "Failed to perform FillContentData operation.");
- r = _ContentUtility::FillAudioContentData(pMediaHandle.get(), pAudioContentData);
- SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillAudioContentData operation.");
+ r = _ContentUtility::FillAudioContentData(pMediaHandle.get(), pAudioContentInfoImpl);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_DATABASE, "Failed to perform FillAudioContentData operation.");
+
+ _ContentInfoHelper::SetContentInfoImpl(pAudioContentInfo.get(), pAudioContentInfoImpl);
// Shallow copy, adds just the pointer: not the element
r = pPlayListItemList->Add(*(pAudioContentInfo.release()));
pVideoContentInfo = std::unique_ptr<VideoContentInfo>(new (std::nothrow) VideoContentInfo);
SysTryReturnResult(NID_CNT, pVideoContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pVideoContentInfo.");
- pContentData = pVideoContentInfo->GetContentData();
- SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ r = pVideoContentInfo->Construct(&contentPath);
+ r = ConvertErrorToResult(r);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Construct operation to VideoContentInfo.");
+
+ pVideoContentInfoImpl = null;
+ pVideoContentInfoImpl = _VideoContentInfoImpl::GetInstance(*(pVideoContentInfo.get()));
+ SysTryReturnResult(NID_CNT, pVideoContentInfoImpl != null, E_OUT_OF_MEMORY, "Failed to assign operation to pVideoContentInfoImpl.");
- pVideoContentData = pVideoContentInfo->GetVideoContentData();
- SysTryReturnResult(NID_CNT, pVideoContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ r = _ContentUtility::FillContentData(pMediaHandle.get(), pVideoContentInfoImpl);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_DATABASE, "Failed to perform FillContentData operation.");
- r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
- SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
+ r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentInfoImpl);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_DATABASE, "Failed to perform FillVideoContentData operation.");
- r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentData);
- SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillVideoContentData operation.");
+ _ContentInfoHelper::SetContentInfoImpl(pVideoContentInfo.get(), pVideoContentInfoImpl);
// Shallow copy, adds just the pointer: not the element
r = pPlayListItemList->Add(*(pVideoContentInfo.release()));
pOtherContentInfo = std::unique_ptr<OtherContentInfo>(new (std::nothrow) OtherContentInfo);
SysTryReturnResult(NID_CNT, pOtherContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pOtherContentInfo.");
- pContentData = pOtherContentInfo->GetContentData();
- SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ r = pOtherContentInfo->Construct(&contentPath);
+ r = ConvertErrorToResult(r);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Construct operation to OtherContentInfo.");
- r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
- SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
+ pOtherContentInfoImpl = null;
+ pOtherContentInfoImpl = _OtherContentInfoImpl::GetInstance(*(pOtherContentInfo.get()));
+ SysTryReturnResult(NID_CNT, pOtherContentInfoImpl != null, E_OUT_OF_MEMORY, "Failed to assign operation to pOtherContentInfoImpl.");
+
+ r = _ContentUtility::FillContentData(pMediaHandle.get(), pOtherContentInfoImpl);
+ SysTryReturnResult(NID_CNT, !IsFailed(r), E_DATABASE, "Failed to perform FillContentData operation.");
+
+ _ContentInfoHelper::SetContentInfoImpl(pOtherContentInfo.get(), pOtherContentInfoImpl);
// Shallow copy, adds just the pointer: not the element
r = pPlayListItemList->Add(*(pOtherContentInfo.release()));
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.");
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.");
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.");
r = E_SUCCESS;
break;
+ case MEDIA_CONTENT_ERROR_OUT_OF_MEMORY:
+ r = E_OUT_OF_MEMORY;
+ SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_OUT_OF_MEMORY");
+ break;
+
case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
r = E_INVALID_ARG;
SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_INVALID_PARAMETER");
r = E_SUCCESS;
break;
+ case MEDIA_CONTENT_ERROR_OUT_OF_MEMORY:
+ r = E_OUT_OF_MEMORY;
+ SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_OUT_OF_MEMORY");
+ break;
+
case MEDIA_CONTENT_ERROR_DB_FAILED:
r = E_DATABASE;
SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
return r;
}
+result
+_PlayListImpl::ConvertErrorToResult(result res) const
+{
+ result r = E_SUCCESS;
+
+ switch (res)
+ {
+ // It is processed by normal case when the content exist in DB but the actual file doesn't exist.
+ case E_FILE_NOT_FOUND:
+ r = E_SUCCESS;
+ break;
+
+ case E_INVALID_ARG:
+ // Fall through
+ case E_IO:
+ r = E_SYSTEM;
+ break;
+
+ default:
+ r = res;
+ break;
+ }
+ return r;
+}
+
bool
MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData)
{