From 387651053ee860f7827722a7ca7edec1b3b4546e Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Tue, 7 Jul 2015 10:46:29 +0900 Subject: [PATCH] mediadata: add function to create list with media modified time Change-Id: I3ef1500a380bccfb49f06f40dc57f073d9767031 Signed-off-by: Jehun Lim --- include/data/mediadata.h | 1 + src/data/mediadata.c | 41 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/include/data/mediadata.h b/include/data/mediadata.h index 006eaac..557c85f 100644 --- a/include/data/mediadata.h +++ b/include/data/mediadata.h @@ -36,6 +36,7 @@ enum sort_type { enum list_type { E_LIST_NAME = 0, + E_LIST_DATE, E_LIST_MAX }; diff --git a/src/data/mediadata.c b/src/data/mediadata.c index 04556b0..16504bb 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -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; -- 2.7.4