#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 *);
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,
struct _list_info {
media_compare media_cmp;
+ media_compare_data_get data_get;
group_name_get name_get;
};
[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,
}
};
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)
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;
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;
}
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);
}
EINA_LIST_FOREACH(list, l, gi) {
free(gi->name);
+ free(gi->data);
eina_list_free(gi->list);
free(gi);
char buf[32] = {0,};
char day[32] = {0,};
char date[32] = {0,};
- struct tm tm;
if (id == VIEWER_MOVIE) {
elm_object_part_text_set(priv->base,
PART_VIEWER_TITLE, mi->title);
} else {
- localtime_r(&mi->modified_time, &tm);
-
- strftime(date, sizeof(date), "%d %b", &tm);
- strftime(day, sizeof(day), "%a", &tm);
+ strftime(date, sizeof(date), "%d %b", mi->content_time);
+ strftime(day, sizeof(day), "%a", mi->content_time);
util_up_string(day);
snprintf(buf, sizeof(buf), "%s, %s", day, date);