Refactoring: Manage data list using XXXStroage class 04/36704/1 accepted/tizen/tv/20150312.061540 submit/tizen_tv/20150312.054937
authorKim Tae Soo <taesoo46.kim@samsung.com>
Thu, 12 Mar 2015 05:47:42 +0000 (14:47 +0900)
committerKim Tae Soo <taesoo46.kim@samsung.com>
Thu, 12 Mar 2015 05:47:42 +0000 (14:47 +0900)
Change-Id: I2b9c937276636d5b4f09999d87a7f648a2efde1b
Signed-off-by: Kim Tae Soo <taesoo46.kim@samsung.com>
CMakeLists.txt
include/AlbumStorage.h
include/FolderStorage.h [new file with mode: 0644]
include/SongStorage.h
include/mediadata.h
src/data/AlbumStorage.cpp
src/data/FolderStorage.cpp [new file with mode: 0644]
src/data/SongStorage.cpp
src/data/mediadata.cpp

index 31ace97..bc0740e 100644 (file)
@@ -89,6 +89,7 @@ SET(SRCS src/main.cpp
         src/data/CategoryStorage.cpp
         src/data/SongStorage.cpp
         src/data/AlbumStorage.cpp
+        src/data/FolderStorage.cpp
 )
 
 SET(TARGET_EDJ "${PROJECT_NAME}.edj")
index 517214f..c0813d3 100644 (file)
@@ -28,7 +28,7 @@ private:
 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) {
diff --git a/include/FolderStorage.h b/include/FolderStorage.h
new file mode 100644 (file)
index 0000000..ece70ce
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * 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
index c843034..02318d2 100644 (file)
@@ -17,7 +17,6 @@
 #ifndef __SONG_STORAGE_H__
 #define __SONG_STORAGE_H__
 
-
 class CSongStorage {
 public:
        enum EType {
@@ -32,6 +31,7 @@ protected:
        EType t_type;
        int t_memberId;
        CSongInfo *t_songInfo;
+       filter_h t_filter;
        Eina_List *elList;
 
 private:
@@ -39,7 +39,7 @@ 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; }
@@ -84,6 +84,4 @@ public:
        CSongInfo *SongInfo(filter_h filter);
 };
 
-
-
 #endif // __SONG_STORAGE_H__
\ No newline at end of file
index 8648e8b..2c4c5fa 100644 (file)
@@ -44,20 +44,13 @@ private:
        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:
index b02eaa2..36993d8 100644 (file)
@@ -52,12 +52,12 @@ bool CAlbumStorage::m_OnEachAlbum(media_album_h ah)
                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())
@@ -114,7 +114,7 @@ bool CAlbumStorage::m_GetAlbumList(void)
        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;
        }
 
diff --git a/src/data/FolderStorage.cpp b/src/data/FolderStorage.cpp
new file mode 100644 (file)
index 0000000..dc47a70
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * 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
index 7f33e23..013fd21 100644 (file)
@@ -49,16 +49,16 @@ bool CSongStorage::m_OnEachSong(media_info_h mh)
        _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())
@@ -131,7 +131,7 @@ bool CSongStorage::m_OnEachSong(media_info_h mh)
 }
 
 
-bool CSongStorage::t_GetSongList(CNameInfo *info, filter_h filter)
+bool CSongStorage::t_GetSongList(CNameInfo *info)
 {
        int r;
 
@@ -139,7 +139,7 @@ bool CSongStorage::t_GetSongList(CNameInfo *info, filter_h filter)
        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");
@@ -153,7 +153,7 @@ bool CSongStorage::t_GetSongList(CNameInfo *info, filter_h filter)
                        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");
@@ -167,7 +167,7 @@ bool CSongStorage::t_GetSongList(CNameInfo *info, filter_h filter)
                        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");
@@ -247,39 +247,49 @@ void CSongStorage::Delete(void)
 
 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
index e08035c..fb7844b 100644 (file)
@@ -31,6 +31,7 @@
 #include "CategoryStorage.h"
 #include "SongStorage.h"
 #include "AlbumStorage.h"
+#include "FolderStorage.h"
 #include "mediadata.h"
 #include "common.h"
 
@@ -41,8 +42,6 @@
 
 
 struct SMediadata {
-       Eina_List *folderlist;
-
        CSongsSongStorage    *storageSong;
        CAlbumSongStorage    *storageAlbumSong;
        CFolderSongStorage   *storageFolderSong;
@@ -50,6 +49,7 @@ struct SMediadata {
        CSingleSongStorage   *storageSingleSong;
 
        CAlbumStorage *storageAlbum;
+       CFolderStorage *storageFolder;
 
        CPlaylistStorage *storagePlaylist;
        CArtistStorage   *storageArtist;
@@ -70,6 +70,7 @@ struct SMediadata {
                storagePlaylistSong = new CPlaylistSongStorage;
                storageSingleSong = new CSingleSongStorage;
                storageAlbum = new CAlbumStorage(storageAlbumSong);
+               storageFolder = new CFolderStorage();
                storagePlaylist = new CPlaylistStorage;
                storageArtist = new CArtistStorage;
                storageGenre = new CGenreStorage;
@@ -78,6 +79,7 @@ struct SMediadata {
                delete storageGenre;
                delete storageArtist;
                delete storagePlaylist;
+               delete storageFolder;
                delete storageAlbum;
                delete storageSingleSong;
                delete storagePlaylistSong;
@@ -232,45 +234,6 @@ bool CPlaylistMgr::Remove(int plid, Eina_List *elIdList)
 }
 
 
-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;
@@ -304,103 +267,6 @@ bool CMediadata::sm_CbPlaylist(media_playlist_h ph, void* 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];
@@ -505,18 +371,20 @@ void CMediadata::m_GetCategoryList(ECategoryType type)
 }
 
 
-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;
 }
 
 
@@ -539,8 +407,7 @@ void CMediadata::m_UpdateLists(void)
        m_DeleteCategoryList(CAT_TYPE_GENRE);
        m_GetCategoryList(CAT_TYPE_GENRE);
 
-       m_DeleteFolderList();
-       m_GetFolderList();
+       m->storageFolder->Update(m->filter);
 
        m_DestroyFilter();
 }
@@ -578,7 +445,7 @@ void CMediadata::Destroy(void)
        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);
@@ -697,7 +564,7 @@ Eina_List *CMediadata::Medialist(int source_type, int listType, void *info)
                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);