#ifndef __CATEGORY_STORAGE_H__
#define __CATEGORY_STORAGE_H__
+#include "AlbumStorage.h"
class CCategoryStorage {
+public:
+ enum EType {
+ ARTIST_STORAGE,
+ GENRE_STORAGE,
+ PLAYLIST_STORAGE
+ };
+
protected:
Eina_List *elList;
+ EType t_type;
+ CAlbumStorage *t_storageAlbum;
+
+private:
+ static bool sm_CbPlaylistMember(int memb_id, media_info_h mdh, void *dt);
+ static bool sm_CbEachPlaylist(media_playlist_h ph, void *dt);
+ bool m_OnEachPlaylist(media_playlist_h ph);
+ bool m_GetCategoryList(void);
public:
CCategoryStorage() { elList = NULL; }
virtual ~CCategoryStorage() {}
- void SetList(Eina_List *el);
Eina_List *List(void);
void Delete(void);
- virtual bool Update(void) = 0;
+ bool Update(void);
};
class CArtistStorage : public CCategoryStorage {
public:
- virtual bool Update(void);
+ CArtistStorage(CAlbumStorage *storageAlbum) {
+ t_storageAlbum = storageAlbum;
+ t_type = ARTIST_STORAGE;
+ }
};
class CGenreStorage : public CCategoryStorage {
public:
- virtual bool Update(void);
+ CGenreStorage(CAlbumStorage *storageAlbum) {
+ t_storageAlbum = storageAlbum;
+ t_type = GENRE_STORAGE;
+ }
};
class CPlaylistStorage : public CCategoryStorage {
-private:
- static bool sm_CbPlaylistMember(int memb_id, media_info_h mdh, void *dt);
- static bool sm_CbEachPlaylist(media_playlist_h ph, void *dt);
- bool m_OnEachPlaylist(media_playlist_h ph);
- int m_GetPlaylistList(void);
-
public:
- virtual bool Update(void);
+ CPlaylistStorage() { t_type = PLAYLIST_STORAGE; }
};
private:
bool m_CreateFilter(void);
void m_DestroyFilter(void);
- void m_GetCategoryList(ECategoryType type);
- void m_DeleteCategoryList(ECategoryType type);
void m_UpdateLists(void);
public:
* limitations under the License.
*/
-
#include <Eina.h>
#include <media_content.h>
#include <sys/time.h>
#include "common.h"
-void CCategoryStorage::SetList(Eina_List *el)
-{
- elList = el;
-}
-
-
-Eina_List *CCategoryStorage::List(void)
-{
- return elList;
-}
-
-
-void CCategoryStorage::Delete(void)
-{
- if (!elList)
- return;
-
- CCategoryInfo *catinfo = NULL;
- void *obj = NULL;
-
- EINA_LIST_FREE(elList, obj) {
- catinfo = (CCategoryInfo *)obj;
- catinfo->Destroy();
- delete catinfo;
- }
-
- elList = NULL;
-}
-
-
-bool CArtistStorage::Update(void)
-{
- return true;
-}
-
-
-bool CGenreStorage::Update(void)
-{
- return true;
-}
+#define MUSIC_STR_UNKNOWN N_("Unknown")
-bool CPlaylistStorage::sm_CbPlaylistMember(int memb_id, media_info_h mdh, void *dt)
+bool CCategoryStorage::sm_CbPlaylistMember(int memb_id, media_info_h mdh, void *dt)
{
CCategoryInfo *catinfo = (CCategoryInfo *)dt;
CCategoryInfo::CListMember *member = NULL;
}
-bool CPlaylistStorage::sm_CbEachPlaylist(media_playlist_h ph, void *dt)
+bool CCategoryStorage::sm_CbEachPlaylist(media_playlist_h ph, void *dt)
{
- CPlaylistStorage *root = (CPlaylistStorage *)dt;
+ CCategoryStorage *root = (CCategoryStorage *)dt;
if (!root)
return false;
}
-bool CPlaylistStorage::m_OnEachPlaylist(media_playlist_h ph)
+bool CCategoryStorage::m_OnEachPlaylist(media_playlist_h ph)
{
if (!ph)
return false;
int categoryId = 0;
int songCount = 0;
_CHECK(catinfo = new CCategoryInfo)
- _CHECK(catinfo->Create())
- _CHECK(media_playlist_get_name(ph, &tmpStr) == MEDIA_CONTENT_ERROR_NONE)
- _CHECK(media_playlist_get_playlist_id(ph, &categoryId) == MEDIA_CONTENT_ERROR_NONE)
- _CHECK(media_playlist_get_media_count_from_db(catinfo->CategoryId(), NULL, &songCount) == MEDIA_CONTENT_ERROR_NONE)
- _CHECK(media_playlist_foreach_media_from_db(catinfo->CategoryId(), NULL, sm_CbPlaylistMember, (void *)catinfo) == MEDIA_CONTENT_ERROR_NONE)
+ _CHECK(catinfo->Create())
+ _CHECK(media_playlist_get_name(ph, &tmpStr) == MEDIA_CONTENT_ERROR_NONE)
+ _CHECK(media_playlist_get_playlist_id(ph, &categoryId) == MEDIA_CONTENT_ERROR_NONE)
+ _CHECK(media_playlist_get_media_count_from_db(catinfo->CategoryId(), NULL, &songCount) == MEDIA_CONTENT_ERROR_NONE)
+ _CHECK(media_playlist_foreach_media_from_db(catinfo->CategoryId(), NULL, sm_CbPlaylistMember, (void *)catinfo) == MEDIA_CONTENT_ERROR_NONE)
- _WHEN_SUCCESS {
+ _WHEN_SUCCESS{
catinfo->SetName(tmpStr);
catinfo->SetCategoryId(categoryId);
catinfo->SetSongCount(songCount);
}
-int CPlaylistStorage::m_GetPlaylistList(void)
+bool CCategoryStorage::m_GetCategoryList(void)
{
- if (media_playlist_foreach_playlist_from_db(NULL, sm_CbEachPlaylist, this)) {
- _ERR(" Get each playlist failed ");
- return false;
+ switch (t_type) {
+ case ARTIST_STORAGE:
+ case GENRE_STORAGE:
+ {
+ CAlbumInfo *alinfo = NULL;
+ CCategoryInfo *catinfo = NULL;
+ void *obj = NULL;
+ Eina_List *l = NULL;
+ char *str = NULL;
+ int count = 0;
+ bool ret;
+
+ if (!t_storageAlbum->List())
+ return false;
+
+ EINA_LIST_FOREACH(t_storageAlbum->List(), l, obj) {
+ alinfo = (CAlbumInfo *)obj;
+ if (t_type == ARTIST_STORAGE)
+ str = alinfo->Artist();
+ else
+ str = alinfo->Genre();
+ catinfo = CCategoryInfo::FindCategory(elList, str);
+
+ if (!catinfo) {
+ catinfo = new CCategoryInfo();
+ if (!catinfo)
+ continue;
+
+ ret = catinfo->Create();
+ if (!ret) {
+ delete catinfo;
+ continue;
+ }
+
+ catinfo->SetCategoryId(++count);
+ catinfo->SetAlbumCount(1);
+ catinfo->SetSongCount(alinfo->SongCount());
+ if (str)
+ catinfo->SetName(str);
+ else
+ catinfo->SetName(_(MUSIC_STR_UNKNOWN));
+
+ elList = eina_list_append(elList, catinfo);
+ }
+ else {
+ catinfo->SetAlbumCount(catinfo->AlbumCount() + 1);
+ catinfo->SetSongCount(catinfo->SongCount() + alinfo->SongCount());
+ }
+ catinfo->SetAlbumInfo(alinfo);
+ }
+ }
+ break;
+
+ case PLAYLIST_STORAGE:
+ {
+ if (media_playlist_foreach_playlist_from_db(NULL, sm_CbEachPlaylist, this)) {
+ _ERR(" Get each playlist failed ");
+ return false;
+ }
+ }
+ break;
+
+ default:
+ _ERR("Invalid Type");
+ ASSERT(0);
+ break;
}
return true;
}
-bool CPlaylistStorage::Update(void)
+Eina_List *CCategoryStorage::List(void)
+{
+ return elList;
+}
+
+
+void CCategoryStorage::Delete(void)
+{
+ if (!elList)
+ return;
+
+ CCategoryInfo *catinfo = NULL;
+ void *obj = NULL;
+
+ EINA_LIST_FREE(elList, obj) {
+ catinfo = (CCategoryInfo *)obj;
+ catinfo->Destroy();
+ delete catinfo;
+ }
+
+ elList = NULL;
+}
+
+
+bool CCategoryStorage::Update(void)
{
Delete();
- m_GetPlaylistList();
+ m_GetCategoryList();
+
return true;
}
storageAlbum = new CAlbumStorage(storageAlbumSong);
storageFolder = new CFolderStorage();
storagePlaylist = new CPlaylistStorage;
- storageArtist = new CArtistStorage;
- storageGenre = new CGenreStorage;
+ storageArtist = new CArtistStorage(storageAlbum);
+ storageGenre = new CGenreStorage(storageAlbum);
}
~SMediadata() {
delete storageGenre;
}
-void CMediadata::m_GetCategoryList(ECategoryType type)
-{
- CAlbumInfo *alinfo = NULL;
- CCategoryInfo *catinfo = NULL;
- void *obj = NULL;
- Eina_List *l = NULL;
- int count;
- bool ret;
-
- if (!m->storageAlbum->List())
- return;
-
- CCategoryStorage *stg = NULL;
- if (type == CAT_TYPE_ARTIST)
- stg = m->storageArtist;
- else
- stg = m->storageGenre;
- char *str;
-
- count = 0;
- EINA_LIST_FOREACH(m->storageAlbum->List(), l, obj) {
- alinfo = (CAlbumInfo *)obj;
- if (type == CAT_TYPE_ARTIST) {
- str = alinfo->Artist();
- }
- else {
- str = alinfo->Genre();
- }
- catinfo = CCategoryInfo::FindCategory(stg->List(), str);
-
- if (!catinfo) {
- catinfo = new CCategoryInfo();
- if (!catinfo)
- continue;
-
- ret = catinfo->Create();
- if (!ret) {
- delete catinfo;
- continue;
- }
-
- catinfo->SetCategoryId(++count);
- catinfo->SetAlbumCount(1);
- catinfo->SetSongCount(alinfo->SongCount());
- if (str)
- catinfo->SetName(str);
- else
- catinfo->SetName(_(MUSIC_STR_UNKNOWN));
- stg->SetList(eina_list_append(stg->List(), catinfo));
- }
- else {
- catinfo->SetAlbumCount(catinfo->AlbumCount() + 1);
- catinfo->SetSongCount(catinfo->SongCount() + alinfo->SongCount());
- }
-
- catinfo->SetAlbumInfo(alinfo);
- }
-}
-
-
-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();
- }
-}
-
-
void CMediadata::m_UpdateLists(void)
{
bool r;
m->storageSong->Update(m->filter);
m->storageAlbum->Update(m->filter);
-
- m_DeleteCategoryList(CAT_TYPE_ARTIST);
- m_GetCategoryList(CAT_TYPE_ARTIST);
-
- m_DeleteCategoryList(CAT_TYPE_GENRE);
- m_GetCategoryList(CAT_TYPE_GENRE);
-
+ m->storageArtist->Update();
+ m->storageGenre->Update();
m->storageFolder->Update(m->filter);
m_DestroyFilter();
m->storageAlbumSong->Delete();
m->storageFolder->Delete();
m->storageFolderSong->Delete();
- m_DeleteCategoryList(CAT_TYPE_ARTIST);
- m_DeleteCategoryList(CAT_TYPE_GENRE);
- m_DeleteCategoryList(CAT_TYPE_PLAYLISTS);
+ m->storageArtist->Delete();
+ m->storageGenre->Delete();
+ m->storagePlaylist->Delete();
m->storagePlaylistSong->Delete();
if (m->songInfo && m->songInfo->FlagCreate())