summaryrefslogtreecommitdiff
path: root/src/data/mediadata.c
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-07-01 16:09:39 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-07-01 16:56:47 +0900
commitb81aa668ac86b55ccfcc5ac6d67c5a1a20487b61 (patch)
treee8cd34fa3aec985bcf88f8fcfa3f03cc9854be3c /src/data/mediadata.c
parentec082b98067fd4037cb001cc276d1f64563f03b2 (diff)
downloadair_mediahub-b81aa668ac86b55ccfcc5ac6d67c5a1a20487b61.tar.gz
air_mediahub-b81aa668ac86b55ccfcc5ac6d67c5a1a20487b61.tar.bz2
air_mediahub-b81aa668ac86b55ccfcc5ac6d67c5a1a20487b61.zip
mediadata: add function to create list with media name
Change-Id: Idbfeb52c19bd52deb461b2917e4ce546e664bf59 Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
Diffstat (limited to 'src/data/mediadata.c')
-rw-r--r--src/data/mediadata.c123
1 files changed, 105 insertions, 18 deletions
diff --git a/src/data/mediadata.c b/src/data/mediadata.c
index abef770..04556b0 100644
--- a/src/data/mediadata.c
+++ b/src/data/mediadata.c
@@ -21,9 +21,15 @@
#include "data/mediadata.h"
+typedef int (*media_compare)(struct group_info *gi, app_media_info *info);
+typedef char *(*group_name_get)(app_media_info *info);
+
static int _compare_cb_date(const void *, const void *);
static int _compare_cb_name(const void *, const void *);
+static int _compare_title(struct group_info *, app_media_info *);
+static char *_get_title(app_media_info *);
+
enum _filter_type {
E_FILTER_FOLDER = 0,
E_FILTER_MEDIA
@@ -49,6 +55,11 @@ struct _sort_info {
Eina_Compare_Cb func;
};
+struct _list_info {
+ media_compare media_cmp;
+ group_name_get name_get;
+};
+
static struct _sort_info g_sort_info[E_SORT_MAX] = {
[E_SORT_DATE] = {
.order_type = MEDIA_CONTENT_ORDER_DESC,
@@ -58,7 +69,14 @@ static struct _sort_info g_sort_info[E_SORT_MAX] = {
[E_SORT_NAME] = {
.order_type = MEDIA_CONTENT_ORDER_ASC,
.order_keyword = MEDIA_TITLE,
- .func = _compare_cb_name
+ .func = _compare_cb_name,
+ }
+};
+
+static struct _list_info g_list_info[E_LIST_MAX] = {
+ [E_LIST_NAME] = {
+ .media_cmp = _compare_title,
+ .name_get = _get_title,
}
};
@@ -97,6 +115,22 @@ static bool _create_filter(struct _data *data, filter_h *filter, int type)
return true;
}
+static int _compare_title(struct group_info *gi, app_media_info *info)
+{
+ if (!gi || !gi->name || !info->title)
+ return -1;
+
+ return strncasecmp(gi->name, info->title, 1);
+}
+
+static char *_get_title(app_media_info *info)
+{
+ if (!info->title)
+ return NULL;
+
+ return strndup(info->title, 1);
+}
+
static int _compare_cb_date(const void *data1, const void *data2)
{
app_media *am1, *am2;
@@ -145,14 +179,14 @@ static Eina_List *_sort_list(Eina_List *list, int sort)
static void _destroy_folderlist(Eina_List *list)
{
- struct folder_info *fi;
+ struct group_info *gi;
app_media *am;
- EINA_LIST_FREE(list, fi) {
- free(fi->name);
- EINA_LIST_FREE(fi->list, am)
+ EINA_LIST_FREE(list, gi) {
+ free(gi->name);
+ EINA_LIST_FREE(gi->list, am)
app_media_destroy(am);
- free(fi);
+ free(gi);
}
}
@@ -181,7 +215,7 @@ static bool _get_each_folder_info(media_folder_h folder, void *dt)
{
filter_h filter;
struct _data *data;
- struct folder_info *fi;
+ struct group_info *gi;
int ret;
char *uuid;
@@ -190,24 +224,18 @@ static bool _get_each_folder_info(media_folder_h folder, void *dt)
data = dt;
- fi = calloc(1, sizeof(*fi));
- if (!fi) {
+ gi = calloc(1, sizeof(*gi));
+ if (!gi) {
_ERR("failed to create folderdata");
return false;
}
- if (media_folder_get_name(folder, &(fi->name))
+ if (media_folder_get_name(folder, &(gi->name))
!= MEDIA_CONTENT_ERROR_NONE) {
_ERR("Media folder id Fetch error");
goto err;
}
- if (media_folder_get_modified_time(folder, &(fi->modified_time))
- != MEDIA_CONTENT_ERROR_NONE) {
- _ERR("Media folder modified time Fetch error");
- goto err;
- }
-
if (media_folder_get_folder_id(folder, &uuid)
!= MEDIA_CONTENT_ERROR_NONE) {
_ERR("failed to fetch media folder id");
@@ -226,11 +254,11 @@ static bool _get_each_folder_info(media_folder_h folder, void *dt)
goto err;
}
- fi->list = eina_list_clone(data->item_list);
+ gi->list = eina_list_clone(data->item_list);
data->media_list = eina_list_merge(data->media_list, data->item_list);
data->item_list = NULL;
- data->folder_list = eina_list_append(data->folder_list, fi);
+ data->folder_list = eina_list_append(data->folder_list, gi);
media_filter_destroy(filter);
free(uuid);
@@ -325,3 +353,62 @@ void mediadata_destroy(struct mediadata *md)
_destroy_folderlist(md->folder_list);
eina_list_free(md->media_list);
}
+
+Eina_List *mediadata_get_list(struct mediadata *md, int list_type)
+{
+ Eina_List *list, *l;
+ struct group_info *gi;
+ app_media *am;
+ app_media_info *info;
+
+ if (!md) {
+ _ERR("failed to get mediadata");
+ return NULL;
+ }
+
+ if (list_type < 0 || list_type >= E_LIST_MAX) {
+ _ERR("invalid argument");
+ return NULL;
+ }
+
+ gi = NULL;
+ list = NULL;
+ EINA_LIST_FOREACH(md->media_list, l, am) {
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get media info");
+ mediadata_free_list(list);
+ return NULL;
+ }
+
+ if (g_list_info[list_type].media_cmp(gi, info)) {
+ gi = calloc(1, sizeof(*gi));
+ if (!gi) {
+ _ERR("failed to create group info");
+ mediadata_free_list(list);
+ return NULL;
+ }
+
+ gi->name = g_list_info[list_type].name_get(info);
+
+ list = eina_list_append(list, gi);
+ }
+
+ gi->list = eina_list_append(gi->list, am);
+ }
+
+ return list;
+}
+
+void mediadata_free_list(Eina_List *list)
+{
+ Eina_List *l;
+ struct group_info *gi;
+
+ EINA_LIST_FOREACH(list, l, gi) {
+ free(gi->name);
+ eina_list_free(gi->list);
+
+ free(gi);
+ }
+}