} dvr_query_result_t;
typedef int (dvr_entry_filter)(dvr_entry_t *entry);
+typedef int (dvr_entry_comparator)(const void *a, const void *b);
void dvr_query(dvr_query_result_t *dqr);
void dvr_query_filter(dvr_query_result_t *dqr, dvr_entry_filter filter);
void dvr_query_free(dvr_query_result_t *dqr);
+
+void dvr_query_sort_cmp(dvr_query_result_t *dqr, dvr_entry_comparator cmp);
void dvr_query_sort(dvr_query_result_t *dqr);
+int dvr_sort_start_descending(const void *A, const void *B);
+int dvr_sort_start_ascending(const void *A, const void *B);
+
/**
*
*/
/**
* Sorting functions
*/
-static int
+int
dvr_sort_start_descending(const void *A, const void *B)
{
dvr_entry_t *a = *(dvr_entry_t **)A;
return b->de_start - a->de_start;
}
+int
+dvr_sort_start_ascending(const void *A, const void *B)
+{
+ return -dvr_sort_start_descending(A, B);
+}
+
/**
*
*/
void
-dvr_query_sort(dvr_query_result_t *dqr)
+dvr_query_sort_cmp(dvr_query_result_t *dqr, dvr_entry_comparator sf)
{
- int (*sf)(const void *a, const void *b);
-
if(dqr->dqr_array == NULL)
return;
- sf = dvr_sort_start_descending;
qsort(dqr->dqr_array, dqr->dqr_entries, sizeof(dvr_entry_t *), sf);
}
+void
+dvr_query_sort(dvr_query_result_t *dqr)
+{
+ dvr_query_sort_cmp(dqr, dvr_sort_start_descending);
+}
/**
*
*
*/
static int
-extjs_dvrlist(http_connection_t *hc, const char *remain, void *opaque, dvr_entry_filter filter)
+extjs_dvrlist(http_connection_t *hc, const char *remain, void *opaque,
+ dvr_entry_filter filter, dvr_entry_comparator cmp)
{
htsbuf_queue_t *hq = &hc->hc_reply;
htsmsg_t *out, *array, *m;
dvr_query_filter(&dqr, filter);
- dvr_query_sort(&dqr);
+ dvr_query_sort_cmp(&dqr, cmp);
htsmsg_add_u32(out, "totalCount", dqr.dqr_entries);
static int
extjs_dvrlist_old(http_connection_t *hc, const char *remain, void *opaque)
{
- return extjs_dvrlist(hc, remain, opaque, is_dvr_entry_old);
+ return extjs_dvrlist(hc, remain, opaque, is_dvr_entry_old, dvr_sort_start_descending);
}
static int
extjs_dvrlist_new(http_connection_t *hc, const char *remain, void *opaque)
{
- return extjs_dvrlist(hc, remain, opaque, is_dvr_entry_new);
+ return extjs_dvrlist(hc, remain, opaque, is_dvr_entry_new, dvr_sort_start_ascending);
}
/**