2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FCnt_PlayLisImpl.cpp
19 * @brief This is the implementation file for the %_PlayListImpl class.
21 * This file contains implementation of the %_PlayListImpl class.
24 #include <FBaseSysLog.h>
25 #include <FBaseInteger.h>
26 #include <FBaseLongLong.h>
27 #include <FBaseFloat.h>
28 #include <FCntPlayList.h>
29 #include <FBase_StringConverter.h>
30 #include <FCnt_PlayListImpl.h>
31 #include <FCnt_ContentUtility.h>
33 using namespace Tizen::Base;
34 using namespace Tizen::Base::Collection;
35 using namespace Tizen::Io;
37 namespace Tizen { namespace Content
39 // Declaration for Callback function registered to playlist details
40 bool MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData);
42 // Declaration for Callback function registered to playlist items details
43 bool PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData);
45 // Declaration for Callback function registered to playlist items details
46 bool PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData);
48 _PlayListImpl::_PlayListImpl(void)
50 , __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);
91 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
93 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
94 SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_OUT_OF_MEMORY, "The memory is insufficient.");
96 media_playlist_h tempHandle = pPlaylistHandle.get();
97 ret = media_playlist_insert_to_db(pInputCond.get(), &tempHandle);
98 r = MapCoreErrorToNativeResult(ret);
105 _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
107 std::unique_ptr<char[]> pInputCond;
108 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
109 String uuidStr = L"";
110 String inputCondition = L"MEDIA_ID = ";
112 int ret = media_filter_create(pFilterHandle.get());
113 result r = MapCoreErrorToNativeResult(ret);
114 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
116 uuidStr = contentId.ToString();
117 r = uuidStr.Insert('"', 0);
118 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
119 r = uuidStr.Insert('"', uuidStr.GetLength());
120 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
122 r = inputCondition.Append(uuidStr);
123 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
125 if (!inputCondition.IsEmpty())
127 //CopyToCharArrayN: utility function, converts a osp string to char*
128 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
129 SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_SYSTEM, "pInputCond is NULL.");
131 SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
133 if ((pInputCond.get())[0])
135 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
136 r = MapCoreErrorToNativeResult(ret);
137 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
141 __pFilterHandle.reset(pFilterHandle.release());
147 _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
149 std::unique_ptr<char[]> pInputCond;
150 String inputCondition = L"PLAYLIST_NAME = ";
151 String nameExpr(playListName);
153 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
155 int ret = media_filter_create(pFilterHandle.get());
156 result r = MapCoreErrorToNativeResult(ret);
157 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
159 if (!nameExpr.IsEmpty())
161 r = nameExpr.Replace("\'", "''");
162 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Replace operation for nameExpr.");
164 r = nameExpr.Insert('\'', 0);
165 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
167 r = nameExpr.Insert('\'', nameExpr.GetLength());
168 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
170 r = inputCondition.Append(nameExpr);
171 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
174 if (!inputCondition.IsEmpty())
176 //CopyToCharArrayN: utility function, converts a osp string to char*
177 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
178 SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_SYSTEM, "pInputCond is NULL.");
180 SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
182 if ((pInputCond.get())[0])
184 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
185 r = MapCoreErrorToNativeResult(ret);
186 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
190 __pFilterHandle.reset(pFilterHandle.release());
196 _PlayListImpl::GetPlayListItemCount(const Tizen::Base::String& playlistName) const
198 std::unique_ptr<GList, GListDeleter> pItemList;
200 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
202 int ret = MEDIA_CONTENT_ERROR_NONE;
203 int playlistItemCount = 0;
205 result r = CreateFilter(playlistName);
206 SysTryReturn(NID_CNT, r == E_SUCCESS, 0, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
208 pTemp = pItemList.get();
209 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
210 r = MapCoreDatabaseErrorToNativeResult(ret);
211 SysTryReturn(NID_CNT, r == E_SUCCESS , 0, r,
212 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
216 r = E_DATABASE; // No match found.
220 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
221 if (pPlaylistHandle.get() != NULL)
223 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
224 r = MapCoreDatabaseErrorToNativeResult(ret);
225 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
227 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
228 r = MapCoreDatabaseErrorToNativeResult(ret);
229 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
231 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
236 return playlistItemCount;
239 Tizen::Base::Collection::IList*
240 _PlayListImpl::GetContentInfoListN(const Tizen::Base::String& playlistName) const
242 std::unique_ptr<GList, GListDeleter> pItemList;
244 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
245 std::unique_ptr<ArrayList, AllElementsDeleter> pPlayListItemList;
247 int ret = MEDIA_CONTENT_ERROR_NONE;
249 result r = CreateFilter(playlistName);
250 SysTryReturn(NID_CNT, r == E_SUCCESS, NULL, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
252 pTemp = pItemList.get();
253 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
254 r = MapCoreDatabaseErrorToNativeResult(ret);
255 SysTryReturn(NID_CNT, r == E_SUCCESS , NULL, r,
256 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
260 r = E_DATABASE; // No match found.
264 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
265 if (pPlaylistHandle.get() != NULL)
267 int playlistItemCount = 0;
269 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
270 r = MapCoreDatabaseErrorToNativeResult(ret);
271 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
272 "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
274 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
275 r = MapCoreDatabaseErrorToNativeResult(ret);
276 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
277 "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
279 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
281 pPlayListItemList = std::unique_ptr<ArrayList, AllElementsDeleter>(new (std::nothrow) ArrayList());
282 SysTryReturn(NID_CNT, pPlayListItemList != null, NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] FinalOutList is null.");
284 r = pPlayListItemList->Construct();
285 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to construct pPlayListItemList ArrayList.");
287 if (playlistItemCount > 0)
289 r = FillPlayListInfo(playlistId, pPlayListItemList.get());
290 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_DATABASE, "Failed to perform FillPlayListInfo operation.");
296 return pPlayListItemList.release();
300 _PlayListImpl::FillPlayListInfo(int playlistId, ArrayList* pPlayListItemList) const
302 std::unique_ptr<GList, GListDeleter> pItemList;
304 std::unique_ptr<media_info_s, MediaHandleDeleter> pMediaHandle;
306 ContentInfo::_ContentData* pContentData = null;
307 ImageContentInfo::_ImageContentData* pImageContentData = null;
308 AudioContentInfo::_AudioContentData* pAudioContentData = null;
309 VideoContentInfo::_VideoContentData* pVideoContentData = null;
311 std::unique_ptr<ImageContentInfo> pImageContentInfo;
312 std::unique_ptr<AudioContentInfo> pAudioContentInfo;
313 std::unique_ptr<VideoContentInfo> pVideoContentInfo;
314 std::unique_ptr<OtherContentInfo> pOtherContentInfo;
316 //SysTryReturn(NID_CNT, pPlayListItemList != NULL , r, r, "[E_SUCCESS] pPlayListItemList is null");
318 pTemp = pItemList.get();
319 int ret = media_playlist_foreach_media_from_db(playlistId, NULL, PlaylistItemsCb, &pTemp);
320 result r = MapCoreErrorToNativeResult(ret);
321 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_foreach_media_from_db operation.");
323 media_content_type_e mediaType = MEDIA_CONTENT_TYPE_OTHERS;
327 for (int idx = 0; idx < (int)g_list_length(pTemp); idx++)
329 pMediaHandle.reset(static_cast<media_info_h>(g_list_nth_data(pTemp, idx)));
331 ret = media_info_get_media_type(pMediaHandle.get(), &mediaType);
332 r = MapCoreErrorToNativeResult(ret);
333 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_media_type.");
337 case MEDIA_CONTENT_TYPE_IMAGE:
338 pImageContentInfo = std::unique_ptr<ImageContentInfo>(new (std::nothrow) ImageContentInfo);
339 SysTryReturnResult(NID_CNT, pImageContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pImageContentInfo.");
341 pContentData = pImageContentInfo->GetContentData();
342 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
344 pImageContentData = pImageContentInfo->GetImageContentData();
345 SysTryReturnResult(NID_CNT, pImageContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
347 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
348 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
350 r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentData);
351 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform GetDataFromImageTable operation.");
353 // Shallow copy, adds just the pointer: not the element
354 r = pPlayListItemList->Add(*(pImageContentInfo.release()));
355 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
358 case MEDIA_CONTENT_TYPE_MUSIC:
360 case MEDIA_CONTENT_TYPE_SOUND:
361 pAudioContentInfo = std::unique_ptr<AudioContentInfo>(new (std::nothrow) AudioContentInfo);
362 SysTryReturnResult(NID_CNT, pAudioContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pAudioContentInfo.");
364 pContentData = pAudioContentInfo->GetContentData();
365 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
367 pAudioContentData = pAudioContentInfo->GetAudioContentData();
368 SysTryReturnResult(NID_CNT, pAudioContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
370 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
371 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
373 r = _ContentUtility::FillAudioContentData(pMediaHandle.get(), pAudioContentData);
374 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillAudioContentData operation.");
376 // Shallow copy, adds just the pointer: not the element
377 r = pPlayListItemList->Add(*(pAudioContentInfo.release()));
378 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for __pFinalOutList.");
381 case MEDIA_CONTENT_TYPE_VIDEO:
382 pVideoContentInfo = std::unique_ptr<VideoContentInfo>(new (std::nothrow) VideoContentInfo);
383 SysTryReturnResult(NID_CNT, pVideoContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pVideoContentInfo.");
385 pContentData = pVideoContentInfo->GetContentData();
386 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
388 pVideoContentData = pVideoContentInfo->GetVideoContentData();
389 SysTryReturnResult(NID_CNT, pVideoContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
391 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
392 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
394 r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentData);
395 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillVideoContentData operation.");
397 // Shallow copy, adds just the pointer: not the element
398 r = pPlayListItemList->Add(*(pVideoContentInfo.release()));
399 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
402 case MEDIA_CONTENT_TYPE_OTHERS:
403 pOtherContentInfo = std::unique_ptr<OtherContentInfo>(new (std::nothrow) OtherContentInfo);
404 SysTryReturnResult(NID_CNT, pOtherContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pOtherContentInfo.");
406 pContentData = pOtherContentInfo->GetContentData();
407 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
409 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
410 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
412 // Shallow copy, adds just the pointer: not the element
413 r = pPlayListItemList->Add(*(pOtherContentInfo.release()));
414 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
427 _PlayListImpl::AddItemInternal(media_playlist_h playListHandle, const ContentId& contentId)
429 String uuidStr = L"";
430 int ret = MEDIA_CONTENT_ERROR_NONE;
431 result r = E_SUCCESS;
433 uuidStr = contentId.ToString();
434 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(uuidStr));
435 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_SYSTEM, "Failed to perform CopyToCharArrayN operation.");
437 ret = media_playlist_add_media(playListHandle, pInputCond.get());
438 r = MapCoreErrorToNativeResult(ret);
439 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_add_media operation.");
441 ret = media_playlist_update_to_db(playListHandle);
442 r = MapCoreErrorToNativeResult(ret);
443 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
449 _PlayListImpl::AddItem(const Tizen::Base::String& playlistName, const ContentId& contentId)
451 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
452 media_playlist_h tempHandle = NULL;
454 result r = CreateFilter(playlistName);
455 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
457 tempHandle = pPlayListHandle.get();
458 r = GetPlayListHandle(&tempHandle);
459 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
461 r = AddItemInternal(tempHandle, contentId);
462 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
468 _PlayListImpl::AddItems(const Tizen::Base::String& playlistName, const Tizen::Base::Collection::IList& contentIdList)
470 int listCount = contentIdList.GetCount();
471 ContentId *pContentId = NULL;
472 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
473 media_playlist_h tempHandle = NULL;
475 result r = CreateFilter(playlistName);
476 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
478 tempHandle = pPlayListHandle.get();
479 r = GetPlayListHandle(&tempHandle);
480 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
482 for(int index = 0; index < listCount; index++)
484 pContentId = (ContentId*)contentIdList.GetAt(index);
485 r = AddItemInternal(tempHandle, *pContentId);
486 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
493 _PlayListImpl::RemoveItem(const ContentId& contentId)
495 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
496 media_playlist_h tempHandle = NULL;
497 int ret = MEDIA_CONTENT_ERROR_NONE;
498 std::unique_ptr<GList, GListDeleter> pItemList;
501 result r = CreateFilterUsingContentId(contentId);
502 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
504 tempHandle = pPlayListHandle.get();
505 r = GetPlayListHandle(&tempHandle);
506 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
508 if (tempHandle != NULL)
511 int playlistMemberId = 0;
513 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
514 r = MapCoreErrorToNativeResult(ret);
515 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
517 pTemp = pItemList.get();
518 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
519 result r = MapCoreErrorToNativeResult(ret);
520 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_media_from_db operation.");
524 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
526 ret = media_playlist_remove_media(tempHandle, playlistMemberId);
527 r = MapCoreErrorToNativeResult(ret);
528 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_remove_media operation.");
530 ret = media_playlist_update_to_db(tempHandle);
531 r = MapCoreErrorToNativeResult(ret);
532 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
540 _PlayListImpl::RemoveItems(const Tizen::Base::Collection::IList& contentIdList)
542 int listCount = contentIdList.GetCount();
543 ContentId *pContentId = NULL;
544 result r = E_SUCCESS;
546 for (int index = 0; index < listCount; index++)
548 pContentId = (ContentId*)contentIdList.GetAt(index);
549 r = RemoveItem(*pContentId);
556 _PlayListImpl::SetPlayListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
558 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
559 media_playlist_h tempHandle = NULL;
560 int ret = MEDIA_CONTENT_ERROR_NONE;
562 result r = CreateFilter(oldName);
563 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
565 tempHandle = pPlayListHandle.get();
566 r = GetPlayListHandle(&tempHandle);
567 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
569 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(newName));
570 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_OUT_OF_MEMORY, "Failed to perform CopyToCharArrayN operation.");
572 ret = media_playlist_set_name(tempHandle, pInputCond.get());
573 r = MapCoreErrorToNativeResult(ret);
574 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_name operation.");
576 ret = media_playlist_update_to_db(tempHandle);
577 r = MapCoreErrorToNativeResult(ret);
578 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
583 _PlayListImpl::SetorGetPlayOrder(const ContentId& contentId, int& playOrder, bool isSet) const
585 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
586 media_playlist_h tempHandle = NULL;
587 std::unique_ptr<GList, GListDeleter> pItemList;
589 int ret = MEDIA_CONTENT_ERROR_NONE;
591 SysTryReturnResult(NID_CNT, contentId != UuId::GetInvalidUuId(), E_INVALID_ARG, "The specified parameter is invalid.");
593 result r = CreateFilterUsingContentId(contentId);
594 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
596 tempHandle = pPlayListHandle.get();
597 r = GetPlayListHandle(&tempHandle);
598 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
600 if (tempHandle != NULL)
603 int playlistMemberId = 0;
605 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
606 r = MapCoreErrorToNativeResult(ret);
607 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
609 pTemp = pItemList.get();
610 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
611 result r = MapCoreErrorToNativeResult(ret);
612 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "media_playlist_foreach_media_from_db failed.");
616 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
620 ret = media_playlist_set_play_order(tempHandle, playlistMemberId, playOrder);
621 r = MapCoreErrorToNativeResult(ret);
622 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
624 ret = media_playlist_update_to_db(tempHandle);
625 r = MapCoreErrorToNativeResult(ret);
626 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
630 ret = media_playlist_get_play_order(tempHandle, playlistMemberId, &playOrder);
631 r = MapCoreErrorToNativeResult(ret);
632 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
640 _PlayListImpl::SetPlayOrder(const ContentId& contentId, const ContentId& nextContentId)
642 int playOrder = GetPlayOrder(contentId) + 1;
643 result r = GetLastResult();
644 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform GetPlayOrder operation.");
646 r = SetorGetPlayOrder(nextContentId, playOrder, true);
652 _PlayListImpl::GetPlayOrder(const ContentId& contentId) const
656 result r = SetorGetPlayOrder(contentId, playOrder, false);
663 _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
665 std::unique_ptr<GList, GListDeleter> pItemList;
668 pTemp = pItemList.get();
669 int ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
670 result r = MapCoreErrorToNativeResult(ret);
671 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_playlist_from_db operation.");
675 r = E_INVALID_ARG; // No match found.
679 *pPlayListHandle = (media_playlist_h)g_list_nth_data(pTemp, 0);
686 _PlayListImpl::MapCoreErrorToNativeResult(int reason) const
688 result r = E_SUCCESS;
692 case MEDIA_CONTENT_ERROR_NONE:
696 case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
698 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_INVALID_PARAMETER");
701 case MEDIA_CONTENT_ERROR_DB_FAILED:
703 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
706 case MEDIA_CONTENT_ERROR_DB_BUSY:
708 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
712 SysLog(NID_CNT, "default");
720 _PlayListImpl::MapCoreDatabaseErrorToNativeResult(int reason) const
722 result r = E_SUCCESS;
726 case MEDIA_CONTENT_ERROR_NONE:
730 case MEDIA_CONTENT_ERROR_DB_FAILED:
732 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
735 case MEDIA_CONTENT_ERROR_DB_BUSY:
737 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
741 SysLog(NID_CNT, "default");
749 MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData)
751 media_playlist_h newPlayListHandle = NULL;
752 media_playlist_clone(&newPlayListHandle, playlistHandle);
754 GList** pList = (GList**)pUserData;
755 *pList = g_list_append(*pList, newPlayListHandle);
760 // This callback appends List with playlistMemberId's
762 PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData)
764 GList** pList = (GList**)pUserData;
765 *pList = g_list_append(*pList, (gpointer)playlistMemberId);
770 // This callback appends List with media handles
772 PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData)
774 media_info_h new_media = NULL;
775 media_info_clone(&new_media, media);
777 GList** pList = (GList**)pUserData;
778 *pList = g_list_append(*pList, new_media);