mediadata: add datamgr to manage several data types 89/48189/5
authorJehun Lim <jehun.lim@samsung.com>
Tue, 15 Sep 2015 14:11:01 +0000 (23:11 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Thu, 17 Sep 2015 06:43:02 +0000 (15:43 +0900)
Change-Id: I82351fc4074e0835fa50c8b85dd24511f7280d2a
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
14 files changed:
CMakeLists.txt
include/data/datamgr.h [new file with mode: 0644]
include/data/mediadata.h
include/grid/grid.h
include/util/listmgr.h
src/data/datamgr.c [new file with mode: 0644]
src/data/mediadata.c
src/grid/grid_gallery.c
src/grid/grid_movie.c
src/grid/grid_music.c
src/layout/gallery.c
src/layout/movie.c
src/layout/music.c
src/util/listmgr.c

index d0eb0e7..fff0708 100644 (file)
@@ -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 (file)
index 0000000..cd017f2
--- /dev/null
@@ -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__ */
index f6ce7c7..bc75495 100644 (file)
 #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__ */
index f7232dd..a03a873 100644 (file)
@@ -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);
index 2540200..bd7d3cc 100644 (file)
@@ -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 (file)
index 0000000..ac8a31d
--- /dev/null
@@ -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);
+}
index fa190b2..ca9609f 100644 (file)
@@ -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;
+};
index b036caf..7da809d 100644 (file)
@@ -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);
index 5c80bbb..d40ce52 100644 (file)
@@ -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);
index c16e566..7ef538f 100644 (file)
@@ -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);
index 4e2b7b5..be9c27b 100644 (file)
@@ -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);
 
index 9477c4c..811f4a4 100644 (file)
@@ -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);
 
index 273cf13..ad68f86 100644 (file)
@@ -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);
 
index e471327..0f80bb8 100644 (file)
@@ -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,