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<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
95 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
96 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
98 media_playlist_h tempHandle = pPlaylistHandle.get();
99 ret = media_playlist_insert_to_db(pInputCond.get(), &tempHandle);
100 r = MapCoreErrorToNativeResult(ret);
107 _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
109 std::unique_ptr<char[]> pInputCond;
110 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
111 String uuidStr = L"";
112 String playListName = L"";
113 String inputCondition = L"MEDIA_ID = ";
114 String inputListNameCondition = L"PLAYLIST_NAME = ";
116 int ret = media_filter_create(pFilterHandle.get());
117 result r = MapCoreErrorToNativeResult(ret);
118 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
120 uuidStr = contentId.ToString();
121 r = uuidStr.Insert('"', 0);
122 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
123 r = uuidStr.Insert('"', uuidStr.GetLength());
124 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
126 r = inputCondition.Append(uuidStr);
127 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
129 playListName = __playListName;
130 r = playListName.Insert('"', 0);
131 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
132 r = playListName.Insert('"', playListName.GetLength());
133 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
135 r = inputListNameCondition.Append(playListName);
136 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputListNameCondition.");
138 r = inputCondition.Append(" AND ");
139 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
141 r = inputCondition.Append(inputListNameCondition);
142 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
144 if (!inputCondition.IsEmpty())
146 //CopyToCharArrayN: utility function, converts a osp string to char*
147 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
148 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
150 SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
152 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
153 r = MapCoreErrorToNativeResult(ret);
154 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
157 __pFilterHandle.reset(pFilterHandle.release());
163 _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
165 std::unique_ptr<char[]> pInputCond;
166 String inputCondition = L"PLAYLIST_NAME = ";
167 String nameExpr(playListName);
169 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
171 int ret = media_filter_create(pFilterHandle.get());
172 result r = MapCoreErrorToNativeResult(ret);
173 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
175 if (!nameExpr.IsEmpty())
177 r = nameExpr.Replace("\'", "''");
178 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Replace operation for nameExpr.");
180 r = nameExpr.Insert('\'', 0);
181 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
183 r = nameExpr.Insert('\'', nameExpr.GetLength());
184 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
186 r = inputCondition.Append(nameExpr);
187 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
190 if (!inputCondition.IsEmpty())
192 //CopyToCharArrayN: utility function, converts a osp string to char*
193 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
194 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
196 SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
198 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
199 r = MapCoreErrorToNativeResult(ret);
200 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
203 __pFilterHandle.reset(pFilterHandle.release());
209 _PlayListImpl::GetPlayListItemCount(const Tizen::Base::String& playlistName) const
211 std::unique_ptr<GList, GListDeleter> pItemList;
213 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
215 int ret = MEDIA_CONTENT_ERROR_NONE;
216 int playlistItemCount = 0;
218 result r = CreateFilter(playlistName);
219 SysTryReturn(NID_CNT, r == E_SUCCESS, 0, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
221 pTemp = pItemList.get();
222 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
223 r = MapCoreDatabaseErrorToNativeResult(ret);
224 SysTryReturn(NID_CNT, r == E_SUCCESS , 0, r,
225 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
229 r = E_DATABASE; // No match found.
233 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
234 if (pPlaylistHandle.get() != NULL)
236 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
237 r = MapCoreDatabaseErrorToNativeResult(ret);
238 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
240 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
241 r = MapCoreDatabaseErrorToNativeResult(ret);
242 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
244 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
249 return playlistItemCount;
252 Tizen::Base::Collection::IList*
253 _PlayListImpl::GetContentInfoListN(const Tizen::Base::String& playlistName) const
255 std::unique_ptr<GList, GListDeleter> pItemList;
257 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
258 std::unique_ptr<ArrayList, AllElementsDeleter> pPlayListItemList;
260 int ret = MEDIA_CONTENT_ERROR_NONE;
262 result r = CreateFilter(playlistName);
263 SysTryReturn(NID_CNT, r == E_SUCCESS, NULL, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
265 pTemp = pItemList.get();
266 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
267 r = MapCoreDatabaseErrorToNativeResult(ret);
268 SysTryReturn(NID_CNT, r == E_SUCCESS , NULL, r,
269 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
273 r = E_DATABASE; // No match found.
277 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
278 if (pPlaylistHandle.get() != NULL)
280 int playlistItemCount = 0;
282 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
283 r = MapCoreDatabaseErrorToNativeResult(ret);
284 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
285 "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
287 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
288 r = MapCoreDatabaseErrorToNativeResult(ret);
289 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
290 "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
292 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
294 pPlayListItemList = std::unique_ptr<ArrayList, AllElementsDeleter>(new (std::nothrow) ArrayList());
295 SysTryReturn(NID_CNT, pPlayListItemList != null, NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] FinalOutList is null.");
297 r = pPlayListItemList->Construct();
298 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to construct pPlayListItemList ArrayList.");
300 if (playlistItemCount > 0)
302 r = FillPlayListInfo(playlistId, pPlayListItemList.get());
303 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_DATABASE, "Failed to perform FillPlayListInfo operation.");
309 return pPlayListItemList.release();
313 _PlayListImpl::FillPlayListInfo(int playlistId, ArrayList* pPlayListItemList) const
315 std::unique_ptr<GList, GListDeleter> pItemList;
317 std::unique_ptr<media_info_s, MediaHandleDeleter> pMediaHandle;
319 ContentInfo::_ContentData* pContentData = null;
320 ImageContentInfo::_ImageContentData* pImageContentData = null;
321 AudioContentInfo::_AudioContentData* pAudioContentData = null;
322 VideoContentInfo::_VideoContentData* pVideoContentData = null;
324 std::unique_ptr<ImageContentInfo> pImageContentInfo;
325 std::unique_ptr<AudioContentInfo> pAudioContentInfo;
326 std::unique_ptr<VideoContentInfo> pVideoContentInfo;
327 std::unique_ptr<OtherContentInfo> pOtherContentInfo;
329 //SysTryReturn(NID_CNT, pPlayListItemList != NULL , r, r, "[E_SUCCESS] pPlayListItemList is null");
331 pTemp = pItemList.get();
332 int ret = media_playlist_foreach_media_from_db(playlistId, NULL, PlaylistItemsCb, &pTemp);
333 result r = MapCoreErrorToNativeResult(ret);
334 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_foreach_media_from_db operation.");
336 media_content_type_e mediaType = MEDIA_CONTENT_TYPE_OTHERS;
340 for (int idx = 0; idx < (int)g_list_length(pTemp); idx++)
342 pMediaHandle.reset(static_cast<media_info_h>(g_list_nth_data(pTemp, idx)));
344 ret = media_info_get_media_type(pMediaHandle.get(), &mediaType);
345 r = MapCoreErrorToNativeResult(ret);
346 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_media_type.");
350 case MEDIA_CONTENT_TYPE_IMAGE:
351 pImageContentInfo = std::unique_ptr<ImageContentInfo>(new (std::nothrow) ImageContentInfo);
352 SysTryReturnResult(NID_CNT, pImageContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pImageContentInfo.");
354 pContentData = pImageContentInfo->GetContentData();
355 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
357 pImageContentData = pImageContentInfo->GetImageContentData();
358 SysTryReturnResult(NID_CNT, pImageContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
360 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
361 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
363 r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentData);
364 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform GetDataFromImageTable operation.");
366 // Shallow copy, adds just the pointer: not the element
367 r = pPlayListItemList->Add(*(pImageContentInfo.release()));
368 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
371 case MEDIA_CONTENT_TYPE_MUSIC:
373 case MEDIA_CONTENT_TYPE_SOUND:
374 pAudioContentInfo = std::unique_ptr<AudioContentInfo>(new (std::nothrow) AudioContentInfo);
375 SysTryReturnResult(NID_CNT, pAudioContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pAudioContentInfo.");
377 pContentData = pAudioContentInfo->GetContentData();
378 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
380 pAudioContentData = pAudioContentInfo->GetAudioContentData();
381 SysTryReturnResult(NID_CNT, pAudioContentData != 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::FillAudioContentData(pMediaHandle.get(), pAudioContentData);
387 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillAudioContentData operation.");
389 // Shallow copy, adds just the pointer: not the element
390 r = pPlayListItemList->Add(*(pAudioContentInfo.release()));
391 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for __pFinalOutList.");
394 case MEDIA_CONTENT_TYPE_VIDEO:
395 pVideoContentInfo = std::unique_ptr<VideoContentInfo>(new (std::nothrow) VideoContentInfo);
396 SysTryReturnResult(NID_CNT, pVideoContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pVideoContentInfo.");
398 pContentData = pVideoContentInfo->GetContentData();
399 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
401 pVideoContentData = pVideoContentInfo->GetVideoContentData();
402 SysTryReturnResult(NID_CNT, pVideoContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
404 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
405 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
407 r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentData);
408 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillVideoContentData operation.");
410 // Shallow copy, adds just the pointer: not the element
411 r = pPlayListItemList->Add(*(pVideoContentInfo.release()));
412 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
415 case MEDIA_CONTENT_TYPE_OTHERS:
416 pOtherContentInfo = std::unique_ptr<OtherContentInfo>(new (std::nothrow) OtherContentInfo);
417 SysTryReturnResult(NID_CNT, pOtherContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pOtherContentInfo.");
419 pContentData = pOtherContentInfo->GetContentData();
420 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
422 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
423 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
425 // Shallow copy, adds just the pointer: not the element
426 r = pPlayListItemList->Add(*(pOtherContentInfo.release()));
427 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
440 _PlayListImpl::AddItemInternal(media_playlist_h playListHandle, const ContentId& contentId)
442 String uuidStr = L"";
443 int ret = MEDIA_CONTENT_ERROR_NONE;
444 result r = E_SUCCESS;
446 uuidStr = contentId.ToString();
447 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(uuidStr));
448 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
450 ret = media_playlist_add_media(playListHandle, pInputCond.get());
451 r = MapCoreErrorToNativeResult(ret);
452 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_add_media operation.");
454 ret = media_playlist_update_to_db(playListHandle);
455 r = MapCoreErrorToNativeResult(ret);
456 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
462 _PlayListImpl::AddItem(const Tizen::Base::String& playlistName, const ContentId& contentId)
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 r = AddItemInternal(tempHandle, contentId);
475 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
481 _PlayListImpl::AddItems(const Tizen::Base::String& playlistName, const Tizen::Base::Collection::IList& contentIdList)
483 int listCount = contentIdList.GetCount();
484 ContentId *pContentId = NULL;
485 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
486 media_playlist_h tempHandle = NULL;
488 result r = CreateFilter(playlistName);
489 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
491 tempHandle = pPlayListHandle.get();
492 r = GetPlayListHandle(&tempHandle);
493 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
495 for(int index = 0; index < listCount; index++)
497 pContentId = (ContentId*)contentIdList.GetAt(index);
498 r = AddItemInternal(tempHandle, *pContentId);
499 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
506 _PlayListImpl::RemoveItem(const ContentId& contentId)
508 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
509 media_playlist_h tempHandle = NULL;
510 int ret = MEDIA_CONTENT_ERROR_NONE;
511 std::unique_ptr<GList, GListDeleter> pItemList;
514 result r = CreateFilterUsingContentId(contentId);
515 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
517 tempHandle = pPlayListHandle.get();
518 r = GetPlayListHandle(&tempHandle);
519 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
521 if (tempHandle != NULL)
524 int playlistMemberId = 0;
526 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
527 r = MapCoreErrorToNativeResult(ret);
528 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
530 pTemp = pItemList.get();
531 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
532 result r = MapCoreErrorToNativeResult(ret);
533 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_media_from_db operation.");
537 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
539 ret = media_playlist_remove_media(tempHandle, playlistMemberId);
540 r = MapCoreErrorToNativeResult(ret);
541 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_remove_media operation.");
543 ret = media_playlist_update_to_db(tempHandle);
544 r = MapCoreErrorToNativeResult(ret);
545 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
553 _PlayListImpl::RemoveItems(const Tizen::Base::Collection::IList& contentIdList)
555 int listCount = contentIdList.GetCount();
556 ContentId *pContentId = NULL;
557 result r = E_SUCCESS;
559 for (int index = 0; index < listCount; index++)
561 pContentId = (ContentId*)contentIdList.GetAt(index);
562 r = RemoveItem(*pContentId);
569 _PlayListImpl::SetPlayListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
571 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
572 media_playlist_h tempHandle = NULL;
573 int ret = MEDIA_CONTENT_ERROR_NONE;
575 result r = CreateFilter(oldName);
576 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
578 tempHandle = pPlayListHandle.get();
579 r = GetPlayListHandle(&tempHandle);
580 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
582 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(newName));
583 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
585 ret = media_playlist_set_name(tempHandle, pInputCond.get());
586 r = MapCoreErrorToNativeResult(ret);
587 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_name operation.");
589 ret = media_playlist_update_to_db(tempHandle);
590 r = MapCoreErrorToNativeResult(ret);
591 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
596 _PlayListImpl::SetorGetPlayOrder(const ContentId& contentId, int& playOrder, bool isSet) const
598 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
599 media_playlist_h tempHandle = NULL;
600 std::unique_ptr<GList, GListDeleter> pItemList;
602 int ret = MEDIA_CONTENT_ERROR_NONE;
604 SysTryReturnResult(NID_CNT, contentId != UuId::GetInvalidUuId(), E_INVALID_ARG, "The specified parameter is invalid.");
606 result r = CreateFilterUsingContentId(contentId);
607 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
609 tempHandle = pPlayListHandle.get();
610 r = GetPlayListHandle(&tempHandle);
611 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
613 if (tempHandle != NULL)
616 int playlistMemberId = 0;
618 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
619 r = MapCoreErrorToNativeResult(ret);
620 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
622 pTemp = pItemList.get();
623 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
624 result r = MapCoreErrorToNativeResult(ret);
625 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "media_playlist_foreach_media_from_db failed.");
629 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
633 ret = media_playlist_set_play_order(tempHandle, playlistMemberId, playOrder);
634 r = MapCoreErrorToNativeResult(ret);
635 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
637 ret = media_playlist_update_to_db(tempHandle);
638 r = MapCoreErrorToNativeResult(ret);
639 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
643 ret = media_playlist_get_play_order(tempHandle, playlistMemberId, &playOrder);
644 r = MapCoreErrorToNativeResult(ret);
645 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
653 _PlayListImpl::SetPlayOrder(const ContentId& contentId, const ContentId& nextContentId)
655 int playOrder = GetPlayOrder(contentId) + 1;
656 result r = GetLastResult();
657 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform GetPlayOrder operation.");
659 r = SetorGetPlayOrder(nextContentId, playOrder, true);
665 _PlayListImpl::GetPlayOrder(const ContentId& contentId) const
669 result r = SetorGetPlayOrder(contentId, playOrder, false);
676 _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
678 std::unique_ptr<GList, GListDeleter> pItemList;
681 pTemp = pItemList.get();
682 int ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
683 result r = MapCoreErrorToNativeResult(ret);
684 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_playlist_from_db operation.");
688 r = E_INVALID_ARG; // No match found.
692 *pPlayListHandle = static_cast< media_playlist_h >(g_list_nth_data(pTemp, 0));
699 _PlayListImpl::MapCoreErrorToNativeResult(int reason) const
701 result r = E_SUCCESS;
705 case MEDIA_CONTENT_ERROR_NONE:
709 case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
711 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_INVALID_PARAMETER");
714 case MEDIA_CONTENT_ERROR_DB_FAILED:
716 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
719 case MEDIA_CONTENT_ERROR_DB_BUSY:
721 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
725 SysLog(NID_CNT, "default");
733 _PlayListImpl::MapCoreDatabaseErrorToNativeResult(int reason) const
735 result r = E_SUCCESS;
739 case MEDIA_CONTENT_ERROR_NONE:
743 case MEDIA_CONTENT_ERROR_DB_FAILED:
745 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
748 case MEDIA_CONTENT_ERROR_DB_BUSY:
750 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
754 SysLog(NID_CNT, "default");
762 MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData)
764 media_playlist_h newPlayListHandle = NULL;
765 media_playlist_clone(&newPlayListHandle, playlistHandle);
767 GList** pList = (GList**)pUserData;
768 *pList = g_list_append(*pList, newPlayListHandle);
773 // This callback appends List with playlistMemberId's
775 PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData)
777 GList** pList = (GList**)pUserData;
778 *pList = g_list_append(*pList, (gpointer)playlistMemberId);
783 // This callback appends List with media handles
785 PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData)
787 media_info_h new_media = NULL;
788 media_info_clone(&new_media, media);
790 GList** pList = (GList**)pUserData;
791 *pList = g_list_append(*pList, new_media);