]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
api webui: simplified webui API by removing "args" field
authorAdam Sutton <dev@adamsutton.me.uk>
Fri, 16 Aug 2013 12:49:25 +0000 (13:49 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Fri, 16 Aug 2013 12:49:25 +0000 (13:49 +0100)
The API code has also been updated to use the htsmsg auto conversion of
strings to map/list where required. Basic approach is check for list/map
first and if that fails fallback to string (if that's whats appropriate
for a mixed type field).

src/api/api_idnode.c
src/api/api_mpegts.c
src/webui/static/app/idnode.js
src/webui/webui_api.c

index 9ba3eccbf41be0b282d7623cdc6abe5e5423fbac..42a5f1c82cb1cb3f6afed8d53a77015b57ad58c6 100644 (file)
@@ -187,7 +187,7 @@ api_idnode_load
 {
   int err = 0;
   idnode_t *in;
-  htsmsg_t *t, *l = NULL;
+  htsmsg_t *uuids, *l = NULL;
   htsmsg_field_t *f;
   const char *uuid, *class;
 
@@ -195,35 +195,32 @@ api_idnode_load
   if ((class = htsmsg_get_str(args, "class")))
     return api_idnode_load_by_class(class, args, resp);
   
-  /* ID based */
+  /* UUIDs */
   if (!(f = htsmsg_field_find(args, "uuid")))
     return EINVAL;
+  if (!(uuids = htsmsg_field_get_list(f)))
+    if (!(uuid = htsmsg_field_get_str(f)))
+      return EINVAL;
 
   pthread_mutex_lock(&global_lock);
 
-  /* Single */
-  if (f->hmf_type == HMF_STR) {
-    uuid = htsmsg_field_get_string(f);
-    in   = idnode_find(uuid, NULL);
-    if (in) {
-      l     = htsmsg_create_list();
-      htsmsg_add_msg(l, NULL, idnode_serialize(in));
-    } else
-      err   = ENOENT;
-
   /* Multiple */
-  } else if (f->hmf_type == HMF_LIST) {
-    t = htsmsg_get_list_by_field(f);
+  if (uuids) {
     l = htsmsg_create_list();
-    HTSMSG_FOREACH(f, t) {
-      if (!(uuid = htsmsg_field_get_string(f))) continue;
+    HTSMSG_FOREACH(f, uuids) {
+      if (!(uuid = htsmsg_field_get_str(f))) continue;
       if (!(in   = idnode_find(uuid, NULL))) continue;
       htsmsg_add_msg(l, NULL, idnode_serialize(in));
     }
 
-  /* Invalid */
+  /* Single */
   } else {
-    err = EINVAL;
+    if (!(in = idnode_find(uuid, NULL)))
+      err = ENOENT;
+    else {
+      l     = htsmsg_create_list();
+      htsmsg_add_msg(l, NULL, idnode_serialize(in));
+    }
   }
 
   if (l) {
@@ -242,30 +239,31 @@ api_idnode_save
 {
   int err = EINVAL;
   idnode_t *in;
-  htsmsg_t *conf, *l;
+  htsmsg_t *msg, *conf;
   htsmsg_field_t *f;
   const char *uuid;
 
   if (!(f = htsmsg_field_find(args, "node")))
     return EINVAL;
+  if (!(msg = htsmsg_field_get_list(f)))
+    if (!(msg = htsmsg_field_get_map(f)))
+      return EINVAL;
 
   pthread_mutex_lock(&global_lock);
 
   /* Single */
-  if (f->hmf_type == HMF_MAP) {
-    conf = htsmsg_get_map_by_field(f);
-    if (!(uuid = htsmsg_get_str(conf, "uuid")))
+  if (!msg->hm_islist) {
+    if (!(uuid = htsmsg_get_str(msg, "uuid")))
       goto exit;
     if (!(in = idnode_find(uuid, NULL)))
       goto exit;
-    idnode_update(in, conf);
+    idnode_update(in, msg);
     err = 0;
 
   /* Multiple */
-  } else if (f->hmf_type == HMF_LIST) {
-    l     = htsmsg_get_list_by_field(f);
-    HTSMSG_FOREACH(f, l) {
-      if (!(conf = htsmsg_get_map_by_field(f)))
+  } else {
+    HTSMSG_FOREACH(f, msg) {
+      if (!(conf = htsmsg_field_get_map(f)))
         continue;
       if (!(uuid = htsmsg_get_str(conf, "uuid")))
         continue;
@@ -274,10 +272,6 @@ api_idnode_save
       idnode_update(in, conf);
     }
     err = 0;
-
-  /* Invalid */
-  } else {
-    err = EINVAL;
   }
 
   // TODO: return updated UUIDs?
@@ -382,39 +376,36 @@ api_idnode_delete
 {
   int err = 0;
   idnode_t *in;
-  htsmsg_t *l;
+  htsmsg_t *uuids;
   htsmsg_field_t *f;
   const char *uuid;
 
   /* ID based */
   if (!(f = htsmsg_field_find(args, "uuid")))
     return EINVAL;
+  if (!(uuids = htsmsg_field_get_list(f)))
+    if (!(uuid = htsmsg_field_get_str(f)))
+      return EINVAL;
 
   pthread_mutex_lock(&global_lock);
 
-  /* Single */
-  if (f->hmf_type == HMF_STR) {
-    uuid = htsmsg_field_get_string(f);
-    in   = idnode_find(uuid, NULL);
-    if (in) {
-      idnode_delete(in);
-    } else
-      err   = ENOENT;
-
   /* Multiple */
-  } else if (f->hmf_type == HMF_LIST) {
-    l     = htsmsg_get_list_by_field(f);
-    HTSMSG_FOREACH(f, l) {
+  if (uuids) {
+    HTSMSG_FOREACH(f, uuids) {
       if (!(uuid = htsmsg_field_get_string(f))) continue;
       if (!(in   = idnode_find(uuid, NULL))) continue;
       idnode_delete(in);
     }
+  
+  /* Single */
+  } else {
+    uuid = htsmsg_field_get_string(f);
+    if (!(in   = idnode_find(uuid, NULL)))
+      err = ENOENT;
+    else
+      idnode_delete(in);
   }
 
-  // TODO: should we return the UUIDs that are deleted?
-  if (!err)
-    *resp = htsmsg_create_map();
-
   pthread_mutex_unlock(&global_lock);
 
   return err;
index a20e6ae3f89087d7935cb1ab64721cf23b13bfa3..b75fe6e77904b76b4a096a90a073c777b6b60176 100644 (file)
@@ -117,9 +117,9 @@ api_mpegts_network_create
   mpegts_network_t *mn;
 
   if (!(class = htsmsg_get_str(args, "class")))
-    return -EINVAL;
+    return EINVAL;
   if (!(conf  = htsmsg_get_map(args, "conf")))
-    return -EINVAL;
+    return EINVAL;
 
   pthread_mutex_lock(&global_lock);
   mn = mpegts_network_build(class, conf);
@@ -128,7 +128,7 @@ api_mpegts_network_create
     *resp = htsmsg_create_map();
     mn->mn_config_save(mn);
   } else {
-    err = -EINVAL;
+    err = EINVAL;
   }
   pthread_mutex_unlock(&global_lock);
 
index 8c9cb88a68b61c5a1240c95f452e7a60dc3bb532..b339f11cb7566216b7d45e5343afda1dd66cd98a 100644 (file)
@@ -210,7 +210,7 @@ tvheadend.idnode_editor = function(item, conf)
       Ext.Ajax.request({
         url      : 'api/idnode/save',
         params   : {
-          args : Ext.encode({node: node})
+          node: Ext.encode(node)
         },
         success : function(d) {
         }
@@ -258,12 +258,10 @@ tvheadend.idnode_create = function(conf)
         params['uuid'] = puuid;
       if (pclass)
         params['class'] = pclass
-      params['conf'] = panel.getForm().getFieldValues();
+      params['conf'] = Ext.encode(panel.getForm().getFieldValues());
       Ext.Ajax.request({
         url    : conf.create.url || conf.url + '/create',
-        params : {
-          args : Ext.util.JSON.encode(params)
-        },
+        params : params,
         success : function(d) {
           win.close();
         }
@@ -507,7 +505,7 @@ tvheadend.idnode_grid = function(panel, conf)
         Ext.Ajax.request({
            url     : 'api/idnode/save',
            params  : {
-             args : Ext.encode({node : out})
+             node: Ext.encode(out)
            },
            success : function(d)
            {
@@ -554,7 +552,7 @@ tvheadend.idnode_grid = function(panel, conf)
             Ext.Ajax.request({
               url     : 'api/idnode/delete',
               params  : {
-                args : Ext.util.JSON.encode({ uuid: uuids})
+                uuid: Ext.encode(uuids)
               },
               success : function(d)
               {
index db5a8f7b63ecd11b248f9322aa9c9fb419ba9719..7db94a2088a91a3721f99a55c13e44458f85f5d0 100644 (file)
@@ -32,36 +32,16 @@ webui_api_handler
   int r;
   http_arg_t *ha;
   htsmsg_t *args, *resp = NULL;
-  const char *a  = http_arg_get(&hc->hc_req_args, "args");
-  const char *op = http_arg_get(&hc->hc_req_args, "method");
-  
-  // Compat
-  if (!op)
-    op = http_arg_get(&hc->hc_req_args, "op");
-
-  /* Parse arguments */
-  if (a)
-    args = htsmsg_json_deserialize(a);
-  else
-    args = htsmsg_create_map();
-  if (!args)
-    return HTTP_STATUS_BAD_REQUEST;
 
-  /* Add HTTP arguments?? */
+  /* Build arguments */
+  args = htsmsg_create_map();
   TAILQ_FOREACH(ha, &hc->hc_req_args, link) {
-    // Ignore obvious keys
-    if (strcmp("op",     ha->key) &&
-        strcmp("method", ha->key) &&
-        strcmp("args",   ha->key))
-      htsmsg_add_str(args, ha->key, ha->val);
+    htsmsg_add_str(args, ha->key, ha->val);
   }
       
-  /* Add operation */
-  if (!htsmsg_get_str(args, "method") && op)
-    htsmsg_add_str(args, "method", op);
-
   /* Call */
   r = api_exec(remain, args, &resp);
+  htsmsg_destroy(args);
   
   /* Convert error */
   if (r) {