src/data/CategoryStorage.cpp
src/data/SongStorage.cpp
src/data/AlbumStorage.cpp
+ src/data/FolderStorage.cpp
)
SET(TARGET_EDJ "${PROJECT_NAME}.edj")
private:
static bool sm_CbOnEachAlbum(media_album_h ah, void *dt);
bool m_OnEachAlbum(media_album_h ah);
- virtual bool m_GetAlbumList(void);
+ bool m_GetAlbumList(void);
public:
CAlbumStorage(CAlbumSongStorage *storageAlbumSong) {
--- /dev/null
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#ifndef __FOLDER_STORAGE_H__
+#define __FOLDER_STORAGE_H__
+
+class CFolderStorage {
+private:
+ Eina_List *elList;
+ filter_h m_filter;
+
+private:
+ static bool sm_CbOnEachFolder(media_folder_h fh, void *dt);
+ bool m_OnEachFolder(media_folder_h fh);
+ static bool sm_CbTotalDuration(media_info_h mh, void *dt);
+ bool m_GetFolderList(void);
+
+public:
+ CFolderStorage() { elList = NULL; }
+ virtual ~CFolderStorage() {}
+
+ Eina_List *List(void);
+ void Delete(void);
+
+ bool Update(filter_h filter);
+};
+
+#endif // __FOLDER_STORAGE_H__
\ No newline at end of file
#ifndef __SONG_STORAGE_H__
#define __SONG_STORAGE_H__
-
class CSongStorage {
public:
enum EType {
EType t_type;
int t_memberId;
CSongInfo *t_songInfo;
+ filter_h t_filter;
Eina_List *elList;
private:
bool m_OnEachSong(media_info_h mh);
protected:
- virtual bool t_GetSongList(CNameInfo *info, filter_h filter);
+ virtual bool t_GetSongList(CNameInfo *info);
public:
CSongStorage() { elList = NULL; }
CSongInfo *SongInfo(filter_h filter);
};
-
-
#endif // __SONG_STORAGE_H__
\ No newline at end of file
struct SMediadata* m;
private:
- static bool sm_CbTotalDuration(media_info_h md_h, void *dt);
- static bool sm_CbEachFolderData(media_folder_h folder_h, void *dt);
static bool sm_CbPlaylist(media_playlist_h ph, void *dt);
private:
- bool m_HandleEachFolderData(media_folder_h folder_h);
- void m_DeleteFolderList(void);
- void m_DeleteCategoryList(ECategoryType type);
-
bool m_CreateFilter(void);
void m_DestroyFilter(void);
-
void m_GetCategoryList(ECategoryType type);
- int m_GetFolderList(void);
+ void m_DeleteCategoryList(ECategoryType type);
void m_UpdateLists(void);
public:
CSongInfo *songInfo = NULL;
Eina_List *l = NULL;
void *obj = NULL;
- int albumId;
- char *name;
- char *artist;
- int songCount;
- char *genre;
- char *thumbnailPath;
+ int albumId = 0;
+ char *name = NULL;
+ char *artist = NULL;
+ int songCount = 0;
+ char *genre = NULL;
+ char *thumbnailPath = NULL;
_CHECK(alinfo = new CAlbumInfo)
_CHECK(alinfo->Create())
r = media_album_foreach_album_from_db(m_filter,
sm_CbOnEachAlbum, (void *)this);
if (r != MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media album foreach album from db failed");
+ _ERR("media_album_foreach_album_from_db failed");
return false;
}
--- /dev/null
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <Eina.h>
+#include <media_content.h>
+#include <sys/time.h>
+#include <stdlib.h>
+#include <string.h>
+#include "dbg.h"
+#include "i18n.h"
+#include "define.h"
+
+#include <AppCommon.h>
+#include "song_info.h"
+#include "album_info.h"
+#include "category_info.h"
+#include "folder_info.h"
+#include "FolderStorage.h"
+#include "common.h"
+
+
+bool CFolderStorage::sm_CbOnEachFolder(media_folder_h fh, void *dt)
+{
+ CFolderStorage *root = (CFolderStorage *)dt;
+ bool r = false;
+ if (root)
+ r = root->m_OnEachFolder(fh);
+
+ return r;
+}
+
+
+bool CFolderStorage::m_OnEachFolder(media_folder_h fh)
+{
+ _CREATE_BEGIN {
+ CFolderInfo *finfo = NULL;
+ char *folderId = NULL;
+ char *name = NULL;
+ int count = 0;
+ int duration = 0;
+
+ _CHECK(finfo = new CFolderInfo)
+ _CHECK(finfo->Create())
+ _CHECK(media_folder_get_folder_id(fh, &folderId) == MEDIA_CONTENT_ERROR_NONE)
+ _CHECK(media_folder_get_media_count_from_db(folderId, m_filter, &count) == MEDIA_CONTENT_ERROR_NONE)
+ _CHECK(media_folder_foreach_media_from_db(folderId, m_filter, sm_CbTotalDuration, &duration) == MEDIA_CONTENT_ERROR_NONE)
+ _CHECK(media_folder_get_name(fh, &name) == MEDIA_CONTENT_ERROR_NONE)
+
+ _WHEN_SUCCESS {
+ finfo->SetId(folderId);
+ finfo->SetCount(count);
+ finfo->SetDuration(duration);
+ finfo->SetName(name);
+
+ elList = eina_list_append(elList, finfo);
+ }
+
+ _CHECK_FAIL{}
+ _CHECK_FAIL{}
+ _CHECK_FAIL{}
+ _CHECK_FAIL{}
+ _CHECK_FAIL{ finfo->Destroy(); }
+ _CHECK_FAIL{ delete finfo; }
+ } _CREATE_END_AND_CATCH{ return false; }
+
+ return true;
+}
+
+
+bool CFolderStorage::sm_CbTotalDuration(media_info_h mh, void *dt)
+{
+ audio_meta_h audio_h;
+ int dur = 0;
+ int *tdur = (int *)dt;
+
+ if (!tdur)
+ return false;
+
+ if (media_info_get_audio(mh, &audio_h) != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("Media info get audio error");
+ return false;
+ }
+
+ if (audio_meta_get_duration(audio_h, &dur) != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("audio duration get error");
+ audio_meta_destroy(audio_h);
+ return false;
+ }
+
+ audio_meta_destroy(audio_h);
+
+ *tdur += dur;
+
+ return true;
+}
+
+
+bool CFolderStorage::m_GetFolderList(void)
+{
+ int r;
+
+ r = media_folder_foreach_folder_from_db(m_filter,
+ sm_CbOnEachFolder, (void *)this);
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("media_folder_foreach_folder_from_db failed");
+ return false;
+ }
+
+ return true;
+}
+
+
+Eina_List *CFolderStorage::List(void)
+{
+ return elList;
+}
+
+
+void CFolderStorage::Delete(void)
+{
+ CFolderInfo *finfo = NULL;
+ void *obj = NULL;
+ if (!elList)
+ return;
+
+ EINA_LIST_FREE(elList, obj) {
+ finfo = (CFolderInfo *)obj;
+ finfo->Destroy();
+ delete finfo;
+ }
+
+ elList = NULL;
+}
+
+
+bool CFolderStorage::Update(filter_h filter)
+{
+ m_filter = filter;
+
+ Delete();
+ m_GetFolderList();
+ return true;
+}
\ No newline at end of file
_CREATE_BEGIN {
CSongInfo *songInfo = NULL;
audio_meta_h audio_h = NULL;
- char *filePath;
- char *thumbnailPath;
- int mediaType;
- char *mediaId;
- char *title;
- char *artist;
- char *album;
- char *genre;
- char *composer;
- int duration;
+ char *filePath = NULL;
+ char *thumbnailPath = NULL;
+ int mediaType = 0;
+ char *mediaId = NULL;
+ char *title = NULL;
+ char *artist = NULL;
+ char *album = NULL;
+ char *genre = NULL;
+ char *composer = NULL;
+ int duration = 0;
_CHECK(songInfo = new CSongInfo)
_CHECK(songInfo->Create())
}
-bool CSongStorage::t_GetSongList(CNameInfo *info, filter_h filter)
+bool CSongStorage::t_GetSongList(CNameInfo *info)
{
int r;
case SONGS_SONG_STORAGE:
case SINGLE_SONG_STORAGE:
{
- r = media_info_foreach_media_from_db(filter,
+ r = media_info_foreach_media_from_db(t_filter,
sm_CbOnEachSong, (void *)this);
if (r != MEDIA_CONTENT_ERROR_NONE) {
_ERR("media_info_foreach_media_from_db failed");
ASSERT(info);
CAlbumInfo *alinfo = (CAlbumInfo *)info;
- r = media_album_foreach_media_from_db(alinfo->AlbumId(), filter,
+ r = media_album_foreach_media_from_db(alinfo->AlbumId(), t_filter,
sm_CbOnEachSong, (void *)this);
if (r != MEDIA_CONTENT_ERROR_NONE) {
_ERR("media_album_foreach_media_from_db failed");
ASSERT(info);
CFolderInfo *finfo = (CFolderInfo *)info;
- r = media_folder_foreach_media_from_db(finfo->Id(), filter,
+ r = media_folder_foreach_media_from_db(finfo->Id(), t_filter,
sm_CbOnEachSong, (void *)this);
if (r != MEDIA_CONTENT_ERROR_NONE) {
_ERR("media_folder_foreach_media_from_db failed");
bool CSongsSongStorage::Update(filter_h filter)
{
+ t_filter = filter;
+
Delete();
- t_GetSongList(NULL, filter);
+ t_GetSongList(NULL);
return true;
}
bool CAlbumSongStorage::Update(CAlbumInfo *alinfo, filter_h filter)
{
+ t_filter = filter;
+
Delete();
- t_GetSongList(alinfo, filter);
+ t_GetSongList(alinfo);
return true;
}
bool CFolderSongStorage::Update(CFolderInfo *finfo, filter_h filter)
{
+ t_filter = filter;
+
Delete();
- t_GetSongList(finfo, filter);
+ t_GetSongList(finfo);
return true;
}
bool CPlaylistSongStorage::Update(CCategoryInfo *catinfo, filter_h filter)
{
+ t_filter = filter;
+
Delete();
- t_GetSongList(catinfo, filter);
+ t_GetSongList(catinfo);
return true;
}
CSongInfo *CSingleSongStorage::SongInfo(filter_h filter)
{
+ t_filter = filter;
+
Delete();
- t_GetSongList(NULL, filter);
+ t_GetSongList(NULL);
return t_songInfo;
}
\ No newline at end of file
#include "CategoryStorage.h"
#include "SongStorage.h"
#include "AlbumStorage.h"
+#include "FolderStorage.h"
#include "mediadata.h"
#include "common.h"
struct SMediadata {
- Eina_List *folderlist;
-
CSongsSongStorage *storageSong;
CAlbumSongStorage *storageAlbumSong;
CFolderSongStorage *storageFolderSong;
CSingleSongStorage *storageSingleSong;
CAlbumStorage *storageAlbum;
+ CFolderStorage *storageFolder;
CPlaylistStorage *storagePlaylist;
CArtistStorage *storageArtist;
storagePlaylistSong = new CPlaylistSongStorage;
storageSingleSong = new CSingleSongStorage;
storageAlbum = new CAlbumStorage(storageAlbumSong);
+ storageFolder = new CFolderStorage();
storagePlaylist = new CPlaylistStorage;
storageArtist = new CArtistStorage;
storageGenre = new CGenreStorage;
delete storageGenre;
delete storageArtist;
delete storagePlaylist;
+ delete storageFolder;
delete storageAlbum;
delete storageSingleSong;
delete storagePlaylistSong;
}
-bool CMediadata::sm_CbTotalDuration(media_info_h md_h, void *dt)
-{
- audio_meta_h audio_h;
- int dur;
- int *tdur = (int *)dt;
-
- if (!tdur)
- return false;
-
- if (media_info_get_audio(md_h, &audio_h) != MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media info get audio error");
- return false;
- }
-
- dur = 0;
- if (audio_meta_get_duration(audio_h, &dur) != MEDIA_CONTENT_ERROR_NONE)
- _ERR("audio duration get error");
-
- audio_meta_destroy(audio_h);
-
- *tdur = *tdur + dur;
-
- return true;
-}
-
-
-bool CMediadata::sm_CbEachFolderData(media_folder_h folder_h, void *dt)
-{
- CMediadata *root = (CMediadata *)dt;
-
- if (!root)
- return false;
-
- root->m_HandleEachFolderData(folder_h);
-
- return true;
-}
-
-
bool CMediadata::sm_CbPlaylist(media_playlist_h ph, void* dt)
{
Eina_List **list = (Eina_List **)dt;
}
-bool CMediadata::m_HandleEachFolderData(media_folder_h folder_h)
-{
- CFolderInfo *finfo = NULL;
- char *tmpStr = NULL;
- int tmpValue;
- bool ret;
-
- finfo = new CFolderInfo;
- if (!finfo) {
- _ERR("Memory alloc failed");
- return false;
- }
-
- ret = finfo->Create();
- if (!ret) {
- _ERR("CFolderInfo creation failed");
- delete finfo;
- return false;
- }
-
- if (media_folder_get_folder_id(folder_h, &tmpStr) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Folder ID Fetch error");
- finfo->Destroy();
- delete finfo;
- return false;
- }
- finfo->SetId(tmpStr);
-
- if (media_folder_get_media_count_from_db(finfo->Id(),
- m->filter, &tmpValue) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Folder media count Fetch error");
- finfo->Destroy();
- delete finfo;
- return false;
- }
- finfo->SetCount(tmpValue);
-
- if (media_folder_foreach_media_from_db(finfo->Id(), m->filter,
- sm_CbTotalDuration, &tmpValue) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Folder media count Fetch error");
- finfo->Destroy();
- delete finfo;
- return false;
- }
- finfo->SetDuration(tmpValue);
-
- if (media_folder_get_name(folder_h, &tmpStr) !=
- MEDIA_CONTENT_ERROR_NONE) {
- _ERR("folder name Fetch error");
- finfo->Destroy();
- delete finfo;
- return false;
- }
- finfo->SetName(tmpStr);
-
- m->folderlist = eina_list_append(m->folderlist, finfo);
- return true;
-}
-
-
-void CMediadata::m_DeleteFolderList(void)
-{
- CFolderInfo *finfo = NULL;
- void *obj = NULL;
- if (!m->folderlist)
- return;
-
- EINA_LIST_FREE(m->folderlist, obj) {
- finfo = (CFolderInfo *)obj;
- finfo->Destroy();
- delete finfo;
- }
-
- m->folderlist = NULL;
-}
-
-
-void CMediadata::m_DeleteCategoryList(ECategoryType type)
-{
- CCategoryInfo *catinfo = NULL;
- void *obj = NULL;
-
- if (type == CAT_TYPE_ARTIST) {
- m->storageArtist->Delete();
- }
- else if (type == CAT_TYPE_GENRE) {
- m->storageGenre->Delete();
- }
- else if (type == CAT_TYPE_PLAYLISTS) {
- m->storagePlaylist->Delete();
- }
-}
-
-
bool CMediadata::m_CreateFilter(void)
{
char buf[MAX_LENGTH];
}
-int CMediadata::m_GetFolderList(void)
+void CMediadata::m_DeleteCategoryList(ECategoryType type)
{
- int r;
+ CCategoryInfo *catinfo = NULL;
+ void *obj = NULL;
- r = media_folder_foreach_folder_from_db(m->filter,
- sm_CbEachFolderData, (void *)this);
- if (r != MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media album foreach album from db failed");
- return false;
+ if (type == CAT_TYPE_ARTIST) {
+ m->storageArtist->Delete();
+ }
+ else if (type == CAT_TYPE_GENRE) {
+ m->storageGenre->Delete();
+ }
+ else if (type == CAT_TYPE_PLAYLISTS) {
+ m->storagePlaylist->Delete();
}
-
- return true;
}
m_DeleteCategoryList(CAT_TYPE_GENRE);
m_GetCategoryList(CAT_TYPE_GENRE);
- m_DeleteFolderList();
- m_GetFolderList();
+ m->storageFolder->Update(m->filter);
m_DestroyFilter();
}
m->storageSong->Delete();
m->storageAlbum->Delete();
m->storageAlbumSong->Delete();
- m_DeleteFolderList();
+ m->storageFolder->Delete();
m->storageFolderSong->Delete();
m_DeleteCategoryList(CAT_TYPE_ARTIST);
m_DeleteCategoryList(CAT_TYPE_GENRE);
return m->storageAlbumSong->List();
case LIST_TYPE_FOLDER:
- return m->folderlist;
+ return m->storageFolder->List();
case LIST_TYPE_FOLDER_SONG:
m->storageFolderSong->Update((CFolderInfo *)info, m->filter);