From 086ccb98bd2da9eebe8e059b0be066c49a8fe657 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 14:47:42 +0900 Subject: [PATCH 01/16] Refactoring: Manage data list using XXXStroage class Change-Id: I2b9c937276636d5b4f09999d87a7f648a2efde1b Signed-off-by: Kim Tae Soo --- CMakeLists.txt | 1 + include/AlbumStorage.h | 2 +- include/FolderStorage.h | 42 +++++++++++ include/SongStorage.h | 6 +- include/mediadata.h | 9 +-- src/data/AlbumStorage.cpp | 14 ++-- src/data/FolderStorage.cpp | 157 +++++++++++++++++++++++++++++++++++++++++ src/data/SongStorage.cpp | 48 ++++++++----- src/data/mediadata.cpp | 169 +++++---------------------------------------- 9 files changed, 258 insertions(+), 190 deletions(-) create mode 100644 include/FolderStorage.h create mode 100644 src/data/FolderStorage.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 31ace97..bc0740e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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") diff --git a/include/AlbumStorage.h b/include/AlbumStorage.h index 517214f..c0813d3 100644 --- a/include/AlbumStorage.h +++ b/include/AlbumStorage.h @@ -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 index 0000000..ece70ce --- /dev/null +++ b/include/FolderStorage.h @@ -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 diff --git a/include/SongStorage.h b/include/SongStorage.h index c843034..02318d2 100644 --- a/include/SongStorage.h +++ b/include/SongStorage.h @@ -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 diff --git a/include/mediadata.h b/include/mediadata.h index 8648e8b..2c4c5fa 100644 --- a/include/mediadata.h +++ b/include/mediadata.h @@ -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: diff --git a/src/data/AlbumStorage.cpp b/src/data/AlbumStorage.cpp index b02eaa2..36993d8 100644 --- a/src/data/AlbumStorage.cpp +++ b/src/data/AlbumStorage.cpp @@ -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 index 0000000..dc47a70 --- /dev/null +++ b/src/data/FolderStorage.cpp @@ -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 +#include +#include +#include +#include +#include "dbg.h" +#include "i18n.h" +#include "define.h" + +#include +#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 diff --git a/src/data/SongStorage.cpp b/src/data/SongStorage.cpp index 7f33e23..013fd21 100644 --- a/src/data/SongStorage.cpp +++ b/src/data/SongStorage.cpp @@ -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 diff --git a/src/data/mediadata.cpp b/src/data/mediadata.cpp index e08035c..fb7844b 100644 --- a/src/data/mediadata.cpp +++ b/src/data/mediadata.cpp @@ -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); -- 2.7.4 From 14b54d924aa9ae8559c40bec0a166d5de42ad22b Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 15:29:51 +0900 Subject: [PATCH 02/16] Refactoring of CCategoryStorage. Change-Id: If244e30b48578e6a0e4dcfdcfb4e35733a703334 Signed-off-by: Kim Tae Soo --- include/CategoryStorage.h | 37 +++++++--- include/mediadata.h | 2 - src/data/CategoryStorage.cpp | 162 ++++++++++++++++++++++++++++--------------- src/data/mediadata.cpp | 96 ++----------------------- 4 files changed, 138 insertions(+), 159 deletions(-) diff --git a/include/CategoryStorage.h b/include/CategoryStorage.h index 662a41c..b8a2840 100644 --- a/include/CategoryStorage.h +++ b/include/CategoryStorage.h @@ -17,41 +17,56 @@ #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; } }; diff --git a/include/mediadata.h b/include/mediadata.h index 2c4c5fa..024107f 100644 --- a/include/mediadata.h +++ b/include/mediadata.h @@ -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: diff --git a/src/data/CategoryStorage.cpp b/src/data/CategoryStorage.cpp index 4ea93bd..e059c59 100644 --- a/src/data/CategoryStorage.cpp +++ b/src/data/CategoryStorage.cpp @@ -14,7 +14,6 @@ * limitations under the License. */ - #include #include #include @@ -33,49 +32,10 @@ #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; } diff --git a/src/data/mediadata.cpp b/src/data/mediadata.cpp index fb7844b..dad3565 100644 --- a/src/data/mediadata.cpp +++ b/src/data/mediadata.cpp @@ -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()) -- 2.7.4 From 0c84823bbee01026106856e1e0ecf99cb6715d73 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 16:03:19 +0900 Subject: [PATCH 03/16] Fix bug Change-Id: Ic14d664cd56a60fa0b64c48e219705acdbae2835 Signed-off-by: Kim Tae Soo --- src/data/AlbumStorage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/AlbumStorage.cpp b/src/data/AlbumStorage.cpp index 36993d8..91c0325 100644 --- a/src/data/AlbumStorage.cpp +++ b/src/data/AlbumStorage.cpp @@ -64,7 +64,7 @@ bool CAlbumStorage::m_OnEachAlbum(media_album_h ah) _CHECK(media_album_get_album_id(ah, &albumId) == MEDIA_CONTENT_ERROR_NONE) _CHECK(media_album_get_name(ah, &name) == MEDIA_CONTENT_ERROR_NONE) _CHECK(media_album_get_artist(ah, &artist) == MEDIA_CONTENT_ERROR_NONE) - _CHECK(media_album_get_media_count_from_db(alinfo->AlbumId(), m_filter, &songCount)) + _CHECK(media_album_get_media_count_from_db(albumId, m_filter, &songCount) == MEDIA_CONTENT_ERROR_NONE) _WHEN_SUCCESS{ alinfo->SetAlbumId(albumId); -- 2.7.4 From 833964d9486df0c658dd75b810309c6c30f237f5 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 16:30:28 +0900 Subject: [PATCH 04/16] Fix Bug: Button doesn't work in Category-Album layout Change-Id: I1a5b4776305587ad7fc5bdd0483adfb6abf46c7c Signed-off-by: Kim Tae Soo --- include/category-layout.h | 4 +++- src/views/category-layout.cpp | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/include/category-layout.h b/include/category-layout.h index 1a89dcb..848eee2 100644 --- a/include/category-layout.h +++ b/include/category-layout.h @@ -19,7 +19,7 @@ class CCategoryLayout : public CExtBaseLayout, public CListenerMgr, - public IKeyDownListener, public IMouseMoveListener, + public IKeyDownListener, public IMouseClickedListener, public IMouseMoveListener, public IRealizedListener, public IUnrealizedListener, public IActivatedListener { private: struct SCategoryLayout *m; @@ -132,6 +132,7 @@ public: CCategoryLayout(const char *pLayoutId) : CExtBaseLayout(pLayoutId), IKeyDownListener(this), + IMouseClickedListener(this), IMouseMoveListener(this), IRealizedListener(this), IUnrealizedListener(this), @@ -151,6 +152,7 @@ public: public: virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev); + virtual void OnMouseClicked(int id, Evas_Object *obj); virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev); virtual void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item); virtual void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item); diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index b86e802..ef58b29 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -773,7 +773,7 @@ void CCategoryLayout::m_AddButtons(void) elm_object_text_set(m->add_btn[i], _(btninfo[i].name)); elm_object_style_set(m->add_btn[i], btninfo[i].style); - Connect(m->add_btn[i], btninfo[ABTN_LAST].type, TYPE_CLICKED | TYPE_MOUSE_MOVE); + Connect(m->add_btn[i], btninfo[i].type, TYPE_CLICKED | TYPE_MOUSE_MOVE); img = elm_image_add(m->add_btn[i]); if (img) { @@ -1390,9 +1390,40 @@ void CCategoryLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Ke } +void CCategoryLayout::OnMouseClicked(int id, Evas_Object *obj) +{ + switch (id) + { + case CATEGORY_LAYOUT_PLAY_BUTTON: + m_GotoPlayback(ADD_TYPE_FRESH, NULL); + break; + + case CATEGORY_LAYOUT_NEXT_BUTTON: + m_GotoPlayback(ADD_TYPE_NEXT, NULL); + break; + + case CATEGORY_LAYOUT_LAST_BUTTON: + m_GotoPlayback(ADD_TYPE_END, NULL); + break; + + default: + break; + } +} + + void CCategoryLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) { switch (id) { + case CATEGORY_LAYOUT_PLAY_BUTTON: + case CATEGORY_LAYOUT_NEXT_BUTTON: + case CATEGORY_LAYOUT_LAST_BUTTON: + { + if (!elm_object_focus_get(obj)) + elm_object_focus_set(obj, EINA_TRUE); + } + break; + case CATEGORY_LAYOUT_GENGRID: { Elm_Object_Item *item; -- 2.7.4 From 3a7fadaed2d8a15f79fb469290fb40a4e20efacf Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 19:28:10 +0900 Subject: [PATCH 05/16] Fix memory error (memory allocated by calloc() should be freed with free()) Change-Id: I779b8f4a4ee795283d2643da025244fb08433133 Signed-off-by: Kim Tae Soo --- src/data/category_info.cpp | 4 +++- src/views/context-view.cpp | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/data/category_info.cpp b/src/data/category_info.cpp index 803d902..d3f4123 100644 --- a/src/data/category_info.cpp +++ b/src/data/category_info.cpp @@ -89,7 +89,9 @@ void CCategoryInfo::Destroy(void) if (m->memberList) { EINA_LIST_FREE(m->memberList, obj) { item = (CListMember*)obj; - delete item->mediaId; + // This value is from media_info_get_media_id. + // So should be freed with free(). + free(item->mediaId); delete item; } } diff --git a/src/views/context-view.cpp b/src/views/context-view.cpp index 638999e..7a47d52 100644 --- a/src/views/context-view.cpp +++ b/src/views/context-view.cpp @@ -103,7 +103,6 @@ struct SContextView { Evas_Object *playbtn; Evas_Object *first_line[TABLE_MAX_COL]; Evas_Object *last_line[TABLE_MAX_COL]; - //Evas_Object *popup; CRemovePopupWindow *popup; CPlayListCtxPopup *ctxpopup; Ecore_Idler *idler; -- 2.7.4 From 8080e19ffc2ebe49607db662c4d7cd0d1e45088d Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 19:38:02 +0900 Subject: [PATCH 06/16] Fix memory error Change-Id: Ib5e182378849fb908e4c90e332a81a8d69dfee7d Signed-off-by: Kim Tae Soo --- src/data/category_info.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/category_info.cpp b/src/data/category_info.cpp index d3f4123..c764a43 100644 --- a/src/data/category_info.cpp +++ b/src/data/category_info.cpp @@ -48,7 +48,8 @@ CCategoryInfo::CListMember *CCategoryInfo::m_MemberDuplicate(CListMember *member return NULL; item->memberId = member->memberId; - item->mediaId = t_Clone(member->mediaId); + item->mediaId = (char *)calloc(1, strlen(member->mediaId) + 1); + strcpy(item->mediaId, member->mediaId); return item; } -- 2.7.4 From f84f43ac6b8da83dae04f0037ddebe3c7e00b367 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 21:00:38 +0900 Subject: [PATCH 07/16] Fix memory issues Change-Id: I92c1b1347071e51d122ceb40e133244e10917d0a Signed-off-by: Kim Tae Soo --- src/data/category_info.cpp | 9 ++++++--- src/views/PlayListCtxPopup.cpp | 11 +++++++++++ src/views/song-layout.cpp | 4 +++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/data/category_info.cpp b/src/data/category_info.cpp index c764a43..5f74381 100644 --- a/src/data/category_info.cpp +++ b/src/data/category_info.cpp @@ -48,8 +48,10 @@ CCategoryInfo::CListMember *CCategoryInfo::m_MemberDuplicate(CListMember *member return NULL; item->memberId = member->memberId; - item->mediaId = (char *)calloc(1, strlen(member->mediaId) + 1); - strcpy(item->mediaId, member->mediaId); + if (member->mediaId) { + item->mediaId = (char *)calloc(1, strlen(member->mediaId) + 1); + strcpy(item->mediaId, member->mediaId); + } return item; } @@ -92,7 +94,8 @@ void CCategoryInfo::Destroy(void) item = (CListMember*)obj; // This value is from media_info_get_media_id. // So should be freed with free(). - free(item->mediaId); + if (item->mediaId) + free(item->mediaId); delete item; } } diff --git a/src/views/PlayListCtxPopup.cpp b/src/views/PlayListCtxPopup.cpp index 3067497..04821d5 100644 --- a/src/views/PlayListCtxPopup.cpp +++ b/src/views/PlayListCtxPopup.cpp @@ -94,6 +94,7 @@ bool CPlayListCtxPopup::Create(Evas_Object* base, const SCallback* callback, Ein if (m->listSize == 0) { _DBG("Playlist is empty."); delete m; + m = NULL; return false; } @@ -117,7 +118,17 @@ bool CPlayListCtxPopup::Create(Evas_Object* base, const SCallback* callback, Ein bool r = CCtxPopup::Create(base, callback, true); if (r == false) { _ERR("CCtxPopup::Create failed"); + for (i = 0; i < m->listSize; i++) { + delete[] m->settingTexts[i]; + delete[] m->btnIds[i]; + } + + delete[] m->settingTexts; + delete[] m->btnIds; + delete[] m->dbIds; delete m; + + m = NULL; return false; } diff --git a/src/views/song-layout.cpp b/src/views/song-layout.cpp index daa7d23..b5abab1 100644 --- a/src/views/song-layout.cpp +++ b/src/views/song-layout.cpp @@ -588,7 +588,9 @@ void CSongLayout::Destroy(void) CExtBaseLayout::Destroy(); evas_object_del(Layout()); - free(m->ctxtinfo); + if (m->ctxtinfo) + free(m->ctxtinfo); + delete[] m->uri; delete m; m = NULL; -- 2.7.4 From 1866954bd078ba5957eb39f9a771885437777e5b Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 21:19:48 +0900 Subject: [PATCH 08/16] Source code arrangement (remove warning and unnecessary code) Change-Id: I9e8292b59ef6c132b4a12737fbbabe79aa3072f3 Signed-off-by: Kim Tae Soo --- src/views/category-layout.cpp | 2 +- src/views/category-songs-layout.cpp | 3 --- src/views/song-layout.cpp | 3 +-- 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index ef58b29..bf46bb5 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -909,7 +909,7 @@ void CCategoryLayout::m_CreateCatgrid(bool sort_flag) void CCategoryLayout::m_SortCatgrid(void) { - char *sortFuncType[] = { + const char *sortFuncType[] = { SORT_BY_NAME_AZ, SORT_BY_NAME_ZA }; diff --git a/src/views/category-songs-layout.cpp b/src/views/category-songs-layout.cpp index 611cbe0..58099e9 100644 --- a/src/views/category-songs-layout.cpp +++ b/src/views/category-songs-layout.cpp @@ -956,9 +956,6 @@ void CCategorySongsLayout::t_OnShow(void) { ASSERT(m); - SParcel parcel; - parcel.ctxtInfo = NULL; - m_EmptySongList(); if (m->depth == DEPTH_SONG_LIST) { diff --git a/src/views/song-layout.cpp b/src/views/song-layout.cpp index b5abab1..34e73f8 100644 --- a/src/views/song-layout.cpp +++ b/src/views/song-layout.cpp @@ -588,8 +588,7 @@ void CSongLayout::Destroy(void) CExtBaseLayout::Destroy(); evas_object_del(Layout()); - if (m->ctxtinfo) - free(m->ctxtinfo); + free(m->ctxtinfo); delete[] m->uri; delete m; -- 2.7.4 From 6e753f3ebb80448e0d023058cb20d7233034414c Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Thu, 12 Mar 2015 21:29:41 +0900 Subject: [PATCH 09/16] Remove unused function Change-Id: I13c56c4c54d3075ca606fe7a81ab0f8c1e006589 Signed-off-by: Kim Tae Soo --- include/context-view.h | 1 - src/data/mediadata.cpp | 2 +- src/views/context-view.cpp | 17 ----------------- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/include/context-view.h b/include/context-view.h index 41331f1..8461410 100644 --- a/include/context-view.h +++ b/include/context-view.h @@ -40,7 +40,6 @@ private: void m_OnCancel(CPopupWindow *instance); static int sm_CbSortPlaylist(const void *d1, const void *d2); - static void sm_CbPopupDeleted(void *data, Evas *e, Evas_Object *obj, void *ei); static Eina_Bool sm_CbSelectIdler(void *dt); Eina_Bool m_OnSelectIdler(void); diff --git a/src/data/mediadata.cpp b/src/data/mediadata.cpp index dad3565..9e4199a 100644 --- a/src/data/mediadata.cpp +++ b/src/data/mediadata.cpp @@ -246,7 +246,7 @@ bool CMediadata::sm_CbPlaylist(media_playlist_h ph, void* dt) if (!item) return false; - if (media_playlist_get_name(ph, (char **)&(item->name)) != + if (media_playlist_get_name(ph, &(item->name)) != MEDIA_CONTENT_ERROR_NONE) { _ERR(" Failed to read playlist name "); free(item); diff --git a/src/views/context-view.cpp b/src/views/context-view.cpp index 7a47d52..4ba8af1 100644 --- a/src/views/context-view.cpp +++ b/src/views/context-view.cpp @@ -238,23 +238,6 @@ int CContextView::sm_CbSortPlaylist(const void *d1, const void *d2) } -void CContextView::sm_CbPopupDeleted(void *data, Evas *e, Evas_Object *obj, void *ei) -{ - Eina_List *list = (Eina_List *)data; - SCtxtPlaylistItem *item = NULL; - void *listObj = NULL; - - if (!list) - return; - - EINA_LIST_FREE(list, listObj) { - item = (SCtxtPlaylistItem *)listObj; - free(item->name); - free(item); - } -} - - Eina_Bool CContextView::sm_CbSelectIdler(void *dt) { CContextView *root = (CContextView *)dt; -- 2.7.4 From 586465d88b100637a634b821dc2cd492d9924472 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Sat, 14 Mar 2015 18:08:58 +0900 Subject: [PATCH 10/16] Fix Bug (Playlist creation failed) Change-Id: If010ef836760f313b6bdc140f2e41cdd93243571 Signed-off-by: Kim Tae Soo --- include/category-songs-layout.h | 8 +++++++- src/data/CategoryStorage.cpp | 10 +++++----- src/data/mediadata.cpp | 25 ++++++++++++++----------- src/views/category-layout.cpp | 14 +++++++++++--- src/views/category-songs-layout.cpp | 15 +++++++++------ 5 files changed, 46 insertions(+), 26 deletions(-) diff --git a/include/category-songs-layout.h b/include/category-songs-layout.h index 37586ca..418db0b 100644 --- a/include/category-songs-layout.h +++ b/include/category-songs-layout.h @@ -19,7 +19,6 @@ #include "category-layout.h" -struct SCategorySongsItemsInfo; class CCategorySongsLayout : public CExtBaseLayout, public CListenerMgr, public IKeyDownListener, public IMouseMoveListener, public IMouseClickedListener, @@ -37,6 +36,12 @@ public: SELECT_TYPE_REMOVE }; + struct SCategorySongsItemsInfo { + CSongInfo *sinfo; + Elm_Object_Item *item; + bool check_status; + }; + private: struct SCategorySongsLayout *m; @@ -95,6 +100,7 @@ public: virtual void Destroy(void); void SetParameter(EDepth depth, ESelectType selType, CCategoryInfo *catInfo, CAlbumInfo *albumInfo); + Eina_List *CategorySongItemInfoList(void); public: virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev); diff --git a/src/data/CategoryStorage.cpp b/src/data/CategoryStorage.cpp index e059c59..0e3642e 100644 --- a/src/data/CategoryStorage.cpp +++ b/src/data/CategoryStorage.cpp @@ -91,18 +91,18 @@ bool CCategoryStorage::m_OnEachPlaylist(media_playlist_h ph) _CREATE_BEGIN{ CCategoryInfo *catinfo = NULL; - char *tmpStr = NULL; + char *name = NULL; 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_name(ph, &name) == 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(media_playlist_get_media_count_from_db(categoryId, NULL, &songCount) == MEDIA_CONTENT_ERROR_NONE) + _CHECK(media_playlist_foreach_media_from_db(categoryId, NULL, sm_CbPlaylistMember, (void *)catinfo) == MEDIA_CONTENT_ERROR_NONE) _WHEN_SUCCESS{ - catinfo->SetName(tmpStr); + catinfo->SetName(name); catinfo->SetCategoryId(categoryId); catinfo->SetSongCount(songCount); elList = eina_list_append(elList, catinfo); diff --git a/src/data/mediadata.cpp b/src/data/mediadata.cpp index 9e4199a..d534bdf 100644 --- a/src/data/mediadata.cpp +++ b/src/data/mediadata.cpp @@ -95,26 +95,29 @@ bool CPlaylistMgr::Alloc(const char *name, Eina_List *elIdList) ASSERT(name); ASSERT(elIdList); + media_playlist_h ph = NULL; bool ret = false; - media_playlist_h ph; - if (media_playlist_insert_to_db(name, &ph) == MEDIA_CONTENT_ERROR_NONE) { + int r; + + r = media_playlist_insert_to_db(name, &ph); + if (r == MEDIA_CONTENT_ERROR_NONE) { Eina_List *l; void *obj; EINA_LIST_FOREACH(elIdList, l, obj) { char *id = (char *)obj; - media_playlist_add_media(ph, id); + r = media_playlist_add_media(ph, id); + if (r != MEDIA_CONTENT_ERROR_NONE) + return false; } - if (media_playlist_update_to_db(ph) == MEDIA_CONTENT_ERROR_NONE) { + r = media_playlist_update_to_db(ph); + if (r == MEDIA_CONTENT_ERROR_NONE) ret = true; - } - else { - _ERR("CPlaylist::Insert failed./media_plyalist_update_to_db"); - } - } - else { - _ERR("CPlaylist::Insert failed./media_playlist_insert_to_db"); + else + _ERR("CPlaylist::Insert failed. (media_playlist_update_to_db)"); } + else + _ERR("CPlaylist::Insert failed. (media_playlist_insert_to_db)"); return ret; } diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index bf46bb5..ec2a074 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -158,7 +158,7 @@ void CCategoryLayout::m_OnEntrynameSet(const char *name) if (!name) return; - idlist = m_GetSelectedList(m->it_infolist, (int)ID_TYPE_MEDIA); + idlist = m_GetSelectedList(m->layoutCatSongs->CategorySongItemInfoList(), (int)ID_TYPE_MEDIA); str = strdup(name); t.epopup->Destroy(); @@ -180,8 +180,16 @@ void CCategoryLayout::m_OnEntrynameSet(const char *name) return; } + free(str); t.depth = E_DEPTH_CATEGORY; t_UpdateLayoutWithFocus(); + + SParcel parcel; + parcel.ctxtInfo = NULL; + parcel.updateType = E_DEPTH_UPDATE; + parcel.layoutId = MUSIC_CATEGORY_PLAYLISTS_SONGS_LAYOUT; + parcel.keyEvent = NULL; + m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel); } @@ -599,7 +607,7 @@ void CCategoryLayout::m_GotoPlayback(int mode, char *id) Eina_List *CCategoryLayout::m_GetSelectedList(Eina_List *infolist, int type) { Eina_List *idlist = NULL, *l = NULL; - SCatItemInfo *itinfo = NULL; + CCategorySongsLayout::SCategorySongsItemsInfo *itinfo = NULL; void *obj = NULL; char *id = NULL; EIdType eType = (EIdType)type; @@ -609,7 +617,7 @@ Eina_List *CCategoryLayout::m_GetSelectedList(Eina_List *infolist, int type) idlist = NULL; EINA_LIST_FOREACH(infolist, l, obj) { - itinfo = (SCatItemInfo *)obj; + itinfo = (CCategorySongsLayout::SCategorySongsItemsInfo *)obj; if (!itinfo->check_status) continue; diff --git a/src/views/category-songs-layout.cpp b/src/views/category-songs-layout.cpp index 58099e9..4da5a47 100644 --- a/src/views/category-songs-layout.cpp +++ b/src/views/category-songs-layout.cpp @@ -69,11 +69,6 @@ enum EIdType { ID_TYPE_MEMBER }; -struct SCategorySongsItemsInfo { - CSongInfo *sinfo; - Elm_Object_Item *item; - bool check_status; -}; struct SCategorySongsLayout { Evas_Object *win; @@ -381,7 +376,7 @@ void CCategorySongsLayout::m_RemoveFocusIdler(void) } -SCategorySongsItemsInfo *CCategorySongsLayout::m_FindItemInfoFromItem(Eina_List *list, Elm_Object_Item *item) +CCategorySongsLayout::SCategorySongsItemsInfo *CCategorySongsLayout::m_FindItemInfoFromItem(Eina_List *list, Elm_Object_Item *item) { Eina_List *l = NULL; SCategorySongsItemsInfo *itinfo = NULL; @@ -952,6 +947,14 @@ void CCategorySongsLayout::SetParameter(EDepth depth, ESelectType selType, CCate } +Eina_List *CCategorySongsLayout::CategorySongItemInfoList(void) +{ + ASSERT(m); + + return m->it_infolist; +} + + void CCategorySongsLayout::t_OnShow(void) { ASSERT(m); -- 2.7.4 From 50e224f8d194f66c4193f68f2a4663d11e92f1f9 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Mon, 16 Mar 2015 10:01:38 +0900 Subject: [PATCH 11/16] Apply ASSERT Change-Id: Ia5d5f8921037f840a42178fbaaea5935305c7443 Signed-off-by: Kim Tae Soo --- src/data/album_info.cpp | 34 +++++++++++-------------------- src/data/category_info.cpp | 42 ++++++++++++++------------------------ src/data/folder_info.cpp | 22 ++++++++------------ src/data/song_info.cpp | 51 ++++++++++++++++------------------------------ src/views/base-view.cpp | 26 ++++++++++++----------- 5 files changed, 66 insertions(+), 109 deletions(-) diff --git a/src/data/album_info.cpp b/src/data/album_info.cpp index a131b6e..255f001 100644 --- a/src/data/album_info.cpp +++ b/src/data/album_info.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "dbg.h" #include "i18n.h" #include "album_info.h" @@ -35,8 +36,7 @@ struct SAlbumInfo { bool CAlbumInfo::Create() { - if (m) - return false; + ASSERT(!m); m = new SAlbumInfo(); if (!m) { @@ -56,8 +56,7 @@ bool CAlbumInfo::Create() void CAlbumInfo::Destroy() { - if (!m) - return; + ASSERT(m); CExtNameInfo::Destroy(); @@ -70,8 +69,7 @@ void CAlbumInfo::Destroy() char *CAlbumInfo::Artist() { - if (!m) - return NULL; + ASSERT(m); return m->artist; } @@ -79,8 +77,7 @@ char *CAlbumInfo::Artist() char *CAlbumInfo::Genre() { - if (!m) - return NULL; + ASSERT(m); return m->genre; } @@ -88,8 +85,7 @@ char *CAlbumInfo::Genre() int CAlbumInfo::SongCount() { - if (!m) - return 0; + ASSERT(m); return m->songCount; } @@ -97,8 +93,7 @@ int CAlbumInfo::SongCount() int CAlbumInfo::AlbumId() { - if (!m) - return 0; + ASSERT(m); return m->albumId; } @@ -106,8 +101,7 @@ int CAlbumInfo::AlbumId() bool CAlbumInfo::SetArtist(const char *artist) { - if (!m) - return false; + ASSERT(m); delete[] m->artist; m->artist = NULL; @@ -124,8 +118,7 @@ bool CAlbumInfo::SetArtist(const char *artist) bool CAlbumInfo::SetGenre(const char *genre) { - if (!m) - return false; + ASSERT(m); delete[] m->genre; m->genre = NULL; @@ -142,8 +135,7 @@ bool CAlbumInfo::SetGenre(const char *genre) bool CAlbumInfo::SetSongCount(int songCount) { - if (!m) - return false; + ASSERT(m); m->songCount = songCount; @@ -153,8 +145,7 @@ bool CAlbumInfo::SetSongCount(int songCount) bool CAlbumInfo::SetAlbumId(int albumId) { - if (!m) - return false; + ASSERT(m); m->albumId = albumId; @@ -164,8 +155,7 @@ bool CAlbumInfo::SetAlbumId(int albumId) bool CAlbumInfo::Duplicate(CNameInfo *obj) { - if (!m) - return false; + ASSERT(m); CAlbumInfo* dst = (CAlbumInfo*)obj; diff --git a/src/data/category_info.cpp b/src/data/category_info.cpp index 5f74381..979adeb 100644 --- a/src/data/category_info.cpp +++ b/src/data/category_info.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include "dbg.h" #include "i18n.h" #include "define.h" @@ -59,8 +60,7 @@ CCategoryInfo::CListMember *CCategoryInfo::m_MemberDuplicate(CListMember *member bool CCategoryInfo::Create(void) { - if (m) - return false; + ASSERT(!m); m = new SCategoryInfo(); if (!m) { @@ -80,12 +80,11 @@ bool CCategoryInfo::Create(void) void CCategoryInfo::Destroy(void) { + ASSERT(m); + CListMember *item; void *obj; - if (!m) - return; - CExtNameInfo::Destroy(); eina_list_free(m->albumList); @@ -107,8 +106,7 @@ void CCategoryInfo::Destroy(void) int CCategoryInfo::CategoryId(void) { - if (!m) - return 0; + ASSERT(m); return m->categoryId; } @@ -116,8 +114,7 @@ int CCategoryInfo::CategoryId(void) int CCategoryInfo::AlbumCount(void) { - if (!m) - return 0; + ASSERT(m); return m->albumCount; } @@ -125,8 +122,7 @@ int CCategoryInfo::AlbumCount(void) int CCategoryInfo::SongCount(void) { - if (!m) - return 0; + ASSERT(m); return m->songCount; } @@ -134,8 +130,7 @@ int CCategoryInfo::SongCount(void) Eina_List *CCategoryInfo::AlbumList(void) { - if (!m) - return NULL; + ASSERT(m); return m->albumList; } @@ -143,8 +138,7 @@ Eina_List *CCategoryInfo::AlbumList(void) Eina_List *CCategoryInfo::MemberList(void) { - if (!m) - return NULL; + ASSERT(m); return m->memberList; } @@ -152,8 +146,7 @@ Eina_List *CCategoryInfo::MemberList(void) bool CCategoryInfo::SetCategoryId(int categoryId) { - if (!m) - return false; + ASSERT(m); m->categoryId = categoryId; @@ -163,8 +156,7 @@ bool CCategoryInfo::SetCategoryId(int categoryId) bool CCategoryInfo::SetAlbumCount(int albumCount) { - if (!m) - return false; + ASSERT(m); m->albumCount = albumCount; @@ -174,8 +166,7 @@ bool CCategoryInfo::SetAlbumCount(int albumCount) bool CCategoryInfo::SetSongCount(int songCount) { - if (!m) - return false; + ASSERT(m); m->songCount = songCount; @@ -185,8 +176,7 @@ bool CCategoryInfo::SetSongCount(int songCount) bool CCategoryInfo::SetAlbumInfo(CAlbumInfo *albumInfo) { - if (!m) - return false; + ASSERT(m); m->albumList = eina_list_append(m->albumList, albumInfo); @@ -196,8 +186,7 @@ bool CCategoryInfo::SetAlbumInfo(CAlbumInfo *albumInfo) bool CCategoryInfo::SetMember(CListMember *member) { - if (!m) - return false; + ASSERT(m); m->memberList = eina_list_append(m->memberList, member); @@ -207,8 +196,7 @@ bool CCategoryInfo::SetMember(CListMember *member) bool CCategoryInfo::Duplicate(CNameInfo *obj) { - if (!m) - return false; + ASSERT(m); CCategoryInfo* dst = (CCategoryInfo*)obj; diff --git a/src/data/folder_info.cpp b/src/data/folder_info.cpp index 652e29a..b7742cf 100644 --- a/src/data/folder_info.cpp +++ b/src/data/folder_info.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "dbg.h" #include "i18n.h" #include @@ -34,8 +35,7 @@ struct SFolderInfo { bool CFolderInfo::Create(void) { - if (m) - return false; + ASSERT(!m); m = new SFolderInfo(); if (!m) { @@ -55,8 +55,7 @@ bool CFolderInfo::Create(void) void CFolderInfo::Destroy(void) { - if (!m) - return; + ASSERT(m); CNameInfo::Destroy(); delete m; @@ -66,8 +65,7 @@ void CFolderInfo::Destroy(void) int CFolderInfo::Count(void) { - if (!m) - return 0; + ASSERT(m); return m->count; } @@ -75,8 +73,7 @@ int CFolderInfo::Count(void) int CFolderInfo::Duration(void) { - if (!m) - return 0; + ASSERT(m); return m->duration; } @@ -84,8 +81,7 @@ int CFolderInfo::Duration(void) bool CFolderInfo::SetCount(int count) { - if (!m) - return false; + ASSERT(m); m->count = count; @@ -95,8 +91,7 @@ bool CFolderInfo::SetCount(int count) bool CFolderInfo::SetDuration(int duration) { - if (!m) - return false; + ASSERT(m); m->duration = duration; @@ -106,8 +101,7 @@ bool CFolderInfo::SetDuration(int duration) bool CFolderInfo::Duplicate(CNameInfo *obj) { - if (!m) - return false; + ASSERT(m); CFolderInfo* dst = (CFolderInfo*)obj; diff --git a/src/data/song_info.cpp b/src/data/song_info.cpp index 8dc4b91..481b4bb 100644 --- a/src/data/song_info.cpp +++ b/src/data/song_info.cpp @@ -40,8 +40,7 @@ struct SSongInfo { bool CSongInfo::Create(void) { - if (m) - return false; + ASSERT(!m); m = new SSongInfo(); if (!m) { @@ -61,8 +60,7 @@ bool CSongInfo::Create(void) void CSongInfo::Destroy(void) { - if (!m) - return; + ASSERT(m); CExtNameInfo::Destroy(); @@ -79,8 +77,7 @@ void CSongInfo::Destroy(void) int CSongInfo::MemberId(void) { - if (!m) - return 0; + ASSERT(m); return m->memberId; } @@ -88,8 +85,7 @@ int CSongInfo::MemberId(void) char *CSongInfo::Artist(void) { - if (!m) - return NULL; + ASSERT(m); return m->artist; } @@ -97,8 +93,7 @@ char *CSongInfo::Artist(void) char *CSongInfo::Genre(void) { - if (!m) - return NULL; + ASSERT(m); return m->genre; } @@ -106,8 +101,7 @@ char *CSongInfo::Genre(void) char *CSongInfo::Album(void) { - if (!m) - return NULL; + ASSERT(m); return m->album; } @@ -115,8 +109,7 @@ char *CSongInfo::Album(void) char *CSongInfo::Composer(void) { - if (!m) - return NULL; + ASSERT(m); return m->composer; } @@ -124,8 +117,7 @@ char *CSongInfo::Composer(void) int CSongInfo::Type(void) { - if (!m) - return 0; + ASSERT(m); return m->type; } @@ -133,8 +125,7 @@ int CSongInfo::Type(void) int CSongInfo::Duration(void) { - if (!m) - return 0; + ASSERT(m); return m->duration; } @@ -142,8 +133,7 @@ int CSongInfo::Duration(void) bool CSongInfo::SetMemberId(int memberId) { - if (!m) - return false; + ASSERT(m); m->memberId = memberId; @@ -153,8 +143,7 @@ bool CSongInfo::SetMemberId(int memberId) bool CSongInfo::SetArtist(const char *artist) { - if (!m) - return false; + ASSERT(m); delete[] m->artist; m->artist = NULL; @@ -171,8 +160,7 @@ bool CSongInfo::SetArtist(const char *artist) bool CSongInfo::SetGenre(const char *genre) { - if (!m) - return false; + ASSERT(m); delete[] m->genre; m->genre = NULL; @@ -189,8 +177,7 @@ bool CSongInfo::SetGenre(const char *genre) bool CSongInfo::SetAlbum(const char *album) { - if (!m) - return false; + ASSERT(m); delete[] m->album; m->album = NULL; @@ -207,8 +194,7 @@ bool CSongInfo::SetAlbum(const char *album) bool CSongInfo::SetComposer(const char *composer) { - if (!m) - return false; + ASSERT(m); delete[] m->composer; m->composer = NULL; @@ -225,8 +211,7 @@ bool CSongInfo::SetComposer(const char *composer) bool CSongInfo::SetType(int type) { - if (!m) - return false; + ASSERT(m); m->type = type; @@ -236,8 +221,7 @@ bool CSongInfo::SetType(int type) bool CSongInfo::SetDuration(int duration) { - if (!m) - return false; + ASSERT(m); m->duration = duration; @@ -247,8 +231,7 @@ bool CSongInfo::SetDuration(int duration) bool CSongInfo::Duplicate(CNameInfo *obj) { - if (!m) - return false; + ASSERT(m); CSongInfo* dst = (CSongInfo*)obj; diff --git a/src/views/base-view.cpp b/src/views/base-view.cpp index e92bf0e..e519921 100644 --- a/src/views/base-view.cpp +++ b/src/views/base-view.cpp @@ -148,7 +148,8 @@ struct SMusicBaseView { Evas_Object *group_btn[TOTAL_GROUP_BTNS]; Evas_Object *srcbtn; Evas_Object *sortbtn; - CCtxPopup *ctxpopup; + CSortCtxPopup *sortCtxPopup; + CSourceCtxPopup *srcCtxPopup; Evas_Object *popup; Elm_Transit *transit; Evas_Object *c_grpbtn; @@ -325,7 +326,6 @@ void CMusicBaseView::m_GotoPlayback(void) void CMusicBaseView::m_CreateCtxPopup(int btnType) { - CCtxPopup *ctxPopup = NULL; const char *layout_id = NULL; CCtxPopup::SCallback cb; cb.onSelected = sm_CbCtxPopupBtnSelected; @@ -336,7 +336,8 @@ void CMusicBaseView::m_CreateCtxPopup(int btnType) m->btntype = btnType; srcCtxPopup = new CSourceCtxPopup; srcCtxPopup->Create(m->base, &cb); - ctxPopup = srcCtxPopup; + + m->srcCtxPopup = srcCtxPopup; } else if (btnType == BTN_SORT) { CSortCtxPopup *sortCtxPopup = NULL; @@ -366,28 +367,29 @@ void CMusicBaseView::m_CreateCtxPopup(int btnType) } sortCtxPopup->Create(m->base, &cb, sortBtnType); - ctxPopup = sortCtxPopup; + m->sortCtxPopup = sortCtxPopup; } else { _ERR("MUST NOT BE HERE!!"); ASSERT(0); return; } - - m->ctxpopup = ctxPopup; } void CMusicBaseView::m_DestroyCtxPopup(void) { - if (!m->ctxpopup) - return; + if (m->sortCtxPopup && m->sortCtxPopup->FlagCreate()) + m->sortCtxPopup->Destroy(); + + delete m->sortCtxPopup; + m->sortCtxPopup = NULL; - if (m->ctxpopup->FlagCreate()) - m->ctxpopup->Destroy(); + if (m->srcCtxPopup && m->srcCtxPopup->FlagCreate()) + m->srcCtxPopup->Destroy(); - delete m->ctxpopup; - m->ctxpopup = NULL; + delete m->srcCtxPopup; + m->srcCtxPopup = NULL; } -- 2.7.4 From 3a86a5963683a8271e3682aa24fa0010525c7fed Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Mon, 16 Mar 2015 11:50:11 +0900 Subject: [PATCH 12/16] Fix memory crash error (If source is changed in another layout, all song info data are crashed. So these data should be updated) Change-Id: Iba07e49647cecfb69c2a59c864617ffef0f3c024 Signed-off-by: Kim Tae Soo --- src/views/song-layout.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/views/song-layout.cpp b/src/views/song-layout.cpp index 34e73f8..cad5988 100644 --- a/src/views/song-layout.cpp +++ b/src/views/song-layout.cpp @@ -601,6 +601,7 @@ void CSongLayout::t_OnShow(void) ASSERT(m); evas_object_show(Layout()); + m_UpdateSongList(false); if (!m->uri) return; -- 2.7.4 From dc8fe641bd05b54937b8473b25c4eb083fa76be7 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Mon, 16 Mar 2015 14:09:39 +0900 Subject: [PATCH 13/16] Move SetCurrentAlbum / CurrentAlbum function from CMusicController to CAlbumSongLayout Change-Id: I80e0c494af1b5393c5be96322ec2954f47f5659c Signed-off-by: Kim Tae Soo --- include/album-songs-layout.h | 3 +++ include/music-controller.h | 4 ---- src/playback/music-controller.cpp | 28 ---------------------- src/views/album-layout.cpp | 10 ++++---- src/views/album-songs-layout.cpp | 49 +++++++++++++++++++++++++++++++-------- 5 files changed, 47 insertions(+), 47 deletions(-) diff --git a/include/album-songs-layout.h b/include/album-songs-layout.h index c26dbf5..86b2f36 100644 --- a/include/album-songs-layout.h +++ b/include/album-songs-layout.h @@ -66,6 +66,9 @@ public: bool Create(CLayoutMgr *mgr); virtual void Destroy(void); + void SetCurrentAlbum(CAlbumInfo *albumInfo); + CAlbumInfo*CurrentAlbum(void); + public: virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev); virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev); diff --git a/include/music-controller.h b/include/music-controller.h index 0b29bd9..d2a7cd1 100644 --- a/include/music-controller.h +++ b/include/music-controller.h @@ -91,11 +91,7 @@ public: bool GetPosition(int *const milseconds); bool SetCurrentSong(char *mediaid); - bool GetCurrentSong(CSongInfo **const sinfo); - bool SetCurrentAlbum(CAlbumInfo *alinfo); - - CAlbumInfo *CurrentAlbum(void); bool UpdatePlaylist(Eina_List *slist, int addmode); bool EmptyPlaylist(void); diff --git a/src/playback/music-controller.cpp b/src/playback/music-controller.cpp index 7ae4712..a87f470 100644 --- a/src/playback/music-controller.cpp +++ b/src/playback/music-controller.cpp @@ -825,34 +825,6 @@ bool CMusicController::SetCurrentSong(char *mediaid) } -CAlbumInfo *CMusicController::CurrentAlbum(void) -{ - if (!m) - return NULL; - - return m->alinfo; -} - - -bool CMusicController::SetCurrentAlbum(CAlbumInfo *alinfo) -{ - if (!m) - return false; - - if (alinfo) - m->alinfo->Duplicate(alinfo); - else { - CAlbumInfo *emptyInfo = new CAlbumInfo; - emptyInfo->Create(); - m->alinfo->Duplicate(emptyInfo); - emptyInfo->Destroy(); - delete emptyInfo; - } - - return true; -} - - bool CMusicController::SetPlayState(EPlayStatus state) { ASSERT(FlagCreate()); diff --git a/src/views/album-layout.cpp b/src/views/album-layout.cpp index 2770396..d07aa4b 100644 --- a/src/views/album-layout.cpp +++ b/src/views/album-layout.cpp @@ -232,8 +232,7 @@ void CAlbumLayout::m_OnItemSelect(Elm_Object_Item *it, const char *emission, con return; } - m->mhandle->SetCurrentAlbum(itinfo->alinfo); - + m->layoutAlbumSongs->SetCurrentAlbum(itinfo->alinfo); m_ShowAlbumSongs(); } @@ -513,7 +512,7 @@ void CAlbumLayout::t_OnShow(void) itinfo = m_FindItemInfoById(m->it_infolist, atoi(m->album_id)); if (itinfo) { - m->mhandle->SetCurrentAlbum(itinfo->alinfo); + m->layoutAlbumSongs->SetCurrentAlbum(itinfo->alinfo); m_ShowAlbumSongs(); return; } @@ -536,12 +535,13 @@ void CAlbumLayout::Update(bool focusFlag) return; } - alinfo = m->mhandle->CurrentAlbum(); + alinfo = m->layoutAlbumSongs->CurrentAlbum(); if (alinfo) { id = alinfo->AlbumId(); itinfo = m_FindItemInfoById(m->it_infolist, id); if (itinfo) { - m->mhandle->SetCurrentAlbum(NULL); + m->layoutAlbumSongs->SetCurrentAlbum(NULL); + elm_gengrid_item_show(itinfo->item, ELM_GENGRID_ITEM_SCROLLTO_IN); elm_object_item_focus_set(itinfo->item, EINA_TRUE); diff --git a/src/views/album-songs-layout.cpp b/src/views/album-songs-layout.cpp index 0daa036..685137c 100644 --- a/src/views/album-songs-layout.cpp +++ b/src/views/album-songs-layout.cpp @@ -66,6 +66,7 @@ struct SAlbumSongsLayout { CMusicController* mhandle; CLayoutMgr *mgr; CViewMgr *vmgr; + CAlbumInfo *alinfo; SContentInfo *ctxtinfo; Eina_List *slist; Eina_List *it_infolist; @@ -250,7 +251,6 @@ void CAlbumSongsLayout::m_UpdateSongList(void) SAlbumSongsItemInfo *itinfo = NULL; Elm_Object_Item *item = NULL; int dur = 0; - CAlbumInfo *alinfo = NULL; if (!m->songlist || !m->item_class) return; @@ -258,8 +258,7 @@ void CAlbumSongsLayout::m_UpdateSongList(void) /* Remove existing songlist and prepare afresh */ m_EmptySongList(); - alinfo = m->mhandle->CurrentAlbum(); - if (!m->mhandle->MediaGetList(LIST_TYPE_ALBUM_SONG, alinfo, &(m->slist))) { + if (!m->mhandle->MediaGetList(LIST_TYPE_ALBUM_SONG, m->alinfo, &(m->slist))) { _ERR(" Fetching song list from media failed "); return; } @@ -361,7 +360,6 @@ void CAlbumSongsLayout::m_CreateTopSection(void) Evas_Object *img = NULL; char *path = NULL; char buf[MAX_LENGTH]; - CAlbumInfo *alinfo = NULL; SBtnInfo btninfo[TOTAL_ADD_BTNS]; Evas_Object *layout = Layout(); @@ -413,11 +411,8 @@ void CAlbumSongsLayout::m_CreateTopSection(void) } elm_object_focus_set(btn[0], EINA_TRUE); - alinfo = m->mhandle->CurrentAlbum(); - if (!alinfo) - return; - path = alinfo->ThumbnailPath(); + path = m->alinfo->ThumbnailPath(); if (path) { elm_image_file_set(thumb, path, NULL); elm_image_aspect_fixed_set(thumb, EINA_FALSE); @@ -432,9 +427,9 @@ void CAlbumSongsLayout::m_CreateTopSection(void) elm_object_part_content_set(layout, MUSIC_PART_ALBUM_THUMB, thumb); elm_object_part_text_set(layout, MUSIC_PART_ALBUM_NAME, - alinfo->Name()); + m->alinfo->Name()); elm_object_part_text_set(layout, MUSIC_PART_ALBUM_ARTIST, - alinfo->Artist()); + m->alinfo->Artist()); snprintf(buf, sizeof(buf), "%d", eina_list_count(m->slist)); elm_object_part_text_set(layout, MUSIC_PART_ALBUM_SONGCOUNT, buf); @@ -551,6 +546,7 @@ bool CAlbumSongsLayout::Create(CLayoutMgr *mgr) m->vmgr = vmgr; m->mhandle = mhandle; m->mgr = mgr; + m->alinfo = new CAlbumInfo; Connect(layout, ALBUM_SONGS_LAYOUT, TYPE_KEY_DOWN); @@ -561,6 +557,10 @@ void CAlbumSongsLayout::Destroy(void) { ASSERT(m); + if (m->alinfo->FlagCreate()) + m->alinfo->Destroy(); + delete m->alinfo; + m_EmptySongList(); CExtBaseLayout::Destroy(); evas_object_del(Layout()); @@ -571,6 +571,35 @@ void CAlbumSongsLayout::Destroy(void) } +void CAlbumSongsLayout::SetCurrentAlbum(CAlbumInfo *albumInfo) +{ + ASSERT(m); + + if (m->alinfo->FlagCreate()) + m->alinfo->Destroy(); + + m->alinfo->Create(); + + if (albumInfo) + m->alinfo->Duplicate(albumInfo); + else { + CAlbumInfo *emptyInfo = new CAlbumInfo; + emptyInfo->Create(); + m->alinfo->Duplicate(emptyInfo); + emptyInfo->Destroy(); + delete emptyInfo; + } +} + + +CAlbumInfo* CAlbumSongsLayout::CurrentAlbum(void) +{ + ASSERT(m); + + return m->alinfo; +} + + void CAlbumSongsLayout::t_OnShow(void) { ASSERT(m); -- 2.7.4 From f01451c550ea6dd315df4b5c7338519f1f7db2af Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Mon, 16 Mar 2015 15:17:57 +0900 Subject: [PATCH 14/16] Apply ASSERT + Code refactoring Change-Id: Ica842d5e84087a9cfe45678f1f7a7b3acdcde0e2 Signed-off-by: Kim Tae Soo --- include/SongStorage.h | 2 +- include/music-controller.h | 2 + src/data/SongStorage.cpp | 8 +- src/data/mediadata.cpp | 2 +- src/playback/music-controller.cpp | 156 +++++++++++++++++--------------------- 5 files changed, 78 insertions(+), 92 deletions(-) diff --git a/include/SongStorage.h b/include/SongStorage.h index 02318d2..b95fd6f 100644 --- a/include/SongStorage.h +++ b/include/SongStorage.h @@ -74,7 +74,7 @@ class CPlaylistSongStorage : public CSongStorage { public: CPlaylistSongStorage() { t_type = PLAYLIST_SONG_STORAGE; } - bool Update(CCategoryInfo *catinfo, filter_h filter); + bool Update(CCategoryInfo *catinfo); }; class CSingleSongStorage : public CSongStorage { diff --git a/include/music-controller.h b/include/music-controller.h index d2a7cd1..498017a 100644 --- a/include/music-controller.h +++ b/include/music-controller.h @@ -62,6 +62,8 @@ private: private: static void sm_CbPlaybackCompletion(void *data); void m_OnPlaybackCompletion(void); + static void sm_CbContentUpdated(void *dt); + void m_OnContentUpdated(void); protected: bool t_PlayNext(int direction, int playnext_type); diff --git a/src/data/SongStorage.cpp b/src/data/SongStorage.cpp index 013fd21..aeeec0c 100644 --- a/src/data/SongStorage.cpp +++ b/src/data/SongStorage.cpp @@ -257,6 +257,8 @@ bool CSongsSongStorage::Update(filter_h filter) bool CAlbumSongStorage::Update(CAlbumInfo *alinfo, filter_h filter) { + ASSERT(alinfo); + t_filter = filter; Delete(); @@ -267,6 +269,8 @@ bool CAlbumSongStorage::Update(CAlbumInfo *alinfo, filter_h filter) bool CFolderSongStorage::Update(CFolderInfo *finfo, filter_h filter) { + ASSERT(finfo); + t_filter = filter; Delete(); @@ -275,9 +279,9 @@ bool CFolderSongStorage::Update(CFolderInfo *finfo, filter_h filter) } -bool CPlaylistSongStorage::Update(CCategoryInfo *catinfo, filter_h filter) +bool CPlaylistSongStorage::Update(CCategoryInfo *catinfo) { - t_filter = filter; + ASSERT(catinfo); Delete(); t_GetSongList(catinfo); diff --git a/src/data/mediadata.cpp b/src/data/mediadata.cpp index d534bdf..d0d3d99 100644 --- a/src/data/mediadata.cpp +++ b/src/data/mediadata.cpp @@ -502,7 +502,7 @@ Eina_List *CMediadata::Medialist(int source_type, int listType, void *info) return m->storagePlaylist->List(); case LIST_TYPE_PLAYLISTS_SONG: - m->storagePlaylistSong->Update((CCategoryInfo *)info, m->filter); + m->storagePlaylistSong->Update((CCategoryInfo *)info); return m->storagePlaylistSong->List(); default: diff --git a/src/playback/music-controller.cpp b/src/playback/music-controller.cpp index a87f470..6a231e9 100644 --- a/src/playback/music-controller.cpp +++ b/src/playback/music-controller.cpp @@ -46,7 +46,7 @@ struct SMusicController { EShuffleStatus stateShuffle; ERepeatStatus repeatstate; - struct SCbInfo *cbinfo; + SCbInfo *cbinfo; SMusicController() { memset(this, 0, sizeof(SMusicController)); @@ -101,7 +101,7 @@ void IMusicControllerListener::sm_CbUpdateContent(void *cookie) static void _run_callback(SMusicController *m, int type) { Eina_List *l; - struct SCbInfo *cbinfo; + SCbInfo *cbinfo; void *obj; if (!m) @@ -170,7 +170,7 @@ void CMusicController::m_OnPlaybackCompletion(void) { bool r; Eina_List *l; - struct SCbInfo *cbinfo; + SCbInfo *cbinfo; void *obj; r = t_PlayNext(DIR_NEXT, E_ON_COMPLETE); @@ -185,25 +185,28 @@ void CMusicController::m_OnPlaybackCompletion(void) } -static void _content_update_cb(void *dt) +void CMusicController::sm_CbContentUpdated(void *dt) { - SMusicController *mhandle; - Eina_List *l; - struct SCbInfo *cbinfo; - void *obj; + CMusicController *root = (CMusicController *)dt; + if (root) + root->m_OnContentUpdated(); +} - if (!dt) - return; - mhandle = (SMusicController *)dt; +void CMusicController::m_OnContentUpdated(void) +{ + Eina_List *l; + SCbInfo *cbinfo; + void *obj; - EINA_LIST_FOREACH(mhandle->elListener, l, obj) { + EINA_LIST_FOREACH(m->elListener, l, obj) { cbinfo = (SCbInfo *)obj; if (cbinfo->type == E_CONTENT_UPDATE && cbinfo->cb) cbinfo->cb(cbinfo->data); } } + SMusicController *CMusicController::t_Create(void) { SMusicController *mhandle = NULL; @@ -224,7 +227,7 @@ SMusicController *CMusicController::t_Create(void) mhandle->initial_index = 0; CInfo::SetSortType(E_SORT_TITLE_A_Z); CInfo::SetSourceType(SOURCE_TYPE_ALL); - mhandle->cbinfo = mhandle->pMediadata->AddCallback(E_CONTENT_UPDATE, _content_update_cb, mhandle); + mhandle->cbinfo = mhandle->pMediadata->AddCallback(E_CONTENT_UPDATE, sm_CbContentUpdated, this); } _CHECK_FAIL{ CUsbConnectionListener::Destroy(); } @@ -264,7 +267,7 @@ bool CMusicController::Initialize(void) void CMusicController::t_Destroy(void) { - struct SCbInfo *cbinfo; + SCbInfo *cbinfo; void *obj; CUsbConnectionListener::Destroy(); @@ -317,11 +320,8 @@ CMusicController* CMusicController::GetInstance(void) bool CMusicController::UpdatePlaylist(Eina_List *slist, int addmode) { - if (!m) - return false; - - if (!slist) - return false; + ASSERT(m); + ASSERT(slist); if (m->pPlaylist->FlagCreate()) m->pPlaylist->Update(slist, addmode); @@ -335,11 +335,9 @@ bool CMusicController::UpdatePlaylist(Eina_List *slist, int addmode) bool CMusicController::AddListener(IMusicControllerListener *listener) { + ASSERT(m); ASSERT(listener); - if (!m) - return false; - m->elListener = eina_list_append(m->elListener, listener); return true; @@ -348,11 +346,9 @@ bool CMusicController::AddListener(IMusicControllerListener *listener) bool CMusicController::RemoveListener(IMusicControllerListener *listener) { + ASSERT(m); ASSERT(listener); - if (!m) - return false; - m->elListener = eina_list_remove(m->elListener, listener); return true; @@ -361,8 +357,7 @@ bool CMusicController::RemoveListener(IMusicControllerListener *listener) bool CMusicController::Start(void) { - if (!m) - return false; + ASSERT(m); const char *songpath; int index; @@ -428,8 +423,7 @@ error: bool CMusicController::Stop(void) { - if (!m) - return false; + ASSERT(m); if (!m->pPlayback->FlagCreate()) return false; @@ -448,8 +442,7 @@ bool CMusicController::Stop(void) bool CMusicController::GetCurrentSongIndex(int *ind) { - if (!m) - return false; + ASSERT(m); int index; @@ -471,8 +464,7 @@ bool CMusicController::GetCurrentSongIndex(int *ind) bool CMusicController::SetCurrentSongIndex(int index) { - if (!m) - return false; + ASSERT(m); if (!m->pPlaylist->FlagCreate()) { _ERR("NULL received"); @@ -492,8 +484,7 @@ bool CMusicController::SetCurrentSongIndex(int index) bool CMusicController::GetTotalSongs(int *ts) { - if (!m) - return false; + ASSERT(m); int count; @@ -515,8 +506,7 @@ bool CMusicController::GetTotalSongs(int *ts) bool CMusicController::GetSonginfoFromIndex(int index, CSongInfo **const csinfo) { - if (!m) - return false; + ASSERT(m); if (!m->pPlaylist->FlagCreate() || !csinfo) { _ERR("NULL received"); @@ -534,20 +524,23 @@ bool CMusicController::GetSonginfoFromIndex(int index, CSongInfo **const csinfo) bool CMusicController::PlayNextSong(void) { + ASSERT(m); + return t_PlayNext(DIR_NEXT, E_BUTTON_CLICK); } bool CMusicController::PlayPreviousSong(void) { + ASSERT(m); + return t_PlayNext(DIR_PREVIOUS, E_BUTTON_CLICK); } bool CMusicController::PlayIndexSong(int index) { - if (!m) - return false; + ASSERT(m); if (!m->pPlaylist->FlagCreate()) return false; @@ -565,8 +558,7 @@ bool CMusicController::PlayIndexSong(int index) bool CMusicController::Resume(void) { - if (!m) - return false; + ASSERT(m); if (!m->pPlayback->FlagCreate()) return false; @@ -582,8 +574,7 @@ bool CMusicController::Resume(void) bool CMusicController::Pause(void) { - if (!m) - return false; + ASSERT(m); if (!m || !m->pPlayback->FlagCreate()) return false; @@ -599,8 +590,7 @@ bool CMusicController::Pause(void) bool CMusicController::SetPosition(int milseconds) { - if (!m) - return false; + ASSERT(m); if (!m->pPlayback->FlagCreate()) return false; @@ -614,10 +604,9 @@ bool CMusicController::SetPosition(int milseconds) bool CMusicController::GetPosition(int *const milseconds) { - if (!m) - return false; + ASSERT(m); - if (!m || !m->pPlayback->FlagCreate()) + if (!m->pPlayback->FlagCreate()) return false; if (!m->pPlayback->GetPosition(milseconds)) @@ -629,8 +618,8 @@ bool CMusicController::GetPosition(int *const milseconds) bool CMusicController::RemoveSong(CSongInfo *sinfo, int index) { - if (!m) - return false; + ASSERT(m); + ASSERT(sinfo); int ind; @@ -656,8 +645,7 @@ bool CMusicController::RemoveSong(CSongInfo *sinfo, int index) bool CMusicController::EmptyPlaylist(void) { - if (!m) - return false; + ASSERT(m); if (!m->pPlaylist->FlagCreate()) return false; @@ -670,8 +658,7 @@ bool CMusicController::EmptyPlaylist(void) bool CMusicController::GetCurrentSong(CSongInfo **const sinfo) { - if (!m) - return false; + ASSERT(m); int index; @@ -694,8 +681,8 @@ bool CMusicController::GetCurrentSong(CSongInfo **const sinfo) CSongInfo *CMusicController::MediaSongByUri(char *uri) { - if (!m) - return false; + ASSERT(m); + ASSERT(uri); CSongInfo *sinfo; @@ -709,7 +696,7 @@ CSongInfo *CMusicController::MediaSongByUri(char *uri) bool CMusicController::MediaGetList(int EListType, void *info, Eina_List **list) { - ASSERT(FlagCreate()); + ASSERT(m); Eina_List *mlist; @@ -725,7 +712,9 @@ bool CMusicController::MediaGetList(int EListType, void *info, Eina_List **list) bool CMusicController::MediaInsertPlaylist(const char *name, Eina_List *idlist) { - ASSERT(FlagCreate()); + ASSERT(m); + ASSERT(name); + ASSERT(idlist); return m->pMediadata->Alloc(name, idlist); } @@ -733,10 +722,8 @@ bool CMusicController::MediaInsertPlaylist(const char *name, Eina_List *idlist) bool CMusicController::MediaExistPlaylist(const char *name) { - ASSERT(FlagCreate()); - - if (!name) - return false; + ASSERT(m); + ASSERT(name); return m->pMediadata->ExistPlaylist(name); } @@ -744,7 +731,7 @@ bool CMusicController::MediaExistPlaylist(const char *name) bool CMusicController::MediaDeletePlaylist(int id) { - ASSERT(FlagCreate()); + ASSERT(m); return m->pMediadata->Delete(id); } @@ -752,10 +739,8 @@ bool CMusicController::MediaDeletePlaylist(int id) bool CMusicController::MediaRenamePlaylist(int id, const char *name) { - ASSERT(FlagCreate()); - - if (!name) - return false; + ASSERT(m); + ASSERT(name); return m->pMediadata->Rename(id, name); } @@ -763,10 +748,8 @@ bool CMusicController::MediaRenamePlaylist(int id, const char *name) bool CMusicController::MediaAddmediaPlaylist(int id, Eina_List *idlist) { - ASSERT(FlagCreate()); - - if (!idlist) - return false; + ASSERT(m); + ASSERT(idlist); return m->pMediadata->Insert(id, idlist); } @@ -774,10 +757,8 @@ bool CMusicController::MediaAddmediaPlaylist(int id, Eina_List *idlist) bool CMusicController::MediaRemovemediaPlaylist(int id, Eina_List *idlist) { - ASSERT(FlagCreate()); - - if (!idlist) - return false; + ASSERT(m); + ASSERT(idlist); return m->pMediadata->Remove(id, idlist); } @@ -785,16 +766,14 @@ bool CMusicController::MediaRemovemediaPlaylist(int id, Eina_List *idlist) bool CMusicController::MediaAddsongsPlaylist(int lid, Eina_List *list) { - ASSERT(FlagCreate()); + ASSERT(m); + ASSERT(list); Eina_List *idlist, *l; CSongInfo *sinfo; void *obj; char *id; - if (!list) - return false; - idlist = NULL; EINA_LIST_FOREACH(list, l, obj) { sinfo = (CSongInfo *)obj; @@ -814,9 +793,10 @@ bool CMusicController::MediaAddsongsPlaylist(int lid, Eina_List *list) bool CMusicController::SetCurrentSong(char *mediaid) { - ASSERT(FlagCreate()); + ASSERT(m); + ASSERT(mediaid); - if (!m->pPlaylist->FlagCreate() || !mediaid) + if (!m->pPlaylist->FlagCreate()) return false; m->pPlaylist->SetCurrentSong(mediaid); @@ -827,7 +807,7 @@ bool CMusicController::SetCurrentSong(char *mediaid) bool CMusicController::SetPlayState(EPlayStatus state) { - ASSERT(FlagCreate()); + ASSERT(m); m->statePlay = state; @@ -837,7 +817,7 @@ bool CMusicController::SetPlayState(EPlayStatus state) EPlayStatus CMusicController::PlayState(void) { - ASSERT(FlagCreate()); + ASSERT(m); return m->statePlay; } @@ -845,7 +825,7 @@ EPlayStatus CMusicController::PlayState(void) bool CMusicController::SetShuffleState(EShuffleStatus state) { - ASSERT(FlagCreate()); + ASSERT(m); m->stateShuffle = state; if (state && m->pPlaylist->FlagCreate()) @@ -857,7 +837,7 @@ bool CMusicController::SetShuffleState(EShuffleStatus state) EShuffleStatus CMusicController::ShuffleState(void) { - ASSERT(FlagCreate()); + ASSERT(m); return m->stateShuffle; } @@ -865,7 +845,7 @@ EShuffleStatus CMusicController::ShuffleState(void) bool CMusicController::SetRepeatState(ERepeatStatus state) { - ASSERT(FlagCreate()); + ASSERT(m); m->repeatstate = state; @@ -875,7 +855,7 @@ bool CMusicController::SetRepeatState(ERepeatStatus state) ERepeatStatus CMusicController::RepeatState(void) { - ASSERT(FlagCreate()); + ASSERT(m); return m->repeatstate; } @@ -887,7 +867,7 @@ void CMusicController::OnConnect(void) return; Eina_List *l; - struct SCbInfo *cbinfo; + SCbInfo *cbinfo; void *obj; if (CInfo::SourceType() == SOURCE_TYPE_USB) { -- 2.7.4 From ee7b3d7a1d7f3585c40a9d3f0df2395a822a9544 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Tue, 17 Mar 2015 10:01:01 +0900 Subject: [PATCH 15/16] Apply error checking macro to Create functions Change-Id: I8e8edc4a9d034f06ce9c260359d93f8edd30197e Signed-off-by: Kim Tae Soo --- include/category-layout.h | 2 + src/views/album-layout.cpp | 29 +++--- src/views/album-songs-layout.cpp | 111 ++++++++------------- src/views/category-layout.cpp | 192 ++++++++++++++---------------------- src/views/category-songs-layout.cpp | 109 +++++++------------- src/views/folder-layout.cpp | 125 +++++++++-------------- src/views/song-layout.cpp | 142 ++++++++++---------------- 7 files changed, 266 insertions(+), 444 deletions(-) diff --git a/include/category-layout.h b/include/category-layout.h index 848eee2..9697f90 100644 --- a/include/category-layout.h +++ b/include/category-layout.h @@ -114,6 +114,8 @@ private: void m_EmptyLayout(bool sort_flag); void m_ShowCategorySongs(void); + const char *m_CategorySongLayoutId(void); + protected: bool t_SetEdje(const char *layout); void t_UpdateLayout(bool sort_flag); diff --git a/src/views/album-layout.cpp b/src/views/album-layout.cpp index d07aa4b..a56e0a6 100644 --- a/src/views/album-layout.cpp +++ b/src/views/album-layout.cpp @@ -411,15 +411,17 @@ void CAlbumLayout::m_UpdateAlbumGrid(bool sort_flag) bool CAlbumLayout::Create(CLayoutMgr *mgr, const char *albumId) { ASSERT(!m); + ASSERT(mgr); - Evas_Object *base = NULL; - Evas_Object *win = NULL; - Evas_Object *layout = NULL; - CMusicController *mhandle = NULL; - CViewMgr *vmgr = NULL; - SParcel parcel; + _CREATE_BEGIN{ + Evas_Object *base = NULL; + Evas_Object *win = NULL; + Evas_Object *layout = NULL; + CMusicController *mhandle = NULL; + CViewMgr *vmgr = NULL; + CAlbumSongsLayout *layoutAlbumSongs = NULL; + SParcel parcel; - _CREATE_BEGIN { _CHECK(m = new SAlbumLayout) _CHECK(vmgr = CViewMgr::GetInstance()) _CHECK(base = mgr->Base()) @@ -427,11 +429,11 @@ bool CAlbumLayout::Create(CLayoutMgr *mgr, const char *albumId) _CHECK(mhandle = CMusicController::GetInstance()) _CHECK(layout = CCommonUI::AddBase(base, MUSIC_ALBUM_LAYOUT)) _CHECK(CExtBaseLayout::Create(layout)) - _CHECK(m->layoutAlbumSongs = new CAlbumSongsLayout(MUSIC_ALBUM_SONGS_LAYOUT)) - _CHECK(m->layoutAlbumSongs->Create(mgr)) - _CHECK(mgr->AddLayout(m->layoutAlbumSongs)) + _CHECK(layoutAlbumSongs = new CAlbumSongsLayout(MUSIC_ALBUM_SONGS_LAYOUT)) + _CHECK(layoutAlbumSongs->Create(mgr)) + _CHECK(mgr->AddLayout(layoutAlbumSongs)) - _WHEN_SUCCESS { + _WHEN_SUCCESS{ if (albumId) { m->album_id = new char[strlen(albumId) + 1]; strcpy(m->album_id, albumId); @@ -446,6 +448,7 @@ bool CAlbumLayout::Create(CLayoutMgr *mgr, const char *albumId) m->lmgr = mgr; m->callback.cbHandleEmptyStatus = NULL; m->callback.cookie = NULL; + m->layoutAlbumSongs = layoutAlbumSongs; m_CreateAlbumGrid(); Connect(layout, ALBUM_LAYOUT, TYPE_KEY_DOWN); @@ -457,7 +460,7 @@ bool CAlbumLayout::Create(CLayoutMgr *mgr, const char *albumId) m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel); } - _CHECK_FAIL{} + _CHECK_FAIL{ mgr->RemoveLayout(layoutAlbumSongs); } _CHECK_FAIL{ m->layoutAlbumSongs->Destroy(); } _CHECK_FAIL{ delete m->layoutAlbumSongs; } _CHECK_FAIL{ CExtBaseLayout::Destroy(); } @@ -476,6 +479,8 @@ void CAlbumLayout::Destroy(void) { ASSERT(m); + Disconnect(Layout()); + m->lmgr->RemoveLayout(m->layoutAlbumSongs); m->layoutAlbumSongs->Destroy(); delete m->layoutAlbumSongs; diff --git a/src/views/album-songs-layout.cpp b/src/views/album-songs-layout.cpp index 685137c..6d43fed 100644 --- a/src/views/album-songs-layout.cpp +++ b/src/views/album-songs-layout.cpp @@ -476,79 +476,44 @@ void CAlbumSongsLayout::m_CreateSongList(void) bool CAlbumSongsLayout::Create(CLayoutMgr *mgr) { ASSERT(!m); + ASSERT(mgr); + + _CREATE_BEGIN{ + Evas_Object *base = NULL; + Evas_Object *win = NULL; + Evas_Object *layout = NULL; + CMusicController *mhandle = NULL; + CViewMgr *vmgr = NULL; + CAlbumInfo *alinfo = NULL; + + _CHECK(m = new SAlbumSongsLayout) + _CHECK(vmgr = CViewMgr::GetInstance()) + _CHECK(base = mgr->Base()) + _CHECK(win = vmgr->Window()) + _CHECK(mhandle = CMusicController::GetInstance()) + _CHECK(layout = CCommonUI::AddBase(base, MUSIC_ALBUM_SONGS_LAYOUT)) + _CHECK(CExtBaseLayout::Create(layout)) + _CHECK(alinfo = new CAlbumInfo) + + _WHEN_SUCCESS{ + m->win = win; + m->base = base; + m->vmgr = vmgr; + m->mhandle = mhandle; + m->mgr = mgr; + m->alinfo = alinfo; + Connect(layout, ALBUM_SONGS_LAYOUT, TYPE_KEY_DOWN); + } - Evas_Object *base = NULL; - Evas_Object *win = NULL; - Evas_Object *layout = NULL; - CMusicController *mhandle; - CViewMgr *vmgr; - - if (!mgr) - return false; - - m = new SAlbumSongsLayout; - if (!m) { - _ERR(" calloc failed "); - return false; - } - - vmgr = CViewMgr::GetInstance(); - if (!vmgr) { - _ERR(" get view mgr failed "); - delete m; - m = NULL; - return false; - } - - base = mgr->Base(); - if (!base) { - _ERR(" get base failed "); - delete m; - m = NULL; - return false; - } - - win = vmgr->Window(); - if (!win) { - _ERR(" vimewmgr get win failed "); - delete m; - m = NULL; - return false; - } - - mhandle = CMusicController::GetInstance(); - if (!mhandle) { - _ERR(" music controller get music instance failed "); - delete m; - m = NULL; - return false; - } - - layout = CCommonUI::AddBase(base, MUSIC_ALBUM_SONGS_LAYOUT); - if (!layout) { - _ERR(" get layout failed "); - delete m; - m = NULL; - return false; - } - - bool r = CExtBaseLayout::Create(layout); - if (!r) { - _ERR(" CBaseLayout creation failed "); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - m->win = win; - m->base = base; - m->vmgr = vmgr; - m->mhandle = mhandle; - m->mgr = mgr; - m->alinfo = new CAlbumInfo; - - Connect(layout, ALBUM_SONGS_LAYOUT, TYPE_KEY_DOWN); + _CHECK_FAIL{ delete alinfo; } + _CHECK_FAIL{ CExtBaseLayout::Destroy(); } + _CHECK_FAIL{ evas_object_del(layout); } + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ delete m; m = NULL; } + } _CREATE_END_AND_CATCH{ return false; } return true; } @@ -557,6 +522,8 @@ void CAlbumSongsLayout::Destroy(void) { ASSERT(m); + Disconnect(Layout()); + if (m->alinfo->FlagCreate()) m->alinfo->Destroy(); delete m->alinfo; diff --git a/src/views/category-layout.cpp b/src/views/category-layout.cpp index ec2a074..f32efec 100644 --- a/src/views/category-layout.cpp +++ b/src/views/category-layout.cpp @@ -986,6 +986,20 @@ void CCategoryLayout::m_ShowCategorySongs(void) } +const char *CCategoryLayout::m_CategorySongLayoutId(void) +{ + const char *layoutId; + + if (!strcmp(LayoutId(), MUSIC_CATEGORY_ARTIST_LAYOUT)) + layoutId = MUSIC_CATEGORY_ARTIST_SONGS_LAYOUT; + else if (!strcmp(LayoutId(), MUSIC_CATEGORY_GENRE_LAYOUT)) + layoutId = MUSIC_CATEGORY_GENRE_SONGS_LAYOUT; + else if (!strcmp(LayoutId(), MUSIC_CATEGORY_PLAYLISTS_LAYOUT)) + layoutId = MUSIC_CATEGORY_PLAYLISTS_SONGS_LAYOUT; + + return layoutId; +} + bool CCategoryLayout::t_SetEdje(const char *szLayout) { @@ -1083,127 +1097,64 @@ void CCategoryLayout::t_UpdateLayoutWithFocus(void) bool CCategoryLayout::Create(CLayoutMgr *mgr) { ASSERT(!m); + ASSERT(mgr); + + _CREATE_BEGIN{ + Evas_Object *base = NULL; + Evas_Object *win = NULL; + Evas_Object *layout = NULL; + CMusicController *pMusicController = NULL; + CViewMgr *vmgr = NULL; + CEntryPopup *popup = NULL; + CCategorySongsLayout *layoutCatSongs = NULL; + const char *catSongLayoutId = NULL; + + _CHECK(m = new SCategoryLayout) + _CHECK(vmgr = CViewMgr::GetInstance()) + _CHECK(base = mgr->Base()) + _CHECK(win = vmgr->Window()) + _CHECK(pMusicController = CMusicController::GetInstance()) + _CHECK(layout = elm_layout_add(base)) + _CHECK(CExtBaseLayout::Create(layout)) + _CHECK(popup = new CEntryPopup) + _CHECK(catSongLayoutId = m_CategorySongLayoutId()) + _CHECK(layoutCatSongs = new CCategorySongsLayout(catSongLayoutId)) + _CHECK(layoutCatSongs->Create(mgr, this)) + _CHECK(mgr->AddLayout(layoutCatSongs)) + + _WHEN_SUCCESS{ + memset(&t, 0, sizeof(SCategoryLayoutProtected)); + + m->win = win; + t.base = base; + m->vmgr = vmgr; + m->pMusicController = pMusicController; + m->lmgr = mgr; + t.depth = E_DEPTH_CATEGORY; + m->callback.cbHandleEmptyStatus = NULL; + m->callback.cookie = NULL; + t.epopup = popup; + m->catSongLayoutId = catSongLayoutId; + m->layoutCatSongs = layoutCatSongs; + + t_UpdateLayout(false); + + Connect(Layout(), CATEGORY_LAYOUT, TYPE_KEY_DOWN); + } - Evas_Object *base = NULL; - Evas_Object *win = NULL; - Evas_Object *layout = NULL; - CMusicController *pMusicController = NULL; - CViewMgr *vmgr = NULL; - - if (!mgr) - return false; - - m = new SCategoryLayout; - if (!m) { - _ERR(" calloc failed "); - return false; - } - - memset(&t, 0, sizeof(SCategoryLayoutProtected)); - - vmgr = CViewMgr::GetInstance(); - if (!vmgr) { - _ERR(" get view mgr failed "); - delete m; - m = NULL; - return false; - } - - base = mgr->Base(); - if (!base) { - _ERR(" get base failed "); - delete m; - m = NULL; - return false; - } - - win = vmgr->Window(); - if (!win) { - _ERR(" vimewmgr get win failed "); - delete m; - m = NULL; - return false; - } - - pMusicController = CMusicController::GetInstance(); - if (!pMusicController) { - _ERR(" music controller get music instance failed "); - delete m; - m = NULL; - return false; - } - - layout = elm_layout_add(base); - if (!layout) { - _ERR(" layout creation failed "); - delete m; - m = NULL; - return false; - } - - bool r = CExtBaseLayout::Create(layout); - if (!r) { - _ERR(" CBaseLayout creation failed "); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - t.epopup = new CEntryPopup; - if (!t.epopup) { - _ERR(" CEntryPopup creation failed "); - CExtBaseLayout::Destroy(); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - if (!strcmp(LayoutId(), MUSIC_CATEGORY_ARTIST_LAYOUT)) - m->catSongLayoutId = MUSIC_CATEGORY_ARTIST_SONGS_LAYOUT; - else if (!strcmp(LayoutId(), MUSIC_CATEGORY_GENRE_LAYOUT)) - m->catSongLayoutId = MUSIC_CATEGORY_GENRE_SONGS_LAYOUT; - else if (!strcmp(LayoutId(), MUSIC_CATEGORY_PLAYLISTS_LAYOUT)) - m->catSongLayoutId = MUSIC_CATEGORY_PLAYLISTS_SONGS_LAYOUT; - - m->layoutCatSongs = new CCategorySongsLayout((const char *)m->catSongLayoutId); - if (!m->layoutCatSongs) { - _ERR(" Memory alloc failed "); - delete t.epopup; - CExtBaseLayout::Destroy(); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - r = m->layoutCatSongs->Create(mgr, this); - if (!r) { - _ERR(" CCategorySongsLayout creation failed "); - delete m->layoutCatSongs; - delete t.epopup; - CExtBaseLayout::Destroy(); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - mgr->AddLayout(m->layoutCatSongs); - - m->win = win; - t.base = base; - m->vmgr = vmgr; - m->pMusicController = pMusicController; - m->lmgr = mgr; - t.depth = E_DEPTH_CATEGORY; - m->callback.cbHandleEmptyStatus = NULL; - m->callback.cookie = NULL; - - t_UpdateLayout(false); - - Connect(Layout(), CATEGORY_LAYOUT, TYPE_KEY_DOWN); + _CHECK_FAIL{ mgr->RemoveLayout(layoutCatSongs); } + _CHECK_FAIL{ m->layoutCatSongs->Destroy(); } + _CHECK_FAIL{ delete layoutCatSongs; } + _CHECK_FAIL{} + _CHECK_FAIL{ delete popup; } + _CHECK_FAIL{ CExtBaseLayout::Destroy(); } + _CHECK_FAIL{ evas_object_del(layout); } + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ delete m; m = NULL; } + } _CREATE_END_AND_CATCH{ return false; } return true; } @@ -1215,6 +1166,7 @@ void CCategoryLayout::Destroy(void) Disconnect(Layout()); + m->lmgr->RemoveLayout(m->layoutCatSongs); m->layoutCatSongs->Destroy(); delete m->layoutCatSongs; diff --git a/src/views/category-songs-layout.cpp b/src/views/category-songs-layout.cpp index 4da5a47..986c0fd 100644 --- a/src/views/category-songs-layout.cpp +++ b/src/views/category-songs-layout.cpp @@ -844,79 +844,42 @@ bool CCategorySongsLayout::m_SetEdje(const char *szLayout) bool CCategorySongsLayout::Create(CLayoutMgr *mgr, CCategoryLayout *parent) { ASSERT(!m); + ASSERT(mgr); + + _CREATE_BEGIN{ + Evas_Object *base = NULL; + Evas_Object *win = NULL; + Evas_Object *layout = NULL; + CMusicController *mhandle = NULL; + CViewMgr *vmgr = NULL; + + _CHECK(m = new SCategorySongsLayout) + _CHECK(vmgr = CViewMgr::GetInstance()) + _CHECK(base = mgr->Base()) + _CHECK(win = vmgr->Window()) + _CHECK(mhandle = CMusicController::GetInstance()) + _CHECK(layout = CCommonUI::AddBase(base, MUSIC_CATEGORY_SONGS_LAYOUT)) + _CHECK(CExtBaseLayout::Create(layout)) + + _WHEN_SUCCESS{ + m->win = win; + m->base = base; + m->vmgr = vmgr; + m->mhandle = mhandle; + m->mgr = mgr; + m->parent = parent; + + Connect(layout, CATEGORY_SONGS_LAYOUT, TYPE_KEY_DOWN); + } - Evas_Object *base = NULL; - Evas_Object *win = NULL; - Evas_Object *layout = NULL; - CMusicController *mhandle; - CViewMgr *vmgr; - - if (!mgr) - return false; - - m = new SCategorySongsLayout; - if (!m) { - _ERR(" calloc failed "); - return false; - } - - vmgr = CViewMgr::GetInstance(); - if (!vmgr) { - _ERR(" get view mgr failed "); - delete m; - m = NULL; - return false; - } - - base = mgr->Base(); - if (!base) { - _ERR(" get base failed "); - delete m; - m = NULL; - return false; - } - - win = vmgr->Window(); - if (!win) { - _ERR(" vimewmgr get win failed "); - delete m; - m = NULL; - return false; - } - - mhandle = CMusicController::GetInstance(); - if (!mhandle) { - _ERR(" music controller get music instance failed "); - delete m; - m = NULL; - return false; - } - - layout = CCommonUI::AddBase(base, MUSIC_CATEGORY_SONGS_LAYOUT); - if (!layout) { - _ERR(" get layout failed "); - delete m; - m = NULL; - return false; - } - - bool r = CExtBaseLayout::Create(layout); - if (!r) { - _ERR(" CBaseLayout creation failed "); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - m->win = win; - m->base = base; - m->vmgr = vmgr; - m->mhandle = mhandle; - m->mgr = mgr; - m->parent = parent; - - Connect(layout, CATEGORY_SONGS_LAYOUT, TYPE_KEY_DOWN); + _CHECK_FAIL{ CExtBaseLayout::Destroy(); } + _CHECK_FAIL{ evas_object_del(layout); } + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ delete m; m = NULL; } + } _CREATE_END_AND_CATCH{ return false; } return true; } @@ -925,6 +888,8 @@ void CCategorySongsLayout::Destroy(void) { ASSERT(m); + Disconnect(Layout()); + m_RemoveFocusIdler(); m_EmptySongList(); CExtBaseLayout::Destroy(); diff --git a/src/views/folder-layout.cpp b/src/views/folder-layout.cpp index f362152..7061f07 100644 --- a/src/views/folder-layout.cpp +++ b/src/views/folder-layout.cpp @@ -717,87 +717,52 @@ void CFolderLayout::m_CreateTopsection(void) bool CFolderLayout::Create(CLayoutMgr *mgr) { ASSERT(!m); + ASSERT(mgr); + + _CREATE_BEGIN{ + Evas_Object *base = NULL; + Evas_Object *win = NULL; + Evas_Object *layout = NULL; + CMusicController *mhandle = NULL; + CViewMgr *vmgr = NULL; + + _CHECK(m = new SFolderLayout) + _CHECK(vmgr = CViewMgr::GetInstance()) + _CHECK(base = mgr->Base()) + _CHECK(win = vmgr->Window()) + _CHECK(mhandle = CMusicController::GetInstance()) + _CHECK(layout = CCommonUI::AddBase(base, MUSIC_FOLDER_LAYOUT)) + _CHECK(CExtBaseLayout::Create(layout)) + + _WHEN_SUCCESS{ + m->win = win; + m->base = base; + m->vmgr = vmgr; + m->mhandle = mhandle; + m->lmgr = mgr; + m->depth = E_DEPTH_FOLDER; + + m_CreateTopsection(); + m_CreateFolderGrid(); + + Connect(layout, FOLDER_LAYOUT, TYPE_KEY_DOWN); - Evas_Object *base = NULL; - Evas_Object *win = NULL; - Evas_Object *layout = NULL; - CMusicController *mhandle = NULL; - CViewMgr *vmgr = NULL; - - if (!mgr) - return false; - - m = new SFolderLayout; - if (!m) { - _ERR(" calloc failed "); - return false; - } - - vmgr = CViewMgr::GetInstance(); - if (!vmgr) { - _ERR(" get view mgr failed "); - delete m; - m = NULL; - return false; - } - - base = mgr->Base(); - if (!base) { - _ERR(" get base failed "); - delete m; - m = NULL; - return false; - } - - win = vmgr->Window(); - if (!win) { - _ERR(" vimewmgr get win failed "); - delete m; - return false; - } - - mhandle = CMusicController::GetInstance(); - if (!mhandle) { - _ERR(" music controller get music instance failed "); - delete m; - m = NULL; - return false; - } - - layout = CCommonUI::AddBase(base, MUSIC_FOLDER_LAYOUT); - if (!layout) { - _ERR(" get layout failed "); - delete m; - return false; - } - - bool r = CExtBaseLayout::Create(layout); - if (!r) { - _ERR(" CBaseLayout creation failed "); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - m->win = win; - m->base = base; - m->vmgr = vmgr; - m->mhandle = mhandle; - m->lmgr = mgr; - m->depth = E_DEPTH_FOLDER; - - m_CreateTopsection(); - m_CreateFolderGrid(); - - Connect(layout, FOLDER_LAYOUT, TYPE_KEY_DOWN); + SParcel parcel; + parcel.ctxtInfo = NULL; + parcel.updateType = E_LAYOUT_UPDATE; + parcel.layoutId = NULL; + parcel.keyEvent = NULL; + m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel); + } - SParcel parcel; - parcel.ctxtInfo = NULL; - parcel.updateType = E_LAYOUT_UPDATE; - parcel.layoutId = NULL; - parcel.keyEvent = NULL; - m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel); + _CHECK_FAIL{ CExtBaseLayout::Destroy(); } + _CHECK_FAIL{ evas_object_del(layout); } + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ delete m; m = NULL; } + } _CREATE_END_AND_CATCH{ return false; } return true; } @@ -807,6 +772,8 @@ void CFolderLayout::Destroy(void) { ASSERT(m); + Disconnect(Layout()); + m_RemoveFocusIdler(); m_EmptyFolderGrid(false); CExtBaseLayout::Destroy(); diff --git a/src/views/song-layout.cpp b/src/views/song-layout.cpp index cad5988..e97e2d9 100644 --- a/src/views/song-layout.cpp +++ b/src/views/song-layout.cpp @@ -483,100 +483,62 @@ void CSongLayout::m_CreateSongList(void) bool CSongLayout::Create(CLayoutMgr *mgr, const char *uri) { ASSERT(!m); + ASSERT(mgr); + + _CREATE_BEGIN{ + Evas_Object *base = NULL; + Evas_Object *win = NULL; + Evas_Object *layout = NULL; + CMusicController *mhandle = NULL; + CViewMgr *vmgr = NULL; + + _CHECK(m = new SSongLayout) + _CHECK(vmgr = CViewMgr::GetInstance()) + _CHECK(base = mgr->Base()) + _CHECK(win = vmgr->Window()) + _CHECK(mhandle = CMusicController::GetInstance()) + _CHECK(layout = CCommonUI::AddBase(base, MUSIC_SONG_LAYOUT)) + _CHECK(CExtBaseLayout::Create(layout)) + + _WHEN_SUCCESS{ + CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ARTIST_AZ, sm_CbSortArtistAZ); + CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ARTIST_ZA, sm_CbSortArtistZA); + CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ALBUM_AZ, sm_CbSortAlbumAZ); + CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ALBUM_ZA, sm_CbSortAlbumZA); + + if (uri) { + m->uri = new char[strlen(uri) + 1]; + strcpy(m->uri, uri); + } + else + m->uri = NULL; - Evas_Object *base = NULL; - Evas_Object *win = NULL; - Evas_Object *layout = NULL; - CMusicController *mhandle = NULL; - CViewMgr *vmgr = NULL; - - if (!mgr) - return false; - - m = new SSongLayout; - if (!m) { - _ERR(" calloc failed "); - return false; - } - - vmgr = CViewMgr::GetInstance(); - if (!vmgr) { - _ERR(" get view mgr failed "); - delete m; - m = NULL; - return false; - } - - base = mgr->Base(); - if (!base) { - _ERR(" get base failed "); - delete m; - m = NULL; - return false; - } - - win = vmgr->Window(); - if (!win) { - _ERR(" vimewmgr get win failed "); - delete m; - m = NULL; - return false; - } - - mhandle = CMusicController::GetInstance(); - if (!mhandle) { - _ERR(" music controller get music instance failed "); - delete m; - m = NULL; - return false; - } - - layout = CCommonUI::AddBase(base, MUSIC_SONG_LAYOUT); - if (!layout) { - _ERR(" get layout failed "); - delete m; - m = NULL; - return false; - } - - bool r = CExtBaseLayout::Create(layout); - if (!r) { - _ERR(" CBaseLayout creation failed "); - evas_object_del(layout); - delete m; - m = NULL; - return false; - } - - CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ARTIST_AZ, sm_CbSortArtistAZ); - CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ARTIST_ZA, sm_CbSortArtistZA); - CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ALBUM_AZ, sm_CbSortAlbumAZ); - CSortMgr::GetInstance()->RegisterSortFunction(SORT_BY_ALBUM_ZA, sm_CbSortAlbumZA); - - if (uri) { - m->uri = new char[strlen(uri) + 1]; - strcpy(m->uri, uri); - } - else { - m->uri = NULL; - } + m->win = win; + m->base = base; + m->vmgr = vmgr; + m->mhandle = mhandle; + m->mgr = mgr; - m->win = win; - m->base = base; - m->vmgr = vmgr; - m->mhandle = mhandle; - m->mgr = mgr; + m_CreateSongList(); - m_CreateSongList(); + Connect(layout, SONG_LAYOUT, TYPE_KEY_DOWN); - Connect(layout, SONG_LAYOUT, TYPE_KEY_DOWN); + SParcel parcel; + parcel.ctxtInfo = NULL; + parcel.updateType = E_FOCUS_UPDATE; + parcel.layoutId = MUSIC_SONG_LAYOUT; + parcel.keyEvent = NULL; + m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel); + } - SParcel parcel; - parcel.ctxtInfo = NULL; - parcel.updateType = E_FOCUS_UPDATE; - parcel.layoutId = MUSIC_SONG_LAYOUT; - parcel.keyEvent = NULL; - m->vmgr->UpdateView((const char *)MUSIC_BASE_VIEW, &parcel); + _CHECK_FAIL{ CExtBaseLayout::Destroy(); } + _CHECK_FAIL{ evas_object_del(layout); } + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ delete m; m = NULL; } + } _CREATE_END_AND_CATCH{ return false; } return true; } @@ -585,6 +547,8 @@ void CSongLayout::Destroy(void) { ASSERT(m); + Disconnect(Layout()); + CExtBaseLayout::Destroy(); evas_object_del(Layout()); -- 2.7.4 From 4d65bfdbb30aea5abb1a32bb691979d183a70d41 Mon Sep 17 00:00:00 2001 From: Kim Tae Soo Date: Tue, 17 Mar 2015 10:41:42 +0900 Subject: [PATCH 16/16] Apply error checking macro to Create function. Change-Id: I5b3abd80a33f1914b12b16b7142947043bfefd71 Signed-off-by: Kim Tae Soo --- include/base-view.h | 2 + src/views/base-view.cpp | 229 ++++++++++++++++++++++++------------------------ 2 files changed, 115 insertions(+), 116 deletions(-) diff --git a/include/base-view.h b/include/base-view.h index 5a86149..97797c1 100644 --- a/include/base-view.h +++ b/include/base-view.h @@ -64,6 +64,8 @@ private: void m_SetSourceType(void); void m_UpdateCurrentLayout(bool focusFlag); + char *m_Argument(void *data); + protected: virtual void t_OnShow(void); virtual void t_OnHide(void); diff --git a/src/views/base-view.cpp b/src/views/base-view.cpp index e519921..faece1f 100644 --- a/src/views/base-view.cpp +++ b/src/views/base-view.cpp @@ -161,14 +161,11 @@ struct SMusicBaseView { CSongLayout *layoutSong; CAlbumLayout *layoutAlbum; - CArtistLayout *layoutArtist; CGenreLayout *layoutGenre; CPlaylistLayout *layoutPlaylists; - CFolderLayout *layoutFolder; - CMusicBaseView *parent; CHandleVolume *pHandleVolume; SMusicBaseView() { @@ -675,126 +672,127 @@ void CMusicBaseView::m_UpdateCurrentLayout(bool focusFlag) } -bool CMusicBaseView::Create(void *data) +char *CMusicBaseView::m_Argument(void *data) { - ASSERT(!m); - - Evas_Object *win = NULL; - CMusicController *mhandle = NULL; - CLayoutMgr *lmgr = NULL; + SArgList *arglist = (SArgList *)data; char *arg = NULL; - m = new SMusicBaseView; - if (!m) { - _ERR(" new for SMusicBaseView failed "); - m = NULL; - return false; - } - - win = CViewMgr::GetInstance()->Window(); - if (!win) { - _ERR(" vimewmgr get win failed "); - delete m; - m = NULL; - return false; - } - - mhandle = CMusicController::GetInstance(); - if (!mhandle) { - _ERR(" music controller get music instance failed "); - delete m; - m = NULL; - return false; - } - - m->base = CCommonUI::AddBase(win, MUSIC_BASE_VIEW); - if (!m->base) { - _ERR(" add base failed "); - delete m; - m = NULL; - return false; - } - - lmgr = new CLayoutMgr; - if (!lmgr) { - evas_object_del(m->base); - delete m; - m = NULL; - return false; - } - - if (!lmgr->Create(m->base, NULL)) { - _ERR(" init layout mgr failed "); - evas_object_del(m->base); - delete m; - m = NULL; - return false; - } - - bool r = CBaseView::Create(data); - if (!r) { - _ERR(" CBaseView Creation failed "); - lmgr->Destroy(); - evas_object_del(m->base); - delete m; - m = NULL; - return false; - } - - m->win = win; - m->mhandle = mhandle; - m->lmgr = lmgr; - m->fresh_view = true; - m->arglist = (SArgList *)data; - m->parent = this; - - m->layoutSong = new CSongLayout(MUSIC_SONG_LAYOUT); - arg = NULL; - if (m->arglist && m->arglist->uri) - arg = m->arglist->uri; - m->layoutSong->Create(m->lmgr, arg); - lmgr->AddLayout(m->layoutSong); - - m->layoutAlbum = new CAlbumLayout(MUSIC_ALBUM_LAYOUT); - arg = NULL; - if (m->arglist && m->arglist->album_id) - arg = m->arglist->album_id; - m->layoutAlbum->Create(m->lmgr, arg); - m->layoutAlbum->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); - lmgr->AddLayout(m->layoutAlbum); - - m->layoutArtist = new CArtistLayout(MUSIC_CATEGORY_ARTIST_LAYOUT); - m->layoutArtist->Create(m->lmgr); - m->layoutArtist->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); - lmgr->AddLayout(m->layoutArtist); - - m->layoutGenre = new CGenreLayout(MUSIC_CATEGORY_GENRE_LAYOUT); - m->layoutGenre->Create(m->lmgr); - m->layoutGenre->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); - lmgr->AddLayout(m->layoutGenre); - - m->layoutPlaylists = new CPlaylistLayout(MUSIC_CATEGORY_PLAYLISTS_LAYOUT); - m->layoutPlaylists->Create(m->lmgr); - m->layoutPlaylists->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); - lmgr->AddLayout(m->layoutPlaylists); - - m->layoutFolder = new CFolderLayout(MUSIC_FOLDER_LAYOUT); - m->layoutFolder->Create(m->lmgr); - lmgr->AddLayout(m->layoutFolder); - - elm_object_part_content_unset(m->base, MUSIC_PART_CONTENT); + if (arglist && arglist->uri) + arg = arglist->uri; + else if (arglist && arglist->album_id) + arg = arglist->album_id; - m_SetSourceType(); + return arg; +} - evas_object_data_set(m->base, BASE_VIEW_DATA, m); - m_CreateFullView(); - m->pHandleVolume->Create(m->base); - m_UpdateFocusSequence(); +bool CMusicBaseView::Create(void *data) +{ + ASSERT(!m); - Connect(m->base, BASE_VIEW, TYPE_KEY_DOWN | TYPE_KEY_UP); + _CREATE_BEGIN{ + Evas_Object *win = NULL; + Evas_Object *base = NULL; + CMusicController *mhandle = NULL; + CLayoutMgr *lmgr = NULL; + CSongLayout *layoutSong = NULL; + CAlbumLayout *layoutAlbum = NULL; + CArtistLayout*layoutArtist = NULL; + CGenreLayout *layoutGenre = NULL; + CPlaylistLayout *layoutPlaylists = NULL; + CFolderLayout *layoutFolder = NULL; + CHandleVolume *handleVolume = NULL; + + _CHECK(m = new SMusicBaseView) + _CHECK(win = CViewMgr::GetInstance()->Window()) + _CHECK(mhandle = CMusicController::GetInstance()) + _CHECK(base = CCommonUI::AddBase(win, MUSIC_BASE_VIEW)) + _CHECK(lmgr = new CLayoutMgr) + _CHECK(lmgr->Create(base, NULL)) + _CHECK(CBaseView::Create(data)) + _CHECK(layoutSong = new CSongLayout(MUSIC_SONG_LAYOUT)) + _CHECK(layoutSong->Create(lmgr, m_Argument(data))) + _CHECK(lmgr->AddLayout(layoutSong)) + _CHECK(layoutAlbum = new CAlbumLayout(MUSIC_ALBUM_LAYOUT)) + _CHECK(layoutAlbum->Create(lmgr, m_Argument(data))) + _CHECK(lmgr->AddLayout(layoutAlbum)) + _CHECK(layoutArtist = new CArtistLayout(MUSIC_CATEGORY_ARTIST_LAYOUT)) + _CHECK(layoutArtist->Create(lmgr)) + _CHECK(lmgr->AddLayout(layoutArtist)) + _CHECK(layoutGenre = new CGenreLayout(MUSIC_CATEGORY_GENRE_LAYOUT)) + _CHECK(layoutGenre->Create(lmgr)) + _CHECK(lmgr->AddLayout(layoutGenre)) + _CHECK(layoutPlaylists = new CPlaylistLayout(MUSIC_CATEGORY_PLAYLISTS_LAYOUT)) + _CHECK(layoutPlaylists->Create(lmgr)) + _CHECK(lmgr->AddLayout(layoutPlaylists)) + _CHECK(layoutFolder = new CFolderLayout(MUSIC_FOLDER_LAYOUT)) + _CHECK(layoutFolder->Create(lmgr)) + _CHECK(lmgr->AddLayout(layoutFolder)) + _CHECK(handleVolume = new CHandleVolume) + _CHECK(handleVolume->Create(base)) + _CHECK(mhandle->AddListener(this)) + + _WHEN_SUCCESS{ + m->base = base; + m->win = win; + m->mhandle = mhandle; + m->lmgr = lmgr; + m->fresh_view = true; + m->arglist = (SArgList *)data; + + m->layoutSong = layoutSong; + m->layoutAlbum = layoutAlbum; + m->layoutArtist = layoutArtist; + m->layoutGenre = layoutGenre; + m->layoutPlaylists = layoutPlaylists; + m->layoutFolder = layoutFolder; + + m->layoutAlbum->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); + m->layoutArtist->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); + m->layoutGenre->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); + m->layoutPlaylists->SetEmptyStatusHandleCallback(sm_CbHandleEmptyStatus, this); + + m->pHandleVolume = handleVolume; + + elm_object_part_content_unset(m->base, MUSIC_PART_CONTENT); + m_SetSourceType(); + evas_object_data_set(m->base, BASE_VIEW_DATA, m); + + m_CreateFullView(); + m_UpdateFocusSequence(); + + Connect(m->base, BASE_VIEW, TYPE_KEY_DOWN | TYPE_KEY_UP); + } - mhandle->AddListener(this); + _CHECK_FAIL{ m->mhandle->RemoveListener(this); } + _CHECK_FAIL{ handleVolume->Destroy(); } + _CHECK_FAIL{ delete handleVolume; } + _CHECK_FAIL{ lmgr->RemoveLayout(layoutFolder); } + _CHECK_FAIL{ layoutFolder->Destroy(); } + _CHECK_FAIL{ delete layoutFolder; } + _CHECK_FAIL{ lmgr->RemoveLayout(layoutPlaylists); } + _CHECK_FAIL{ layoutPlaylists->Destroy(); } + _CHECK_FAIL{ delete layoutPlaylists; } + _CHECK_FAIL{ lmgr->RemoveLayout(layoutGenre); } + _CHECK_FAIL{ layoutGenre->Destroy(); } + _CHECK_FAIL{ delete layoutGenre; } + _CHECK_FAIL{ lmgr->RemoveLayout(layoutArtist); } + _CHECK_FAIL{ layoutArtist->Destroy(); } + _CHECK_FAIL{ delete layoutArtist; } + _CHECK_FAIL{ lmgr->RemoveLayout(layoutAlbum); } + _CHECK_FAIL{ layoutAlbum->Destroy(); } + _CHECK_FAIL{ delete layoutAlbum; } + _CHECK_FAIL{ lmgr->RemoveLayout(layoutSong); } + _CHECK_FAIL{ layoutSong->Destroy(); } + _CHECK_FAIL{ delete layoutSong; } + _CHECK_FAIL{ CBaseView::Destroy(); } + _CHECK_FAIL{ lmgr->Destroy(); } + _CHECK_FAIL{ delete lmgr; } + _CHECK_FAIL{ evas_object_del(m->base); } + _CHECK_FAIL{} + _CHECK_FAIL{} + _CHECK_FAIL{ delete m; m = NULL; } + } _CREATE_END_AND_CATCH{ return false; } return true; } @@ -805,7 +803,6 @@ void CMusicBaseView::Destroy(void) ASSERT(m); m->mhandle->RemoveListener(this); - m->pHandleVolume->Destroy(); m->lmgr->RemoveLayout(m->layoutFolder); -- 2.7.4