diff options
-rw-r--r-- | CMakeLists.txt | 1 | ||||
-rw-r--r-- | include/data/datamgr.h | 59 | ||||
-rw-r--r-- | include/data/mediadata.h | 57 | ||||
-rw-r--r-- | include/grid/grid.h | 5 | ||||
-rw-r--r-- | include/util/listmgr.h | 1 | ||||
-rw-r--r-- | src/data/datamgr.c | 89 | ||||
-rw-r--r-- | src/data/mediadata.c | 229 | ||||
-rw-r--r-- | src/grid/grid_gallery.c | 35 | ||||
-rw-r--r-- | src/grid/grid_movie.c | 50 | ||||
-rw-r--r-- | src/grid/grid_music.c | 29 | ||||
-rw-r--r-- | src/layout/gallery.c | 123 | ||||
-rw-r--r-- | src/layout/movie.c | 135 | ||||
-rw-r--r-- | src/layout/music.c | 136 | ||||
-rw-r--r-- | src/util/listmgr.c | 8 |
14 files changed, 623 insertions, 334 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index d0eb0e7..fff0708 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,7 @@ src/util/util.c src/util/playermgr.c src/util/ctxpopup.c src/util/progressbar.c +src/data/datamgr.c src/data/mediadata.c src/grid/grid_movie.c src/grid/grid_gallery.c diff --git a/include/data/datamgr.h b/include/data/datamgr.h new file mode 100644 index 0000000..cd017f2 --- /dev/null +++ b/include/data/datamgr.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2015 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 _AIR_MEDIAHUB_DATAMGR_H__ +#define _AIR_MEDIAHUB_DATAMGR_H__ + +#include "data/mediadata.h" + +enum data_type { + E_DATA_MEDIA = 0, + E_DATA_MAX + /* Album and folder will be added later */ +}; + +enum source_type { + E_SOURCE_INTERNAL = 0, + E_SOURCE_EXTERNAL, + E_SOURCE_ALL, + E_SOURCE_MAX +}; + +struct data_ops { + void *(*create)(const char *media_type, int source_type); + void (*destroy)(void *handle); + Eina_List *(*get_list)(void *handle); + int (*get_count)(void *handle, int type); + Eina_List *(*get_group)(void *handle, int type); + void (*free_group)(Eina_List *list); +}; + +struct datamgr { + void *handle; + struct data_ops *ops; +}; + +struct group_info { + char *name; + Eina_List *list; + void *data; +}; + +struct datamgr *datamgr_create(int data_type, const char *media_type, + int source_type); +void datamgr_destroy(struct datamgr *dmgr); + +#endif /* _AIR_MEDIAHUB_DATAMGR_H__ */ diff --git a/include/data/mediadata.h b/include/data/mediadata.h index f6ce7c7..bc75495 100644 --- a/include/data/mediadata.h +++ b/include/data/mediadata.h @@ -17,54 +17,25 @@ #ifndef _AIR_MEDIAHUB_MEDIADATA_H__ #define _AIR_MEDIAHUB_MEDIADATA_H__ -#include <stdbool.h> +struct data_ops; -struct mediadata; - -enum media_type { - E_MEDIA_PHOTO = 0, - E_MEDIA_VIDEO, - E_MEDIA_SOUND, - E_MEDIA_MUSIC, - E_MEDIA_OTHER, +enum media_group_type { + E_MEDIA_DATE = 0, + E_MEDIA_NAME, + E_MEDIA_GENRE, + E_MEDIA_TYPE, E_MEDIA_MAX }; -enum source_type { - E_SOURCE_INTERNAL = 0, - E_SOURCE_EXTERNAL, - E_SOURCE_ALL, - E_SOURCE_MAX -}; - -enum sort_type { - E_SORT_DATE = 0, - E_SORT_NAME, - E_SORT_MAX -}; - -enum list_type { - E_LIST_DATE = 0, - E_LIST_NAME, - E_LIST_GENRE, - E_LIST_TYPE, - E_LIST_MAX +enum media_file_type { + E_FILE_PHOTO = 0, + E_FILE_VIDEO, + E_FILE_SOUND, + E_FILE_MUSIC, + E_FILE_OTHER, + E_FILE_MAX }; -struct group_info { - char *name; - Eina_List *list; - void *data; -}; - -struct mediadata *mediadata_create(const char *media_type, - int source_type, int sort_type); -void mediadata_destroy(struct mediadata *md); - -Eina_List *mediadata_get_medialist(struct mediadata *md); -int mediadata_get_media_count(struct mediadata *md, int media_type); - -Eina_List *mediadata_get_list(struct mediadata *md, int list_type); -void mediadata_free_list(Eina_List *list); +struct data_ops *mediadata_get_ops(void); #endif /* _AIR_MEDIAHUB_MEDIADATA_H__ */ diff --git a/include/grid/grid.h b/include/grid/grid.h index f7232dd..a03a873 100644 --- a/include/grid/grid.h +++ b/include/grid/grid.h @@ -48,8 +48,9 @@ struct grid_data { int item_num; int grid_padding; struct grid_class *gclass; - Eina_List *(*get_item_list)(struct mediadata *md); - void (*free_item_list)(Eina_List *list); + void *data; + Eina_List *(*get_item_list)(struct datamgr *dmgr); + void (*free_item_list)(struct datamgr *dmgr, Eina_List *list); void (*key_down_cb)(void *data, Elm_Object_Item *it, Evas_Event_Key_Down *ev); void (*selected_cb)(void *data, Elm_Object_Item *it); diff --git a/include/util/listmgr.h b/include/util/listmgr.h index 2540200..bd7d3cc 100644 --- a/include/util/listmgr.h +++ b/include/util/listmgr.h @@ -34,7 +34,6 @@ struct listmgr_data { struct play_info_data *pdata; struct grid_data *gdata; - void *grid_cb_data; }; struct listmgr *listmgr_create(Evas_Object *base, void *data); diff --git a/src/data/datamgr.c b/src/data/datamgr.c new file mode 100644 index 0000000..ac8a31d --- /dev/null +++ b/src/data/datamgr.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2015 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 <Elementary.h> +#include <media_content.h> +#include <app_debug.h> +#include <app_media.h> + +#include "data/datamgr.h" + +struct _type_info { + struct data_ops *(*func_get_ops)(void); +}; + +static struct _type_info g_type_info[E_DATA_MAX] = { + [E_DATA_MEDIA] = { + .func_get_ops = mediadata_get_ops + } +}; + +struct datamgr *datamgr_create(int data_type, const char *media_type, + int source_type) +{ + struct datamgr *dmgr; + struct data_ops *ops; + void *handle; + + if (!media_type || data_type < 0 || data_type >= E_DATA_MAX || + source_type < 0 || source_type >= E_SOURCE_MAX) { + _ERR("invalid argument"); + return NULL; + } + + dmgr = calloc(1, sizeof(*dmgr)); + if (!dmgr) { + _ERR("failed to allocate datamgr"); + return NULL; + } + + ops = g_type_info[data_type].func_get_ops(); + if (!ops) { + _ERR("failed to get data operations"); + free(dmgr); + return NULL; + } + + if (!ops->create || !ops->destroy || !ops->get_list || + !ops->get_count || !ops->get_group || !ops->free_group) { + _ERR("invalid data operations"); + free(dmgr); + return NULL; + } + + handle = ops->create(media_type, source_type); + if (!handle) { + _ERR("failed to create data handle"); + free(dmgr); + return NULL; + } + + dmgr->ops = ops; + dmgr->handle = handle; + + return dmgr; +} + +void datamgr_destroy(struct datamgr *dmgr) +{ + if (!dmgr) { + _ERR("failed to get datamgr"); + return; + } + + dmgr->ops->destroy(dmgr->handle); + free(dmgr); +} diff --git a/src/data/mediadata.c b/src/data/mediadata.c index fa190b2..ca9609f 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -19,7 +19,7 @@ #include <app_debug.h> #include <app_media.h> -#include "data/mediadata.h" +#include "data/datamgr.h" #define STR_IMAGE_NAME "Photo" #define STR_VIDEO_NAME "Video" @@ -46,27 +46,12 @@ static int _compare_type(struct group_info *, app_media_info *); static char *_get_type(app_media_info *); static void *_get_data_type(app_media_info *); -enum _filter_type { - E_FILTER_FOLDER = 0, - E_FILTER_MEDIA -}; - struct mediadata { Eina_List *media_list; + int media_count[E_FILE_MAX]; - int media_count[E_MEDIA_MAX]; -}; - -struct _data { const char *media_type; int source_type; - int sort_type; - Eina_List *media_list; -}; - -struct _sort_info { - int order_type; - const char *order_keyword; }; struct _list_info { @@ -77,37 +62,26 @@ struct _list_info { group_name_get name_get; }; -static struct _sort_info g_sort_info[E_SORT_MAX] = { - [E_SORT_DATE] = { - .order_type = MEDIA_CONTENT_ORDER_DESC, - .order_keyword = MEDIA_MODIFIED_TIME, - }, - [E_SORT_NAME] = { - .order_type = MEDIA_CONTENT_ORDER_ASC, - .order_keyword = MEDIA_TITLE, - } -}; - -static struct _list_info g_list_info[E_LIST_MAX] = { - [E_LIST_DATE] = { +static struct _list_info g_group_info[E_MEDIA_MAX] = { + [E_MEDIA_DATE] = { .sort_cmp_cb = _compare_cb_date, .media_cmp = _compare_time, .name_get = _get_time, .data_get = _get_data_time, }, - [E_LIST_NAME] = { + [E_MEDIA_NAME] = { .sort_cmp_cb = _compare_cb_name, .media_cmp = _compare_title, .name_get = _get_title, .data_get = _get_data_title, }, - [E_LIST_GENRE] = { + [E_MEDIA_GENRE] = { .sort_cmp_cb = _compare_cb_genre, .media_cmp = _compare_genre, .name_get = _get_genre, .data_get = _get_data_genre, }, - [E_LIST_TYPE] = { + [E_MEDIA_TYPE] = { .sort_cmp_cb = _compare_cb_type, .media_cmp = _compare_type, .name_get = _get_type, @@ -115,7 +89,7 @@ static struct _list_info g_list_info[E_LIST_MAX] = { }, }; -static bool _create_filter(struct _data *data, filter_h *filter, int type) +static bool _create_filter(struct mediadata *md, filter_h *filter) { filter_h tmp_filter; int ret; @@ -127,24 +101,20 @@ static bool _create_filter(struct _data *data, filter_h *filter, int type) return false; } - snprintf(buf, sizeof(buf), "%s", data->media_type); + snprintf(buf, sizeof(buf), "%s", md->media_type); - if (type == E_FILTER_FOLDER && data->source_type != E_SOURCE_ALL) { + if (md->source_type != E_SOURCE_ALL) { char s[64]; snprintf(s, sizeof(s), " AND MEDIA_STORAGE_TYPE=%d", - data->source_type); + md->source_type); + strcat(buf, s); } media_filter_set_condition(tmp_filter, buf, MEDIA_CONTENT_COLLATE_DEFAULT); - media_filter_set_order(tmp_filter, - g_sort_info[data->sort_type].order_type, - g_sort_info[data->sort_type].order_keyword, - MEDIA_CONTENT_COLLATE_NOCASE); - *filter = tmp_filter; return true; @@ -401,20 +371,20 @@ static Eina_List *_sort_list(Eina_List *list, int sort) { Eina_List *sorted_list; - sorted_list = eina_list_sort(list, 0, g_list_info[sort].sort_cmp_cb); + sorted_list = eina_list_sort(list, 0, g_group_info[sort].sort_cmp_cb); return sorted_list; } -static bool _get_each_media_info(media_info_h media_h, void *dt) +static bool _get_each_media_info(media_info_h media_h, void *data) { + Eina_List **list; app_media *am; - struct _data *data; - if (!dt) + if (!data) return false; - data = dt; + list = data; am = app_media_create(media_h); if (!am) { @@ -422,53 +392,57 @@ static bool _get_each_media_info(media_info_h media_h, void *dt) return false; } - data->media_list = eina_list_append(data->media_list, am); + *list = eina_list_append(*list, am); return true; } -static bool _get_medialist(struct _data *data) +static bool _get_medialist(struct mediadata *md) { + Eina_List *list; filter_h filter; int ret; - if (!_create_filter(data, &filter, E_FILTER_MEDIA)) { + if (!_create_filter(md, &filter)) { _ERR("failed to create filter"); return false; } + list = NULL; ret = media_info_foreach_media_from_db(filter, - _get_each_media_info, data); + _get_each_media_info, &list); if (ret != MEDIA_CONTENT_ERROR_NONE) { - _ERR("failed to get folder info"); + _ERR("failed to get media info"); media_filter_destroy(filter); return false; } + md->media_list = list; + media_filter_destroy(filter); return true; } -struct mediadata *mediadata_create(const char *media_type, - int source_type, int sort_type) +static void *_create(const char *media_type, int source_type) { struct mediadata *md; - struct _data data; int ret; - if (!media_type || source_type < 0 || source_type >= E_SOURCE_MAX - || sort_type < 0 || sort_type >= E_SORT_MAX) { + if (!media_type || source_type < 0 || source_type >= E_SOURCE_MAX) { _ERR("invalid argument"); return NULL; } md = calloc(1, sizeof(*md)); if (!md) { - _ERR("failed to create mediadata"); + _ERR("failed to allocate md"); return NULL; } + md->media_type = media_type; + md->source_type = source_type; + ret = media_content_connect(); if (ret != MEDIA_CONTENT_ERROR_NONE) { _ERR("failed to connect to media content"); @@ -476,13 +450,8 @@ struct mediadata *mediadata_create(const char *media_type, return NULL; } - data.media_type = media_type; - data.source_type = source_type; - data.sort_type = sort_type; - data.media_list = NULL; - - if (!_get_medialist(&data)) { - _ERR("failed to get folderlist"); + if (!_get_medialist(md)) { + _ERR("failed to get medialist"); free(md); media_content_disconnect(); return NULL; @@ -490,51 +459,100 @@ struct mediadata *mediadata_create(const char *media_type, media_content_disconnect(); - md->media_list = eina_list_clone(data.media_list); - - eina_list_free(data.media_list); - - return md; + return (void *)md; } -void mediadata_destroy(struct mediadata *md) +static void _destroy(void *handle) { - if (!md) { - _ERR("failed to get mediadata"); + app_media *am; + struct mediadata *md; + + if (!handle) { + _ERR("failed to get mediadata handle"); return; } - eina_list_free(md->media_list); + md = handle; + + EINA_LIST_FREE(md->media_list, am) + app_media_destroy(am); + + free(md); } -Eina_List *mediadata_get_medialist(struct mediadata *md) +static Eina_List *_get_list(void *handle) { - if (!md) { - _ERR("failed to get mediadata"); + struct mediadata *md; + + if (!handle) { + _ERR("failed to get mediadata handle"); return NULL; } + md = handle; + return md->media_list; } -Eina_List *mediadata_get_list(struct mediadata *md, int list_type) +static int _get_count(void *handle, int type) +{ + struct mediadata *md; + + if (!handle) { + _ERR("failed to get mediadata handle"); + return -1; + } + + if (type < 0 || type >= E_MEDIA_MAX) { + _ERR("invalid argument"); + return -1; + } + + md = handle; + + return md->media_count[type]; +} + +static void _free_group_list(Eina_List *list) +{ + Eina_List *l; + struct group_info *gi; + + EINA_LIST_FOREACH(list, l, gi) { + free(gi->name); + free(gi->data); + eina_list_free(gi->list); + + free(gi); + } +} + +static void _free_group(Eina_List *list) +{ + _free_group_list(list); +} + +static Eina_List *_get_group(void *handle, int type) { Eina_List *list, *l; + struct mediadata *md; struct group_info *gi; app_media *am; app_media_info *info; - if (!md) { - _ERR("failed to get mediadata"); + if (!handle) { + _ERR("failed to get mediadata handle"); return NULL; } - if (list_type < 0 || list_type >= E_LIST_MAX) { + if (type < 0 || type >= E_MEDIA_MAX) { _ERR("invalid argument"); return NULL; } - md->media_list = _sort_list(md->media_list, list_type); + md = handle; + + md->media_list = _sort_list(md->media_list, type); gi = NULL; list = NULL; @@ -542,20 +560,20 @@ Eina_List *mediadata_get_list(struct mediadata *md, int list_type) info = app_media_get_info(am); if (!info) { _ERR("failed to get media info"); - mediadata_free_list(list); + _free_group_list(list); return NULL; } - if (g_list_info[list_type].media_cmp(gi, info)) { + if (g_group_info[type].media_cmp(gi, info)) { gi = calloc(1, sizeof(*gi)); if (!gi) { _ERR("failed to create group info"); - mediadata_free_list(list); + _free_group_list(list); return NULL; } - gi->name = g_list_info[list_type].name_get(info); - gi->data = g_list_info[list_type].data_get(info); + gi->name = g_group_info[type].name_get(info); + gi->data = g_group_info[type].data_get(info); list = eina_list_append(list, gi); } @@ -568,31 +586,16 @@ Eina_List *mediadata_get_list(struct mediadata *md, int list_type) return list; } -int mediadata_get_media_count(struct mediadata *md, int media_type) -{ - if (!md) { - _ERR("failed to get mediadata"); - return -1; - } - - if (media_type < 0 || media_type >= E_MEDIA_MAX) { - _ERR("invalid argument"); - return -1; - } - - return md->media_count[media_type]; -} +static struct data_ops _ops = { + .create = _create, + .destroy = _destroy, + .get_list = _get_list, + .get_count = _get_count, + .get_group = _get_group, + .free_group = _free_group, +}; -void mediadata_free_list(Eina_List *list) +struct data_ops *mediadata_get_ops(void) { - Eina_List *l; - struct group_info *gi; - - EINA_LIST_FOREACH(list, l, gi) { - free(gi->name); - free(gi->data); - eina_list_free(gi->list); - - free(gi); - } -} + return &_ops; +}; diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index b036caf..7da809d 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -25,7 +25,7 @@ #include "define.h" #include "view.h" -#include "data/mediadata.h" +#include "data/datamgr.h" #include "grid/grid.h" #include "util/util.h" @@ -110,36 +110,41 @@ static Evas_Object *_grid_content_get(void *data, return eo; } -static Eina_List *_get_event_list(struct mediadata *md) +static Eina_List *_get_event_list(struct datamgr *dmgr) { - if (!md) { + if (!dmgr) { _ERR("invalid argument"); return NULL; } - return mediadata_get_list(md, E_LIST_DATE); + return dmgr->ops->get_group(dmgr->handle, E_MEDIA_DATE); } -static Eina_List *_get_type_list(struct mediadata *md) +static Eina_List *_get_type_list(struct datamgr *dmgr) { - if (!md) { + if (!dmgr) { _ERR("invalid argument"); return NULL; } - return mediadata_get_list(md, E_LIST_TYPE); + return dmgr->ops->get_group(dmgr->handle, E_MEDIA_TYPE); } -static void _free_media_list(Eina_List *list) +static void _free_media_list(struct datamgr *dmgr, Eina_List *list) { - mediadata_free_list(list); + if (!dmgr) { + _ERR("invalid argument"); + return; + } + + dmgr->ops->free_group(list); } static void _key_down_cb(void *data, Elm_Object_Item *it, Evas_Event_Key_Down *ev) { struct view_update_data vdata; - struct mediadata *md; + struct datamgr *dmgr; app_media *am; if (!data || !ev) { @@ -147,7 +152,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, return; } - md = data; + dmgr = data; if (!strcmp(ev->keyname, KEY_MENU) || !strcmp(ev->keyname, KEY_CONTEXT_MENU)) { @@ -157,7 +162,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, return; } - vdata.list = mediadata_get_medialist(md); + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); @@ -168,7 +173,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, static void _selected_cb(void *data, Elm_Object_Item *it) { struct view_update_data vdata; - struct mediadata *md; + struct datamgr *dmgr; app_media *am; if (!data || !it) { @@ -176,7 +181,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it) return; } - md = data; + dmgr = data; am = elm_object_item_data_get(it); if (!am) { @@ -184,7 +189,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it) return; } - vdata.list = mediadata_get_medialist(md); + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); diff --git a/src/grid/grid_movie.c b/src/grid/grid_movie.c index 5c80bbb..d40ce52 100644 --- a/src/grid/grid_movie.c +++ b/src/grid/grid_movie.c @@ -25,7 +25,7 @@ #include "define.h" #include "view.h" -#include "data/mediadata.h" +#include "data/datamgr.h" #include "grid/grid.h" #include "util/util.h" @@ -153,22 +153,22 @@ static Evas_Object *_group_content_get(void *data, Evas_Object *obj, return eo; } -static Eina_List *_get_name_list(struct mediadata *md) +static Eina_List *_get_name_list(struct datamgr *dmgr) { - if (!md) { + if (!dmgr) { _ERR("invalid argument"); return NULL; } - return mediadata_get_list(md, E_LIST_NAME); + return dmgr->ops->get_group(dmgr->handle, E_MEDIA_NAME); } -static Eina_List *_get_genre_list(struct mediadata *md) +static Eina_List *_get_genre_list(struct datamgr *dmgr) { Eina_List *list; struct group_info *gi; - if (!md) { + if (!dmgr) { _ERR("invalid argument"); return NULL; } @@ -180,7 +180,7 @@ static Eina_List *_get_genre_list(struct mediadata *md) } gi->name = STR_GENRE_NAME; - gi->list = mediadata_get_list(md, E_LIST_GENRE); + gi->list = dmgr->ops->get_group(dmgr->handle, E_MEDIA_GENRE); list = NULL; list = eina_list_append(list, gi); @@ -188,28 +188,38 @@ static Eina_List *_get_genre_list(struct mediadata *md) return list; } -static Eina_List *_get_date_list(struct mediadata *md) +static Eina_List *_get_date_list(struct datamgr *dmgr) { - if (!md) { + if (!dmgr) { _ERR("invalid argument"); return NULL; } - return mediadata_get_list(md, E_LIST_DATE); + return dmgr->ops->get_group(dmgr->handle, E_MEDIA_DATE); } -static void _free_media_list(Eina_List *list) +static void _free_media_list(struct datamgr *dmgr, Eina_List *list) { - mediadata_free_list(list); + if (!dmgr) { + _ERR("invalid argument"); + return; + } + + dmgr->ops->free_group(list); } -static void _free_group_list(Eina_List *list) +static void _free_group_list(struct datamgr *dmgr, Eina_List *list) { Eina_List *l; struct group_info *gi; + if (!dmgr) { + _ERR("invalid argument"); + return; + } + EINA_LIST_FOREACH(list, l, gi) { - mediadata_free_list(gi->list); + dmgr->ops->free_group(gi->list); free(gi); } } @@ -218,7 +228,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, Evas_Event_Key_Down *ev) { struct view_update_data vdata; - struct mediadata *md; + struct datamgr *dmgr; app_media *am; if (!data || !ev) { @@ -226,7 +236,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, return; } - md = data; + dmgr = data; if (!strcmp(ev->keyname, KEY_MENU) || !strcmp(ev->keyname, KEY_CONTEXT_MENU)) { @@ -236,7 +246,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, return; } - vdata.list = mediadata_get_medialist(md); + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); @@ -247,7 +257,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, static void _selected_cb(void *data, Elm_Object_Item *it) { struct view_update_data vdata; - struct mediadata *md; + struct datamgr *dmgr; app_media *am; if (!data || !it) { @@ -255,7 +265,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it) return; } - md = data; + dmgr = data; am = elm_object_item_data_get(it); if (!am) { @@ -263,7 +273,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it) return; } - vdata.list = mediadata_get_medialist(md); + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); diff --git a/src/grid/grid_music.c b/src/grid/grid_music.c index c16e566..7ef538f 100644 --- a/src/grid/grid_music.c +++ b/src/grid/grid_music.c @@ -25,7 +25,7 @@ #include "define.h" #include "view.h" -#include "data/mediadata.h" +#include "data/datamgr.h" #include "grid/grid.h" #include "util/util.h" @@ -97,26 +97,31 @@ static Evas_Object *_grid_content_get(void *data, return eo; } -static Eina_List *_get_item_list(struct mediadata *md) +static Eina_List *_get_item_list(struct datamgr *dmgr) { - if (!md) { + if (!dmgr) { _ERR("invalid argument"); return NULL; } - return mediadata_get_list(md, E_LIST_NAME); + return dmgr->ops->get_group(dmgr->handle, E_MEDIA_NAME); } -static void _free_item_list(Eina_List *list) +static void _free_item_list(struct datamgr *dmgr, Eina_List *list) { - mediadata_free_list(list); + if (!dmgr) { + _ERR("invalid argument"); + return; + } + + dmgr->ops->free_group(list); } static void _key_down_cb(void *data, Elm_Object_Item *it, Evas_Event_Key_Down *ev) { struct view_update_data vdata; - struct mediadata *md; + struct datamgr *dmgr; app_media *am; if (!data || !ev) { @@ -124,7 +129,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, return; } - md = data; + dmgr = data; if (!strcmp(ev->keyname, KEY_MENU) || !strcmp(ev->keyname, KEY_CONTEXT_MENU)) { @@ -134,7 +139,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, return; } - vdata.list = mediadata_get_medialist(md); + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); @@ -145,7 +150,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, static void _selected_cb(void *data, Elm_Object_Item *it) { struct view_update_data vdata; - struct mediadata *md; + struct datamgr *dmgr; app_media *am; if (!data || !it) { @@ -153,7 +158,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it) return; } - md = data; + dmgr = data; am = elm_object_item_data_get(it); if (!am) { @@ -161,7 +166,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it) return; } - vdata.list = mediadata_get_medialist(md); + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 4e2b7b5..be9c27b 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -26,7 +26,7 @@ #include "define.h" #include "layout.h" #include "view.h" -#include "data/mediadata.h" +#include "data/datamgr.h" #include "grid/grid.h" #include "util/listmgr.h" #include "util/util.h" @@ -53,7 +53,7 @@ struct _priv { struct listmgr *listmgr; struct listmgr_data *ldata; - struct mediadata *md; + struct datamgr *dmgr[E_DATA_MAX]; Eina_List *media_list; @@ -65,6 +65,7 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) { app_media_info *info; struct view_update_data vdata; + struct datamgr *dmgr; info = app_media_get_info(am); if (!info) { @@ -72,7 +73,11 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) return; } - vdata.list = mediadata_get_medialist(priv->md); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index_from_id(vdata.list, info->media_id); viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); @@ -92,18 +97,21 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) data->menu_btn = priv->menu_btn; data->view_btn = priv->view_btn; - data->grid_cb_data = priv->md; - return data; } static void _update_content_info(struct _priv *priv) { + struct datamgr *dmgr; int photo, video; char buf[128]; - photo = mediadata_get_media_count(priv->md, E_MEDIA_PHOTO); - video = mediadata_get_media_count(priv->md, E_MEDIA_VIDEO); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + photo = dmgr->ops->get_count(dmgr->handle, E_FILE_PHOTO); + video = dmgr->ops->get_count(dmgr->handle, E_FILE_VIDEO); if (photo < 0 || video < 0) { _ERR("failed to get media count"); @@ -118,7 +126,8 @@ static void _update_content_info(struct _priv *priv) static void _clear_content_list(struct _priv *priv) { if (priv->media_list) { - priv->gdata->free_item_list(priv->media_list); + priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], + priv->media_list); priv->media_list = NULL; } @@ -136,13 +145,15 @@ static void _update_content_list(struct _priv *priv) priv->gdata = get_gallery_grid_data(priv->view_mode); - list = priv->gdata->get_item_list(priv->md); + list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); if (!list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; } + priv->gdata->data = priv->dmgr[E_DATA_MEDIA]; + if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) _ERR("failed to update list area"); @@ -151,12 +162,64 @@ static void _update_content_list(struct _priv *priv) _update_content_info(priv); } -static bool _create(layoutmgr *lmgr, void *data) +static void _destroy_datamgr(struct _priv *priv) +{ + int i; + + for (i = 0; i < E_DATA_MAX; i++) + datamgr_destroy(priv->dmgr[i]); +} + +static void _destroy_utils(struct _priv *priv) +{ + _destroy_datamgr(priv); + + listmgr_destroy(priv->listmgr); + free(priv->ldata); +} + +static bool _create_utils(struct _priv *priv) { - struct layout_data *ld; struct listmgr *listmgr; struct listmgr_data *ldata; - struct mediadata *md; + struct datamgr *dmgr; + int i; + + for (i = 0; i < E_DATA_MAX; i++) { + dmgr = datamgr_create(i, LIST_MEDIA_COND, E_SOURCE_ALL); + if (!dmgr) { + _ERR("failed to create datamgr"); + _destroy_datamgr(priv); + return false; + } + + priv->dmgr[i] = dmgr; + } + + ldata = _create_listmgr_data(priv); + if (!ldata) { + _ERR("failed to create listmgr data"); + _destroy_datamgr(priv); + return false; + } + + listmgr = listmgr_create(priv->layout, (void *)ldata); + if (!listmgr) { + _ERR("failed to create listmgr"); + _destroy_datamgr(priv); + free(ldata); + return false; + } + + priv->ldata = ldata; + priv->listmgr = listmgr; + + return true; +} + +static bool _create(layoutmgr *lmgr, void *data) +{ + struct layout_data *ld; struct _priv *priv; Evas_Object *base, *layout; @@ -195,49 +258,29 @@ static bool _create(layoutmgr *lmgr, void *data) goto err2; } - md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_DATE); - if (!md) { - _ERR("failed to create mediadata"); - goto err2; - } - priv->base = base; priv->layout = layout; priv->menu_btn = ld->top; priv->view_btn = ld->bottom; priv->lmgr = lmgr; - priv->md = md; priv->gdata = get_gallery_grid_data(E_GALLERY_EVENT); - ldata = _create_listmgr_data(priv); - if (!ldata) { - _ERR("failed to create listmgr data"); - goto err3; - } - - listmgr = listmgr_create(layout, (void *)ldata); - if (!listmgr) { - _ERR("failed to create listmgr"); - free(ldata); - goto err3; + if (!_create_utils(priv)) { + _ERR("failed to create utils"); + goto err2; } - priv->ldata = ldata; - priv->listmgr = listmgr; - layoutmgr_set_layout_data(lmgr, LAYOUT_GALLERY, priv); - if (!listmgr_draw_list_area(listmgr)) { + if (!listmgr_draw_list_area(priv->listmgr)) { _ERR("failed to draw list area"); - free(ldata); - listmgr_destroy(listmgr); goto err3; } return true; err3: - mediadata_destroy(md); + _destroy_utils(priv); err2: evas_object_del(layout); err: @@ -256,11 +299,9 @@ static void _destroy(void *layout_data) priv = layout_data; - priv->gdata->free_item_list(priv->media_list); - mediadata_destroy(priv->md); + priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], priv->media_list); - listmgr_destroy(priv->listmgr); - free(priv->ldata); + _destroy_utils(priv); evas_object_del(priv->layout); diff --git a/src/layout/movie.c b/src/layout/movie.c index 9477c4c..811f4a4 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -27,7 +27,7 @@ #include "define.h" #include "layout.h" #include "view.h" -#include "data/mediadata.h" +#include "data/datamgr.h" #include "grid/grid.h" #include "util/listmgr.h" #include "util/progressbar.h" @@ -57,7 +57,7 @@ struct _priv { struct listmgr *listmgr; struct listmgr_data *ldata; - struct mediadata *md; + struct datamgr *dmgr[E_DATA_MAX]; struct progressbar *prog; @@ -241,6 +241,7 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) { app_media_info *info; struct view_update_data vdata; + struct datamgr *dmgr; info = app_media_get_info(am); if (!info) { @@ -248,7 +249,11 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) return; } - vdata.list = mediadata_get_medialist(priv->md); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index_from_id(vdata.list, info->media_id); viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); @@ -259,13 +264,18 @@ static void _recent_selected_cb(void *data, Evas_Object *obj) { struct _priv *priv; struct view_update_data vdata; + struct datamgr *dmgr; if (!data || !obj) return; priv = data; - vdata.list = mediadata_get_medialist(priv->md); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, priv->recent_info); viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); @@ -294,7 +304,6 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) pdata->cb_data = priv; data->pdata = pdata; - data->grid_cb_data = priv->md; return data; @@ -307,10 +316,15 @@ err: static void _update_content_info(struct _priv *priv) { + struct datamgr *dmgr; int count; char buf[128]; - count = mediadata_get_media_count(priv->md, E_MEDIA_VIDEO); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + count = dmgr->ops->get_count(dmgr->handle, E_FILE_VIDEO); if (count < 0) { _ERR("failed to get media count"); return; @@ -324,7 +338,8 @@ static void _update_content_info(struct _priv *priv) static void _clear_content_list(struct _priv *priv) { if (priv->media_list) { - priv->gdata->free_item_list(priv->media_list); + priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], + priv->media_list); priv->media_list = NULL; } @@ -342,13 +357,15 @@ static void _update_content_list(struct _priv *priv) priv->gdata = get_movie_grid_data(priv->view_mode); - list = priv->gdata->get_item_list(priv->md); + list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); if (!list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; } + priv->gdata->data = priv->dmgr[E_DATA_MEDIA]; + if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) { _ERR("failed to update list area"); return; @@ -388,8 +405,13 @@ static void _update_recent_item(struct _priv *priv, const char *id) Eina_List *list; app_media *am; app_media_info *info; + struct datamgr *dmgr; + + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; - list = mediadata_get_medialist(priv->md); + list = dmgr->ops->get_list(dmgr->handle); if (id) am = util_find_media_info(list, id); @@ -413,12 +435,65 @@ static void _update_recent_item(struct _priv *priv, const char *id) _ERR("failed to update recently watched item"); } -static bool _create(layoutmgr *lmgr, void *data) +static void _destroy_datamgr(struct _priv *priv) +{ + int i; + + for (i = 0; i < E_DATA_MAX; i++) + datamgr_destroy(priv->dmgr[i]); +} + +static void _destroy_utils(struct _priv *priv) +{ + _destroy_datamgr(priv); + + listmgr_destroy(priv->listmgr); + free(priv->ldata->pdata); + free(priv->ldata); +} + +static bool _create_utils(struct _priv *priv) { - struct layout_data *ld; struct listmgr *listmgr; struct listmgr_data *ldata; - struct mediadata *md; + struct datamgr *dmgr; + int i; + + for (i = 0; i < E_DATA_MAX; i++) { + dmgr = datamgr_create(i, LIST_MEDIA_COND, E_SOURCE_ALL); + if (!dmgr) { + _ERR("failed to create datamgr"); + _destroy_datamgr(priv); + return false; + } + + priv->dmgr[i] = dmgr; + } + + ldata = _create_listmgr_data(priv); + if (!ldata) { + _ERR("failed to create listmgr data"); + _destroy_datamgr(priv); + return false; + } + + listmgr = listmgr_create(priv->layout, (void *)ldata); + if (!listmgr) { + _ERR("failed to create listmgr"); + _destroy_datamgr(priv); + free(ldata); + return false; + } + + priv->ldata = ldata; + priv->listmgr = listmgr; + + return true; +} + +static bool _create(layoutmgr *lmgr, void *data) +{ + struct layout_data *ld; struct _priv *priv; Evas_Object *base, *layout; @@ -457,50 +532,29 @@ static bool _create(layoutmgr *lmgr, void *data) goto err2; } - md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_NAME); - if (!md) { - _ERR("failed to create mediadata"); - goto err2; - } - priv->base = base; priv->layout = layout; priv->menu_btn = ld->top; priv->view_btn = ld->bottom; priv->lmgr = lmgr; - priv->md = md; priv->gdata = get_movie_grid_data(E_MOVIE_NAME); - ldata = _create_listmgr_data(priv); - if (!ldata) { - _ERR("failed to create listmgr data"); - goto err3; - } - - listmgr = listmgr_create(layout, (void *)ldata); - if (!listmgr) { - _ERR("failed to create listmgr"); - free(ldata->pdata); - free(ldata); - goto err3; + if (!_create_utils(priv)) { + _ERR("failed to create utils"); + goto err2; } - priv->ldata = ldata; - priv->listmgr = listmgr; - layoutmgr_set_layout_data(lmgr, LAYOUT_MOVIE, priv); if (!listmgr_draw_list_area(priv->listmgr)) { _ERR("failed to draw list area"); - free(ldata); - listmgr_destroy(listmgr); goto err3; } return true; err3: - mediadata_destroy(md); + _destroy_utils(priv); err2: evas_object_del(layout); err: @@ -521,12 +575,9 @@ static void _destroy(void *layout_data) progressbar_destroy(priv->prog); - priv->gdata->free_item_list(priv->media_list); - mediadata_destroy(priv->md); + priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], priv->media_list); - listmgr_destroy(priv->listmgr); - free(priv->ldata->pdata); - free(priv->ldata); + _destroy_utils(priv); evas_object_del(priv->layout); diff --git a/src/layout/music.c b/src/layout/music.c index 273cf13..ad68f86 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -27,7 +27,7 @@ #include "define.h" #include "layout.h" #include "view.h" -#include "data/mediadata.h" +#include "data/datamgr.h" #include "grid/grid.h" #include "util/listmgr.h" #include "util/util.h" @@ -55,7 +55,7 @@ struct _priv { struct listmgr *listmgr; struct listmgr_data *ldata; - struct mediadata *md; + struct datamgr *dmgr[E_DATA_MAX]; Eina_List *media_list; @@ -185,6 +185,7 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) { app_media_info *info; struct view_update_data vdata; + struct datamgr *dmgr; info = app_media_get_info(am); if (!info) { @@ -192,7 +193,11 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) return; } - vdata.list = mediadata_get_medialist(priv->md); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index_from_id(vdata.list, info->media_id); viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); @@ -202,6 +207,7 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) static void _playing_selected_cb(void *data, Evas_Object *obj) { struct view_update_data vdata; + struct datamgr *dmgr; struct _priv *priv; if (!data || !obj) @@ -209,7 +215,11 @@ static void _playing_selected_cb(void *data, Evas_Object *obj) priv = data; - vdata.list = mediadata_get_medialist(priv->md); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + vdata.list = dmgr->ops->get_list(dmgr->handle); vdata.index = util_get_media_index(vdata.list, priv->playing_info); viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); @@ -238,7 +248,6 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) pdata->cb_data = priv; data->pdata = pdata; - data->grid_cb_data = priv->md; return data; @@ -251,10 +260,15 @@ err: static void _update_content_info(struct _priv *priv) { + struct datamgr *dmgr; int count; char buf[128]; - count = mediadata_get_media_count(priv->md, E_MEDIA_MUSIC); + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + count = dmgr->ops->get_count(dmgr->handle, E_FILE_MUSIC); if (count < 0) { _ERR("failed to get media count"); return; @@ -268,7 +282,8 @@ static void _update_content_info(struct _priv *priv) static void _clear_content_list(struct _priv *priv) { if (priv->media_list) { - priv->gdata->free_item_list(priv->media_list); + priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], + priv->media_list); priv->media_list = NULL; } @@ -286,13 +301,15 @@ static void _update_content_list(struct _priv *priv) priv->gdata = get_music_grid_data(priv->view_mode); - list = priv->gdata->get_item_list(priv->md); + list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]); if (!list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; } + priv->gdata->data = priv->dmgr[E_DATA_MEDIA]; + if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) _ERR("failed to update list area"); @@ -330,8 +347,14 @@ static void _update_playing_item(struct _priv *priv, const char *id) Eina_List *list; app_media *am; app_media_info *info; + struct datamgr *dmgr; + + dmgr = priv->dmgr[E_DATA_MEDIA]; + if (!dmgr) + return; + + list = dmgr->ops->get_list(dmgr->handle); - list = mediadata_get_medialist(priv->md); if (id) am = util_find_media_info(list, id); else @@ -354,12 +377,65 @@ static void _update_playing_item(struct _priv *priv, const char *id) _ERR("failed to update now playing item"); } -static bool _create(layoutmgr *lmgr, void *data) +static void _destroy_datamgr(struct _priv *priv) +{ + int i; + + for (i = 0; i < E_DATA_MAX; i++) + datamgr_destroy(priv->dmgr[i]); +} + +static void _destroy_utils(struct _priv *priv) +{ + _destroy_datamgr(priv); + + listmgr_destroy(priv->listmgr); + free(priv->ldata->pdata); + free(priv->ldata); +} + +static bool _create_utils(struct _priv *priv) { - struct layout_data *ld; struct listmgr *listmgr; struct listmgr_data *ldata; - struct mediadata *md; + struct datamgr *dmgr; + int i; + + for (i = 0; i < E_DATA_MAX; i++) { + dmgr = datamgr_create(i, LIST_MEDIA_COND, E_SOURCE_ALL); + if (!dmgr) { + _ERR("failed to create datamgr"); + _destroy_datamgr(priv); + return false; + } + + priv->dmgr[i] = dmgr; + } + + ldata = _create_listmgr_data(priv); + if (!ldata) { + _ERR("failed to create listmgr data"); + _destroy_datamgr(priv); + return false; + } + + listmgr = listmgr_create(priv->layout, (void *)ldata); + if (!listmgr) { + _ERR("failed to create listmgr"); + _destroy_datamgr(priv); + free(ldata); + return false; + } + + priv->ldata = ldata; + priv->listmgr = listmgr; + + return true; +} + +static bool _create(layoutmgr *lmgr, void *data) +{ + struct layout_data *ld; struct _priv *priv; Evas_Object *base, *layout; @@ -398,49 +474,29 @@ static bool _create(layoutmgr *lmgr, void *data) goto err2; } - md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_NAME); - if (!md) { - _ERR("failed to create mediadata"); - goto err2; - } - priv->base = base; priv->layout = layout; priv->menu_btn = ld->top; priv->view_btn = ld->bottom; priv->lmgr = lmgr; - priv->md = md; priv->gdata = get_music_grid_data(E_MUSIC_SONG); - ldata = _create_listmgr_data(priv); - if (!ldata) { - _ERR("failed to create listmgr data"); - goto err3; - } - - listmgr = listmgr_create(layout, (void *)ldata); - if (!listmgr) { - _ERR("failed to create listmgr"); - free(ldata); - goto err3; + if (!_create_utils(priv)) { + _ERR("failed to create utils"); + goto err2; } - priv->ldata = ldata; - priv->listmgr = listmgr; - layoutmgr_set_layout_data(lmgr, LAYOUT_MUSIC, priv); - if (!listmgr_draw_list_area(listmgr)) { + if (!listmgr_draw_list_area(priv->listmgr)) { _ERR("failed to draw list area"); - free(ldata); - listmgr_destroy(listmgr); goto err3; } return true; err3: - mediadata_destroy(md); + _destroy_utils(priv); err2: evas_object_del(layout); err: @@ -459,11 +515,9 @@ static void _destroy(void *layout_data) priv = layout_data; - priv->gdata->free_item_list(priv->media_list); - mediadata_destroy(priv->md); + priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], priv->media_list); - listmgr_destroy(priv->listmgr); - free(priv->ldata); + _destroy_utils(priv); evas_object_del(priv->layout); diff --git a/src/util/listmgr.c b/src/util/listmgr.c index e471327..0f80bb8 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -22,7 +22,7 @@ #include <inputmgr.h> #include "define.h" -#include "data/mediadata.h" +#include "data/datamgr.h" #include "grid/grid.h" #include "util/listmgr.h" #include "util/util.h" @@ -142,8 +142,8 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, else { gdata = lmgr->data->gdata; if (gdata->key_down_cb) - gdata->key_down_cb(lmgr->data->grid_cb_data, - lmgr->focused_it, ev); + gdata->key_down_cb(gdata->data, + lmgr->focused_it, ev); } break; @@ -261,7 +261,7 @@ static void _grid_selected(void *data) gdata = lmgr->data->gdata; if (gdata->selected_cb) - gdata->selected_cb(lmgr->data->grid_cb_data, lmgr->selected_it); + gdata->selected_cb(gdata->data, lmgr->selected_it); } static void _grid_selected_cb(int id, void *data, Evas_Object *obj, |