Add proper sort order for recording schedule

This commit is contained in:
Kristofer Karlsson 2012-12-05 09:24:44 +01:00
parent cf54890d14
commit 982a8798e1
3 changed files with 24 additions and 9 deletions

View file

@ -332,12 +332,18 @@ typedef struct dvr_query_result {
} 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);
/**
*
*/

View file

@ -1337,7 +1337,7 @@ dvr_query_free(dvr_query_result_t *dqr)
/**
* Sorting functions
*/
static int
int
dvr_sort_start_descending(const void *A, const void *B)
{
dvr_entry_t *a = *(dvr_entry_t **)A;
@ -1345,22 +1345,30 @@ dvr_sort_start_descending(const void *A, const void *B)
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);
}
/**
*

View file

@ -1287,7 +1287,8 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque)
*
*/
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;
@ -1319,7 +1320,7 @@ extjs_dvrlist(http_connection_t *hc, const char *remain, void *opaque, dvr_entry
dvr_query_filter(&dqr, filter);
dvr_query_sort(&dqr);
dvr_query_sort_cmp(&dqr, cmp);
htsmsg_add_u32(out, "totalCount", dqr.dqr_entries);
@ -1407,13 +1408,13 @@ static int is_dvr_entry_new(dvr_entry_t *entry)
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);
}
/**