]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
DVB network grid: add 'Force Scan' functionality
authorJaroslav Kysela <perex@perex.cz>
Wed, 14 Jan 2015 14:49:53 +0000 (15:49 +0100)
committerJaroslav Kysela <perex@perex.cz>
Wed, 14 Jan 2015 14:49:53 +0000 (15:49 +0100)
src/api/api_mpegts.c
src/input/mpegts.h
src/input/mpegts/mpegts_network.c
src/webui/static/app/mpegts.js

index 2c15335ffe23358aa600622b1fc5be27d050ca5a..bc5ac6573071be4efc6c633457eb7ba8ea605fdb 100644 (file)
@@ -136,6 +136,44 @@ api_mpegts_network_create
   return err;
 }
 
+static int
+api_mpegts_network_scan
+  ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
+{
+  htsmsg_field_t *f;
+  htsmsg_t *uuids;
+  mpegts_network_t *mn;
+  const char *uuid;
+
+  if (!(f = htsmsg_field_find(args, "uuid")))
+    return -EINVAL;
+  if ((uuids = htsmsg_field_get_list(f))) {
+    HTSMSG_FOREACH(f, uuids) {
+      if (!(uuid = htsmsg_field_get_str(f))) continue;
+      mn = mpegts_network_find(uuid);
+      if (mn) {
+        pthread_mutex_lock(&global_lock);
+        mpegts_network_scan(mn);
+        pthread_mutex_unlock(&global_lock);
+      }
+    }
+  } else if ((uuid = htsmsg_field_get_str(f))) {
+    printf("STR: '%s'\n", uuid);
+    mn = mpegts_network_find(uuid);
+    if (mn) {
+      pthread_mutex_lock(&global_lock);
+      mpegts_network_scan(mn);
+      pthread_mutex_unlock(&global_lock);
+    }
+    else
+      return -ENOENT;
+  } else {
+    return -EINVAL;
+  }
+
+  return 0;
+}
+
 static int
 api_mpegts_network_muxclass
   ( access_t *perm, void *opaque, const char *op, htsmsg_t *args, htsmsg_t **resp )
@@ -356,6 +394,7 @@ api_mpegts_init ( void )
     { "mpegts/network/create",     ACCESS_ADMIN, api_mpegts_network_create,   NULL },
     { "mpegts/network/mux_class",  ACCESS_ADMIN, api_mpegts_network_muxclass, NULL },
     { "mpegts/network/mux_create", ACCESS_ADMIN, api_mpegts_network_muxcreate, NULL },
+    { "mpegts/network/scan",       ACCESS_ADMIN, api_mpegts_network_scan, NULL },
     { "mpegts/mux/grid",           ACCESS_ADMIN, api_idnode_grid,  api_mpegts_mux_grid },
     { "mpegts/mux/class",          ACCESS_ADMIN, api_idnode_class, (void*)&mpegts_mux_class },
     { "mpegts/service/grid",       ACCESS_ADMIN, api_idnode_grid,  api_mpegts_service_grid },
index 2754144bffc83ee5c3a538c5ee56ccbc1e2bf9d2..8ebae79689b59062dedb7e92c003cad81e0bd56d 100644 (file)
@@ -726,6 +726,7 @@ void mpegts_network_delete ( mpegts_network_t *mn, int delconf );
 
 int mpegts_network_set_nid          ( mpegts_network_t *mn, uint16_t nid );
 int mpegts_network_set_network_name ( mpegts_network_t *mn, const char *name );
+void mpegts_network_scan ( mpegts_network_t *mn );
 
 mpegts_mux_t *mpegts_mux_create0
   ( mpegts_mux_t *mm, const idclass_t *class, const char *uuid,
index 8bc9bd92f46445095330d8855a9fe943fb27a546..73ac346305b435ba450de8a93e2d1e00bb30399d 100644 (file)
@@ -401,6 +401,14 @@ mpegts_network_set_network_name
   return 1;
 }
 
+void
+mpegts_network_scan ( mpegts_network_t *mn )
+{
+  mpegts_mux_t *mm;
+  LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link)
+    mpegts_mux_scan_state_set(mm, MM_SCAN_STATE_PEND);
+}
+
 /******************************************************************************
  * Network classes/creation
  *****************************************************************************/
index 07b96438003a6bb5b98d9848f5042473ac12cb41..cfc4249a58bfd86a2024a76668c6e6a06c9366d1 100644 (file)
@@ -27,6 +27,39 @@ tvheadend.networks = function(panel, index)
         });
     }
 
+    var scanButton = {
+        name: 'scan',
+        builder: function() {
+            return new Ext.Toolbar.Button({
+                tooltip: 'Force new scan (all muxes) for selected networks',
+                iconCls: 'find',
+                text: 'Force Scan',
+                disabled: true
+            });
+        },
+        callback: function(conf, e, store, select) {
+            var r = select.getSelections();
+            if (r && r.length > 0) {
+                var uuids = [];
+                for (var i = 0; i < r.length; i++)
+                    uuids.push(r[i].id);
+                tvheadend.Ajax({
+                    url: 'api/mpegts/network/scan',
+                    params: {
+                        uuid: Ext.encode(uuids)
+                    },    
+                    success: function(d) {
+                        store.reload();
+                    }
+                });
+            }
+        }
+    };
+
+    function selected(s, abuttons) {
+        abuttons.scan.setDisabled(!s || s.length <= 0);
+    }
+
     tvheadend.idnode_grid(panel, {
         url: 'api/mpegts/network',
         titleS: 'Network',
@@ -35,7 +68,8 @@ tvheadend.networks = function(panel, index)
         tabIndex: index,
         help: function() {
             new tvheadend.help('Networks', 'config_networks.html');
-        },            
+        },
+        tbar: [scanButton],
         add: {
             titleS: 'Network',
             select: {
@@ -50,6 +84,7 @@ tvheadend.networks = function(panel, index)
             }
         },
         del: true,
+        selected: selected,
         sort: {
             field: 'networkname',
             direction: 'ASC'