]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
mpegts linuxdvb: use new class lookup for satconf network lookup
authorAdam Sutton <dev@adamsutton.me.uk>
Wed, 7 Aug 2013 20:54:13 +0000 (21:54 +0100)
committerAdam Sutton <dev@adamsutton.me.uk>
Fri, 9 Aug 2013 21:07:46 +0000 (22:07 +0100)
src/input/mpegts/linuxdvb/linuxdvb_satconf.c
src/input/mpegts/mpegts_network.c
src/webui/extjs.c
src/webui/static/app/idnode.js

index 637d511525b42108d261067023aada046674d074..96b3b2e0271378f10e9df67edcdd3f525b48de27 100644 (file)
@@ -73,21 +73,16 @@ linuxdvb_satconf_class_network_set(void *o, const void *v)
 static htsmsg_t *
 linuxdvb_satconf_class_network_enum(void *o)
 {
-  extern const idclass_t linuxdvb_network_class;
-  int i;
-  linuxdvb_network_t *ln;
-  htsmsg_t *m = htsmsg_create_list();
-  idnode_set_t *is = idnode_find_all(&linuxdvb_network_class);
-  for (i = 0; i < is->is_count; i++) {
-    ln = (linuxdvb_network_t*)is->is_array[i];
-    if (ln->ln_type == FE_QPSK) {
-      htsmsg_t *e = htsmsg_create_map();
-      htsmsg_add_str(e, "key", idnode_uuid_as_str(&ln->mn_id));
-      htsmsg_add_str(e, "val", ln->mn_network_name);
-      htsmsg_add_msg(m, NULL, e);
-    }
-  }
-  idnode_set_free(is);
+  extern const idclass_t linuxdvb_network_dvbs_class;
+  htsmsg_t *m = htsmsg_create_map();
+  htsmsg_t *p = htsmsg_create_map();
+  htsmsg_add_str(m, "type",  "api");
+  htsmsg_add_str(m, "uri",   "idnode");
+  htsmsg_add_str(m, "event", "mpegts_network");
+  htsmsg_add_str(p, "op",    "list");
+  htsmsg_add_str(p, "class", linuxdvb_network_dvbs_class.ic_class);
+  htsmsg_add_msg(m, "params", p);
+
   return m;
 }
 
index d54da922c024fab585d834dd03c62da8c8dfa503..91e8267729fa8bcc01b569f31ae731e9b8099285 100644 (file)
@@ -33,6 +33,17 @@ mpegts_network_class_save
     mn->mn_config_save(mn);
 }
 
+static const char *
+mpegts_network_class_get_title ( idnode_t *in )
+{
+  static char buf[256];
+  mpegts_network_t *mn = (mpegts_network_t*)in;
+  *buf = 0;
+  if (mn->mn_display_name)
+    mn->mn_display_name(mn, buf, sizeof(buf));
+  return buf;
+}
+
 static const void *
 mpegts_network_class_get_num_mux ( void *ptr )
 {
@@ -85,6 +96,7 @@ const idclass_t mpegts_network_class =
   .ic_caption    = "MPEGTS Network",
   .ic_save       = mpegts_network_class_save,
   .ic_event      = "mpegts_network",
+  .ic_get_title  = mpegts_network_class_get_title,
   .ic_properties = (const property_t[]){
     {
       .type     = PT_STR,
index 262d9c91f99f65d6b8f9404695e8169404b0c6cc..6789293c64e8d91a3ece1a99e6a14b3e94e17b58 100644 (file)
@@ -1981,6 +1981,28 @@ extjs_idnode0
       }
     }
     out = htsmsg_create_map();
+  
+  /* List by class */
+  } else if (!strcmp(op, "list")) {
+    int i;
+    const char      *cls = http_arg_get(&hc->hc_req_args, "class");
+    pthread_mutex_lock(&global_lock);
+    const idclass_t *idc = idclass_find(cls);
+    idnode_set_t    *is  = idnode_find_all(idc);
+    out = htsmsg_create_map();
+    if (is) {
+      htsmsg_t *l = htsmsg_create_list();
+      for (i = 0; i < is->is_count; i++) {
+        idnode_t *in = is->is_array[i];
+        htsmsg_t *e = htsmsg_create_map();
+        htsmsg_add_str(e, "key", idnode_uuid_as_str(in));
+        htsmsg_add_str(e, "val", idnode_get_title(in));
+        htsmsg_add_msg(l, NULL, e);
+      }
+      idnode_set_free(is);
+      htsmsg_add_msg(out, "entries", l);
+    }
+    pthread_mutex_unlock(&global_lock);
 
   /* Children */
   } else if (!strcmp(op, "childs")) {
index b2345f396b1c51e71867603095d6801a55c4ea29..93f224c60b7a069519bdc46d5f1e67b473a771be 100644 (file)
@@ -6,11 +6,11 @@ tvheadend.idnode_enum_stores = {}
 tvheadend.idnode_get_enum = function ( conf )
 {
   /* Build key */
-  key = conf.url;
+  var key = conf.url;
   if (conf.event)
     key += conf.event;
   if (conf.params)
-    key += Ext.util.JSON.encode(conf.params);
+    key += '?' + Ext.util.JSON.encode(conf.params);
 
   /* Use cached */
   if (key in tvheadend.idnode_enum_stores)