2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 * @file FCnt_PlayLisImpl.cpp
18 * @brief This is the implementation file for the %_PlayListImpl class.
20 * This file contains implementation of the %_PlayListImpl class.
23 #include <FBaseSysLog.h>
24 #include <FBaseInteger.h>
25 #include <FBaseLongLong.h>
26 #include <FBaseFloat.h>
27 #include <FCntPlayList.h>
28 #include <FBase_StringConverter.h>
29 #include <FCnt_PlayListImpl.h>
30 #include <FCnt_ContentUtility.h>
32 using namespace Tizen::Base;
33 using namespace Tizen::Base::Collection;
34 using namespace Tizen::Io;
36 namespace Tizen { namespace Content
38 // Declaration for Callback function registered to playlist details
39 bool MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData);
41 // Declaration for Callback function registered to playlist items details
42 bool PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData);
44 // Declaration for Callback function registered to playlist items details
45 bool PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData);
47 _PlayListImpl::_PlayListImpl(void)
49 , __pFilterHandle(NULL)
55 //(disconnects the DB connection)
56 _PlayListImpl::~_PlayListImpl(void)
58 int ret = MEDIA_CONTENT_ERROR_NONE;
61 ret = media_content_disconnect();
62 r = MapCoreErrorToNativeResult(ret);
63 SysTryLog(r == E_SUCCESS, "[%s] Propagating for media_content_disconnect", GetErrorMessage(r));
65 SysLog(NID_CNT, "media_content_disconnect result[%d].", ret);
69 _PlayListImpl::GetInstance(PlayList& playList)
71 return (&playList != null) ? playList.__pImpl : null;
75 _PlayListImpl::GetInstance(const PlayList& playList)
77 return (&playList != null) ? playList.__pImpl : null;
81 _PlayListImpl::Construct(const Tizen::Base::String& playListName, bool isAdd)
83 int ret = media_content_connect();
84 result r = MapCoreErrorToNativeResult(ret);
85 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Propagating for media_content_connect");
87 SysLog(NID_CNT, "media_content_connect result[%d].", ret);
89 __playListName = playListName;
93 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(playListName));
94 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
96 media_playlist_h tempHandle = null;
97 ret = media_playlist_insert_to_db(pInputCond.get(), &tempHandle);
98 r = MapCoreErrorToNativeResult(ret);
100 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle(tempHandle);
101 SysTryReturnResult(NID_CNT, pPlaylistHandle != null, E_OUT_OF_MEMORY, "pPlaylistHandle is null.");
108 _PlayListImpl::CreateFilterUsingContentId(const ContentId& contentId) const
110 std::unique_ptr<char[]> pInputCond;
111 filter_h tempFilter = NULL;
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(&tempFilter);
118 result r = MapCoreErrorToNativeResult(ret);
119 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
121 std::unique_ptr<filter_s, FilterHandleDeleter> pFilterHandle(tempFilter);
122 SysTryReturnResult(NID_CNT, pFilterHandle != null, E_OUT_OF_MEMORY, "pFilterHandle is null.");
124 uuidStr = contentId.ToString();
125 r = uuidStr.Insert('"', 0);
126 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
127 r = uuidStr.Insert('"', uuidStr.GetLength());
128 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for uuidStr.");
130 r = inputCondition.Append(uuidStr);
131 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
133 playListName = __playListName;
134 r = playListName.Insert('"', 0);
135 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
136 r = playListName.Insert('"', playListName.GetLength());
137 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for playListName.");
139 r = inputListNameCondition.Append(playListName);
140 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputListNameCondition.");
142 r = inputCondition.Append(" AND ");
143 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
145 r = inputCondition.Append(inputListNameCondition);
146 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform append operation.");
148 if (!inputCondition.IsEmpty())
150 //CopyToCharArrayN: utility function, converts a osp string to char*
151 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
152 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
154 SysLog(NID_CNT, "pInputCond = %s", pInputCond.get());
156 ret = media_filter_set_condition(pFilterHandle.get(), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
157 r = MapCoreErrorToNativeResult(ret);
158 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
161 __pFilterHandle.reset(pFilterHandle.release());
167 _PlayListImpl::CreateFilter(const Tizen::Base::String& playListName)const
169 std::unique_ptr<char[]> pInputCond;
170 String inputCondition = L"PLAYLIST_NAME = ";
171 String nameExpr(playListName);
172 filter_h tempFilter = NULL;
174 int ret = media_filter_create(&tempFilter);
175 result r = MapCoreErrorToNativeResult(ret);
176 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_create operation.");
178 std::unique_ptr<filter_s, FilterHandleDeleter> pFilterHandle(tempFilter);
179 SysTryReturnResult(NID_CNT, pFilterHandle != null, E_OUT_OF_MEMORY, "pFilterHandle is null.");
181 if (!nameExpr.IsEmpty())
183 r = nameExpr.Replace("\'", "''");
184 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Replace operation for nameExpr.");
186 r = nameExpr.Insert('\'', 0);
187 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
189 r = nameExpr.Insert('\'', nameExpr.GetLength());
190 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Insert operation for nameExpr.");
192 r = inputCondition.Append(nameExpr);
193 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform Append operation for inputCondition.");
196 if (!inputCondition.IsEmpty())
198 //CopyToCharArrayN: utility function, converts a osp string to char*
199 pInputCond = std::unique_ptr<char[]>(_StringConverter::CopyToCharArrayN(inputCondition));
200 SysTryReturnResult(NID_CNT, pInputCond, E_SYSTEM, "pInputCond is NULL.");
202 SysLog(NID_CNT, "pInputCond is [%s]", pInputCond.get());
204 ret = media_filter_set_condition(pFilterHandle.get(), pInputCond.get(), MEDIA_CONTENT_COLLATE_DEFAULT);
205 r = MapCoreErrorToNativeResult(ret);
206 SysTryReturnResult(NID_CNT, ret == MEDIA_CONTENT_ERROR_NONE, r, "Failed to perform media_filter_set_condition operation.");
209 __pFilterHandle.reset(pFilterHandle.release());
215 _PlayListImpl::GetPlayListItemCount(const Tizen::Base::String& playlistName) const
217 std::unique_ptr<GList, GListDeleter> pItemList;
219 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
221 int ret = MEDIA_CONTENT_ERROR_NONE;
222 int playlistItemCount = 0;
224 result r = CreateFilter(playlistName);
225 SysTryReturn(NID_CNT, r == E_SUCCESS, 0, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
227 pTemp = pItemList.get();
228 ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
229 r = MapCoreDatabaseErrorToNativeResult(ret);
230 SysTryReturn(NID_CNT, r == E_SUCCESS , 0, r,
231 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
235 r = E_DATABASE; // No match found.
239 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
240 if (pPlaylistHandle.get() != NULL)
242 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
243 r = MapCoreDatabaseErrorToNativeResult(ret);
244 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
246 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
247 r = MapCoreDatabaseErrorToNativeResult(ret);
248 SysTryReturn(NID_CNT, !IsFailed(r), 0, r, "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
250 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
255 return playlistItemCount;
258 Tizen::Base::Collection::IList*
259 _PlayListImpl::GetContentInfoListN(const Tizen::Base::String& playlistName) const
261 std::unique_ptr<GList, GListDeleter> pItemList;
263 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlaylistHandle;
264 std::unique_ptr<ArrayList, AllElementsDeleter> pPlayListItemList;
266 int ret = MEDIA_CONTENT_ERROR_NONE;
268 result r = CreateFilter(playlistName);
269 SysTryReturn(NID_CNT, r == E_SUCCESS, NULL, E_DATABASE, "[E_DATABASE] Failed to perform CreateFilter operation.");
271 pTemp = pItemList.get();
272 ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
273 r = MapCoreDatabaseErrorToNativeResult(ret);
274 SysTryReturn(NID_CNT, r == E_SUCCESS , NULL, r,
275 "[%s] Failed to perform media_playlist_foreach_playlist_from_db operation.", GetErrorMessage(r));
279 r = E_DATABASE; // No match found.
283 pPlaylistHandle.reset(static_cast<media_playlist_h>(g_list_nth_data(pTemp, 0)));
284 if (pPlaylistHandle.get() != NULL)
286 int playlistItemCount = 0;
288 ret = media_playlist_get_playlist_id(pPlaylistHandle.get(), &playlistId);
289 r = MapCoreDatabaseErrorToNativeResult(ret);
290 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
291 "[%s] Failed to perform media_playlist_get_playlist_id operation.", GetErrorMessage(r));
293 ret = media_playlist_get_media_count_from_db(playlistId, NULL, &playlistItemCount);
294 r = MapCoreDatabaseErrorToNativeResult(ret);
295 SysTryReturn(NID_CNT, !IsFailed(r), NULL, r,
296 "[%s] Failed to perform media_playlist_get_media_count_from_db operation.", GetErrorMessage(r));
298 SysLog(NID_CNT, "playlistItemCount is [%d] for media_playlist_get_media_count_from_db", playlistItemCount);
300 pPlayListItemList = std::unique_ptr<ArrayList, AllElementsDeleter>(new (std::nothrow) ArrayList());
301 SysTryReturn(NID_CNT, pPlayListItemList != null, NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] FinalOutList is null.");
303 r = pPlayListItemList->Construct();
304 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Failed to construct pPlayListItemList ArrayList.");
306 if (playlistItemCount > 0)
308 r = FillPlayListInfo(playlistId, pPlayListItemList.get());
309 SysTryReturn(NID_CNT, !IsFailed(r), NULL, E_DATABASE, "Failed to perform FillPlayListInfo operation.");
315 return pPlayListItemList.release();
319 _PlayListImpl::FillPlayListInfo(int playlistId, ArrayList* pPlayListItemList) const
321 std::unique_ptr<GList, GListDeleter> pItemList;
323 std::unique_ptr<media_info_s, MediaHandleDeleter> pMediaHandle;
325 ContentInfo::_ContentData* pContentData = null;
326 ImageContentInfo::_ImageContentData* pImageContentData = null;
327 AudioContentInfo::_AudioContentData* pAudioContentData = null;
328 VideoContentInfo::_VideoContentData* pVideoContentData = null;
330 std::unique_ptr<ImageContentInfo> pImageContentInfo;
331 std::unique_ptr<AudioContentInfo> pAudioContentInfo;
332 std::unique_ptr<VideoContentInfo> pVideoContentInfo;
333 std::unique_ptr<OtherContentInfo> pOtherContentInfo;
335 //SysTryReturn(NID_CNT, pPlayListItemList != NULL , r, r, "[E_SUCCESS] pPlayListItemList is null");
337 pTemp = pItemList.get();
338 int ret = media_playlist_foreach_media_from_db(playlistId, NULL, PlaylistItemsCb, &pTemp);
339 result r = MapCoreErrorToNativeResult(ret);
340 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_foreach_media_from_db operation.");
342 media_content_type_e mediaType = MEDIA_CONTENT_TYPE_OTHERS;
346 for (int idx = 0; idx < (int)g_list_length(pTemp); idx++)
348 pMediaHandle.reset(static_cast<media_info_h>(g_list_nth_data(pTemp, idx)));
350 ret = media_info_get_media_type(pMediaHandle.get(), &mediaType);
351 r = MapCoreErrorToNativeResult(ret);
352 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_info_get_media_type.");
356 case MEDIA_CONTENT_TYPE_IMAGE:
357 pImageContentInfo = std::unique_ptr<ImageContentInfo>(new (std::nothrow) ImageContentInfo);
358 SysTryReturnResult(NID_CNT, pImageContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pImageContentInfo.");
360 pContentData = pImageContentInfo->GetContentData();
361 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
363 pImageContentData = pImageContentInfo->GetImageContentData();
364 SysTryReturnResult(NID_CNT, pImageContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
366 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
367 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
369 r = _ContentUtility::FillImageContentData(pMediaHandle.get(), pImageContentData);
370 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform GetDataFromImageTable operation.");
372 // Shallow copy, adds just the pointer: not the element
373 r = pPlayListItemList->Add(*(pImageContentInfo.release()));
374 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
377 case MEDIA_CONTENT_TYPE_MUSIC:
379 case MEDIA_CONTENT_TYPE_SOUND:
380 pAudioContentInfo = std::unique_ptr<AudioContentInfo>(new (std::nothrow) AudioContentInfo);
381 SysTryReturnResult(NID_CNT, pAudioContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pAudioContentInfo.");
383 pContentData = pAudioContentInfo->GetContentData();
384 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
386 pAudioContentData = pAudioContentInfo->GetAudioContentData();
387 SysTryReturnResult(NID_CNT, pAudioContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
389 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
390 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
392 r = _ContentUtility::FillAudioContentData(pMediaHandle.get(), pAudioContentData);
393 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillAudioContentData operation.");
395 // Shallow copy, adds just the pointer: not the element
396 r = pPlayListItemList->Add(*(pAudioContentInfo.release()));
397 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for __pFinalOutList.");
400 case MEDIA_CONTENT_TYPE_VIDEO:
401 pVideoContentInfo = std::unique_ptr<VideoContentInfo>(new (std::nothrow) VideoContentInfo);
402 SysTryReturnResult(NID_CNT, pVideoContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pVideoContentInfo.");
404 pContentData = pVideoContentInfo->GetContentData();
405 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
407 pVideoContentData = pVideoContentInfo->GetVideoContentData();
408 SysTryReturnResult(NID_CNT, pVideoContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
410 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
411 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
413 r = _ContentUtility::FillVideoContentData(pMediaHandle.get(), pVideoContentData);
414 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillVideoContentData operation.");
416 // Shallow copy, adds just the pointer: not the element
417 r = pPlayListItemList->Add(*(pVideoContentInfo.release()));
418 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
421 case MEDIA_CONTENT_TYPE_OTHERS:
422 pOtherContentInfo = std::unique_ptr<OtherContentInfo>(new (std::nothrow) OtherContentInfo);
423 SysTryReturnResult(NID_CNT, pOtherContentInfo.get() != null, E_OUT_OF_MEMORY, "Failed to create pOtherContentInfo.");
425 pContentData = pOtherContentInfo->GetContentData();
426 SysTryReturnResult(NID_CNT, pContentData != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
428 r = _ContentUtility::FillContentData(pMediaHandle.get(), pContentData);
429 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform FillContentData operation.");
431 // Shallow copy, adds just the pointer: not the element
432 r = pPlayListItemList->Add(*(pOtherContentInfo.release()));
433 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform Add operation for ArrayList.");
446 _PlayListImpl::AddItemInternal(media_playlist_h playListHandle, const ContentId& contentId)
448 String uuidStr = L"";
449 int ret = MEDIA_CONTENT_ERROR_NONE;
450 result r = E_SUCCESS;
452 uuidStr = contentId.ToString();
453 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(uuidStr));
454 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
456 ret = media_playlist_add_media(playListHandle, pInputCond.get());
457 r = MapCoreErrorToNativeResult(ret);
458 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_add_media operation.");
460 ret = media_playlist_update_to_db(playListHandle);
461 r = MapCoreErrorToNativeResult(ret);
462 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
468 _PlayListImpl::AddItem(const Tizen::Base::String& playlistName, const ContentId& contentId)
470 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
471 media_playlist_h tempHandle = NULL;
473 result r = CreateFilter(playlistName);
474 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
476 tempHandle = pPlayListHandle.get();
477 r = GetPlayListHandle(&tempHandle);
478 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
480 r = AddItemInternal(tempHandle, contentId);
481 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
487 _PlayListImpl::AddItems(const Tizen::Base::String& playlistName, const Tizen::Base::Collection::IList& contentIdList)
489 int listCount = contentIdList.GetCount();
490 ContentId *pContentId = NULL;
491 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
492 media_playlist_h tempHandle = NULL;
494 result r = CreateFilter(playlistName);
495 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
497 tempHandle = pPlayListHandle.get();
498 r = GetPlayListHandle(&tempHandle);
499 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
501 for(int index = 0; index < listCount; index++)
503 pContentId = (ContentId*)contentIdList.GetAt(index);
504 r = AddItemInternal(tempHandle, *pContentId);
505 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform AddItemInternal operation.");
512 _PlayListImpl::RemoveItem(const ContentId& contentId)
514 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
515 media_playlist_h tempHandle = NULL;
516 int ret = MEDIA_CONTENT_ERROR_NONE;
517 std::unique_ptr<GList, GListDeleter> pItemList;
520 result r = CreateFilterUsingContentId(contentId);
521 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
523 tempHandle = pPlayListHandle.get();
524 r = GetPlayListHandle(&tempHandle);
525 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
527 if (tempHandle != NULL)
530 int playlistMemberId = 0;
532 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
533 r = MapCoreErrorToNativeResult(ret);
534 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
536 pTemp = pItemList.get();
537 int ret = media_playlist_foreach_media_from_db(playlistId, __pFilterHandle.get(), PlaylistImplItemCb, &pTemp);
538 result r = MapCoreErrorToNativeResult(ret);
539 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_media_from_db operation.");
543 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
545 ret = media_playlist_remove_media(tempHandle, playlistMemberId);
546 r = MapCoreErrorToNativeResult(ret);
547 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_remove_media operation.");
549 ret = media_playlist_update_to_db(tempHandle);
550 r = MapCoreErrorToNativeResult(ret);
551 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
559 _PlayListImpl::RemoveItems(const Tizen::Base::Collection::IList& contentIdList)
561 int listCount = contentIdList.GetCount();
562 ContentId *pContentId = NULL;
563 result r = E_SUCCESS;
565 for (int index = 0; index < listCount; index++)
567 pContentId = (ContentId*)contentIdList.GetAt(index);
568 r = RemoveItem(*pContentId);
575 _PlayListImpl::SetPlayListName(const Tizen::Base::String& oldName, const Tizen::Base::String& newName)
577 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
578 media_playlist_h tempHandle = NULL;
579 int ret = MEDIA_CONTENT_ERROR_NONE;
581 result r = CreateFilter(oldName);
582 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilter operation.");
584 tempHandle = pPlayListHandle.get();
585 r = GetPlayListHandle(&tempHandle);
586 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
588 std::unique_ptr<char[]> pInputCond(_StringConverter::CopyToCharArrayN(newName));
589 SysTryReturnResult(NID_CNT, pInputCond, E_OUT_OF_MEMORY, "The memory is insufficient.");
591 ret = media_playlist_set_name(tempHandle, pInputCond.get());
592 r = MapCoreErrorToNativeResult(ret);
593 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_name operation.");
595 ret = media_playlist_update_to_db(tempHandle);
596 r = MapCoreErrorToNativeResult(ret);
597 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
602 _PlayListImpl::SetorGetPlayOrder(const ContentId& contentId, int& playOrder, bool isSet) const
604 std::unique_ptr<media_playlist_s, PlayListHandleDeleter> pPlayListHandle;
605 media_playlist_h tempHandle = NULL;
606 std::unique_ptr<GList, GListDeleter> pItemList;
608 int ret = MEDIA_CONTENT_ERROR_NONE;
610 SysTryReturnResult(NID_CNT, contentId != UuId::GetInvalidUuId(), E_INVALID_ARG, "The specified parameter is invalid.");
612 result r = CreateFilterUsingContentId(contentId);
613 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform CreateFilterUsingContentId operation.");
615 tempHandle = pPlayListHandle.get();
616 r = GetPlayListHandle(&tempHandle);
617 SysTryReturnResult(NID_CNT, r == E_SUCCESS, E_DATABASE, "Failed to perform GetPlayListHandle operation.");
619 if (tempHandle != NULL)
622 int playlistMemberId = 0;
624 ret = media_playlist_get_playlist_id(tempHandle, &playlistId);
625 r = MapCoreErrorToNativeResult(ret);
626 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_get_playlist_id operation.");
628 pTemp = pItemList.get();
629 int ret = media_playlist_foreach_media_from_db(playlistId, __pFilterHandle.get(), PlaylistImplItemCb, &pTemp);
630 result r = MapCoreErrorToNativeResult(ret);
631 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "media_playlist_foreach_media_from_db failed.");
635 playlistMemberId = (int)g_list_nth_data(pTemp, 0);
639 ret = media_playlist_set_play_order(tempHandle, playlistMemberId, playOrder);
640 r = MapCoreErrorToNativeResult(ret);
641 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
643 ret = media_playlist_update_to_db(tempHandle);
644 r = MapCoreErrorToNativeResult(ret);
645 SysTryReturnResult(NID_CNT, !IsFailed(r), r, "Failed to perform media_playlist_update_to_db operation.");
649 ret = media_playlist_get_play_order(tempHandle, playlistMemberId, &playOrder);
650 r = MapCoreErrorToNativeResult(ret);
651 SysTryReturnResult(NID_CNT, r == E_SUCCESS, r, "Failed to perform media_playlist_set_play_order operation.");
659 _PlayListImpl::SetPlayOrder(const ContentId& contentId, const ContentId& nextContentId)
661 int playOrder = GetPlayOrder(contentId) + 1;
662 result r = GetLastResult();
663 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform GetPlayOrder operation.");
665 r = SetorGetPlayOrder(nextContentId, playOrder, true);
671 _PlayListImpl::GetPlayOrder(const ContentId& contentId) const
675 result r = SetorGetPlayOrder(contentId, playOrder, false);
682 _PlayListImpl::GetPlayListHandle(media_playlist_h* pPlayListHandle) const
684 std::unique_ptr<GList, GListDeleter> pItemList;
687 pTemp = pItemList.get();
688 int ret = media_playlist_foreach_playlist_from_db(__pFilterHandle.get(), MediaPlayListImplCb, &pTemp);
689 result r = MapCoreErrorToNativeResult(ret);
690 SysTryReturnResult(NID_CNT, r == E_SUCCESS , r, "Failed to perform media_playlist_foreach_playlist_from_db operation.");
694 r = E_INVALID_ARG; // No match found.
698 *pPlayListHandle = static_cast< media_playlist_h >(g_list_nth_data(pTemp, 0));
705 _PlayListImpl::MapCoreErrorToNativeResult(int reason) const
707 result r = E_SUCCESS;
711 case MEDIA_CONTENT_ERROR_NONE:
715 case MEDIA_CONTENT_ERROR_INVALID_PARAMETER:
717 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_INVALID_PARAMETER");
720 case MEDIA_CONTENT_ERROR_DB_FAILED:
722 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
725 case MEDIA_CONTENT_ERROR_DB_BUSY:
727 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
731 SysLog(NID_CNT, "default");
739 _PlayListImpl::MapCoreDatabaseErrorToNativeResult(int reason) const
741 result r = E_SUCCESS;
745 case MEDIA_CONTENT_ERROR_NONE:
749 case MEDIA_CONTENT_ERROR_DB_FAILED:
751 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_FAILED");
754 case MEDIA_CONTENT_ERROR_DB_BUSY:
756 SysLog(NID_CNT, "MEDIA_CONTENT_ERROR_DB_BUSY");
760 SysLog(NID_CNT, "default");
768 MediaPlayListImplCb(media_playlist_h playlistHandle, void *pUserData)
770 media_playlist_h newPlayListHandle = NULL;
771 media_playlist_clone(&newPlayListHandle, playlistHandle);
773 GList** pList = (GList**)pUserData;
774 *pList = g_list_append(*pList, newPlayListHandle);
779 // This callback appends List with playlistMemberId's
781 PlaylistImplItemCb(int playlistMemberId, media_info_h media, void *pUserData)
783 GList** pList = (GList**)pUserData;
784 *pList = g_list_append(*pList, (gpointer)playlistMemberId);
789 // This callback appends List with media handles
791 PlaylistItemsCb(int playlistId, media_info_h media, void *pUserData)
793 media_info_h new_media = NULL;
794 media_info_clone(&new_media, media);
796 GList** pList = (GList**)pUserData;
797 *pList = g_list_append(*pList, new_media);