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;
670 m->playlistslist = NULL;
675 bool CMediadata::m_CreateFilter(void)
677 char buf[MAX_LENGTH];
680 ret = media_filter_create(&(m->filter));
681 if (ret != MEDIA_CONTENT_ERROR_NONE) {
682 _ERR("Media Filter Creation Failed");
686 switch (m->source_type) {
688 snprintf(buf, sizeof(buf), "%s AND %s", MEDIA_CONDITION_MUSIC,
689 MEDIA_CONDITION_INTERNAL);
692 case SOURCE_TYPE_USB:
693 snprintf(buf, sizeof(buf), "%s AND %s", MEDIA_CONDITION_MUSIC,
694 MEDIA_CONDITION_EXTERNAL);
697 case SOURCE_TYPE_ALL:
699 snprintf(buf, sizeof(buf), "%s", MEDIA_CONDITION_MUSIC);
703 media_filter_set_condition(m->filter, buf,
704 MEDIA_CONTENT_COLLATE_DEFAULT);
710 bool CMediadata::m_DestroyFilter(void)
712 if (media_filter_destroy(m->filter) != MEDIA_CONTENT_ERROR_NONE) {
713 _ERR("Filter destroy failed");
723 int CMediadata::m_GetPlaylistList(void)
725 if (media_playlist_foreach_playlist_from_db(NULL, sm_CbEachPlaylist, this)) {
726 _ERR(" Get each playlist failed ");
734 void CMediadata::m_GetCategoryList(ECategoryType type)
736 CAlbumInfo *alinfo = NULL;
737 CCategoryInfo *catinfo = NULL;
747 EINA_LIST_FOREACH(m->albumlist, l, obj) {
748 alinfo = (CAlbumInfo *)obj;
749 if (type == CAT_TYPE_ARTIST)
750 catinfo = CCategoryInfo::FindCategory(m->artistlist, alinfo->Artist());
752 catinfo = CCategoryInfo::FindCategory(m->genrelist, alinfo->Genre());
755 catinfo = new CCategoryInfo();
757 ret = catinfo->Create();
763 catinfo->SetCategoryId(++count);
764 catinfo->SetAlbumCount(1);
765 catinfo->SetSongCount(alinfo->SongCount());
766 if (type == CAT_TYPE_ARTIST) {
767 if (alinfo->Artist())
768 catinfo->SetName(alinfo->Artist());
770 catinfo->SetName(_(MUSIC_STR_UNKNOWN));
772 m->artistlist = eina_list_append(
773 m->artistlist, catinfo);
777 catinfo->SetName(alinfo->Genre());
779 catinfo->SetName(_(MUSIC_STR_UNKNOWN));
781 m->genrelist = eina_list_append(
782 m->genrelist, catinfo);
786 catinfo->SetAlbumCount(catinfo->AlbumCount() + 1);
787 catinfo->SetSongCount(catinfo->SongCount() + alinfo->SongCount());
790 catinfo->SetAlbumInfo(alinfo);
795 int CMediadata::m_GetPlaylistSongList(CCategoryInfo *catinfo)
799 CCategoryInfo::CListMember *member = NULL;
803 if (!catinfo || !catinfo->MemberList()) {
804 _ERR(" Invalid argument ");
808 m->slist_type = E_PLAYLIST_SONGS;
810 EINA_LIST_FOREACH(catinfo->MemberList(), l, obj) {
811 member = (CCategoryInfo::CListMember *)obj;
812 if (!member->mediaId)
815 r = media_info_get_media_from_db(member->mediaId, &mdh);
816 if (r != MEDIA_CONTENT_ERROR_NONE) {
817 _ERR("unable to get handle from id");
821 m->member_id = member->memberId;
822 if (!m_HandleEachMediaData(mdh))
823 _ERR("unable to get media data");
830 int CMediadata::m_GetFolderSongList(CFolderInfo *finfo)
837 m->slist_type = E_FOLDER_SONGS;
838 r = media_folder_foreach_media_from_db(id, m->filter,
839 sm_CbEachMediaData, (void *)this);
840 if (r != MEDIA_CONTENT_ERROR_NONE) {
841 _ERR("Media folder foreach folder from db failed");
849 int CMediadata::m_GetFolderList(void)
853 r = media_folder_foreach_folder_from_db(m->filter,
854 sm_CbEachFolderData, (void *)this);
855 if (r != MEDIA_CONTENT_ERROR_NONE) {
856 _ERR("Media album foreach album from db failed");
864 int CMediadata::m_GetAlbumSongList(CAlbumInfo *alinfo)
869 id = alinfo->AlbumId();
871 m->slist_type = E_ALBUM_SONGS;
872 r = media_album_foreach_media_from_db(id, m->filter,
873 sm_CbEachMediaData, (void *)this);
874 if (r != MEDIA_CONTENT_ERROR_NONE) {
875 _ERR("Media folder foreach folder from db failed");
883 int CMediadata::m_GetAlbumList(void)
887 r = media_album_foreach_album_from_db(m->filter,
888 sm_CbEachAlbumData, (void *)this);
889 if (r != MEDIA_CONTENT_ERROR_NONE) {
890 _ERR("Media album foreach album from db failed");
898 int CMediadata::m_GetSongList(void)
902 m->slist_type = E_ALL_SONGS;
903 r = media_info_foreach_media_from_db(m->filter,
904 sm_CbEachMediaData, (void *)this);
905 if (r != MEDIA_CONTENT_ERROR_NONE) {
906 _ERR("Media folder foreach folder from db failed");
914 void CMediadata::m_UpdateLists(void)
918 r = m_CreateFilter();
920 _ERR("Media Filter Creation Failed");
933 m_DeleteCategoryList(CAT_TYPE_ARTIST);
934 m_GetCategoryList(CAT_TYPE_ARTIST);
937 m_DeleteCategoryList(CAT_TYPE_GENRE);
938 m_GetCategoryList(CAT_TYPE_GENRE);
941 m_DeleteFolderList();
944 r = m_DestroyFilter();
946 _ERR("Media Filter Creation Failed");
950 bool CMediadata::Create(void)
957 _ERR("m calloc failed");
962 r = media_content_connect();
963 if (r != MEDIA_CONTENT_ERROR_NONE) {
964 _ERR("Media Content Connect Failed");
970 CMediaContentDbUpdateListener::Create();
972 m->source_type = SOURCE_TYPE_NONE;
978 void CMediadata::Destroy(void)
984 struct SCbInfo *cbinfo;
989 m_DeleteAlbumSongList();
990 m_DeleteFolderList();
991 m_DeleteFolderSongList();
992 m_DeleteCategoryList(CAT_TYPE_ARTIST);
993 m_DeleteCategoryList(CAT_TYPE_GENRE);
994 m_DeleteCategoryList(CAT_TYPE_PLAYLISTS);
995 m_DeletePlaylistSongList();
996 if (m->sinfo && m->sinfo->FlagCreate())
1000 EINA_LIST_FREE(m->cblist, obj) {
1001 cbinfo = (SCbInfo *)obj;
1005 CMediaContentDbUpdateListener::Destroy();
1007 r = media_content_disconnect();
1008 if (r != MEDIA_CONTENT_ERROR_NONE)
1009 _ERR("Media Content Connect Failed");
1015 struct SCbInfo *CMediadata::AddCallback(int type,
1016 void (*cb)(void *), void *data)
1018 struct SCbInfo *cbinfo;
1023 cbinfo = (SCbInfo *)calloc(1, sizeof(*cbinfo));
1028 cbinfo->data = data;
1029 cbinfo->type = type;
1031 m->cblist = eina_list_append(m->cblist, cbinfo);
1037 bool CMediadata::RemoveCallback(struct SCbInfo *cbinfo)
1045 m->cblist = eina_list_remove(m->cblist,
1054 Eina_List *CMediadata::Medialist(int source_type, int EListType, void *info)
1059 if (source_type != m->source_type) {
1060 m->source_type = source_type;
1064 switch (EListType) {
1065 case LIST_TYPE_SONG:
1068 case LIST_TYPE_ALBUM:
1069 return m->albumlist;
1071 case LIST_TYPE_ALBUM_SONG:
1072 if (m->album_songlist)
1073 m_DeleteAlbumSongList();
1074 m_GetAlbumSongList((CAlbumInfo *)info);
1075 return m->album_songlist;
1077 case LIST_TYPE_FOLDER:
1078 return m->folderlist;
1080 case LIST_TYPE_FOLDER_SONG:
1081 if (m->folder_songlist)
1082 m_DeleteFolderSongList();
1083 m_GetFolderSongList((CFolderInfo *)info);
1084 return m->folder_songlist;
1086 case LIST_TYPE_ARTIST:
1087 return m->artistlist;
1089 case LIST_TYPE_GENRE:
1090 return m->genrelist;
1092 case LIST_TYPE_PLAYLISTS:
1093 if (m->playlistslist)
1094 m_DeleteCategoryList(CAT_TYPE_PLAYLISTS);
1095 m_GetPlaylistList();
1096 return m->playlistslist;
1098 case LIST_TYPE_PLAYLISTS_SONG:
1099 if (m->playlist_songlist)
1100 m_DeletePlaylistSongList();
1101 m_GetPlaylistSongList((CCategoryInfo *)info);
1102 return m->playlist_songlist;
1105 _ERR(" Wrong list type ");
1112 CSongInfo *CMediadata::SongByUri(char *uri)
1118 char buf[MAX_LENGTH];
1124 if (m->sinfo && m->sinfo->FlagCreate()) {
1125 m->sinfo->Destroy();
1131 r = media_filter_create(&filter);
1132 if (r != MEDIA_CONTENT_ERROR_NONE) {
1133 _ERR("Media Filter Creation Failed");
1137 snprintf(buf, sizeof(buf), "%s AND (MEDIA_PATH LIKE '%s%%')",
1138 MEDIA_CONDITION_MUSIC,
1141 media_filter_set_condition(filter, buf,
1142 MEDIA_CONTENT_COLLATE_DEFAULT);
1144 m->slist_type = E_SINGLE_SONG;
1145 r = media_info_foreach_media_from_db(filter, sm_CbEachMediaData,
1147 if (r != MEDIA_CONTENT_ERROR_NONE)
1148 _ERR("Failed to fetch media info");
1150 if (media_filter_destroy(filter) != MEDIA_CONTENT_ERROR_NONE)
1151 _ERR("Filter destroy failed");
1157 bool CMediadata::SetPlayedTime(char *media_id)
1168 _ERR("Invalid parameter");
1172 r = media_info_get_media_from_db(media_id, &mdh);
1173 if (r != MEDIA_CONTENT_ERROR_NONE) {
1174 _ERR("Failed to get media from id");
1178 r = media_info_get_audio(mdh, &adh);
1179 if (r != MEDIA_CONTENT_ERROR_NONE) {
1180 _ERR("Failed to get audio from media");
1181 media_info_destroy(mdh);
1187 r = audio_meta_set_played_time(adh, ptime);
1188 if (r != MEDIA_CONTENT_ERROR_NONE) {
1189 _ERR("Failed to set played time");
1190 audio_meta_destroy(adh);
1191 media_info_destroy(mdh);
1195 r = audio_meta_update_to_db(adh);
1196 if (r != MEDIA_CONTENT_ERROR_NONE) {
1197 _ERR("Failed to update to db");
1198 audio_meta_destroy(adh);
1199 media_info_destroy(mdh);
1203 audio_meta_destroy(adh);
1204 media_info_destroy(mdh);
1210 bool CMediadata::InsertPlaylist(const char *name, Eina_List *idlist)
1215 media_playlist_h ph;
1224 r = media_playlist_insert_to_db(name, &ph);
1225 if (r != MEDIA_CONTENT_ERROR_NONE) {
1226 _ERR(" Failed to insert ");
1230 EINA_LIST_FOREACH(idlist, l, obj) {
1232 media_playlist_add_media(ph, id);
1235 media_playlist_update_to_db(ph);
1241 bool CMediadata::ExistPlaylist(const char *name)
1247 CCategoryInfo *catinfo;
1253 if (!m->playlistslist)
1256 EINA_LIST_FOREACH(m->playlistslist, l, obj) {
1257 catinfo = (CCategoryInfo *)obj;
1258 if (catinfo->Name() && !strcmp(catinfo->Name(), name))
1266 bool CMediadata::DeletePlaylist(int id)
1273 r = media_playlist_delete_from_db(id);
1274 if (r != MEDIA_CONTENT_ERROR_NONE) {
1275 _ERR(" Failed to delete playlist");
1283 bool CMediadata::RenamePlaylist(int id, const char *name)
1289 media_playlist_h ph;
1291 r = media_playlist_get_playlist_from_db(id, &ph);
1292 if (r != MEDIA_CONTENT_ERROR_NONE) {
1293 _ERR(" Failed to get playlist");
1297 r = media_playlist_set_name(ph, name);
1298 if (r != MEDIA_CONTENT_ERROR_NONE) {
1299 _ERR(" Failed to set playlist name");
1303 media_playlist_update_to_db(ph);
1309 bool CMediadata::AddmediaPlaylist(int lid, Eina_List *idlist)
1314 media_playlist_h ph;
1323 r = media_playlist_get_playlist_from_db(lid, &ph);
1324 if (r != MEDIA_CONTENT_ERROR_NONE) {
1325 _ERR(" Failed to get playlist");
1329 EINA_LIST_FOREACH(idlist, l, obj) {
1331 media_playlist_add_media(ph, id);
1334 media_playlist_update_to_db(ph);
1340 bool CMediadata::RemovemediaPlaylist(int lid, Eina_List *idlist)
1345 media_playlist_h ph;
1353 _ERR(" Invalid argument ");
1357 r = media_playlist_get_playlist_from_db(lid, &ph);
1358 if (r != MEDIA_CONTENT_ERROR_NONE) {
1359 _ERR(" Failed to get playlist");
1363 EINA_LIST_FOREACH(idlist, l, obj) {
1364 sinfo = (CSongInfo *)obj;
1365 id = sinfo->MemberId();
1367 media_playlist_remove_media(ph, id);
1370 media_playlist_update_to_db(ph);
1376 Eina_List *CMediadata::PlaylistsForCtxt(void)
1381 if (media_playlist_foreach_playlist_from_db(NULL, sm_CbPlaylist, &list))
1382 _ERR(" Get playlist failed ");
1388 void CMediadata::OnUpdated(const SEntity *entity)
1390 Eina_List *l = NULL;
1391 SCbInfo *cbinfo = NULL;
1394 if (entity->err != MEDIA_CONTENT_ERROR_NONE || !m)
1397 m->source_type = SOURCE_TYPE_NONE;
1398 EINA_LIST_FOREACH(m->cblist, l, obj) {
1399 cbinfo = (SCbInfo *)obj;
1400 if (cbinfo->type == E_CONTENT_UPDATE && cbinfo->cb)
1401 cbinfo->cb(cbinfo->data);