DVB network grid: add 'Force Scan' functionality

This commit is contained in:
Jaroslav Kysela 2015-01-14 15:49:53 +01:00
parent d9f4230881
commit f48e390437
4 changed files with 84 additions and 1 deletions

View 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 },

View 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,

View 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
*****************************************************************************/

View 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'