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));
67 _PlayListImpl::GetInstance(PlayList& playList)
69 return (&playList != null) ? playList.__pImpl : null;
73 _PlayListImpl::GetInstance(const PlayList& playList)
75 return (&playList != null) ? playList.__pImpl : null;
79 _PlayListImpl::Construct(const Tizen::Base::String& playListName, bool isAdd)
81 int ret = media_content_connect();
82 result r = MapCoreErrorToNativeResult(ret);
83 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Propagating for media_content_connect");
87 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
89 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
90 SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_OUT_OF_MEMORY, "The memory is insufficient.");
92 media_playlist_h tempHandle = pPlaylistHandle.get();
93 ret = media_playlist_insert_to_db(pInputCond.get(), &tempHandle);
94 r = MapCoreErrorToNativeResult(ret);
101 _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
103 std::unique_ptr<char[]> pInputCond;
104 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
105 String uuidStr = L"";
106 String inputCondition = L"MEDIA_ID = ";
108 int ret = media_filter_create(pFilterHandle.get());
109 result r = MapCoreErrorToNativeResult(ret);
110 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
112 uuidStr = contentId.ToString();
113 r = uuidStr.Insert('"', 0);
114 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
115 r = uuidStr.Insert('"', uuidStr.GetLength());
116 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
118 r = inputCondition.Append(uuidStr);
119 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
121 if (!inputCondition.IsEmpty())
123 //CopyToCharArrayN: utility function, converts a osp string to char*
124 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
125 SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_SYSTEM, "pInputCond is NULL.");
127 SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
129 if ((pInputCond.get())[0])
131 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
132 r = MapCoreErrorToNativeResult(ret);
133 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
137 __pFilterHandle.reset(pFilterHandle.release());
143 _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
145 std::unique_ptr<char[]> pInputCond;
146 String inputCondition = L"PLAYLIST_NAME = ";
147 String nameExpr(playListName);
149 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
151 int ret = media_filter_create(pFilterHandle.get());
152 result r = MapCoreErrorToNativeResult(ret);
153 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
155 if (!nameExpr.IsEmpty())
157 r = nameExpr.Insert('"', 0);
158 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
159 r = nameExpr.Insert('"', nameExpr.GetLength());
160 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
162 r = inputCondition.Append(nameExpr);
163 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
166 if (!inputCondition.IsEmpty())
168 //CopyToCharArrayN: utility function, converts a osp string to char*
169 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
170 SysTryReturnResult(NID_CNT, (pInputCond.get())[0], E_SYSTEM, "pInputCond is NULL.");
172 SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
174 if ((pInputCond.get())[0])
176 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
177 r = MapCoreErrorToNativeResult(ret);
178 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
182 __pFilterHandle.reset(pFilterHandle.release());
188 _PlayListImpl::GetPlayListItemCount(const Tizen::Base::String& playlistName) const
190 std::unique_ptr<GList, GListDeleter> pItemList;
192 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
194 int ret = MEDIA_CONTENT_ERROR_NONE;
195 int playlistItemCount = 0;
197 result r = CreateFilter(playlistName);
198 SysTryReturn(NID_CNT, r == E_SUCCESS, 0, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
200 pTemp = pItemList.get();
201 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
202 r = MapCoreDatabaseErrorToNativeResult(ret);
203 SysTryReturn(NID_CNT, r == E_SUCCESS , 0, r,
204 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
208 r = E_DATABASE; // No match found.
212 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
213 if (pPlaylistHandle.get() != NULL)
215 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
216 r = MapCoreDatabaseErrorToNativeResult(ret);
217 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
219 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
220 r = MapCoreDatabaseErrorToNativeResult(ret);
221 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
223 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
228 return playlistItemCount;
231 Tizen::Base::Collection::IList*
232 _PlayListImpl::GetContentInfoListN(const Tizen::Base::String& playlistName) const
234 std::unique_ptr<GList, GListDeleter> pItemList;
236 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
237 std::unique_ptr<ArrayList, AllElementsDeleter> pPlayListItemList;
239 int ret = MEDIA_CONTENT_ERROR_NONE;
241 result r = CreateFilter(playlistName);
242 SysTryReturn(NID_CNT, r == E_SUCCESS, NULL, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
244 pTemp = pItemList.get();
245 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
246 r = MapCoreDatabaseErrorToNativeResult(ret);
247 SysTryReturn(NID_CNT, r == E_SUCCESS , NULL, r,
248 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
252 r = E_DATABASE; // No match found.
256 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
257 if (pPlaylistHandle.get() != NULL)
259 int playlistItemCount = 0;
261 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
262 r = MapCoreDatabaseErrorToNativeResult(ret);
263 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
264 "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
266 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
267 r = MapCoreDatabaseErrorToNativeResult(ret);
268 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
269 "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
271 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
273 pPlayListItemList = std::unique_ptr<ArrayList, AllElementsDeleter>(new (std::nothrow) ArrayList());
274 SysTryReturn(NID_CNT, pPlayListItemList != null, NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] FinalOutList is null.");
276 r = pPlayListItemList->Construct();
277 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to construct pPlayListItemList ArrayList.");
279 if (playlistItemCount > 0)
281 r = FillPlayListInfo(playlistId, pPlayListItemList.get());
282 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_DATABASE, "Failed to perform FillPlayListInfo operation.");
288 return pPlayListItemList.release();
292 _PlayListImpl::FillPlayListInfo(int playlistId, ArrayList* pPlayListItemList) const
294 std::unique_ptr<GList, GListDeleter> pItemList;
296 std::unique_ptr<media_info_s, MediaHandleDeleter> pMediaHandle;
298 ContentInfo::_ContentData* pContentData = null;
299 ImageContentInfo::_ImageContentData* pImageContentData = null;
300 AudioContentInfo::_AudioContentData* pAudioContentData = null;
301 VideoContentInfo::_VideoContentData* pVideoContentData = null;
303 std::unique_ptr<ImageContentInfo> pImageContentInfo;
304 std::unique_ptr<AudioContentInfo> pAudioContentInfo;
305 std::unique_ptr<VideoContentInfo> pVideoContentInfo;
306 std::unique_ptr<OtherContentInfo> pOtherContentInfo;
308 //SysTryReturn(NID_CNT, pPlayListItemList != NULL , r, r, "[E_SUCCESS] pPlayListItemList is null");
310 pTemp = pItemList.get();
311 int ret = media_playlist_foreach_media_from_db(playlistId, NULL, PlaylistItemsCb, &pTemp);
312 result r = MapCoreErrorToNativeResult(ret);
313 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_foreach_media_from_db operation.");
315 media_content_type_e mediaType = MEDIA_CONTENT_TYPE_OTHERS;
319 for (int idx = 0; idx < (int)g_list_length(pTemp); idx++)
321 pMediaHandle.reset(static_cast<media_info_h>(g_list_nth_data(pTemp, idx)));
323 ret = media_info_get_media_type(pMediaHandle.get(), &mediaType);
324 r = MapCoreErrorToNativeResult(ret);
325 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_media_type.");
329 case MEDIA_CONTENT_TYPE_IMAGE:
330 pImageContentInfo = std::unique_ptr<ImageContentInfo>(new (std::nothrow) ImageContentInfo);
331 SysTryReturnResult(NID_CNT, pImageContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pImageContentInfo.");
333 pContentData = pImageContentInfo->GetContentData();
334 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
336 pImageContentData = pImageContentInfo->GetImageContentData();
337 SysTryReturnResult(NID_CNT, pImageContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
339 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
340 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
342 r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentData);
343 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform GetDataFromImageTable operation.");
345 // Shallow copy, adds just the pointer: not the element
346 r = pPlayListItemList->Add(*(pImageContentInfo.release()));
347 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
350 case MEDIA_CONTENT_TYPE_MUSIC:
352 case MEDIA_CONTENT_TYPE_SOUND:
353 pAudioContentInfo = std::unique_ptr<AudioContentInfo>(new (std::nothrow) AudioContentInfo);
354 SysTryReturnResult(NID_CNT, pAudioContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pAudioContentInfo.");
356 pContentData = pAudioContentInfo->GetContentData();
357 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
359 pAudioContentData = pAudioContentInfo->GetAudioContentData();
360 SysTryReturnResult(NID_CNT, pAudioContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
362 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
363 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
365 r = _ContentUtility::FillAudioContentData(pMediaHandle.get(), pAudioContentData);
366 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillAudioContentData operation.");
368 // Shallow copy, adds just the pointer: not the element
369 r = pPlayListItemList->Add(*(pAudioContentInfo.release()));
370 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for __pFinalOutList.");
373 case MEDIA_CONTENT_TYPE_VIDEO:
374 pVideoContentInfo = std::unique_ptr<VideoContentInfo>(new (std::nothrow) VideoContentInfo);
375 SysTryReturnResult(NID_CNT, pVideoContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pVideoContentInfo.");
377 pContentData = pVideoContentInfo->GetContentData();
378 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
380 pVideoContentData = pVideoContentInfo->GetVideoContentData();
381 SysTryReturnResult(NID_CNT, pVideoContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
383 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
384 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
386 r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentData);
387 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillVideoContentData operation.");
389 // Shallow copy, adds just the pointer: not the element
390 r = pPlayListItemList->Add(*(pVideoContentInfo.release()));
391 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
394 case MEDIA_CONTENT_TYPE_OTHERS:
395 pOtherContentInfo = std::unique_ptr<OtherContentInfo>(new (std::nothrow) OtherContentInfo);
396 SysTryReturnResult(NID_CNT, pOtherContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pOtherContentInfo.");
398 pContentData = pOtherContentInfo->GetContentData();
399 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
401 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
402 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
404 // Shallow copy, adds just the pointer: not the element
405 r = pPlayListItemList->Add(*(pOtherContentInfo.release()));
406 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
419 _PlayListImpl::AddItemInternal(media_playlist_h playListHandle, const ContentId& contentId)
421 String uuidStr = L"";
422 int ret = MEDIA_CONTENT_ERROR_NONE;
423 result r = E_SUCCESS;
425 uuidStr = contentId.ToString();
426 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(uuidStr));
427 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_SYSTEM, "Failed to perform CopyToCharArrayN operation.");
429 ret = media_playlist_add_media(playListHandle, pInputCond.get());
430 r = MapCoreErrorToNativeResult(ret);
431 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_add_media operation.");
433 ret = media_playlist_update_to_db(playListHandle);
434 r = MapCoreErrorToNativeResult(ret);
435 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
441 _PlayListImpl::AddItem(const Tizen::Base::String& playlistName, const ContentId& contentId)
443 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
444 media_playlist_h tempHandle = NULL;
446 result r = CreateFilter(playlistName);
447 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
449 tempHandle = pPlayListHandle.get();
450 r = GetPlayListHandle(&tempHandle);
451 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
453 r = AddItemInternal(tempHandle, contentId);
454 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
460 _PlayListImpl::AddItems(const Tizen::Base::String& playlistName, const Tizen::Base::Collection::IList& contentIdList)
462 int listCount = contentIdList.GetCount();
463 ContentId *pContentId = NULL;
464 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
465 media_playlist_h tempHandle = NULL;
467 result r = CreateFilter(playlistName);
468 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
470 tempHandle = pPlayListHandle.get();
471 r = GetPlayListHandle(&tempHandle);
472 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
474 for(int index = 0; index < listCount; index++)
476 pContentId = (ContentId*)contentIdList.GetAt(index);
477 r = AddItemInternal(tempHandle, *pContentId);
478 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
485 _PlayListImpl::RemoveItem(const ContentId& contentId)
487 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
488 media_playlist_h tempHandle = NULL;
489 int ret = MEDIA_CONTENT_ERROR_NONE;
490 std::unique_ptr<GList, GListDeleter> pItemList;
493 result r = CreateFilterUsingContentId(contentId);
494 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
496 tempHandle = pPlayListHandle.get();
497 r = GetPlayListHandle(&tempHandle);
498 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
500 if (tempHandle != NULL)
503 int playlistMemberId = 0;
505 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
506 r = MapCoreErrorToNativeResult(ret);
507 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
509 pTemp = pItemList.get();
510 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
511 result r = MapCoreErrorToNativeResult(ret);
512 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_media_from_db operation.");
516 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
518 ret = media_playlist_remove_media(tempHandle, playlistMemberId);
519 r = MapCoreErrorToNativeResult(ret);
520 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_remove_media operation.");
522 ret = media_playlist_update_to_db(tempHandle);
523 r = MapCoreErrorToNativeResult(ret);
524 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
532 _PlayListImpl::RemoveItems(const Tizen::Base::Collection::IList& contentIdList)
534 int listCount = contentIdList.GetCount();
535 ContentId *pContentId = NULL;
536 result r = E_SUCCESS;
538 for (int index = 0; index < listCount; index++)
540 pContentId = (ContentId*)contentIdList.GetAt(index);
541 r = RemoveItem(*pContentId);
548 _PlayListImpl::SetPlalyListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
550 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
551 media_playlist_h tempHandle = NULL;
552 int ret = MEDIA_CONTENT_ERROR_NONE;
554 result r = CreateFilter(oldName);
555 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
557 tempHandle = pPlayListHandle.get();
558 r = GetPlayListHandle(&tempHandle);
559 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
561 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(newName));
562 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_OUT_OF_MEMORY, "Failed to perform CopyToCharArrayN operation.");
564 ret = media_playlist_set_name(tempHandle, pInputCond.get());
565 r = MapCoreErrorToNativeResult(ret);
566 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_name operation.");
568 ret = media_playlist_update_to_db(tempHandle);
569 r = MapCoreErrorToNativeResult(ret);
570 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
575 _PlayListImpl::SetorGetPlayOrder(const ContentId& contentId, int& playOrder, bool isSet) const
577 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
578 media_playlist_h tempHandle = NULL;
579 std::unique_ptr<GList, GListDeleter> pItemList;
581 int ret = MEDIA_CONTENT_ERROR_NONE;
583 SysTryReturnResult(NID_CNT, contentId != UuId::GetInvalidUuId(), E_INVALID_ARG, "The specified parameter is invalid.");
585 result r = CreateFilterUsingContentId(contentId);
586 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
588 tempHandle = pPlayListHandle.get();
589 r = GetPlayListHandle(&tempHandle);
590 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
592 if (tempHandle != NULL)
595 int playlistMemberId = 0;
597 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
598 r = MapCoreErrorToNativeResult(ret);
599 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
601 pTemp = pItemList.get();
602 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
603 result r = MapCoreErrorToNativeResult(ret);
604 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "media_playlist_foreach_media_from_db failed.");
608 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
612 ret = media_playlist_set_play_order(tempHandle, playlistMemberId, playOrder);
613 r = MapCoreErrorToNativeResult(ret);
614 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
616 ret = media_playlist_update_to_db(tempHandle);
617 r = MapCoreErrorToNativeResult(ret);
618 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
622 ret = media_playlist_get_play_order(tempHandle, playlistMemberId, &playOrder);
623 r = MapCoreErrorToNativeResult(ret);
624 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
632 _PlayListImpl::SetPlayOrder(const ContentId& contentId, const ContentId& nextContentId)
634 int playOrder = GetPlayOrder(contentId) + 1;
635 result r = GetLastResult();
636 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform GetPlayOrder operation.");
638 r = SetorGetPlayOrder(nextContentId, playOrder, true);
644 _PlayListImpl::GetPlayOrder(const ContentId& contentId) const
648 result r = SetorGetPlayOrder(contentId, playOrder, false);
655 _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
657 std::unique_ptr<GList, GListDeleter> pItemList;
660 pTemp = pItemList.get();
661 int ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
662 result r = MapCoreErrorToNativeResult(ret);
663 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_playlist_from_db operation.");
667 r = E_INVALID_ARG; // No match found.
671 *pPlayListHandle = (media_playlist_h)g_list_nth_data(pTemp, 0);
678 _PlayListImpl::MapCoreErrorToNativeResult(int reason) const
680 result r = E_SUCCESS;
684 case MEDIA_CONTENT_ERROR_NONE:
688 case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
690 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_INVALID_PARAMETER");
693 case MEDIA_CONTENT_ERROR_DB_FAILED:
695 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
698 case MEDIA_CONTENT_ERROR_DB_BUSY:
700 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
704 SysLog(NID_CNT, "default");
712 _PlayListImpl::MapCoreDatabaseErrorToNativeResult(int reason) const
714 result r = E_SUCCESS;
718 case MEDIA_CONTENT_ERROR_NONE:
722 case MEDIA_CONTENT_ERROR_DB_FAILED:
724 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
727 case MEDIA_CONTENT_ERROR_DB_BUSY:
729 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
733 SysLog(NID_CNT, "default");
741 MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData)
743 media_playlist_h newPlayListHandle = NULL;
744 media_playlist_clone(&newPlayListHandle, playlistHandle);
746 GList** pList = (GList**)pUserData;
747 *pList = g_list_append(*pList, newPlayListHandle);
752 // This callback appends List with playlistMemberId's
754 PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData)
756 GList** pList = (GList**)pUserData;
757 *pList = g_list_append(*pList, (gpointer)playlistMemberId);
762 // This callback appends List with media handles
764 PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData)
766 media_info_h new_media = NULL;
767 media_info_clone(&new_media, media);
769 GList** pList = (GList**)pUserData;
770 *pList = g_list_append(*pList, new_media);