diff --git a/webui/extjs.c b/webui/extjs.c index 5cff1981..c6cdab6c 100644 --- a/webui/extjs.c +++ b/webui/extjs.c @@ -795,6 +795,7 @@ extjs_xmltv(http_connection_t *hc, const char *remain, void *opaque) htsmsg_add_str(r, "grabber", s); htsmsg_add_u32(r, "grabinterval", xmltv_grab_interval); + htsmsg_add_u32(r, "grabenable", xmltv_grab_enabled); pthread_mutex_unlock(&xmltv_mutex); out = json_single_record(r, "xmltvSettings"); @@ -809,6 +810,9 @@ extjs_xmltv(http_connection_t *hc, const char *remain, void *opaque) s = http_arg_get(&hc->hc_req_args, "grabinterval"); xmltv_set_grab_interval(atoi(s)); + s = http_arg_get(&hc->hc_req_args, "grabenable"); + xmltv_set_grab_enable(!!s); + pthread_mutex_unlock(&xmltv_mutex); out = htsmsg_create(); diff --git a/webui/static/app/xmltv.js b/webui/static/app/xmltv.js index e7681af2..223424b1 100644 --- a/webui/static/app/xmltv.js +++ b/webui/static/app/xmltv.js @@ -79,7 +79,7 @@ tvheadend.xmltv = function() { var confreader = new Ext.data.JsonReader({ root: 'xmltvSettings', - }, ['grabber','grabinterval']); + }, ['grabber','grabinterval','grabenable']); var grabberSelect = new Ext.form.ComboBox({ loadingText: 'Loading, please wait...', @@ -115,6 +115,9 @@ tvheadend.xmltv = function() { maxValue: 100, fieldLabel: 'Grab interval (hours)', name: 'grabinterval' + }), new Ext.form.Checkbox({ + fieldLabel: 'Enable grabbing', + name: 'grabenable' }) ], tbar: [{ diff --git a/xmltv.c b/xmltv.c index 40fb2927..287afff0 100644 --- a/xmltv.c +++ b/xmltv.c @@ -63,6 +63,7 @@ static xmltv_grabber_t *xg_current; uint32_t xmltv_grab_interval; +uint32_t xmltv_grab_enabled; /* xmltv_channels is protected by global_lock */ static struct xmltv_channel_tree xmltv_channels; @@ -473,7 +474,7 @@ xmltv_thread(void *aux) while(confver == xmltv_confver) { - if(xg_current == NULL) { + if(xg_current == NULL || !xmltv_grab_enabled) { pthread_cond_wait(&xmltv_cond, &xmltv_mutex); continue; } @@ -481,6 +482,9 @@ xmltv_thread(void *aux) break; } + if(xmltv_grab_enabled == 0) + continue; + ts.tv_sec = time(NULL) + xmltv_grab_interval * 3600; confver = xmltv_confver; @@ -512,6 +516,7 @@ xmltv_init(void) { pthread_t ptid; xmltv_grab_interval = 12; /* Default half a day */ + xmltv_grab_enabled = 1; /* Default on */ /* Load all channels */ xmltv_load(); @@ -735,6 +740,7 @@ xmltv_grabbers_load(void) return; htsmsg_get_u32(m, "grab-interval", &xmltv_grab_interval); + htsmsg_get_u32(m, "grab-enabled", &xmltv_grab_enabled); if((l = htsmsg_get_array(m, "grabbers")) != NULL) { @@ -794,6 +800,7 @@ xmltv_grabbers_save(void) htsmsg_add_msg(m, "grabbers", array); htsmsg_add_u32(m, "grab-interval", xmltv_grab_interval); + htsmsg_add_u32(m, "grab-enabled", xmltv_grab_enabled); if(xg_current != NULL) htsmsg_add_str(m, "current-grabber", xg_current->xg_path); @@ -885,3 +892,17 @@ xmltv_set_grab_interval(int s) xmltv_grabbers_save(); } + +/** + * + */ +void +xmltv_set_grab_enable(int on) +{ + lock_assert(&xmltv_mutex); + + xmltv_grab_enabled = on; + xmltv_confver++; + pthread_cond_signal(&xmltv_cond); + xmltv_grabbers_save(); +} diff --git a/xmltv.h b/xmltv.h index ac8d50b4..10819219 100644 --- a/xmltv.h +++ b/xmltv.h @@ -51,9 +51,11 @@ htsmsg_t *xmltv_list_grabbers(void); const char *xmltv_get_current_grabber(void); void xmltv_set_current_grabber(const char *path); void xmltv_set_grab_interval(int s); +void xmltv_set_grab_enable(int on); extern struct xmltv_channel_list xmltv_displaylist; extern uint32_t xmltv_grab_interval; +extern uint32_t xmltv_grab_enabled; extern pthread_mutex_t xmltv_mutex; #endif /* EPG_XMLTV_H__ */