]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
API: optimize /api/idnode/load (grid mode) for push updates
authorJaroslav Kysela <perex@perex.cz>
Mon, 12 Oct 2015 18:46:26 +0000 (20:46 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 12 Oct 2015 18:46:26 +0000 (20:46 +0200)
src/api/api_idnode.c
src/webui/static/app/idnode.js

index 0e8f88f55326417ff5b1ebe59a5fef58d43bbd97..3b88ae46f6ab9f06b61320a04e6fec764deb81c5 100644 (file)
@@ -235,7 +235,7 @@ static int
 api_idnode_load
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
 {
-  int err = 0, meta, count = 0;
+  int err = 0, meta, grid, count = 0;
   idnode_t *in;
   htsmsg_t *uuids, *l = NULL, *m, *flist;
   htsmsg_field_t *f;
@@ -260,7 +260,11 @@ api_idnode_load
   if (!(uuids = htsmsg_field_get_list(f)))
     if (!(uuid = htsmsg_field_get_str(f)))
       return EINVAL;
+
   meta = htsmsg_get_s32_or_default(args, "meta", 0);
+  grid = htsmsg_get_s32_or_default(args, "grid", 0);
+  if (grid > 0 && meta > 0)
+    return -EINVAL;
 
   flist = api_idnode_flist_conf(args, "list");
 
@@ -278,9 +282,15 @@ api_idnode_load
         err = EPERM;
         continue;
       }
-      m = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
-      if (meta > 0)
-        htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang_ui));
+      if (grid > 0) {
+        m = htsmsg_create_map();
+        htsmsg_add_str(m, "uuid", idnode_uuid_as_sstr(in));
+        idnode_read0(in, m, flist, 0, perm->aa_lang_ui);
+      } else {
+        m = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
+        if (meta > 0)
+          htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang_ui));
+      }
       htsmsg_add_msg(l, NULL, m);
       count++;
       idnode_perm_unset(in);
@@ -298,9 +308,15 @@ api_idnode_load
         err = EPERM;
       } else {
         l = htsmsg_create_list();
-        m = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
-        if (meta > 0)
-          htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang_ui));
+        if (grid > 0) {
+          m = htsmsg_create_map();
+          htsmsg_add_str(m, "uuid", idnode_uuid_as_sstr(in));
+          idnode_read0(in, m, flist, 0, perm->aa_lang_ui);
+        } else {
+          m = idnode_serialize0(in, flist, 0, perm->aa_lang_ui);
+          if (meta > 0)
+            htsmsg_add_msg(m, "meta", idclass_serialize0(in->in_class, flist, 0, perm->aa_lang_ui));
+        }
         htsmsg_add_msg(l, NULL, m);
         idnode_perm_unset(in);
       }
index 47f6fe757a887d71a8f837de4fc0e0482fb6ead1..777eb3f03dac7f6d8fd0a4cbca101da1a7e23c15 100644 (file)
@@ -1151,7 +1151,7 @@ tvheadend.idnode_grid = function(panel, conf)
                     ids.push(r.id);
             });
             if (ids) {
-                var p = { uuid: ids };
+                var p = { uuid: ids, grid: 1 };
                 if (conf.list) p.list = conf.list;
                 Ext.Ajax.request({
                     url: 'api/idnode/load',