mediadata: add function to create list with media modified time 09/43009/1
authorJehun Lim <jehun.lim@samsung.com>
Tue, 7 Jul 2015 01:46:29 +0000 (10:46 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Tue, 7 Jul 2015 01:47:49 +0000 (10:47 +0900)
Change-Id: I3ef1500a380bccfb49f06f40dc57f073d9767031
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/data/mediadata.h
src/data/mediadata.c

index 006eaac..557c85f 100644 (file)
@@ -36,6 +36,7 @@ enum sort_type {
 
 enum list_type {
        E_LIST_NAME = 0,
+       E_LIST_DATE,
        E_LIST_MAX
 };
 
index 04556b0..16504bb 100644 (file)
@@ -29,6 +29,8 @@ 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 *);
+static int _compare_modified_time(struct group_info *, app_media_info *);
+static char *_get_modified_time(app_media_info *);
 
 enum _filter_type {
        E_FILTER_FOLDER = 0,
@@ -77,6 +79,10 @@ static struct _list_info g_list_info[E_LIST_MAX] = {
        [E_LIST_NAME] = {
                .media_cmp = _compare_title,
                .name_get = _get_title,
+       },
+       [E_LIST_DATE] = {
+               .media_cmp = _compare_modified_time,
+               .name_get = _get_modified_time,
        }
 };
 
@@ -115,6 +121,17 @@ static bool _create_filter(struct _data *data, filter_h *filter, int type)
        return true;
 }
 
+static char *_get_date_string(time_t time)
+{
+       struct tm tm;
+       char buf[32];
+
+       localtime_r(&time, &tm);
+       strftime(buf, sizeof(buf), "%Y.%m.%d", &tm);
+
+       return strdup(buf);
+}
+
 static int _compare_title(struct group_info *gi, app_media_info *info)
 {
        if (!gi || !gi->name || !info->title)
@@ -131,6 +148,28 @@ static char *_get_title(app_media_info *info)
        return strndup(info->title, 1);
 }
 
+static int _compare_modified_time(struct group_info *gi, app_media_info *info)
+{
+       char *date;
+       int r;
+
+       if (!gi || !gi->name)
+               return -1;
+
+       date = _get_date_string(info->modified_time);
+
+       r = strcasecmp(gi->name, date);
+
+       free(date);
+
+       return r;
+}
+
+static char *_get_modified_time(app_media_info *info)
+{
+       return  _get_date_string(info->modified_time);
+}
+
 static int _compare_cb_date(const void *data1, const void *data2)
 {
        app_media *am1, *am2;
@@ -145,7 +184,7 @@ static int _compare_cb_date(const void *data1, const void *data2)
        if (!info1 || !info2)
                return -1;
 
-       if (info1->modified_time > info2->modified_time)
+       if (info1->modified_time < info2->modified_time)
                return 1;
 
        return -1;