]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
dvr: fix processing of autorec weekdays field
authorAdam Sutton <dev@adamsutton.me.uk>
Fri, 11 Oct 2013 17:44:28 +0000 (18:44 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Fri, 11 Oct 2013 17:44:28 +0000 (18:44 +0100)
src/dvr/dvr_autorec.c
src/webui/static/app/dvr.js

index d3570c0d76c70e21e3fd9f7faa279768cfb62272..52fcef689afe4424b129970aa33719e5eff9fe69 100644 (file)
@@ -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;
index f93f36d8b1b608e2d051cca713743c4bd359c60c..9b1d1e6d6b97acf69d4fed1683d5f9f967e6ad7f 100644 (file)
@@ -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);