summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt1
-rw-r--r--include/data/datamgr.h59
-rw-r--r--include/data/mediadata.h57
-rw-r--r--include/grid/grid.h5
-rw-r--r--include/util/listmgr.h1
-rw-r--r--src/data/datamgr.c89
-rw-r--r--src/data/mediadata.c229
-rw-r--r--src/grid/grid_gallery.c35
-rw-r--r--src/grid/grid_movie.c50
-rw-r--r--src/grid/grid_music.c29
-rw-r--r--src/layout/gallery.c123
-rw-r--r--src/layout/movie.c135
-rw-r--r--src/layout/music.c136
-rw-r--r--src/util/listmgr.c8
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,