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)
56 //(disconnects the DB connection)
57 _PlayListImpl::~_PlayListImpl(void)
59 int ret = MEDIA_CONTENT_ERROR_NONE;
62 ret = media_content_disconnect();
63 r = MapCoreErrorToNativeResult(ret);
64 SysTryLog(r == E_SUCCESS, "[%s] Propagating for media_content_disconnect", GetErrorMessage(r));
66 SysLog(NID_CNT, "media_content_disconnect result[%d].", ret);
70 _PlayListImpl::GetInstance(PlayList& playList)
72 return (&playList != null) ? playList.__pImpl : null;
76 _PlayListImpl::GetInstance(const PlayList& playList)
78 return (&playList != null) ? playList.__pImpl : null;
82 _PlayListImpl::Construct(const Tizen::Base::String& playListName, bool isAdd)
84 int ret = media_content_connect();
85 result r = MapCoreErrorToNativeResult(ret);
86 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Propagating for media_content_connect");
88 SysLog(NID_CNT, "media_content_connect result[%d].", ret);
90 __playListName = playListName;
94 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
96 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
97 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
99 media_playlist_h tempHandle = pPlaylistHandle.get();
100 ret = media_playlist_insert_to_db(pInputCond.get(), &tempHandle);
101 r = MapCoreErrorToNativeResult(ret);
108 _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
110 std::unique_ptr<char[]> pInputCond;
111 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
112 String uuidStr = L"";
113 String playListName = L"";
114 String inputCondition = L"MEDIA_ID = ";
115 String inputListNameCondition = L"PLAYLIST_NAME = ";
117 int ret = media_filter_create(pFilterHandle.get());
118 result r = MapCoreErrorToNativeResult(ret);
119 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
121 uuidStr = contentId.ToString();
122 r = uuidStr.Insert('"', 0);
123 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
124 r = uuidStr.Insert('"', uuidStr.GetLength());
125 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
127 r = inputCondition.Append(uuidStr);
128 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
130 playListName = __playListName;
131 r = playListName.Insert('"', 0);
132 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
133 r = playListName.Insert('"', playListName.GetLength());
134 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
136 r = inputListNameCondition.Append(playListName);
137 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputListNameCondition.");
139 r = inputCondition.Append(" AND ");
140 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
142 r = inputCondition.Append(inputListNameCondition);
143 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
145 if (!inputCondition.IsEmpty())
147 //CopyToCharArrayN: utility function, converts a osp string to char*
148 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
149 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
151 SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
153 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
154 r = MapCoreErrorToNativeResult(ret);
155 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
158 __pFilterHandle.reset(pFilterHandle.release());
164 _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
166 std::unique_ptr<char[]> pInputCond;
167 String inputCondition = L"PLAYLIST_NAME = ";
168 String nameExpr(playListName);
170 std::unique_ptr<filter_h, FilterHandleDeleter> pFilterHandle(new (std::nothrow) filter_h);
172 int ret = media_filter_create(pFilterHandle.get());
173 result r = MapCoreErrorToNativeResult(ret);
174 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
176 if (!nameExpr.IsEmpty())
178 r = nameExpr.Replace("\'", "''");
179 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Replace operation for nameExpr.");
181 r = nameExpr.Insert('\'', 0);
182 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
184 r = nameExpr.Insert('\'', nameExpr.GetLength());
185 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
187 r = inputCondition.Append(nameExpr);
188 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
191 if (!inputCondition.IsEmpty())
193 //CopyToCharArrayN: utility function, converts a osp string to char*
194 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
195 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
197 SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
199 ret = media_filter_set_condition(*(pFilterHandle.get()), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
200 r = MapCoreErrorToNativeResult(ret);
201 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
204 __pFilterHandle.reset(pFilterHandle.release());
210 _PlayListImpl::GetPlayListItemCount(const Tizen::Base::String& playlistName) const
212 std::unique_ptr<GList, GListDeleter> pItemList;
214 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
216 int ret = MEDIA_CONTENT_ERROR_NONE;
217 int playlistItemCount = 0;
219 result r = CreateFilter(playlistName);
220 SysTryReturn(NID_CNT, r == E_SUCCESS, 0, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
222 pTemp = pItemList.get();
223 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
224 r = MapCoreDatabaseErrorToNativeResult(ret);
225 SysTryReturn(NID_CNT, r == E_SUCCESS , 0, r,
226 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
230 r = E_DATABASE; // No match found.
234 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
235 if (pPlaylistHandle.get() != NULL)
237 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
238 r = MapCoreDatabaseErrorToNativeResult(ret);
239 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
241 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
242 r = MapCoreDatabaseErrorToNativeResult(ret);
243 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
245 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
250 return playlistItemCount;
253 Tizen::Base::Collection::IList*
254 _PlayListImpl::GetContentInfoListN(const Tizen::Base::String& playlistName) const
256 std::unique_ptr<GList, GListDeleter> pItemList;
258 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
259 std::unique_ptr<ArrayList, AllElementsDeleter> pPlayListItemList;
261 int ret = MEDIA_CONTENT_ERROR_NONE;
263 result r = CreateFilter(playlistName);
264 SysTryReturn(NID_CNT, r == E_SUCCESS, NULL, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
266 pTemp = pItemList.get();
267 ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
268 r = MapCoreDatabaseErrorToNativeResult(ret);
269 SysTryReturn(NID_CNT, r == E_SUCCESS , NULL, r,
270 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
274 r = E_DATABASE; // No match found.
278 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
279 if (pPlaylistHandle.get() != NULL)
281 int playlistItemCount = 0;
283 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
284 r = MapCoreDatabaseErrorToNativeResult(ret);
285 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
286 "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
288 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
289 r = MapCoreDatabaseErrorToNativeResult(ret);
290 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
291 "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
293 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
295 pPlayListItemList = std::unique_ptr<ArrayList, AllElementsDeleter>(new (std::nothrow) ArrayList());
296 SysTryReturn(NID_CNT, pPlayListItemList != null, NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] FinalOutList is null.");
298 r = pPlayListItemList->Construct();
299 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to construct pPlayListItemList ArrayList.");
301 if (playlistItemCount > 0)
303 r = FillPlayListInfo(playlistId, pPlayListItemList.get());
304 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_DATABASE, "Failed to perform FillPlayListInfo operation.");
310 return pPlayListItemList.release();
314 _PlayListImpl::FillPlayListInfo(int playlistId, ArrayList* pPlayListItemList) const
316 std::unique_ptr<GList, GListDeleter> pItemList;
318 std::unique_ptr<media_info_s, MediaHandleDeleter> pMediaHandle;
320 ContentInfo::_ContentData* pContentData = null;
321 ImageContentInfo::_ImageContentData* pImageContentData = null;
322 AudioContentInfo::_AudioContentData* pAudioContentData = null;
323 VideoContentInfo::_VideoContentData* pVideoContentData = null;
325 std::unique_ptr<ImageContentInfo> pImageContentInfo;
326 std::unique_ptr<AudioContentInfo> pAudioContentInfo;
327 std::unique_ptr<VideoContentInfo> pVideoContentInfo;
328 std::unique_ptr<OtherContentInfo> pOtherContentInfo;
330 //SysTryReturn(NID_CNT, pPlayListItemList != NULL , r, r, "[E_SUCCESS] pPlayListItemList is null");
332 pTemp = pItemList.get();
333 int ret = media_playlist_foreach_media_from_db(playlistId, NULL, PlaylistItemsCb, &pTemp);
334 result r = MapCoreErrorToNativeResult(ret);
335 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_foreach_media_from_db operation.");
337 media_content_type_e mediaType = MEDIA_CONTENT_TYPE_OTHERS;
341 for (int idx = 0; idx < (int)g_list_length(pTemp); idx++)
343 pMediaHandle.reset(static_cast<media_info_h>(g_list_nth_data(pTemp, idx)));
345 ret = media_info_get_media_type(pMediaHandle.get(), &mediaType);
346 r = MapCoreErrorToNativeResult(ret);
347 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_media_type.");
351 case MEDIA_CONTENT_TYPE_IMAGE:
352 pImageContentInfo = std::unique_ptr<ImageContentInfo>(new (std::nothrow) ImageContentInfo);
353 SysTryReturnResult(NID_CNT, pImageContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pImageContentInfo.");
355 pContentData = pImageContentInfo->GetContentData();
356 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
358 pImageContentData = pImageContentInfo->GetImageContentData();
359 SysTryReturnResult(NID_CNT, pImageContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
361 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
362 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
364 r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentData);
365 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform GetDataFromImageTable operation.");
367 // Shallow copy, adds just the pointer: not the element
368 r = pPlayListItemList->Add(*(pImageContentInfo.release()));
369 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
372 case MEDIA_CONTENT_TYPE_MUSIC:
374 case MEDIA_CONTENT_TYPE_SOUND:
375 pAudioContentInfo = std::unique_ptr<AudioContentInfo>(new (std::nothrow) AudioContentInfo);
376 SysTryReturnResult(NID_CNT, pAudioContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pAudioContentInfo.");
378 pContentData = pAudioContentInfo->GetContentData();
379 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
381 pAudioContentData = pAudioContentInfo->GetAudioContentData();
382 SysTryReturnResult(NID_CNT, pAudioContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
384 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
385 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
387 r = _ContentUtility::FillAudioContentData(pMediaHandle.get(), pAudioContentData);
388 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillAudioContentData operation.");
390 // Shallow copy, adds just the pointer: not the element
391 r = pPlayListItemList->Add(*(pAudioContentInfo.release()));
392 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for __pFinalOutList.");
395 case MEDIA_CONTENT_TYPE_VIDEO:
396 pVideoContentInfo = std::unique_ptr<VideoContentInfo>(new (std::nothrow) VideoContentInfo);
397 SysTryReturnResult(NID_CNT, pVideoContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pVideoContentInfo.");
399 pContentData = pVideoContentInfo->GetContentData();
400 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
402 pVideoContentData = pVideoContentInfo->GetVideoContentData();
403 SysTryReturnResult(NID_CNT, pVideoContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
405 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
406 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
408 r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentData);
409 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillVideoContentData operation.");
411 // Shallow copy, adds just the pointer: not the element
412 r = pPlayListItemList->Add(*(pVideoContentInfo.release()));
413 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
416 case MEDIA_CONTENT_TYPE_OTHERS:
417 pOtherContentInfo = std::unique_ptr<OtherContentInfo>(new (std::nothrow) OtherContentInfo);
418 SysTryReturnResult(NID_CNT, pOtherContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pOtherContentInfo.");
420 pContentData = pOtherContentInfo->GetContentData();
421 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
423 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
424 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
426 // Shallow copy, adds just the pointer: not the element
427 r = pPlayListItemList->Add(*(pOtherContentInfo.release()));
428 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
441 _PlayListImpl::AddItemInternal(media_playlist_h playListHandle, const ContentId& contentId)
443 String uuidStr = L"";
444 int ret = MEDIA_CONTENT_ERROR_NONE;
445 result r = E_SUCCESS;
447 uuidStr = contentId.ToString();
448 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(uuidStr));
449 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
451 ret = media_playlist_add_media(playListHandle, pInputCond.get());
452 r = MapCoreErrorToNativeResult(ret);
453 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_add_media operation.");
455 ret = media_playlist_update_to_db(playListHandle);
456 r = MapCoreErrorToNativeResult(ret);
457 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
463 _PlayListImpl::AddItem(const Tizen::Base::String& playlistName, const ContentId& contentId)
465 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
466 media_playlist_h tempHandle = NULL;
468 result r = CreateFilter(playlistName);
469 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
471 tempHandle = pPlayListHandle.get();
472 r = GetPlayListHandle(&tempHandle);
473 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
475 r = AddItemInternal(tempHandle, contentId);
476 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
482 _PlayListImpl::AddItems(const Tizen::Base::String& playlistName, const Tizen::Base::Collection::IList& contentIdList)
484 int listCount = contentIdList.GetCount();
485 ContentId *pContentId = NULL;
486 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
487 media_playlist_h tempHandle = NULL;
489 result r = CreateFilter(playlistName);
490 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
492 tempHandle = pPlayListHandle.get();
493 r = GetPlayListHandle(&tempHandle);
494 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
496 for(int index = 0; index < listCount; index++)
498 pContentId = (ContentId*)contentIdList.GetAt(index);
499 r = AddItemInternal(tempHandle, *pContentId);
500 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
507 _PlayListImpl::RemoveItem(const ContentId& contentId)
509 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
510 media_playlist_h tempHandle = NULL;
511 int ret = MEDIA_CONTENT_ERROR_NONE;
512 std::unique_ptr<GList, GListDeleter> pItemList;
515 result r = CreateFilterUsingContentId(contentId);
516 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
518 tempHandle = pPlayListHandle.get();
519 r = GetPlayListHandle(&tempHandle);
520 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
522 if (tempHandle != NULL)
525 int playlistMemberId = 0;
527 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
528 r = MapCoreErrorToNativeResult(ret);
529 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
531 pTemp = pItemList.get();
532 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
533 result r = MapCoreErrorToNativeResult(ret);
534 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_media_from_db operation.");
538 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
540 ret = media_playlist_remove_media(tempHandle, playlistMemberId);
541 r = MapCoreErrorToNativeResult(ret);
542 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_remove_media operation.");
544 ret = media_playlist_update_to_db(tempHandle);
545 r = MapCoreErrorToNativeResult(ret);
546 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
554 _PlayListImpl::RemoveItems(const Tizen::Base::Collection::IList& contentIdList)
556 int listCount = contentIdList.GetCount();
557 ContentId *pContentId = NULL;
558 result r = E_SUCCESS;
560 for (int index = 0; index < listCount; index++)
562 pContentId = (ContentId*)contentIdList.GetAt(index);
563 r = RemoveItem(*pContentId);
570 _PlayListImpl::SetPlayListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
572 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
573 media_playlist_h tempHandle = NULL;
574 int ret = MEDIA_CONTENT_ERROR_NONE;
576 result r = CreateFilter(oldName);
577 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
579 tempHandle = pPlayListHandle.get();
580 r = GetPlayListHandle(&tempHandle);
581 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
583 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(newName));
584 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
586 ret = media_playlist_set_name(tempHandle, pInputCond.get());
587 r = MapCoreErrorToNativeResult(ret);
588 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_name operation.");
590 ret = media_playlist_update_to_db(tempHandle);
591 r = MapCoreErrorToNativeResult(ret);
592 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
597 _PlayListImpl::SetorGetPlayOrder(const ContentId& contentId, int& playOrder, bool isSet) const
599 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
600 media_playlist_h tempHandle = NULL;
601 std::unique_ptr<GList, GListDeleter> pItemList;
603 int ret = MEDIA_CONTENT_ERROR_NONE;
605 SysTryReturnResult(NID_CNT, contentId != UuId::GetInvalidUuId(), E_INVALID_ARG, "The specified parameter is invalid.");
607 result r = CreateFilterUsingContentId(contentId);
608 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
610 tempHandle = pPlayListHandle.get();
611 r = GetPlayListHandle(&tempHandle);
612 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
614 if (tempHandle != NULL)
617 int playlistMemberId = 0;
619 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
620 r = MapCoreErrorToNativeResult(ret);
621 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
623 pTemp = pItemList.get();
624 int ret = media_playlist_foreach_media_from_db(playlistId, *(__pFilterHandle.get()), PlaylistImplItemCb, &pTemp);
625 result r = MapCoreErrorToNativeResult(ret);
626 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "media_playlist_foreach_media_from_db failed.");
630 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
634 ret = media_playlist_set_play_order(tempHandle, playlistMemberId, playOrder);
635 r = MapCoreErrorToNativeResult(ret);
636 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
638 ret = media_playlist_update_to_db(tempHandle);
639 r = MapCoreErrorToNativeResult(ret);
640 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
644 ret = media_playlist_get_play_order(tempHandle, playlistMemberId, &playOrder);
645 r = MapCoreErrorToNativeResult(ret);
646 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
654 _PlayListImpl::SetPlayOrder(const ContentId& contentId, const ContentId& nextContentId)
656 int playOrder = GetPlayOrder(contentId) + 1;
657 result r = GetLastResult();
658 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform GetPlayOrder operation.");
660 r = SetorGetPlayOrder(nextContentId, playOrder, true);
666 _PlayListImpl::GetPlayOrder(const ContentId& contentId) const
670 result r = SetorGetPlayOrder(contentId, playOrder, false);
677 _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
679 std::unique_ptr<GList, GListDeleter> pItemList;
682 pTemp = pItemList.get();
683 int ret = media_playlist_foreach_playlist_from_db(*(__pFilterHandle.get()), MediaPlayListImplCb, &pTemp);
684 result r = MapCoreErrorToNativeResult(ret);
685 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_playlist_from_db operation.");
689 r = E_INVALID_ARG; // No match found.
693 *pPlayListHandle = static_cast< media_playlist_h >(g_list_nth_data(pTemp, 0));
700 _PlayListImpl::MapCoreErrorToNativeResult(int reason) const
702 result r = E_SUCCESS;
706 case MEDIA_CONTENT_ERROR_NONE:
710 case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
712 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_INVALID_PARAMETER");
715 case MEDIA_CONTENT_ERROR_DB_FAILED:
717 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
720 case MEDIA_CONTENT_ERROR_DB_BUSY:
722 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
726 SysLog(NID_CNT, "default");
734 _PlayListImpl::MapCoreDatabaseErrorToNativeResult(int reason) const
736 result r = E_SUCCESS;
740 case MEDIA_CONTENT_ERROR_NONE:
744 case MEDIA_CONTENT_ERROR_DB_FAILED:
746 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
749 case MEDIA_CONTENT_ERROR_DB_BUSY:
751 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
755 SysLog(NID_CNT, "default");
763 MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData)
765 media_playlist_h newPlayListHandle = NULL;
766 media_playlist_clone(&newPlayListHandle, playlistHandle);
768 GList** pList = (GList**)pUserData;
769 *pList = g_list_append(*pList, newPlayListHandle);
774 // This callback appends List with playlistMemberId's
776 PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData)
778 GList** pList = (GList**)pUserData;
779 *pList = g_list_append(*pList, (gpointer)playlistMemberId);
784 // This callback appends List with media handles
786 PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData)
788 media_info_h new_media = NULL;
789 media_info_clone(&new_media, media);
791 GList** pList = (GList**)pUserData;
792 *pList = g_list_append(*pList, new_media);