DVR: move query functions to simpleui (only this user)

This commit is contained in:
Jaroslav Kysela 2014-09-17 18:26:37 +02:00
parent 0cd4319eb9
commit c94e2b99d5
3 changed files with 97 additions and 109 deletions

View file

@ -453,28 +453,6 @@ htsmsg_t *dvr_entry_class_pri_list(void *o);
htsmsg_t *dvr_entry_class_config_name_list(void *o);
htsmsg_t *dvr_entry_class_duration_list(void *o, const char *not_set, int max, int step);
/**
* Query interface
*/
typedef struct dvr_query_result {
dvr_entry_t **dqr_array;
int dqr_entries;
int dqr_alloced;
} 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

@ -1905,93 +1905,6 @@ dvr_destroy_by_channel(channel_t *ch, int delconf)
}
}
/**
*
*/
static void
dvr_query_add_entry(dvr_query_result_t *dqr, dvr_entry_t *de)
{
if(dqr->dqr_entries == dqr->dqr_alloced) {
/* Need to alloc more space */
dqr->dqr_alloced = MAX(100, dqr->dqr_alloced * 2);
dqr->dqr_array = realloc(dqr->dqr_array,
dqr->dqr_alloced * sizeof(dvr_entry_t *));
}
dqr->dqr_array[dqr->dqr_entries++] = de;
}
void
dvr_query_filter(dvr_query_result_t *dqr, dvr_entry_filter filter)
{
dvr_entry_t *de;
memset(dqr, 0, sizeof(dvr_query_result_t));
LIST_FOREACH(de, &dvrentries, de_global_link)
if (filter(de))
dvr_query_add_entry(dqr, de);
}
static int all_filter(dvr_entry_t *entry)
{
return 1;
}
/**
*
*/
void
dvr_query(dvr_query_result_t *dqr)
{
return dvr_query_filter(dqr, all_filter);
}
/**
*
*/
void
dvr_query_free(dvr_query_result_t *dqr)
{
free(dqr->dqr_array);
}
/**
* Sorting functions
*/
int
dvr_sort_start_descending(const void *A, const void *B)
{
dvr_entry_t *a = *(dvr_entry_t **)A;
dvr_entry_t *b = *(dvr_entry_t **)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_cmp(dvr_query_result_t *dqr, dvr_entry_comparator sf)
{
if(dqr->dqr_array == NULL)
return;
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

@ -51,6 +51,103 @@ const char *days[7] = {
"Saturday",
};
typedef struct dvr_query_result {
dvr_entry_t **dqr_array;
int dqr_entries;
int dqr_alloced;
} dvr_query_result_t;
typedef int (dvr_entry_filter)(dvr_entry_t *entry);
typedef int (dvr_entry_comparator)(const void *a, const void *b);
/**
*
*/
static void
dvr_query_add_entry(dvr_query_result_t *dqr, dvr_entry_t *de)
{
if(dqr->dqr_entries == dqr->dqr_alloced) {
/* Need to alloc more space */
dqr->dqr_alloced = MAX(100, dqr->dqr_alloced * 2);
dqr->dqr_array = realloc(dqr->dqr_array,
dqr->dqr_alloced * sizeof(dvr_entry_t *));
}
dqr->dqr_array[dqr->dqr_entries++] = de;
}
static void
dvr_query_filter(dvr_query_result_t *dqr, dvr_entry_filter filter)
{
dvr_entry_t *de;
memset(dqr, 0, sizeof(dvr_query_result_t));
LIST_FOREACH(de, &dvrentries, de_global_link)
if (filter(de))
dvr_query_add_entry(dqr, de);
}
static int all_filter(dvr_entry_t *entry)
{
return 1;
}
/**
*
*/
static void
dvr_query(dvr_query_result_t *dqr)
{
return dvr_query_filter(dqr, all_filter);
}
/**
*
*/
static void
dvr_query_free(dvr_query_result_t *dqr)
{
free(dqr->dqr_array);
}
/**
* Sorting functions
*/
static int
dvr_sort_start_descending(const void *A, const void *B)
{
dvr_entry_t *a = *(dvr_entry_t **)A;
dvr_entry_t *b = *(dvr_entry_t **)B;
return b->de_start - a->de_start;
}
#if 0
static int
dvr_sort_start_ascending(const void *A, const void *B)
{
return -dvr_sort_start_descending(A, B);
}
#endif
/**
*
*/
static void
dvr_query_sort_cmp(dvr_query_result_t *dqr, dvr_entry_comparator sf)
{
if(dqr->dqr_array == NULL)
return;
qsort(dqr->dqr_array, dqr->dqr_entries, sizeof(dvr_entry_t *), sf);
}
static void
dvr_query_sort(dvr_query_result_t *dqr)
{
dvr_query_sort_cmp(dqr, dvr_sort_start_descending);
}
/**
* Root page, we direct the client to different pages depending
* on if it is a full blown browser or just some mobile app