From aa74afec72a12e46406cfb336b413394cce93243 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Mon, 18 Jun 2012 13:33:02 +0100 Subject: [PATCH] Removed the EIT enabled flag and using proper OTA config system. --- src/epggrab.c | 15 ------ src/epggrab.h | 8 ++- src/epggrab/eit.c | 14 +++--- src/epggrab/pyepg.c | 2 +- src/epggrab/xmltv.c | 2 +- src/webui/extjs.c | 3 -- src/webui/static/app/epggrab.js | 87 +++++++++++++++++++++++++-------- 7 files changed, 79 insertions(+), 52 deletions(-) diff --git a/src/epggrab.c b/src/epggrab.c index 8302d3e2..c36b7bbb 100644 --- a/src/epggrab.c +++ b/src/epggrab.c @@ -29,7 +29,6 @@ pthread_mutex_t epggrab_mutex; pthread_cond_t epggrab_cond; /* Config */ -uint32_t epggrab_eitenabled; uint32_t epggrab_interval; epggrab_module_t* epggrab_module; epggrab_module_list_t epggrab_modules; @@ -664,7 +663,6 @@ static void _epggrab_load ( void ) /* Process */ if (m) { - htsmsg_get_u32(m, "eit", &epggrab_eitenabled); if (!htsmsg_get_u32(m, old ? "grab-interval" : "interval", &epggrab_interval)) if (old) epggrab_interval *= 3600; htsmsg_get_u32(m, "grab-enabled", &enabled); @@ -727,7 +725,6 @@ void epggrab_save ( void ) /* Save */ m = htsmsg_create_map(); - htsmsg_add_u32(m, "eitenabled", epggrab_eitenabled); htsmsg_add_u32(m, "interval", epggrab_interval); if ( epggrab_module ) htsmsg_add_str(m, "module", epggrab_module->id); @@ -743,17 +740,6 @@ void epggrab_save ( void ) htsmsg_destroy(m); } -int epggrab_set_eitenabled ( uint32_t eitenabled ) -{ - // TODO: could use module variable - int save = 0; - if ( epggrab_eitenabled != eitenabled ) { - save = 1; - epggrab_eitenabled = eitenabled; - } - return save; -} - int epggrab_set_interval ( uint32_t interval ) { int save = 0; @@ -813,7 +799,6 @@ int epggrab_enable_module_by_id ( const char *id, uint8_t e ) void epggrab_init ( void ) { /* Defaults */ - epggrab_eitenabled = 1; // on air grab enabled epggrab_interval = 12 * 3600; // hours epggrab_module = NULL; // disabled diff --git a/src/epggrab.h b/src/epggrab.h index 36e5d87a..88e3bb15 100644 --- a/src/epggrab.h +++ b/src/epggrab.h @@ -86,9 +86,9 @@ void epggrab_channel_link ( epggrab_channel_t *ch ); /* * Grabber flags */ -#define EPGGRAB_MODULE_SIMPLE 0x01 -#define EPGGRAB_MODULE_EXTERNAL 0x02 -#define EPGGRAB_MODULE_SPECIAL 0x04 +#define EPGGRAB_MODULE_INTERNAL 0x01 ///< IP based internally run +#define EPGGRAB_MODULE_EXTERNAL 0x02 ///< IP based externally run +#define EPGGRAB_MODULE_OTA 0x04 ///< DVB OTA EPGs /* * Grabber base class @@ -163,14 +163,12 @@ htsmsg_t* epggrab_module_list ( void ); * Configuration */ extern pthread_mutex_t epggrab_mutex; -extern uint32_t epggrab_eitenabled; extern uint32_t epggrab_interval; extern epggrab_module_t* epggrab_module; /* * Update */ -int epggrab_set_eitenabled ( uint32_t eitenabled ); int epggrab_set_interval ( uint32_t interval ); int epggrab_set_module ( epggrab_module_t *module ); int epggrab_set_module_by_id ( const char *id ); diff --git a/src/epggrab/eit.c b/src/epggrab/eit.c index 3670eacd..8ba807ec 100644 --- a/src/epggrab/eit.c +++ b/src/epggrab/eit.c @@ -22,8 +22,10 @@ #include "epg.h" #include "epggrab/eit.h" +static epggrab_module_t _eit_mod; + /* ************************************************************************ - * Module Setup + * Processing * ***********************************************************************/ static const char * @@ -47,13 +49,13 @@ void eit_callback ( channel_t *ch, int id, time_t start, time_t stop, const char *description = NULL; char *uri; + /* Disabled? */ + if (!_eit_mod.enabled) return; + /* Ignore */ if (!ch || !ch->ch_name || !ch->ch_name[0]) return; if (!title) return; - /* Disabled? */ - if (!epggrab_eitenabled) return; - /* Find broadcast */ ebc = epg_broadcast_find_by_time(ch, start, stop, 1, &save); if (!ebc) return; @@ -97,13 +99,11 @@ void eit_callback ( channel_t *ch, int id, time_t start, time_t stop, * Module Setup * ***********************************************************************/ -static epggrab_module_t _eit_mod; - void eit_init ( epggrab_module_list_t *list ) { _eit_mod.id = strdup("eit"); _eit_mod.name = strdup("EIT: On-Air Grabber"); - *((uint8_t*)&_eit_mod.flags) = EPGGRAB_MODULE_SPECIAL; + *((uint8_t*)&_eit_mod.flags) = EPGGRAB_MODULE_OTA; LIST_INSERT_HEAD(list, &_eit_mod, link); // Note: this is mostly ignored anyway as EIT is treated as a special case! } diff --git a/src/epggrab/pyepg.c b/src/epggrab/pyepg.c index 827ac798..72760838 100644 --- a/src/epggrab/pyepg.c +++ b/src/epggrab/pyepg.c @@ -427,7 +427,7 @@ void pyepg_init ( epggrab_module_list_t *list ) mod->ch_add = epggrab_module_channel_add; mod->ch_rem = epggrab_module_channel_rem; mod->ch_mod = epggrab_module_channel_mod; - *((uint8_t*)&mod->flags) = EPGGRAB_MODULE_SIMPLE; + *((uint8_t*)&mod->flags) = EPGGRAB_MODULE_INTERNAL; LIST_INSERT_HEAD(list, mod, link); _pyepg_module = mod; diff --git a/src/epggrab/xmltv.c b/src/epggrab/xmltv.c index 0b959298..3cabdc9e 100644 --- a/src/epggrab/xmltv.c +++ b/src/epggrab/xmltv.c @@ -389,7 +389,7 @@ static void _xmltv_load_grabbers ( epggrab_module_list_t *list ) mod->name = malloc(200); mod->channels = &_xmltv_channels; sprintf((char*)mod->name, "XMLTV: %s", &outbuf[n]); - *((uint8_t*)&mod->flags) = EPGGRAB_MODULE_SIMPLE; + *((uint8_t*)&mod->flags) = EPGGRAB_MODULE_INTERNAL; mod->grab = epggrab_module_grab; mod->trans = epggrab_module_trans_xml; mod->parse = _xmltv_parse; diff --git a/src/webui/extjs.c b/src/webui/extjs.c index ee86d89c..d0dcdfbe 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -486,7 +486,6 @@ extjs_epggrab(http_connection_t *hc, const char *remain, void *opaque) pthread_mutex_lock(&epggrab_mutex); r = htsmsg_create_map(); - htsmsg_add_u32(r, "eitenabled", epggrab_eitenabled); if (epggrab_module) htsmsg_add_str(r, "module", epggrab_module->id); htsmsg_add_u32(r, "interval", epggrab_interval); @@ -514,8 +513,6 @@ extjs_epggrab(http_connection_t *hc, const char *remain, void *opaque) } else if (!strcmp(op, "saveSettings") ) { int save = 0; pthread_mutex_lock(&epggrab_mutex); - u32 = http_arg_get(&hc->hc_req_args, "eitenabled") ? 1 : 0; - save |= epggrab_set_eitenabled(u32); if ( (str = http_arg_get(&hc->hc_req_args, "interval")) ) save |= epggrab_set_interval(atoi(str)); if ( (str = http_arg_get(&hc->hc_req_args, "module")) ) diff --git a/src/webui/static/app/epggrab.js b/src/webui/static/app/epggrab.js index f889b476..30c30b71 100644 --- a/src/webui/static/app/epggrab.js +++ b/src/webui/static/app/epggrab.js @@ -7,8 +7,9 @@ tvheadend.epggrab = function() { /* * Module lists (I'm sure there is a better way!) */ - var EPGGRAB_MODULE_SIMPLE = 0x01; + var EPGGRAB_MODULE_INTERNAL = 0x01; var EPGGRAB_MODULE_EXTERNAL = 0x02; + var EPGGRAB_MODULE_OTA = 0x04; var moduleStore = new Ext.data.JsonStore({ root : 'entries', @@ -17,20 +18,23 @@ tvheadend.epggrab = function() { autoLoad : true, fields : [ 'id', 'name', 'path', 'flags', 'enabled' ] }); - var simpleModuleStore = new Ext.data.Store({ + var internalModuleStore = new Ext.data.Store({ recordType: moduleStore.recordType }); var externalModuleStore = new Ext.data.Store({ recordType: moduleStore.recordType }); + var otaModuleStore = new Ext.data.Store({ + recordType: moduleStore.recordType + }); moduleStore.on('load', function() { moduleStore.filterBy(function(r) { - return r.get('flags') & EPGGRAB_MODULE_SIMPLE; + return r.get('flags') & EPGGRAB_MODULE_INTERNAL; }); - r = new simpleModuleStore.recordType({ id: '', name : 'Disabled'}); - simpleModuleStore.add(r); + r = new internalModuleStore.recordType({ id: '', name : 'Disabled'}); + internalModuleStore.add(r); moduleStore.each(function(r) { - simpleModuleStore.add(r.copy()); + internalModuleStore.add(r.copy()); }); moduleStore.filterBy(function(r) { return r.get('flags') & EPGGRAB_MODULE_EXTERNAL; @@ -38,6 +42,12 @@ tvheadend.epggrab = function() { moduleStore.each(function(r) { externalModuleStore.add(r.copy()); }); + moduleStore.filterBy(function(r) { + return r.get('flags') & EPGGRAB_MODULE_OTA; + }); + moduleStore.each(function(r) { + otaModuleStore.add(r.copy()); + }); }); /* @@ -46,7 +56,7 @@ tvheadend.epggrab = function() { var confreader = new Ext.data.JsonReader( { root: 'epggrabSettings' }, - [ 'module', 'eitenabled', 'advanced', 'interval' ] + [ 'module', 'interval' ] ); /* **************************************************************** @@ -56,7 +66,7 @@ tvheadend.epggrab = function() { /* * Module selector */ - var simpleModule = new Ext.form.ComboBox({ + var internalModule = new Ext.form.ComboBox({ fieldLabel : 'Module', hiddenName : 'module', width : 300, @@ -66,7 +76,7 @@ tvheadend.epggrab = function() { editable : false, mode : 'local', triggerAction : 'all', - store : simpleModuleStore + store : internalModuleStore }); /* @@ -182,9 +192,38 @@ tvheadend.epggrab = function() { }, iconCls : 'icon-grid', }); - var advancedPanel = externalGrid; + + /* + * OTA modules + */ + + var otaSelectionModel = new Ext.grid.CheckboxSelectionModel({ + singleSelect : false, + listeners : { + 'rowselect' : function (s, ri, r) { + r.set('enabled', 1); + }, + 'rowdeselect' : function (s, ri, r) { + r.set('enabled', 0); + } + } + }); + + var otaGrid = new Ext.grid.EditorGridPanel({ + store : otaModuleStore, + cm : externalColumnModel, + sm : otaSelectionModel, + width : 600, + height : 150, + frame : false, + viewConfig : { + forceFit : true, + }, + iconCls : 'icon-grid', + }); + + /* HACK: get display working */ externalGrid.on('render', function(){ - // TODO: bit of hack to get selection working delay = new Ext.util.DelayedTask(function(){ rows = []; externalModuleStore.each(function(r){ @@ -194,16 +233,21 @@ tvheadend.epggrab = function() { }); delay.delay(100); }); + otaGrid.on('render', function(){ + delay = new Ext.util.DelayedTask(function(){ + rows = []; + otaModuleStore.each(function(r){ + if (r.get('enabled')) rows.push(r); + }); + otaSelectionModel.selectRecords(rows); + }); + delay.delay(100); + }); /* **************************************************************** * Form * ***************************************************************/ - var eitCheck = new Ext.form.Checkbox({ - fieldLabel : 'EIT Enabled', - name : 'eitenabled' - }); - var saveButton = new Ext.Button({ text : "Save configuration", tooltip : 'Save changes made to configuration below', @@ -231,12 +275,13 @@ tvheadend.epggrab = function() { defaultType : 'textfield', items : [ interval, - eitCheck, - simpleModule, + internalModule, intervalValue, intervalUnit, new Ext.form.Label({text: 'External Interfaces'}), - advancedPanel + externalGrid, + new Ext.form.Label({text: 'OTA Modules'}), + otaGrid, ], tbar: [ saveButton, @@ -264,6 +309,9 @@ tvheadend.epggrab = function() { externalModuleStore.each(function(r) { mods.push({id: r.get('id'), enabled: r.get('enabled') ? 1 : 0}); }); + otaModuleStore.each(function(r) { + mods.push({id: r.get('id'), enabled: r.get('enabled') ? 1 : 0}); + }); mods = Ext.util.JSON.encode(mods); confpanel.getForm().submit({ url : 'epggrab', @@ -280,4 +328,3 @@ tvheadend.epggrab = function() { return confpanel; } -