From e9d4a61cc5eade5c55adf78fe4c176d4a0fa6148 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Mon, 15 Sep 2014 21:27:46 +0200 Subject: [PATCH] DVR: Add all weekdays as default --- src/dvr/dvr.h | 1 + src/dvr/dvr_autorec.c | 24 +++++++++---- src/dvr/dvr_timerec.c | 15 +++++---- src/prop.c | 78 ++++++++++++++++++++++--------------------- src/prop.h | 1 + 5 files changed, 68 insertions(+), 51 deletions(-) diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index b004e136..b0767a14 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -505,6 +505,7 @@ dvr_autorec_find_by_uuid(const char *uuid) htsmsg_t * dvr_autorec_entry_class_time_list(void *o, const char *null); +htsmsg_t * dvr_autorec_entry_class_weekdays_get(uint32_t weekdays); htsmsg_t * dvr_autorec_entry_class_weekdays_list ( void *o ); char * dvr_autorec_entry_class_weekdays_rend(uint32_t weekdays); diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index 7c7a9ed3..8367166f 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -554,18 +554,30 @@ dvr_autorec_entry_class_weekdays_set(void *o, const void *v) return 0; } -static const void * -dvr_autorec_entry_class_weekdays_get(void *o) +htsmsg_t * +dvr_autorec_entry_class_weekdays_get(uint32_t weekdays) { - dvr_autorec_entry_t *dae = (dvr_autorec_entry_t *)o; htsmsg_t *m = htsmsg_create_list(); int i; for (i = 0; i < 7; i++) - if (dae->dae_weekdays & (1 << i)) + if (weekdays & (1 << i)) htsmsg_add_u32(m, NULL, i + 1); return m; } +static htsmsg_t * +dvr_autorec_entry_class_weekdays_default(void) +{ + return dvr_autorec_entry_class_weekdays_get(0x7f); +} + +static const void * +dvr_autorec_entry_class_weekdays_get_(void *o) +{ + dvr_autorec_entry_t *dae = (dvr_autorec_entry_t *)o; + return dvr_autorec_entry_class_weekdays_get(dae->dae_weekdays); +} + static const struct strtab dvr_autorec_entry_class_weekdays_tab[] = { { "Mon", 1 }, { "Tue", 2 }, @@ -799,10 +811,10 @@ const idclass_t dvr_autorec_entry_class = { .id = "weekdays", .name = "Week Days", .set = dvr_autorec_entry_class_weekdays_set, - .get = dvr_autorec_entry_class_weekdays_get, + .get = dvr_autorec_entry_class_weekdays_get_, .list = dvr_autorec_entry_class_weekdays_list, .rend = dvr_autorec_entry_class_weekdays_rend_, - .def.u32 = 0x7f + .def.list = dvr_autorec_entry_class_weekdays_default }, { .type = PT_INT, diff --git a/src/dvr/dvr_timerec.c b/src/dvr/dvr_timerec.c index 7dbfc1d4..3a9e9d03 100644 --- a/src/dvr/dvr_timerec.c +++ b/src/dvr/dvr_timerec.c @@ -402,12 +402,13 @@ static const void * dvr_timerec_entry_class_weekdays_get(void *o) { dvr_timerec_entry_t *dte = (dvr_timerec_entry_t *)o; - htsmsg_t *m = htsmsg_create_list(); - int i; - for (i = 0; i < 7; i++) - if (dte->dte_weekdays & (1 << i)) - htsmsg_add_u32(m, NULL, i + 1); - return m; + return dvr_autorec_entry_class_weekdays_get(dte->dte_weekdays); +} + +static htsmsg_t * +dvr_timerec_entry_class_weekdays_default(void) +{ + return dvr_autorec_entry_class_weekdays_get(0x7f); } static char * @@ -479,7 +480,7 @@ const idclass_t dvr_timerec_entry_class = { .get = dvr_timerec_entry_class_weekdays_get, .list = dvr_autorec_entry_class_weekdays_list, .rend = dvr_timerec_entry_class_weekdays_rend, - .def.u32 = 0x7f + .def.list = dvr_timerec_entry_class_weekdays_default }, { .type = PT_U32, diff --git a/src/prop.c b/src/prop.c index f73a4568..8af6d9d2 100644 --- a/src/prop.c +++ b/src/prop.c @@ -390,45 +390,47 @@ prop_serialize_value /* Metadata */ htsmsg_add_str(m, "caption", pl->name); - if (pl->islist) + if (pl->islist) { htsmsg_add_u32(m, "list", 1); - - /* Default */ - // TODO: currently no support for list defaults - switch (pl->type) { - case PT_BOOL: - htsmsg_add_bool(m, "default", pl->def.i); - break; - case PT_INT: - htsmsg_add_s32(m, "default", pl->def.i); - break; - case PT_U16: - htsmsg_add_u32(m, "default", pl->def.u16); - break; - case PT_U32: - htsmsg_add_u32(m, "default", pl->def.u32); - break; - case PT_S64: - htsmsg_add_s64(m, "default", pl->def.s64); - break; - case PT_DBL: - htsmsg_add_dbl(m, "default", pl->def.d); - break; - case PT_STR: - htsmsg_add_str(m, "default", pl->def.s ?: ""); - break; - case PT_TIME: - htsmsg_add_s64(m, "default", pl->def.tm); - break; - case PT_LANGSTR: - /* TODO? */ - break; - case PT_PERM: - snprintf(buf, sizeof(buf), "%04o", pl->def.u32); - htsmsg_add_str(m, "default", buf); - break; - case PT_NONE: - break; + if (pl->def.list) + htsmsg_add_msg(m, "default", pl->def.list()); + } else { + /* Default */ + switch (pl->type) { + case PT_BOOL: + htsmsg_add_bool(m, "default", pl->def.i); + break; + case PT_INT: + htsmsg_add_s32(m, "default", pl->def.i); + break; + case PT_U16: + htsmsg_add_u32(m, "default", pl->def.u16); + break; + case PT_U32: + htsmsg_add_u32(m, "default", pl->def.u32); + break; + case PT_S64: + htsmsg_add_s64(m, "default", pl->def.s64); + break; + case PT_DBL: + htsmsg_add_dbl(m, "default", pl->def.d); + break; + case PT_STR: + htsmsg_add_str(m, "default", pl->def.s ?: ""); + break; + case PT_TIME: + htsmsg_add_s64(m, "default", pl->def.tm); + break; + case PT_LANGSTR: + /* TODO? */ + break; + case PT_PERM: + snprintf(buf, sizeof(buf), "%04o", pl->def.u32); + htsmsg_add_str(m, "default", buf); + break; + case PT_NONE: + break; + } } /* Options */ diff --git a/src/prop.h b/src/prop.h index 42ee871d..541ff6bc 100644 --- a/src/prop.h +++ b/src/prop.h @@ -85,6 +85,7 @@ typedef struct property { int64_t s64; // PT_S64 double d; // PT_DBL time_t tm; // PT_TIME + htsmsg_t *(*list)(void); // islist != 0 } def; /* Extended options */