Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
DVR: move query functions to simpleui (only this user)
  • Loading branch information
perexg committed Sep 17, 2014
1 parent 0cd4319 commit c94e2b9
Show file tree
Hide file tree
Showing 3 changed files with 97 additions and 109 deletions.
22 changes: 0 additions & 22 deletions src/dvr/dvr.h
Expand Up @@ -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);

/**
*
*/
Expand Down
87 changes: 0 additions & 87 deletions src/dvr/dvr_db.c
Expand Up @@ -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);
}

/**
*
*/
Expand Down
97 changes: 97 additions & 0 deletions src/webui/simpleui.c
Expand Up @@ -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
Expand Down

0 comments on commit c94e2b9

Please sign in to comment.