From b96c432f69bb077c4018961ba96d2152e4f772b8 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Wed, 7 Aug 2013 21:54:13 +0100 Subject: [PATCH] mpegts linuxdvb: use new class lookup for satconf network lookup --- src/input/mpegts/linuxdvb/linuxdvb_satconf.c | 25 ++++++++------------ src/input/mpegts/mpegts_network.c | 12 ++++++++++ src/webui/extjs.c | 22 +++++++++++++++++ src/webui/static/app/idnode.js | 4 ++-- 4 files changed, 46 insertions(+), 17 deletions(-) diff --git a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c index 637d5115..96b3b2e0 100644 --- a/src/input/mpegts/linuxdvb/linuxdvb_satconf.c +++ b/src/input/mpegts/linuxdvb/linuxdvb_satconf.c @@ -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; } diff --git a/src/input/mpegts/mpegts_network.c b/src/input/mpegts/mpegts_network.c index d54da922..91e82677 100644 --- a/src/input/mpegts/mpegts_network.c +++ b/src/input/mpegts/mpegts_network.c @@ -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, diff --git a/src/webui/extjs.c b/src/webui/extjs.c index 262d9c91..6789293c 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -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")) { diff --git a/src/webui/static/app/idnode.js b/src/webui/static/app/idnode.js index b2345f39..93f224c6 100644 --- a/src/webui/static/app/idnode.js +++ b/src/webui/static/app/idnode.js @@ -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)