diff --git a/src/dvb/dvb_tables.c b/src/dvb/dvb_tables.c index f5b34b3d..74aa4676 100644 --- a/src/dvb/dvb_tables.c +++ b/src/dvb/dvb_tables.c @@ -537,6 +537,9 @@ dvb_eit_callback(th_dvb_mux_instance_t *tdmi, uint8_t *ptr, int len, if(t == NULL || !t->s_enabled || (ch = t->s_ch) == NULL) return 0; + if(!t->s_dvb_eit_enable) + return 0; + while(len >= 12) { event_id = ptr[0] << 8 | ptr[1]; start_time = dvb_convert_date(&ptr[2]); diff --git a/src/dvb/dvb_transport.c b/src/dvb/dvb_transport.c index 62b776bc..ad41234f 100644 --- a/src/dvb/dvb_transport.c +++ b/src/dvb/dvb_transport.c @@ -238,6 +238,10 @@ dvb_transport_load(th_dvb_mux_instance_t *tdmi) s = htsmsg_get_str(c, "dvb_default_charset"); t->s_dvb_default_charset = s ? strdup(s) : NULL; + if(htsmsg_get_u32(c, "dvb_eit_enable", &u32)) + u32 = 1; + t->s_dvb_eit_enable = u32; + s = htsmsg_get_str(c, "channelname"); if(htsmsg_get_u32(c, "mapped", &u32)) u32 = 0; @@ -278,6 +282,8 @@ dvb_transport_save(service_t *t) if(t->s_dvb_default_charset != NULL) htsmsg_add_str(m, "dvb_default_charset", t->s_dvb_default_charset); + htsmsg_add_u32(m, "dvb_eit_enable", t->s_dvb_eit_enable); + pthread_mutex_lock(&t->s_stream_mutex); psi_save_service_settings(m, t); pthread_mutex_unlock(&t->s_stream_mutex); @@ -440,6 +446,8 @@ dvb_transport_build_msg(service_t *t) if(t->s_dvb_default_charset != NULL) htsmsg_add_str(m, "dvb_default_charset", t->s_dvb_default_charset); + htsmsg_add_u32(m, "dvb_eit_enable", t->s_dvb_eit_enable); + return m; } diff --git a/src/service.c b/src/service.c index 49e04bd7..b7eec881 100644 --- a/src/service.c +++ b/src/service.c @@ -505,6 +505,7 @@ service_create(const char *identifier, int type, int source_type) t->s_enabled = 1; t->s_pcr_last = PTS_UNSET; t->s_dvb_default_charset = NULL; + t->s_dvb_eit_enable = 1; TAILQ_INIT(&t->s_components); streaming_pad_init(&t->s_streaming_pad); @@ -692,6 +693,18 @@ service_set_dvb_default_charset(service_t *t, const char *dvb_default_charset) t->s_config_save(t); } +/** + * + */ +void +service_set_dvb_eit_enable(service_t *t, int dvb_eit_enable) +{ + if(t->s_dvb_eit_enable == dvb_eit_enable) + return; + + t->s_dvb_eit_enable = dvb_eit_enable; + t->s_config_save(t); +} /** * diff --git a/src/service.h b/src/service.h index 4b8458e5..2185e422 100644 --- a/src/service.h +++ b/src/service.h @@ -482,6 +482,11 @@ typedef struct service { */ char *s_dvb_default_charset; + /** + * Set if EIT grab is enabled for DVB service (the default). + */ + int s_dvb_eit_enable; + } service_t; @@ -569,4 +574,6 @@ int service_get_signal_status(service_t *t, signal_status_t *status); void service_set_dvb_default_charset(service_t *t, const char *dvb_default_charset); +void service_set_dvb_eit_enable(service_t *t, int dvb_eit_enable); + #endif // SERVICE_H__ diff --git a/src/webui/extjs.c b/src/webui/extjs.c index cd95ceb4..b959214f 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -1134,6 +1134,9 @@ service_update(htsmsg_t *in) if((dvb_default_charset = htsmsg_get_str(c, "dvb_default_charset")) != NULL) service_set_dvb_default_charset(t, dvb_default_charset); + + if(!htsmsg_get_u32(c, "dvb_eit_enable", &u32)) + service_set_dvb_eit_enable(t, u32); } } @@ -1218,6 +1221,8 @@ extjs_servicedetails(http_connection_t *hc, if(t->s_dvb_default_charset != NULL) htsmsg_add_str(out, "dvb_default_charset", t->s_dvb_default_charset); + htsmsg_add_u32(out, "dvb_eit_enable", t->s_dvb_eit_enable); + pthread_mutex_unlock(&global_lock); htsmsg_json_serialize(out, hq, 0); @@ -1460,6 +1465,9 @@ extjs_service_update(htsmsg_t *in) if((dvb_default_charset = htsmsg_get_str(c, "dvb_default_charset")) != NULL) service_set_dvb_default_charset(t, dvb_default_charset); + + if(!htsmsg_get_u32(c, "dvb_eit_enable", &u32)) + service_set_dvb_eit_enable(t, u32); } } diff --git a/src/webui/static/app/dvb.js b/src/webui/static/app/dvb.js index 9063cdbc..f98a9a48 100644 --- a/src/webui/static/app/dvb.js +++ b/src/webui/static/app/dvb.js @@ -433,6 +433,47 @@ tvheadend.dvb_services = function(adapterId) { valueField:'key' }) }, + { + header: "EIT", + dataIndex: 'dvb_eit_enable', + width: 100, + renderer: function(value, metadata, record, row, col, store) { + if (value == '0') + return 'Disabled'; + if (value == '1') + return 'Enabled'; + }, + editor: new fm.ComboBox({ + mode: 'local', + store: new Ext.data.SimpleStore({ + fields: ['key','value'], + data: [ + ['0','Disabled'], + ['1','Enabled'] + ] + }), + typeAhead: true, + lazyRender: true, + triggerAction: 'all', + displayField:'value', + valueField:'key' + }) + }, +/* var eitColumn = new Ext.grid.CheckColumn({ + header: "EIT Check", + dataIndex: 'dvb_eit_enable', + width: 45 + }); + + { + header: "EIT", + dataIndex: 'dvb_eit_enable', + width: 45, + editor: new fm.Checkbox({ + fieldLabel: 'EIT', + name: 'eit', + }) + },*/ { header: "Type", dataIndex: 'type', @@ -478,8 +519,8 @@ tvheadend.dvb_services = function(adapterId) { var store = new Ext.data.JsonStore({ root: 'entries', fields: Ext.data.Record.create([ - 'id', 'enabled', 'type', 'sid', 'pmt', 'pcr', - 'svcname', 'network', 'provider', 'mux', 'channelname', 'dvb_default_charset' + 'id', 'enabled', 'type', 'sid', 'pmt', 'pcr', 'svcname', 'network', + 'provider', 'mux', 'channelname', 'dvb_default_charset', 'dvb_eit_enable' ]), url: "dvb/services/" + adapterId, autoLoad: true,