Refactoring of CCategoryStorage. 09/36709/3 accepted/tizen/tv/20150312.105749 submit/tizen_tv/20150312.064311
authorKim Tae Soo <taesoo46.kim@samsung.com>
Thu, 12 Mar 2015 06:29:51 +0000 (15:29 +0900)
committerKim Tae Soo <taesoo46.kim@samsung.com>
Thu, 12 Mar 2015 06:42:04 +0000 (15:42 +0900)
Change-Id: If244e30b48578e6a0e4dcfdcfb4e35733a703334
Signed-off-by: Kim Tae Soo <taesoo46.kim@samsung.com>
include/CategoryStorage.h
include/mediadata.h
src/data/CategoryStorage.cpp
src/data/mediadata.cpp

index 662a41c..b8a2840 100644 (file)
 #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; }
 };
 
 
index 2c4c5fa..024107f 100644 (file)
@@ -49,8 +49,6 @@ private:
 private:
        bool m_CreateFilter(void);
        void m_DestroyFilter(void);
-       void m_GetCategoryList(ECategoryType type);
-       void m_DeleteCategoryList(ECategoryType type);
        void m_UpdateLists(void);
 
 public:
index 4ea93bd..e059c59 100644 (file)
@@ -14,7 +14,6 @@
  * 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;
@@ -111,9 +71,9 @@ bool CPlaylistStorage::sm_CbPlaylistMember(int memb_id, media_info_h mdh, void *
 }
 
 
-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;
@@ -124,7 +84,7 @@ bool CPlaylistStorage::sm_CbEachPlaylist(media_playlist_h ph, void *dt)
 }
 
 
-bool CPlaylistStorage::m_OnEachPlaylist(media_playlist_h ph)
+bool CCategoryStorage::m_OnEachPlaylist(media_playlist_h ph)
 {
        if (!ph)
                return false;
@@ -135,13 +95,13 @@ bool CPlaylistStorage::m_OnEachPlaylist(media_playlist_h ph)
                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);
@@ -160,20 +120,108 @@ bool CPlaylistStorage::m_OnEachPlaylist(media_playlist_h ph)
 }
 
 
-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;
 }
index fb7844b..dad3565 100644 (file)
@@ -72,8 +72,8 @@ struct SMediadata {
                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;
@@ -311,83 +311,6 @@ void CMediadata::m_DestroyFilter(void)
 }
 
 
-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;
@@ -400,13 +323,8 @@ void CMediadata::m_UpdateLists(void)
 
        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();
@@ -447,9 +365,9 @@ void CMediadata::Destroy(void)
        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())