]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
WEBUI: Add support for partial updates also for idnode grids
authorJaroslav Kysela <perex@perex.cz>
Mon, 12 Oct 2015 16:16:44 +0000 (18:16 +0200)
committerJaroslav Kysela <perex@perex.cz>
Mon, 12 Oct 2015 16:17:38 +0000 (18:17 +0200)
- so the DVR grids are not 'refreshed' each second to lose the position
- TODO: 'create' event reloads the whole store like before

src/webui/static/app/epg.js
src/webui/static/app/idnode.js
src/webui/static/app/tvheadend.js

index 16d824cec7e9cec7419c1d94dce752bb52103a45..d590c1989d73b71075a24dec6273499d9331c483 100644 (file)
@@ -911,13 +911,12 @@ tvheadend.epg = function() {
     tvheadend.comet.on('epg', function(m) {
         if (!panel.isVisible())
             return;
-        if ('delete' in m) {
-            for (var i = 0; i < m['delete'].length; i++) {
-                var r = epgStore.getById(m['delete'][i]);
+        if ('delete' in m)
+            Ext.each(m['delete'], function(d) {
+                var r = epgStore.getById(d);
                 if (r)
                   epgStore.remove(r);
-            }
-        }
+            });
         if (m.update || m.dvr_update || m.dvr_delete) {
             var a = m.update || m.dvr_update || m.dvr_delete;
             if (m.update && m.dvr_update)
@@ -925,11 +924,11 @@ tvheadend.epg = function() {
             if (m.update || m.dvr_update)
                 a = a.concat(m.dvr_delete);
             var ids = [];
-            for (var i = 0; i < a.length; i++) {
-                var r = epgStore.getById(a[i]);
+            Ext.each(a, function (id) {
+                var r = epgStore.getById(id);
                 if (r)
                   ids.push(r.id);
-            }
+            });
             if (ids) {
                 Ext.Ajax.request({
                     url: 'api/epg/events/load',
index 1799a50edb3331c8cce83fa46a0778c45ed7ad89..47f6fe757a887d71a8f837de4fc0e0482fb6ead1 100644 (file)
@@ -1137,7 +1137,38 @@ tvheadend.idnode_grid = function(panel, conf)
     var idnode = null;
 
     var update = function(o) {
-        if (auto.getValue())
+        if ('delete' in o)
+            Ext.each(o['delete'], function (d) {
+                var r = store.getById(d);
+                if (r)
+                    store.remove(r);
+            });
+        if (o.change) {
+            var ids = [];
+            Ext.each(o.change, function(id) {
+                var r = store.getById(id);
+                if (r)
+                    ids.push(r.id);
+            });
+            if (ids) {
+                var p = { uuid: ids };
+                if (conf.list) p.list = conf.list;
+                Ext.Ajax.request({
+                    url: 'api/idnode/load',
+                    params: p,
+                    success: function (d) {
+                        d = json_decode(d);
+                        Ext.each(d, function(jd) {
+                            tvheadend.replace_entry(store.getById(jd.uuid), jd);
+                        });
+                    },
+                    failure: function(response, options) {
+                        Ext.MessageBox.alert(_('Grid Update'), response.statusText);
+                    }
+                });
+            }
+        }
+        if (o.create && auto.getValue())
             store.reload();
     };
 
index ed432962e1cbd9856dd21dbec04cb04c6269839a..10cfd5bb1ad2286da682cd695e1a0382b09adde8 100644 (file)
@@ -169,13 +169,28 @@ tvheadend.doQueryAnyMatch = function(q, forceAll) {
  */
 
 tvheadend.replace_entry = function(r, d) {
-  if (!r) return;
-  r.store.fields.each(function (n) {
-    var v = d[n.name];
-    r.data[n.name] = n.convert((v !== undefined) ? v : n.defaultValue, v);
-  });
-  r.json = d;
-  r.commit();
+    if (!r) return;
+    var dst = r.data;
+    var src = d.params instanceof Array ? d.params : d;
+    var lookup = src instanceof Array;
+    r.store.fields.each(function (n) {
+        if (lookup) {
+            for (var i = 0; i < src.length; i++) {
+                if (src[i].id == n.name) {
+                    var v = src[i].value;
+                    break;
+                }
+            }
+        } else {
+            var v = src[n.name];
+        }
+        var x = v;
+        if (typeof v === 'undefined')
+            x = typeof n.defaultValue === 'undefined' ? '' : n.defaultValue;
+        dst[n.name] = n.convert(x, v);
+    });
+    r.json = src;
+    r.commit();
 }
 
 /*