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 )
{ "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 },
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,
});
}
+ 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',
tabIndex: index,
help: function() {
new tvheadend.help('Networks', 'config_networks.html');
- },
+ },
+ tbar: [scanButton],
add: {
titleS: 'Network',
select: {
}
},
del: true,
+ selected: selected,
sort: {
field: 'networkname',
direction: 'ASC'