From 7bf4b17bce3d16fe17a58bc3ba2f9cda0f89594f Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Fri, 11 Oct 2013 18:44:28 +0100 Subject: [PATCH] dvr: fix processing of autorec weekdays field --- src/dvr/dvr_autorec.c | 33 ++++++++++++++++----------------- src/webui/static/app/dvr.js | 9 ++++----- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c index d3570c0d..52fcef68 100644 --- a/src/dvr/dvr_autorec.c +++ b/src/dvr/dvr_autorec.c @@ -224,29 +224,27 @@ autorec_entry_destroy(dvr_autorec_entry_t *dae) * */ static void -build_weekday_tags(char *buf, size_t buflen, int mask) +build_weekday_tags(htsmsg_t *l, int mask) { - int i, p = 0; + int i; for(i = 0; i < 7; i++) { - if(mask & (1 << i) && p < buflen - 3) { - if(p != 0) - buf[p++] = ','; - buf[p++] = '1' + i; - } + if(mask & (1 << i)) + htsmsg_add_u32(l, NULL, i+1); } - buf[p] = 0; } /** * */ static int -build_weekday_mask(const char *str) +build_weekday_mask(htsmsg_t *l) { int r = 0; - for(; *str; str++) - if(*str >= '1' && *str <= '7') - r |= 1 << (*str - '1'); + uint32_t u32; + htsmsg_field_t *f; + HTSMSG_FOREACH(f, l) + if (!htsmsg_field_get_u32(f, &u32)) + r |= 1 << (u32 - 1); return r; } @@ -257,8 +255,8 @@ build_weekday_mask(const char *str) static htsmsg_t * autorec_record_build(dvr_autorec_entry_t *dae) { - char str[30]; htsmsg_t *e = htsmsg_create_map(); + htsmsg_t *l = htsmsg_create_list(); htsmsg_add_str(e, "id", dae->dae_id); htsmsg_add_u32(e, "enabled", !!dae->dae_enabled); @@ -282,8 +280,8 @@ autorec_record_build(dvr_autorec_entry_t *dae) htsmsg_add_u32(e, "approx_time", dae->dae_approx_time); - build_weekday_tags(str, sizeof(str), dae->dae_weekdays); - htsmsg_add_str(e, "weekdays", str); + build_weekday_tags(l, dae->dae_weekdays); + htsmsg_add_msg(e, "weekdays", l); htsmsg_add_str(e, "pri", dvr_val2pri(dae->dae_pri)); @@ -349,6 +347,7 @@ autorec_record_update(void *opaque, const char *id, htsmsg_t *values, channel_t *ch; channel_tag_t *ct; uint32_t u32; + htsmsg_t *l; if((dae = autorec_entry_find(id, maycreate)) == NULL) return NULL; @@ -408,8 +407,8 @@ autorec_record_update(void *opaque, const char *id, htsmsg_t *values, } } - if((s = htsmsg_get_str(values, "weekdays")) != NULL) - dae->dae_weekdays = build_weekday_mask(s); + if((l = htsmsg_get_list(values, "weekdays")) != NULL) + dae->dae_weekdays = build_weekday_mask(l); if(!htsmsg_get_u32(values, "enabled", &u32)) dae->dae_enabled = u32; diff --git a/src/webui/static/app/dvr.js b/src/webui/static/app/dvr.js index f93f36d8..9b1d1e6d 100644 --- a/src/webui/static/app/dvr.js +++ b/src/webui/static/app/dvr.js @@ -505,12 +505,11 @@ tvheadend.autoreceditor = function() { header : "Weekdays", dataIndex : 'weekdays', renderer : function(value, metadata, record, row, col, store) { - if (typeof value === 'undefined' || value.length < 1) return 'No days'; - - if (value == '1,2,3,4,5,6,7') return 'All days'; - + if (value.split) value = value.split(',') + if (value.length == 7) return 'All days'; + if (value.length == 0 || value[0] == "") return 'No days'; ret = []; - tags = value.split(','); + tags = value; for ( var i = 0; i < tags.length; i++) { var tag = tvheadend.weekdays.getById(tags[i]); if (typeof tag !== 'undefined') ret.push(tag.data.name);