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,
[E_LIST_NAME] = {
.media_cmp = _compare_title,
.name_get = _get_title,
+ },
+ [E_LIST_DATE] = {
+ .media_cmp = _compare_modified_time,
+ .name_get = _get_modified_time,
}
};
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)
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;
if (!info1 || !info2)
return -1;
- if (info1->modified_time > info2->modified_time)
+ if (info1->modified_time < info2->modified_time)
return 1;
return -1;