2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 * @file FCnt_PlayLisImpl.cpp
18 * @brief This is the implementation file for the %_PlayListImpl class.
20 * This file contains implementation of the %_PlayListImpl class.
23 #include <FBaseSysLog.h>
24 #include <FBaseInteger.h>
25 #include <FBaseLongLong.h>
26 #include <FBaseFloat.h>
27 #include <FCntPlayList.h>
28 #include <FBase_StringConverter.h>
29 #include <FCnt_PlayListImpl.h>
30 #include <FCnt_ContentUtility.h>
32 using namespace Tizen::Base;
33 using namespace Tizen::Base::Collection;
34 using namespace Tizen::Io;
36 namespace Tizen { namespace Content
38 // Declaration for Callback function registered to playlist details
39 bool MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData);
41 // Declaration for Callback function registered to playlist items details
42 bool PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData);
44 // Declaration for Callback function registered to playlist items details
45 bool PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData);
47 _PlayListImpl::_PlayListImpl(void)
49 , __pFilterHandle(NULL)
55 //(disconnects the DB connection)
56 _PlayListImpl::~_PlayListImpl(void)
58 int ret = MEDIA_CONTENT_ERROR_NONE;
61 ret = media_content_disconnect();
62 r = MapCoreErrorToNativeResult(ret);
63 SysTryLog(r == E_SUCCESS, "[%s] Propagating for media_content_disconnect", GetErrorMessage(r));
65 SysLog(NID_CNT, "media_content_disconnect result[%d].", ret);
69 _PlayListImpl::GetInstance(PlayList& playList)
71 return (&playList != null) ? playList.__pImpl : null;
75 _PlayListImpl::GetInstance(const PlayList& playList)
77 return (&playList != null) ? playList.__pImpl : null;
81 _PlayListImpl::Construct(const Tizen::Base::String& playListName, bool isAdd)
83 int ret = media_content_connect();
84 result r = MapCoreErrorToNativeResult(ret);
85 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Propagating for media_content_connect");
87 SysLog(NID_CNT, "media_content_connect result[%d].", ret);
89 __playListName = playListName;
93 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
94 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
96 media_playlist_h tempHandle = null;
97 ret = media_playlist_insert_to_db(pInputCond.get(), &tempHandle);
98 r = MapCoreErrorToNativeResult(ret);
99 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_insert_to_db operation.");
101 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle(tempHandle);
102 SysTryReturnResult(NID_CNT, pPlaylistHandle != null, E_OUT_OF_MEMORY, "pPlaylistHandle is null.");
109 _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
111 std::unique_ptr<char[]> pInputCond;
112 filter_h tempFilter = NULL;
113 String uuidStr = L"";
114 String playListName = L"";
115 String inputCondition = L"MEDIA_ID = ";
116 String inputListNameCondition = L"PLAYLIST_NAME = ";
118 int ret = media_filter_create(&tempFilter);
119 result r = MapCoreErrorToNativeResult(ret);
120 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
122 std::unique_ptr<filter_s, FilterHandleDeleter> pFilterHandle(tempFilter);
123 SysTryReturnResult(NID_CNT, pFilterHandle != null, E_OUT_OF_MEMORY, "pFilterHandle is null.");
125 uuidStr = contentId.ToString();
126 r = uuidStr.Insert('"', 0);
127 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
128 r = uuidStr.Insert('"', uuidStr.GetLength());
129 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
131 r = inputCondition.Append(uuidStr);
132 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
134 playListName = __playListName;
135 r = playListName.Insert('"', 0);
136 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
137 r = playListName.Insert('"', playListName.GetLength());
138 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
140 r = inputListNameCondition.Append(playListName);
141 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputListNameCondition.");
143 r = inputCondition.Append(" AND ");
144 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
146 r = inputCondition.Append(inputListNameCondition);
147 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
149 if (!inputCondition.IsEmpty())
151 //CopyToCharArrayN: utility function, converts a osp string to char*
152 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
153 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
155 SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
157 ret = media_filter_set_condition(pFilterHandle.get(), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
158 r = MapCoreErrorToNativeResult(ret);
159 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
162 __pFilterHandle.reset(pFilterHandle.release());
168 _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
170 std::unique_ptr<char[]> pInputCond;
171 String inputCondition = L"PLAYLIST_NAME = ";
172 String nameExpr(playListName);
173 filter_h tempFilter = NULL;
175 int ret = media_filter_create(&tempFilter);
176 result r = MapCoreErrorToNativeResult(ret);
177 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
179 std::unique_ptr<filter_s, FilterHandleDeleter> pFilterHandle(tempFilter);
180 SysTryReturnResult(NID_CNT, pFilterHandle != null, E_OUT_OF_MEMORY, "pFilterHandle is null.");
182 if (!nameExpr.IsEmpty())
184 r = nameExpr.Replace("\'", "''");
185 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Replace operation for nameExpr.");
187 r = nameExpr.Insert('\'', 0);
188 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
190 r = nameExpr.Insert('\'', nameExpr.GetLength());
191 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
193 r = inputCondition.Append(nameExpr);
194 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
197 if (!inputCondition.IsEmpty())
199 //CopyToCharArrayN: utility function, converts a osp string to char*
200 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
201 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
203 SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
205 ret = media_filter_set_condition(pFilterHandle.get(), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
206 r = MapCoreErrorToNativeResult(ret);
207 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
210 __pFilterHandle.reset(pFilterHandle.release());
216 _PlayListImpl::GetPlayListItemCount(const Tizen::Base::String& playlistName) const
218 std::unique_ptr<GList, GListDeleter> pItemList;
220 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
222 int ret = MEDIA_CONTENT_ERROR_NONE;
223 int playlistItemCount = 0;
225 result r = CreateFilter(playlistName);
226 SysTryReturn(NID_CNT, r == E_SUCCESS, 0, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
228 pTemp = pItemList.get();
229 ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
230 r = MapCoreDatabaseErrorToNativeResult(ret);
231 SysTryReturn(NID_CNT, r == E_SUCCESS , 0, r,
232 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
236 r = E_DATABASE; // No match found.
240 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
241 if (pPlaylistHandle.get() != NULL)
243 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
244 r = MapCoreDatabaseErrorToNativeResult(ret);
245 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
247 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
248 r = MapCoreDatabaseErrorToNativeResult(ret);
249 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
251 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
256 return playlistItemCount;
259 Tizen::Base::Collection::IList*
260 _PlayListImpl::GetContentInfoListN(const Tizen::Base::String& playlistName) const
262 std::unique_ptr<GList, GListDeleter> pItemList;
264 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
265 std::unique_ptr<ArrayList, AllElementsDeleter> pPlayListItemList;
267 int ret = MEDIA_CONTENT_ERROR_NONE;
269 result r = CreateFilter(playlistName);
270 SysTryReturn(NID_CNT, r == E_SUCCESS, NULL, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
272 pTemp = pItemList.get();
273 ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
274 r = MapCoreDatabaseErrorToNativeResult(ret);
275 SysTryReturn(NID_CNT, r == E_SUCCESS , NULL, r,
276 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
280 r = E_DATABASE; // No match found.
284 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
285 if (pPlaylistHandle.get() != NULL)
287 int playlistItemCount = 0;
289 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
290 r = MapCoreDatabaseErrorToNativeResult(ret);
291 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
292 "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
294 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
295 r = MapCoreDatabaseErrorToNativeResult(ret);
296 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
297 "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
299 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
301 pPlayListItemList = std::unique_ptr<ArrayList, AllElementsDeleter>(new (std::nothrow) ArrayList());
302 SysTryReturn(NID_CNT, pPlayListItemList != null, NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] FinalOutList is null.");
304 r = pPlayListItemList->Construct();
305 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to construct pPlayListItemList ArrayList.");
307 if (playlistItemCount > 0)
309 r = FillPlayListInfo(playlistId, pPlayListItemList.get());
310 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_DATABASE, "Failed to perform FillPlayListInfo operation.");
316 return pPlayListItemList.release();
320 _PlayListImpl::FillPlayListInfo(int playlistId, ArrayList* pPlayListItemList) const
322 std::unique_ptr<GList, GListDeleter> pItemList;
324 std::unique_ptr<media_info_s, MediaHandleDeleter> pMediaHandle;
326 ContentInfo::_ContentData* pContentData = null;
327 ImageContentInfo::_ImageContentData* pImageContentData = null;
328 AudioContentInfo::_AudioContentData* pAudioContentData = null;
329 VideoContentInfo::_VideoContentData* pVideoContentData = null;
331 std::unique_ptr<ImageContentInfo> pImageContentInfo;
332 std::unique_ptr<AudioContentInfo> pAudioContentInfo;
333 std::unique_ptr<VideoContentInfo> pVideoContentInfo;
334 std::unique_ptr<OtherContentInfo> pOtherContentInfo;
336 //SysTryReturn(NID_CNT, pPlayListItemList != NULL , r, r, "[E_SUCCESS] pPlayListItemList is null");
338 pTemp = pItemList.get();
339 int ret = media_playlist_foreach_media_from_db(playlistId, NULL, PlaylistItemsCb, &pTemp);
340 result r = MapCoreErrorToNativeResult(ret);
341 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_foreach_media_from_db operation.");
343 media_content_type_e mediaType = MEDIA_CONTENT_TYPE_OTHERS;
347 for (int idx = 0; idx < (int)g_list_length(pTemp); idx++)
349 pMediaHandle.reset(static_cast<media_info_h>(g_list_nth_data(pTemp, idx)));
351 ret = media_info_get_media_type(pMediaHandle.get(), &mediaType);
352 r = MapCoreErrorToNativeResult(ret);
353 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_media_type.");
357 case MEDIA_CONTENT_TYPE_IMAGE:
358 pImageContentInfo = std::unique_ptr<ImageContentInfo>(new (std::nothrow) ImageContentInfo);
359 SysTryReturnResult(NID_CNT, pImageContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pImageContentInfo.");
361 pContentData = pImageContentInfo->GetContentData();
362 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
364 pImageContentData = pImageContentInfo->GetImageContentData();
365 SysTryReturnResult(NID_CNT, pImageContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
367 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
368 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
370 r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentData);
371 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform GetDataFromImageTable operation.");
373 // Shallow copy, adds just the pointer: not the element
374 r = pPlayListItemList->Add(*(pImageContentInfo.release()));
375 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
378 case MEDIA_CONTENT_TYPE_MUSIC:
380 case MEDIA_CONTENT_TYPE_SOUND:
381 pAudioContentInfo = std::unique_ptr<AudioContentInfo>(new (std::nothrow) AudioContentInfo);
382 SysTryReturnResult(NID_CNT, pAudioContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pAudioContentInfo.");
384 pContentData = pAudioContentInfo->GetContentData();
385 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
387 pAudioContentData = pAudioContentInfo->GetAudioContentData();
388 SysTryReturnResult(NID_CNT, pAudioContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
390 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
391 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
393 r = _ContentUtility::FillAudioContentData(pMediaHandle.get(), pAudioContentData);
394 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillAudioContentData operation.");
396 // Shallow copy, adds just the pointer: not the element
397 r = pPlayListItemList->Add(*(pAudioContentInfo.release()));
398 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for __pFinalOutList.");
401 case MEDIA_CONTENT_TYPE_VIDEO:
402 pVideoContentInfo = std::unique_ptr<VideoContentInfo>(new (std::nothrow) VideoContentInfo);
403 SysTryReturnResult(NID_CNT, pVideoContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pVideoContentInfo.");
405 pContentData = pVideoContentInfo->GetContentData();
406 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
408 pVideoContentData = pVideoContentInfo->GetVideoContentData();
409 SysTryReturnResult(NID_CNT, pVideoContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
411 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
412 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
414 r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentData);
415 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillVideoContentData operation.");
417 // Shallow copy, adds just the pointer: not the element
418 r = pPlayListItemList->Add(*(pVideoContentInfo.release()));
419 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
422 case MEDIA_CONTENT_TYPE_OTHERS:
423 pOtherContentInfo = std::unique_ptr<OtherContentInfo>(new (std::nothrow) OtherContentInfo);
424 SysTryReturnResult(NID_CNT, pOtherContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pOtherContentInfo.");
426 pContentData = pOtherContentInfo->GetContentData();
427 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
429 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
430 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
432 // Shallow copy, adds just the pointer: not the element
433 r = pPlayListItemList->Add(*(pOtherContentInfo.release()));
434 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
447 _PlayListImpl::AddItemInternal(media_playlist_h playListHandle, const ContentId& contentId)
449 String uuidStr = L"";
450 int ret = MEDIA_CONTENT_ERROR_NONE;
451 result r = E_SUCCESS;
453 uuidStr = contentId.ToString();
454 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(uuidStr));
455 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
457 ret = media_playlist_add_media(playListHandle, pInputCond.get());
458 r = MapCoreErrorToNativeResult(ret);
459 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_add_media operation.");
461 ret = media_playlist_update_to_db(playListHandle);
462 r = MapCoreErrorToNativeResult(ret);
463 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
469 _PlayListImpl::AddItem(const Tizen::Base::String& playlistName, const ContentId& contentId)
471 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
472 media_playlist_h tempHandle = NULL;
474 result r = CreateFilter(playlistName);
475 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
477 tempHandle = pPlayListHandle.get();
478 r = GetPlayListHandle(&tempHandle);
479 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
481 r = AddItemInternal(tempHandle, contentId);
482 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
488 _PlayListImpl::AddItems(const Tizen::Base::String& playlistName, const Tizen::Base::Collection::IList& contentIdList)
490 int listCount = contentIdList.GetCount();
491 ContentId *pContentId = NULL;
492 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
493 media_playlist_h tempHandle = NULL;
495 result r = CreateFilter(playlistName);
496 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
498 tempHandle = pPlayListHandle.get();
499 r = GetPlayListHandle(&tempHandle);
500 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
502 for(int index = 0; index < listCount; index++)
504 pContentId = (ContentId*)contentIdList.GetAt(index);
505 r = AddItemInternal(tempHandle, *pContentId);
506 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
513 _PlayListImpl::RemoveItem(const ContentId& contentId)
515 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
516 media_playlist_h tempHandle = NULL;
517 int ret = MEDIA_CONTENT_ERROR_NONE;
518 std::unique_ptr<GList, GListDeleter> pItemList;
521 result r = CreateFilterUsingContentId(contentId);
522 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
524 tempHandle = pPlayListHandle.get();
525 r = GetPlayListHandle(&tempHandle);
526 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
528 if (tempHandle != NULL)
531 int playlistMemberId = 0;
533 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
534 r = MapCoreErrorToNativeResult(ret);
535 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
537 pTemp = pItemList.get();
538 int ret = media_playlist_foreach_media_from_db(playlistId, __pFilterHandle.get(), PlaylistImplItemCb, &pTemp);
539 result r = MapCoreErrorToNativeResult(ret);
540 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_media_from_db operation.");
544 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
546 ret = media_playlist_remove_media(tempHandle, playlistMemberId);
547 r = MapCoreErrorToNativeResult(ret);
548 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_remove_media operation.");
550 ret = media_playlist_update_to_db(tempHandle);
551 r = MapCoreErrorToNativeResult(ret);
552 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
560 _PlayListImpl::RemoveItems(const Tizen::Base::Collection::IList& contentIdList)
562 int listCount = contentIdList.GetCount();
563 ContentId *pContentId = NULL;
564 result r = E_SUCCESS;
566 for (int index = 0; index < listCount; index++)
568 pContentId = (ContentId*)contentIdList.GetAt(index);
569 r = RemoveItem(*pContentId);
576 _PlayListImpl::SetPlayListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
578 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
579 media_playlist_h tempHandle = NULL;
580 int ret = MEDIA_CONTENT_ERROR_NONE;
582 result r = CreateFilter(oldName);
583 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
585 tempHandle = pPlayListHandle.get();
586 r = GetPlayListHandle(&tempHandle);
587 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
589 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(newName));
590 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
592 ret = media_playlist_set_name(tempHandle, pInputCond.get());
593 r = MapCoreErrorToNativeResult(ret);
594 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_name operation.");
596 ret = media_playlist_update_to_db(tempHandle);
597 r = MapCoreErrorToNativeResult(ret);
598 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
603 _PlayListImpl::SetorGetPlayOrder(const ContentId& contentId, int& playOrder, bool isSet) const
605 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
606 media_playlist_h tempHandle = NULL;
607 std::unique_ptr<GList, GListDeleter> pItemList;
609 int ret = MEDIA_CONTENT_ERROR_NONE;
611 SysTryReturnResult(NID_CNT, contentId != UuId::GetInvalidUuId(), E_INVALID_ARG, "The specified parameter is invalid.");
613 result r = CreateFilterUsingContentId(contentId);
614 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
616 tempHandle = pPlayListHandle.get();
617 r = GetPlayListHandle(&tempHandle);
618 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
620 if (tempHandle != NULL)
623 int playlistMemberId = 0;
625 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
626 r = MapCoreErrorToNativeResult(ret);
627 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
629 pTemp = pItemList.get();
630 int ret = media_playlist_foreach_media_from_db(playlistId, __pFilterHandle.get(), PlaylistImplItemCb, &pTemp);
631 result r = MapCoreErrorToNativeResult(ret);
632 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "media_playlist_foreach_media_from_db failed.");
636 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
640 ret = media_playlist_set_play_order(tempHandle, playlistMemberId, playOrder);
641 r = MapCoreErrorToNativeResult(ret);
642 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
644 ret = media_playlist_update_to_db(tempHandle);
645 r = MapCoreErrorToNativeResult(ret);
646 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
650 ret = media_playlist_get_play_order(tempHandle, playlistMemberId, &playOrder);
651 r = MapCoreErrorToNativeResult(ret);
652 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
660 _PlayListImpl::SetPlayOrder(const ContentId& contentId, const ContentId& nextContentId)
662 int playOrder = GetPlayOrder(contentId) + 1;
663 result r = GetLastResult();
664 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform GetPlayOrder operation.");
666 r = SetorGetPlayOrder(nextContentId, playOrder, true);
672 _PlayListImpl::GetPlayOrder(const ContentId& contentId) const
676 result r = SetorGetPlayOrder(contentId, playOrder, false);
683 _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
685 std::unique_ptr<GList, GListDeleter> pItemList;
688 pTemp = pItemList.get();
689 int ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
690 result r = MapCoreErrorToNativeResult(ret);
691 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_playlist_from_db operation.");
695 r = E_INVALID_ARG; // No match found.
699 *pPlayListHandle = static_cast< media_playlist_h >(g_list_nth_data(pTemp, 0));
706 _PlayListImpl::MapCoreErrorToNativeResult(int reason) const
708 result r = E_SUCCESS;
712 case MEDIA_CONTENT_ERROR_NONE:
716 case MEDIA_CONTENT_ERROR_OUT_OF_MEMORY:
718 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_OUT_OF_MEMORY");
721 case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
723 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_INVALID_PARAMETER");
726 case MEDIA_CONTENT_ERROR_DB_FAILED:
728 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
731 case MEDIA_CONTENT_ERROR_DB_BUSY:
733 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
737 SysLog(NID_CNT, "default");
745 _PlayListImpl::MapCoreDatabaseErrorToNativeResult(int reason) const
747 result r = E_SUCCESS;
751 case MEDIA_CONTENT_ERROR_NONE:
755 case MEDIA_CONTENT_ERROR_OUT_OF_MEMORY:
757 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_OUT_OF_MEMORY");
760 case MEDIA_CONTENT_ERROR_DB_FAILED:
762 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
765 case MEDIA_CONTENT_ERROR_DB_BUSY:
767 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
771 SysLog(NID_CNT, "default");
779 MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData)
781 media_playlist_h newPlayListHandle = NULL;
782 media_playlist_clone(&newPlayListHandle, playlistHandle);
784 GList** pList = (GList**)pUserData;
785 *pList = g_list_append(*pList, newPlayListHandle);
790 // This callback appends List with playlistMemberId's
792 PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData)
794 GList** pList = (GList**)pUserData;
795 *pList = g_list_append(*pList, (gpointer)playlistMemberId);
800 // This callback appends List with media handles
802 PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData)
804 media_info_h new_media = NULL;
805 media_info_clone(&new_media, media);
807 GList** pList = (GList**)pUserData;
808 *pList = g_list_append(*pList, new_media);