]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Add proper sort order for recording schedule 182/head
authorKristofer Karlsson <kristofer.karlsson@gmail.com>
Wed, 5 Dec 2012 08:24:44 +0000 (09:24 +0100)
committerKristofer Karlsson <kristofer.karlsson@gmail.com>
Wed, 5 Dec 2012 08:40:34 +0000 (09:40 +0100)
src/dvr/dvr.h
src/dvr/dvr_db.c
src/webui/extjs.c

index e1935fbf1e9ead8d14564f44e966cfaeebad14b8..604400a2bc736b848776d1b3a05179d59c34d3c4 100644 (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);
+
 /**
  *
  */
index 91165f55d026dfd36b18b2f0fa6e8628ba1e56ee..88e871e5704fa8cef94a3c08b4e9cec5bcdc05cd 100644 (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);
+}
 
 /**
  *
index 85b70c749a02889500baa5850535945fe97816be..63381eb52165847feb2cdb815a33238154cb643f 100644 (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);
 }
 
 /**