diff options
author | Minkyu Kang <mk7.kang@samsung.com> | 2015-07-08 09:54:13 +0900 |
---|---|---|
committer | Minkyu Kang <mk7.kang@samsung.com> | 2015-07-08 09:54:13 +0900 |
commit | 1814c4e8d86c1245b452aa30bf14b06e035ebb16 (patch) | |
tree | 98d427ed41577b7d9ec4132e9e251af052e6d444 /src/data/mediadata.c | |
parent | 5d09fa160d078a397d5381c30a819d6efdb56cce (diff) | |
download | air_mediahub-1814c4e8d86c1245b452aa30bf14b06e035ebb16.tar.gz air_mediahub-1814c4e8d86c1245b452aa30bf14b06e035ebb16.tar.bz2 air_mediahub-1814c4e8d86c1245b452aa30bf14b06e035ebb16.zip |
use content time instead of modified time when sorting list
Change-Id: Ia41c816932c184250e03e541425cc6ad42bdd06f
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
Diffstat (limited to 'src/data/mediadata.c')
-rw-r--r-- | src/data/mediadata.c | 72 |
1 files changed, 51 insertions, 21 deletions
diff --git a/src/data/mediadata.c b/src/data/mediadata.c index 16504bb..554c72f 100644 --- a/src/data/mediadata.c +++ b/src/data/mediadata.c @@ -22,6 +22,7 @@ #include "data/mediadata.h" typedef int (*media_compare)(struct group_info *gi, app_media_info *info); +typedef void *(*media_compare_data_get)(app_media_info *info); typedef char *(*group_name_get)(app_media_info *info); static int _compare_cb_date(const void *, const void *); @@ -29,8 +30,10 @@ 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 *); +static void *_get_data_title(app_media_info *info); +static int _compare_time(struct group_info *, app_media_info *); +static char *_get_time(app_media_info *); +static void *_get_data_time(app_media_info *info); enum _filter_type { E_FILTER_FOLDER = 0, @@ -59,6 +62,7 @@ struct _sort_info { struct _list_info { media_compare media_cmp; + media_compare_data_get data_get; group_name_get name_get; }; @@ -79,10 +83,12 @@ static struct _list_info g_list_info[E_LIST_MAX] = { [E_LIST_NAME] = { .media_cmp = _compare_title, .name_get = _get_title, + .data_get = _get_data_title, }, [E_LIST_DATE] = { - .media_cmp = _compare_modified_time, - .name_get = _get_modified_time, + .media_cmp = _compare_time, + .name_get = _get_time, + .data_get = _get_data_time, } }; @@ -121,23 +127,29 @@ static bool _create_filter(struct _data *data, filter_h *filter, int type) return true; } -static char *_get_date_string(time_t time) +static char *_get_date_string(struct tm *tm) { - struct tm tm; char buf[32]; - localtime_r(&time, &tm); - strftime(buf, sizeof(buf), "%Y.%m.%d", &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) + if (!gi || !gi->data || !info->title) return -1; - return strncasecmp(gi->name, info->title, 1); + return strncasecmp(gi->data, info->title, 1); +} + +static void *_get_data_title(app_media_info *info) +{ + if (!info->title) + return NULL; + + return strdup(info->title); } static char *_get_title(app_media_info *info) @@ -148,32 +160,45 @@ 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) +static int _compare_time(struct group_info *gi, app_media_info *info) { - char *date; - int r; + struct tm *tm; - if (!gi || !gi->name) + if (!gi || !gi->data) return -1; - date = _get_date_string(info->modified_time); + tm = gi->data; - r = strcasecmp(gi->name, date); + if (tm->tm_year == info->content_time->tm_year && + tm->tm_yday == info->content_time->tm_yday) + return 0; - free(date); + return 1; +} - return r; +static void *_get_data_time(app_media_info *info) +{ + struct tm *tm; + + tm = calloc(1, sizeof(*tm)); + if (!tm) + return NULL; + + memcpy(tm, info->content_time, sizeof(*tm)); + + return tm; } -static char *_get_modified_time(app_media_info *info) +static char *_get_time(app_media_info *info) { - return _get_date_string(info->modified_time); + return _get_date_string(info->content_time); } static int _compare_cb_date(const void *data1, const void *data2) { app_media *am1, *am2; app_media_info *info1, *info2; + time_t tm1, tm2; am1 = (app_media *)data1; am2 = (app_media *)data2; @@ -184,7 +209,10 @@ static int _compare_cb_date(const void *data1, const void *data2) if (!info1 || !info2) return -1; - if (info1->modified_time < info2->modified_time) + tm1 = mktime(info1->content_time); + tm2 = mktime(info2->content_time); + + if (tm1 < tm2) return 1; return -1; @@ -429,6 +457,7 @@ Eina_List *mediadata_get_list(struct mediadata *md, int list_type) } gi->name = g_list_info[list_type].name_get(info); + gi->data = g_list_info[list_type].data_get(info); list = eina_list_append(list, gi); } @@ -446,6 +475,7 @@ void mediadata_free_list(Eina_List *list) EINA_LIST_FOREACH(list, l, gi) { free(gi->name); + free(gi->data); eina_list_free(gi->list); free(gi); |