2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
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.
18 #include <media_content.h>
25 #include "song_info.h"
26 #include "album_info.h"
27 #include "category_info.h"
28 #include "folder_info.h"
29 #include "mediadata.h"
32 #define MEDIA_CONDITION_MUSIC "(MEDIA_TYPE=3)"
33 #define MEDIA_CONDITION_INTERNAL "(MEDIA_STORAGE_TYPE=0)"
34 #define MEDIA_CONDITION_EXTERNAL "(MEDIA_STORAGE_TYPE=1)"
36 #define MUSIC_STR_UNKNOWN N_("Unknown")
48 Eina_List *folderlist;
49 Eina_List *folder_songlist;
51 Eina_List *album_songlist;
52 Eina_List *playlistslist;
53 Eina_List *playlist_songlist;
54 Eina_List *artistlist;
63 memset(this, 0, sizeof(SMediadata));
68 bool CMediadata::sm_CbTotalDuration(media_info_h md_h, void *dt)
72 int *tdur = (int *)dt;
77 if (media_info_get_audio(md_h, &audio_h) != MEDIA_CONTENT_ERROR_NONE) {
78 _ERR("Media info get audio error");
83 if (audio_meta_get_duration(audio_h, &dur) != MEDIA_CONTENT_ERROR_NONE)
84 _ERR("audio duration get error");
86 audio_meta_destroy(audio_h);
94 bool CMediadata::sm_CbEachMediaData(media_info_h md_h, void *dt)
96 CMediadata *root = (CMediadata *)dt;
101 root->m_HandleEachMediaData(md_h);
107 bool CMediadata::sm_CbEachFolderData(media_folder_h folder_h, void *dt)
109 CMediadata *root = (CMediadata *)dt;
114 root->m_HandleEachFolderData(folder_h);
120 bool CMediadata::sm_CbEachAlbumData(media_album_h album_h, void *dt)
122 CMediadata *root = (CMediadata *)dt;
127 root->m_HandleEachAlbumData(album_h);
133 bool CMediadata::sm_CbEachPlaylist(media_playlist_h ph, void *dt)
135 CMediadata *root = (CMediadata *)dt;
140 root->m_HandleEachPlaylist(ph);
146 bool CMediadata::sm_CbPlaylistMember(int memb_id, media_info_h mdh, void *dt)
148 CCategoryInfo *catinfo = (CCategoryInfo *)dt;
149 CCategoryInfo::CListMember *member = NULL;
152 if (!mdh || !catinfo)
155 if (media_info_get_media_id(mdh, &id) != MEDIA_CONTENT_ERROR_NONE) {
156 _ERR(" Failed to get media id ");
161 if (!catinfo->ThumbnailPath()) {
162 if (media_info_get_thumbnail_path(mdh, &thumb) != MEDIA_CONTENT_ERROR_NONE)
163 _ERR("Media thumbnail path Fetch error");
164 catinfo->SetThumbnailPath(thumb);
167 member = new CCategoryInfo::CListMember;
173 member->memberId = memb_id;
174 member->mediaId = id;
176 catinfo->SetMember(member);
182 bool CMediadata::sm_CbPlaylist(media_playlist_h ph, void* dt)
184 Eina_List **list = (Eina_List **)dt;
185 SCtxtPlaylistItem *item;
190 item = (SCtxtPlaylistItem *)calloc(1, sizeof(*item));
194 if (media_playlist_get_name(ph, (char **)&(item->name)) !=
195 MEDIA_CONTENT_ERROR_NONE) {
196 _ERR(" Failed to read playlist name ");
201 if (media_playlist_get_playlist_id(ph, &(item->id)) !=
202 MEDIA_CONTENT_ERROR_NONE) {
203 _ERR(" Failed to read playlist name ");
209 *list = eina_list_append(*list, item);
215 bool CMediadata::m_HandleEachMediaData(media_info_h md_h)
217 CSongInfo *sinfo = NULL;
218 audio_meta_h audio_h = NULL;
223 sinfo = new CSongInfo;
225 _ERR("Memory alloc failed");
229 ret = sinfo->Create();
231 _ERR("CSongInfo creation failed");
236 if (media_info_get_file_path(md_h, &tmpStr)
237 != MEDIA_CONTENT_ERROR_NONE) {
238 _ERR("Media file path Fetch error");
243 sinfo->SetPath(tmpStr);
245 if (media_info_get_thumbnail_path(md_h, &tmpStr) !=
246 MEDIA_CONTENT_ERROR_NONE)
247 _ERR("Media thumbnail path Fetch error");
248 sinfo->SetThumbnailPath(tmpStr);
250 if (media_info_get_media_type(md_h,
251 (media_content_type_e *)&tmpValue) !=
252 MEDIA_CONTENT_ERROR_NONE)
253 _ERR("Media type Fetch error");
254 sinfo->SetType(tmpValue);
256 if (media_info_get_audio(md_h, &audio_h) !=
257 MEDIA_CONTENT_ERROR_NONE) {
258 _ERR("Media info get audio error");
264 if (audio_meta_get_media_id(audio_h, &tmpStr) !=
265 MEDIA_CONTENT_ERROR_NONE) {
266 _ERR("Media ID Fetch error");
267 audio_meta_destroy(audio_h);
272 sinfo->SetId(tmpStr);
274 if (media_info_get_title(md_h, &tmpStr) !=
275 MEDIA_CONTENT_ERROR_NONE)
276 _ERR("audio title get error");
277 sinfo->SetName(tmpStr);
279 if (audio_meta_get_artist(audio_h, &tmpStr) !=
280 MEDIA_CONTENT_ERROR_NONE)
281 _ERR("audio artist get error");
282 sinfo->SetArtist(tmpStr);
284 if (audio_meta_get_album(audio_h, &tmpStr) !=
285 MEDIA_CONTENT_ERROR_NONE)
286 _ERR("audio album get error");
287 sinfo->SetAlbum(tmpStr);
289 if (audio_meta_get_genre(audio_h, &tmpStr) !=
290 MEDIA_CONTENT_ERROR_NONE)
291 _ERR("audio genre get error");
292 sinfo->SetGenre(tmpStr);
294 if (audio_meta_get_composer(audio_h, &tmpStr) !=
295 MEDIA_CONTENT_ERROR_NONE)
296 _ERR("audio composer get error");
297 sinfo->SetComposer(tmpStr);
299 if (audio_meta_get_duration(audio_h, &tmpValue) !=
300 MEDIA_CONTENT_ERROR_NONE)
301 _ERR("audio duration get error");
302 sinfo->SetDuration(tmpValue);
304 audio_meta_destroy(audio_h);
306 switch (m->slist_type) {
308 m->folder_songlist = eina_list_append(
309 m->folder_songlist, sinfo);
313 m->album_songlist = eina_list_append(
314 m->album_songlist, sinfo);
317 case E_PLAYLIST_SONGS:
318 sinfo->SetMemberId(m->member_id);
319 m->playlist_songlist = eina_list_append(
320 m->playlist_songlist, sinfo);
329 m->songlist = eina_list_append(m->songlist, sinfo);
336 bool CMediadata::m_HandleEachFolderData(media_folder_h folder_h)
338 CFolderInfo *finfo = NULL;
343 finfo = new CFolderInfo;
345 _ERR("Memory alloc failed");
349 ret = finfo->Create();
351 _ERR("CFolderInfo creation failed");
356 if (media_folder_get_folder_id(folder_h, &tmpStr) !=
357 MEDIA_CONTENT_ERROR_NONE) {
358 _ERR("Folder ID Fetch error");
363 finfo->SetId(tmpStr);
365 if (media_folder_get_media_count_from_db(finfo->Id(),
366 m->filter, &tmpValue) !=
367 MEDIA_CONTENT_ERROR_NONE) {
368 _ERR("Folder media count Fetch error");
373 finfo->SetCount(tmpValue);
375 if (media_folder_foreach_media_from_db(finfo->Id(), m->filter,
376 sm_CbTotalDuration, &tmpValue) !=
377 MEDIA_CONTENT_ERROR_NONE) {
378 _ERR("Folder media count Fetch error");
383 finfo->SetDuration(tmpValue);
385 if (media_folder_get_name(folder_h, &tmpStr) !=
386 MEDIA_CONTENT_ERROR_NONE) {
387 _ERR("folder name Fetch error");
392 finfo->SetName(tmpStr);
394 m->folderlist = eina_list_append(m->folderlist, finfo);
399 bool CMediadata::m_HandleEachAlbumData(media_album_h album_h)
401 CAlbumInfo *alinfo = NULL;
402 CSongInfo *sinfo = NULL;
409 alinfo = new CAlbumInfo;
411 _ERR("Memory alloc failed");
415 ret = alinfo->Create();
417 _ERR("CAlbumInfo creation failed");
422 if (media_album_get_album_id(album_h, &tmpValue) !=
423 MEDIA_CONTENT_ERROR_NONE) {
424 _ERR("Album ID Fetch error");
429 alinfo->SetAlbumId(tmpValue);
431 if (media_album_get_name(album_h, &tmpStr) !=
432 MEDIA_CONTENT_ERROR_NONE) {
433 _ERR("Album name Fetch error");
438 alinfo->SetName(tmpStr);
440 if (media_album_get_artist(album_h, &tmpStr) !=
441 MEDIA_CONTENT_ERROR_NONE) {
442 _ERR("Album artist Fetch error");
447 alinfo->SetArtist(tmpStr);
449 if (media_album_get_media_count_from_db(alinfo->AlbumId(), m->filter, &tmpValue)) {
450 _ERR("Album artist Fetch error");
455 alinfo->SetSongCount(tmpValue);
457 if (m->album_songlist)
458 m_DeleteAlbumSongList();
460 m_GetAlbumSongList(alinfo);
462 EINA_LIST_FOREACH(m->album_songlist, l, obj) {
463 sinfo = (CSongInfo *)obj;
464 tmpStr = sinfo->Genre();
466 alinfo->SetGenre(tmpStr);
471 EINA_LIST_FOREACH(m->album_songlist, l, obj) {
472 sinfo = (CSongInfo *)obj;
473 tmpStr = sinfo->ThumbnailPath();
475 alinfo->SetThumbnailPath(tmpStr);
480 m->albumlist = eina_list_append(m->albumlist, alinfo);
485 bool CMediadata::m_HandleEachPlaylist(media_playlist_h ph)
487 CCategoryInfo *catinfo = NULL;
495 catinfo = new CCategoryInfo;
497 _ERR("Memory alloc failed");
501 ret = catinfo->Create();
503 _ERR("CCategoryInfo Create failed");
508 if (media_playlist_get_name(ph, &tmpStr) !=
509 MEDIA_CONTENT_ERROR_NONE) {
510 _ERR(" Failed to read playlist name ");
515 catinfo->SetName(tmpStr);
517 if (media_playlist_get_playlist_id(ph, &tmpValue) !=
518 MEDIA_CONTENT_ERROR_NONE) {
519 _ERR(" Failed to read playlist name ");
524 catinfo->SetCategoryId(tmpValue);
526 if (media_playlist_get_media_count_from_db(catinfo->CategoryId(), NULL,
527 &tmpValue) != MEDIA_CONTENT_ERROR_NONE) {
528 _ERR(" Failed to read playlist name ");
533 catinfo->SetSongCount(tmpValue);
535 if (media_playlist_foreach_media_from_db(catinfo->CategoryId(), NULL,
536 sm_CbPlaylistMember, (void *)catinfo) !=
537 MEDIA_CONTENT_ERROR_NONE) {
538 _ERR(" Failed to read playlist members ");
544 m->playlistslist = eina_list_append(m->playlistslist, catinfo);
550 void CMediadata::m_DeleteSongList(void)
552 CSongInfo *sinfo = NULL;
555 EINA_LIST_FREE(m->songlist, obj) {
556 sinfo = (CSongInfo *)obj;
565 void CMediadata::m_DeleteFolderSongList(void)
567 CSongInfo *sinfo = NULL;
570 EINA_LIST_FREE(m->folder_songlist, obj) {
571 sinfo = (CSongInfo *)obj;
576 m->folder_songlist = NULL;
580 void CMediadata::m_DeleteAlbumSongList(void)
582 CSongInfo *sinfo = NULL;
585 EINA_LIST_FREE(m->album_songlist, obj) {
586 sinfo = (CSongInfo *)obj;
591 m->album_songlist = NULL;
595 void CMediadata::m_DeletePlaylistSongList(void)
597 CSongInfo *sinfo = NULL;
600 EINA_LIST_FREE(m->playlist_songlist, obj) {
601 sinfo = (CSongInfo *)obj;
606 m->playlist_songlist = NULL;
610 void CMediadata::m_DeleteFolderList(void)
612 CFolderInfo *finfo = NULL;
615 EINA_LIST_FREE(m->folderlist, obj) {
616 finfo = (CFolderInfo *)obj;
621 m->folderlist = NULL;
625 void CMediadata::m_DeleteAlbumList(void)
627 CAlbumInfo *alinfo = NULL;
630 EINA_LIST_FREE(m->albumlist, obj) {
631 alinfo = (CAlbumInfo *)obj;
640 void CMediadata::m_DeleteCategoryList(ECategoryType type)
642 CCategoryInfo *catinfo = NULL;
645 if (type == CAT_TYPE_ARTIST) {
646 EINA_LIST_FREE(m->artistlist, obj) {
647 catinfo = (CCategoryInfo *)obj;
652 m->artistlist = NULL;
654 else if (type == CAT_TYPE_GENRE) {
655 EINA_LIST_FREE(m->genrelist, obj) {
656 catinfo = (CCategoryInfo *)obj;
663 else if (type == CAT_TYPE_PLAYLISTS) {
664 EINA_LIST_FREE(m->playlistslist, obj) {
665 catinfo = (CCategoryInfo *)obj;
669 m->playlistslist = NULL;
674 bool CMediadata::m_CreateFilter(void)
676 char buf[MAX_LENGTH];
679 ret = media_filter_create(&(m->filter));
680 if (ret != MEDIA_CONTENT_ERROR_NONE) {
681 _ERR("Media Filter Creation Failed");
685 switch (m->source_type) {
687 snprintf(buf, sizeof(buf), "%s AND %s", MEDIA_CONDITION_MUSIC,
688 MEDIA_CONDITION_INTERNAL);
691 case SOURCE_TYPE_USB:
692 snprintf(buf, sizeof(buf), "%s AND %s", MEDIA_CONDITION_MUSIC,
693 MEDIA_CONDITION_EXTERNAL);
696 case SOURCE_TYPE_ALL:
698 snprintf(buf, sizeof(buf), "%s", MEDIA_CONDITION_MUSIC);
702 media_filter_set_condition(m->filter, buf,
703 MEDIA_CONTENT_COLLATE_DEFAULT);
709 bool CMediadata::m_DestroyFilter(void)
711 if (media_filter_destroy(m->filter) != MEDIA_CONTENT_ERROR_NONE) {
712 _ERR("Filter destroy failed");
722 int CMediadata::m_GetPlaylistList(void)
724 if (media_playlist_foreach_playlist_from_db(NULL, sm_CbEachPlaylist, this)) {
725 _ERR(" Get each playlist failed ");
733 void CMediadata::m_GetCategoryList(ECategoryType type)
735 CAlbumInfo *alinfo = NULL;
736 CCategoryInfo *catinfo = NULL;
746 EINA_LIST_FOREACH(m->albumlist, l, obj) {
747 alinfo = (CAlbumInfo *)obj;
748 if (type == CAT_TYPE_ARTIST)
749 catinfo = CCategoryInfo::FindCategory(m->artistlist, alinfo->Artist());
751 catinfo = CCategoryInfo::FindCategory(m->genrelist, alinfo->Genre());
754 catinfo = new CCategoryInfo();
756 ret = catinfo->Create();
762 catinfo->SetCategoryId(++count);
763 catinfo->SetAlbumCount(1);
764 catinfo->SetSongCount(alinfo->SongCount());
765 if (type == CAT_TYPE_ARTIST) {
766 if (alinfo->Artist())
767 catinfo->SetName(alinfo->Artist());
769 catinfo->SetName(_(MUSIC_STR_UNKNOWN));
771 m->artistlist = eina_list_append(
772 m->artistlist, catinfo);
776 catinfo->SetName(alinfo->Genre());
778 catinfo->SetName(_(MUSIC_STR_UNKNOWN));
780 m->genrelist = eina_list_append(
781 m->genrelist, catinfo);
785 catinfo->SetAlbumCount(catinfo->AlbumCount() + 1);
786 catinfo->SetSongCount(catinfo->SongCount() + alinfo->SongCount());
789 catinfo->SetAlbumInfo(alinfo);
794 int CMediadata::m_GetPlaylistSongList(CCategoryInfo *catinfo)
798 CCategoryInfo::CListMember *member = NULL;
802 if (!catinfo || !catinfo->MemberList()) {
803 _ERR(" Invalid argument ");
807 m->slist_type = E_PLAYLIST_SONGS;
809 EINA_LIST_FOREACH(catinfo->MemberList(), l, obj) {
810 member = (CCategoryInfo::CListMember *)obj;
811 if (!member->mediaId)
814 r = media_info_get_media_from_db(member->mediaId, &mdh);
815 if (r != MEDIA_CONTENT_ERROR_NONE) {
816 _ERR("unable to get handle from id");
820 m->member_id = member->memberId;
821 if (!m_HandleEachMediaData(mdh))
822 _ERR("unable to get media data");
829 int CMediadata::m_GetFolderSongList(CFolderInfo *finfo)
836 m->slist_type = E_FOLDER_SONGS;
837 r = media_folder_foreach_media_from_db(id, m->filter,
838 sm_CbEachMediaData, (void *)this);
839 if (r != MEDIA_CONTENT_ERROR_NONE) {
840 _ERR("Media folder foreach folder from db failed");
848 int CMediadata::m_GetFolderList(void)
852 r = media_folder_foreach_folder_from_db(m->filter,
853 sm_CbEachFolderData, (void *)this);
854 if (r != MEDIA_CONTENT_ERROR_NONE) {
855 _ERR("Media album foreach album from db failed");
863 int CMediadata::m_GetAlbumSongList(CAlbumInfo *alinfo)
868 id = alinfo->AlbumId();
870 m->slist_type = E_ALBUM_SONGS;
871 r = media_album_foreach_media_from_db(id, m->filter,
872 sm_CbEachMediaData, (void *)this);
873 if (r != MEDIA_CONTENT_ERROR_NONE) {
874 _ERR("Media folder foreach folder from db failed");
882 int CMediadata::m_GetAlbumList(void)
886 r = media_album_foreach_album_from_db(m->filter,
887 sm_CbEachAlbumData, (void *)this);
888 if (r != MEDIA_CONTENT_ERROR_NONE) {
889 _ERR("Media album foreach album from db failed");
897 int CMediadata::m_GetSongList(void)
901 m->slist_type = E_ALL_SONGS;
902 r = media_info_foreach_media_from_db(m->filter,
903 sm_CbEachMediaData, (void *)this);
904 if (r != MEDIA_CONTENT_ERROR_NONE) {
905 _ERR("Media folder foreach folder from db failed");
913 void CMediadata::m_UpdateLists(void)
917 r = m_CreateFilter();
919 _ERR("Media Filter Creation Failed");
932 m_DeleteCategoryList(CAT_TYPE_ARTIST);
933 m_GetCategoryList(CAT_TYPE_ARTIST);
936 m_DeleteCategoryList(CAT_TYPE_GENRE);
937 m_GetCategoryList(CAT_TYPE_GENRE);
940 m_DeleteFolderList();
943 r = m_DestroyFilter();
945 _ERR("Media Filter Creation Failed");
949 bool CMediadata::Create(void)
956 _ERR("m calloc failed");
961 r = media_content_connect();
962 if (r != MEDIA_CONTENT_ERROR_NONE) {
963 _ERR("Media Content Connect Failed");
969 CMediaContentDbUpdateListener::Create();
971 m->source_type = SOURCE_TYPE_NONE;
977 void CMediadata::Destroy(void)
983 struct SCbInfo *cbinfo;
988 m_DeleteAlbumSongList();
989 m_DeleteFolderList();
990 m_DeleteFolderSongList();
991 m_DeleteCategoryList(CAT_TYPE_ARTIST);
992 m_DeleteCategoryList(CAT_TYPE_GENRE);
993 m_DeleteCategoryList(CAT_TYPE_PLAYLISTS);
994 m_DeletePlaylistSongList();
995 if (m->sinfo && m->sinfo->FlagCreate())
999 EINA_LIST_FREE(m->cblist, obj) {
1000 cbinfo = (SCbInfo *)obj;
1004 CMediaContentDbUpdateListener::Destroy();
1006 r = media_content_disconnect();
1007 if (r != MEDIA_CONTENT_ERROR_NONE)
1008 _ERR("Media Content Connect Failed");
1014 struct SCbInfo *CMediadata::AddCallback(int type,
1015 void (*cb)(void *), void *data)
1017 struct SCbInfo *cbinfo;
1022 cbinfo = (SCbInfo *)calloc(1, sizeof(*cbinfo));
1027 cbinfo->data = data;
1028 cbinfo->type = type;
1030 m->cblist = eina_list_append(m->cblist, cbinfo);
1036 bool CMediadata::RemoveCallback(struct SCbInfo *cbinfo)
1044 m->cblist = eina_list_remove(m->cblist,
1053 Eina_List *CMediadata::Medialist(int source_type, int EListType, void *info)
1058 if (source_type != m->source_type) {
1059 m->source_type = source_type;
1063 switch (EListType) {
1064 case LIST_TYPE_SONG:
1067 case LIST_TYPE_ALBUM:
1068 return m->albumlist;
1070 case LIST_TYPE_ALBUM_SONG:
1071 if (m->album_songlist)
1072 m_DeleteAlbumSongList();
1073 m_GetAlbumSongList((CAlbumInfo *)info);
1074 return m->album_songlist;
1076 case LIST_TYPE_FOLDER:
1077 return m->folderlist;
1079 case LIST_TYPE_FOLDER_SONG:
1080 if (m->folder_songlist)
1081 m_DeleteFolderSongList();
1082 m_GetFolderSongList((CFolderInfo *)info);
1083 return m->folder_songlist;
1085 case LIST_TYPE_ARTIST:
1086 return m->artistlist;
1088 case LIST_TYPE_GENRE:
1089 return m->genrelist;
1091 case LIST_TYPE_PLAYLISTS:
1092 if (m->playlistslist)
1093 m_DeleteCategoryList(CAT_TYPE_PLAYLISTS);
1094 m_GetPlaylistList();
1095 return m->playlistslist;
1097 case LIST_TYPE_PLAYLISTS_SONG:
1098 if (m->playlist_songlist)
1099 m_DeletePlaylistSongList();
1100 m_GetPlaylistSongList((CCategoryInfo *)info);
1101 return m->playlist_songlist;
1104 _ERR(" Wrong list type ");
1111 CSongInfo *CMediadata::SongByUri(char *uri)
1117 char buf[MAX_LENGTH];
1123 if (m->sinfo && m->sinfo->FlagCreate()) {
1124 m->sinfo->Destroy();
1130 r = media_filter_create(&filter);
1131 if (r != MEDIA_CONTENT_ERROR_NONE) {
1132 _ERR("Media Filter Creation Failed");
1136 snprintf(buf, sizeof(buf), "%s AND (MEDIA_PATH LIKE '%s%%')",
1137 MEDIA_CONDITION_MUSIC,
1140 media_filter_set_condition(filter, buf,
1141 MEDIA_CONTENT_COLLATE_DEFAULT);
1143 m->slist_type = E_SINGLE_SONG;
1144 r = media_info_foreach_media_from_db(filter, sm_CbEachMediaData,
1146 if (r != MEDIA_CONTENT_ERROR_NONE)
1147 _ERR("Failed to fetch media info");
1149 if (media_filter_destroy(filter) != MEDIA_CONTENT_ERROR_NONE)
1150 _ERR("Filter destroy failed");
1156 bool CMediadata::SetPlayedTime(char *media_id)
1167 _ERR("Invalid parameter");
1171 r = media_info_get_media_from_db(media_id, &mdh);
1172 if (r != MEDIA_CONTENT_ERROR_NONE) {
1173 _ERR("Failed to get media from id");
1177 r = media_info_get_audio(mdh, &adh);
1178 if (r != MEDIA_CONTENT_ERROR_NONE) {
1179 _ERR("Failed to get audio from media");
1180 media_info_destroy(mdh);
1186 r = audio_meta_set_played_time(adh, ptime);
1187 if (r != MEDIA_CONTENT_ERROR_NONE) {
1188 _ERR("Failed to set played time");
1189 audio_meta_destroy(adh);
1190 media_info_destroy(mdh);
1194 r = audio_meta_update_to_db(adh);
1195 if (r != MEDIA_CONTENT_ERROR_NONE) {
1196 _ERR("Failed to update to db");
1197 audio_meta_destroy(adh);
1198 media_info_destroy(mdh);
1202 audio_meta_destroy(adh);
1203 media_info_destroy(mdh);
1209 bool CMediadata::InsertPlaylist(const char *name, Eina_List *idlist)
1214 media_playlist_h ph;
1223 r = media_playlist_insert_to_db(name, &ph);
1224 if (r != MEDIA_CONTENT_ERROR_NONE) {
1225 _ERR(" Failed to insert ");
1229 EINA_LIST_FOREACH(idlist, l, obj) {
1231 media_playlist_add_media(ph, id);
1234 media_playlist_update_to_db(ph);
1240 bool CMediadata::ExistPlaylist(const char *name)
1246 CCategoryInfo *catinfo;
1252 if (!m->playlistslist)
1255 EINA_LIST_FOREACH(m->playlistslist, l, obj) {
1256 catinfo = (CCategoryInfo *)obj;
1257 if (catinfo->Name() && !strcmp(catinfo->Name(), name))
1265 bool CMediadata::DeletePlaylist(int id)
1272 r = media_playlist_delete_from_db(id);
1273 if (r != MEDIA_CONTENT_ERROR_NONE) {
1274 _ERR(" Failed to delete playlist");
1282 bool CMediadata::RenamePlaylist(int id, const char *name)
1288 media_playlist_h ph;
1290 r = media_playlist_get_playlist_from_db(id, &ph);
1291 if (r != MEDIA_CONTENT_ERROR_NONE) {
1292 _ERR(" Failed to get playlist");
1296 r = media_playlist_set_name(ph, name);
1297 if (r != MEDIA_CONTENT_ERROR_NONE) {
1298 _ERR(" Failed to set playlist name");
1302 media_playlist_update_to_db(ph);
1308 bool CMediadata::AddmediaPlaylist(int lid, Eina_List *idlist)
1313 media_playlist_h ph;
1322 r = media_playlist_get_playlist_from_db(lid, &ph);
1323 if (r != MEDIA_CONTENT_ERROR_NONE) {
1324 _ERR(" Failed to get playlist");
1328 EINA_LIST_FOREACH(idlist, l, obj) {
1330 media_playlist_add_media(ph, id);
1333 media_playlist_update_to_db(ph);
1339 bool CMediadata::RemovemediaPlaylist(int lid, Eina_List *idlist)
1344 media_playlist_h ph;
1352 _ERR(" Invalid argument ");
1356 r = media_playlist_get_playlist_from_db(lid, &ph);
1357 if (r != MEDIA_CONTENT_ERROR_NONE) {
1358 _ERR(" Failed to get playlist");
1362 EINA_LIST_FOREACH(idlist, l, obj) {
1363 sinfo = (CSongInfo *)obj;
1364 id = sinfo->MemberId();
1366 media_playlist_remove_media(ph, id);
1369 media_playlist_update_to_db(ph);
1375 Eina_List *CMediadata::PlaylistsForCtxt(void)
1380 if (media_playlist_foreach_playlist_from_db(NULL, sm_CbPlaylist, &list))
1381 _ERR(" Get playlist failed ");
1387 void CMediadata::OnUpdated(const SEntity *entity)
1389 Eina_List *l = NULL;
1390 SCbInfo *cbinfo = NULL;
1393 if (entity->err != MEDIA_CONTENT_ERROR_NONE || !m)
1396 m->source_type = SOURCE_TYPE_NONE;
1397 EINA_LIST_FOREACH(m->cblist, l, obj) {
1398 cbinfo = (SCbInfo *)obj;
1399 if (cbinfo->type == E_CONTENT_UPDATE && cbinfo->cb)
1400 cbinfo->cb(cbinfo->data);