diff options
Diffstat (limited to 'src/layout/music.c')
-rw-r--r-- | src/layout/music.c | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/src/layout/music.c b/src/layout/music.c index ad68f86..8c23511 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -258,13 +258,33 @@ err: return NULL; } +static struct datamgr *_get_datamgr(struct _priv *priv) +{ + struct datamgr *dmgr; + + switch (priv->view_mode) { + case E_MUSIC_SONG: + dmgr = priv->dmgr[E_DATA_MEDIA]; + break; + case E_MUSIC_ALBUM: + case E_MUSIC_ARTIST: + dmgr = priv->dmgr[E_DATA_ALBUM]; + break; + default: + dmgr = NULL; + break; + } + + return dmgr; +} + static void _update_content_info(struct _priv *priv) { struct datamgr *dmgr; int count; char buf[128]; - dmgr = priv->dmgr[E_DATA_MEDIA]; + dmgr = _get_datamgr(priv); if (!dmgr) return; @@ -281,9 +301,14 @@ static void _update_content_info(struct _priv *priv) static void _clear_content_list(struct _priv *priv) { + struct datamgr *dmgr; + if (priv->media_list) { - priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], - priv->media_list); + dmgr = _get_datamgr(priv); + if (!dmgr) + return; + + priv->gdata->free_item_list(dmgr, priv->media_list); priv->media_list = NULL; } @@ -293,6 +318,7 @@ static void _clear_content_list(struct _priv *priv) static void _update_content_list(struct _priv *priv) { Eina_List *list; + struct datamgr *dmgr; if (priv->media_list) { _update_content_info(priv); @@ -301,14 +327,18 @@ static void _update_content_list(struct _priv *priv) priv->gdata = get_music_grid_data(priv->view_mode); - list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); + dmgr = _get_datamgr(priv); + if (!dmgr) + return; + + list = priv->gdata->get_item_list(dmgr); if (!list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; } - priv->gdata->data = priv->dmgr[E_DATA_MEDIA]; + priv->gdata->data = dmgr; if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) _ERR("failed to update list area"); @@ -507,6 +537,7 @@ err: static void _destroy(void *layout_data) { struct _priv *priv; + struct datamgr *dmgr; if (!layout_data) { _ERR("failed to get layout data"); @@ -515,7 +546,9 @@ static void _destroy(void *layout_data) priv = layout_data; - priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], priv->media_list); + dmgr = _get_datamgr(priv); + + priv->gdata->free_item_list(dmgr, priv->media_list); _destroy_utils(priv); @@ -611,6 +644,10 @@ static void _update(void *layout_data, int update_type, void *data) vdata = data; mode = vdata->index; + /* Genre and folder view mode will be implemented later. */ + if (mode == E_MUSIC_GENRE || mode == E_MUSIC_FOLDER) + return; + if (mode == priv->view_mode) return; |