diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h
index 71bc1631..f89333b8 100644
--- a/src/dvr/dvr.h
+++ b/src/dvr/dvr.h
@@ -247,6 +247,10 @@ typedef struct dvr_autorec_entry {
epg_serieslink_t *dae_serieslink;
epg_episode_num_t dae_epnum;
+//IH
+ int dae_minduration;
+ int dae_maxduration;
+//
} dvr_autorec_entry_t;
diff --git a/src/dvr/dvr_autorec.c b/src/dvr/dvr_autorec.c
index c9576b96..8bdff155 100644
--- a/src/dvr/dvr_autorec.c
+++ b/src/dvr/dvr_autorec.c
@@ -70,6 +70,9 @@ autorec_cmp(dvr_autorec_entry_t *dae, epg_broadcast_t *e)
{
channel_tag_mapping_t *ctm;
dvr_config_t *cfg;
+ //IH
+ int duration;
+ //
if (!e->channel) return 0;
if (!e->episode) return 0;
@@ -83,6 +86,10 @@ autorec_cmp(dvr_autorec_entry_t *dae, epg_broadcast_t *e)
dae->dae_title[0] == '\0') &&
dae->dae_brand == NULL &&
dae->dae_season == NULL &&
+ //IH
+ &dae->dae_minduration == NULL &&
+ &dae->dae_maxduration == NULL && //IH Think about whether we should be testing INT_MAX here
+ //
dae->dae_serieslink == NULL)
return 0; // Avoid super wildcard match
@@ -135,7 +142,19 @@ autorec_cmp(dvr_autorec_entry_t *dae, epg_broadcast_t *e)
if(abs(mktime(&a_time) - mktime(&ev_time)) > 900)
return 0;
}
-
+
+ //IH
+ duration = &e->stop - &e->start;
+
+ if(dae->dae_minduration) {
+ if(duration < dae->dae_minduration) return 0;
+ }
+
+ if(dae->dae_maxduration) {
+ if(duration > dae->dae_maxduration) return 0;
+ }
+ //
+
if(dae->dae_weekdays != 0x7f) {
struct tm tm;
localtime_r(&e->start, &tm);
@@ -300,7 +319,11 @@ autorec_record_build(dvr_autorec_entry_t *dae)
//
// This way I don't care what it's set to beyond the string value for
// initial display purposes
-
+ if (dae->dae_minduration)
+ htsmsg_add_u32(e, "minduration", dae->dae_minduration);
+ if (dae->dae_maxduration)
+ htsmsg_add_u32(e, "maxduration", dae->dae_maxduration);
+//
htsmsg_add_str(e, "pri", dvr_val2pri(dae->dae_pri));
if (dae->dae_brand)
@@ -425,6 +448,14 @@ autorec_record_update(void *opaque, const char *id, htsmsg_t *values,
}
}
+//IH Need to put something in here that triggers when we update min/max in the autorec rule
+ if(!htsmsg_get_u32(values, "minduration", &u32))
+ dae->dae_minduration = u32;
+
+ if(!htsmsg_get_u32(values, "maxduration", &u32))
+ dae->dae_maxduration = u32;
+//
+
if((l = htsmsg_get_list(values, "weekdays")) != NULL)
dae->dae_weekdays = build_weekday_mask(l);
diff --git a/src/epg.c b/src/epg.c
index 484de482..9297f876 100644
--- a/src/epg.c
+++ b/src/epg.c
@@ -2221,7 +2221,7 @@ static void _eqr_add
//IH
duration = (int)e->stop - (int)e->start;
if ( duration < min_duration || duration > max_duration) return;
- tvhlog(LOG_INFO, "_eqr_add", "episode duration %d vs min_duration %d and max_duration %d", duration, min_duration, max_duration);
+ tvhtrace("epg", "Episode duration %d vs min_duration of %d and max_duration of %d", duration, min_duration, max_duration);
//
/* More space */
diff --git a/src/htsp_server.c b/src/htsp_server.c
index 5d9d71db..260ac451 100644
--- a/src/htsp_server.c
+++ b/src/htsp_server.c
@@ -1087,7 +1087,7 @@ htsp_method_epgQuery(htsp_connection_t *htsp, htsmsg_t *in)
//IH
min_duration = htsmsg_get_u32_or_default(in, "minduration", 0);
max_duration = htsmsg_get_u32_or_default(in, "maxduration", INT_MAX);
- tvhlog(LOG_INFO, "htsp_server", "min_duration %d and max_duration %d", min_duration, max_duration);
+ tvhtrace("htsp", "min_duration %d and max_duration %d", min_duration, max_duration);
//
/* Check access */
diff --git a/src/webui/static/app/dvr.js b/src/webui/static/app/dvr.js
index 552a07b1..7668ff99 100644
--- a/src/webui/static/app/dvr.js
+++ b/src/webui/static/app/dvr.js
@@ -547,12 +547,15 @@ tvheadend.autoreceditor = function() {
triggerAction: 'all',
emptyText: 'Only include channel...'
}),
- renderer: function(v, m, r) {
- var i = tvheadend.channels.find('key', v);
- if (i !== -1)
- v = tvheadend.channels.getAt(i).get('val');
- return v;
- }
+ renderer: function(v) {
+ return tvheadend.channelLookupName(v);
+ },
+// renderer: function(v, m, r) {
+// var i = tvheadend.channels.find('key', v);
+// if (i !== -1)
+// v = tvheadend.channels.getAt(i).get('val');
+// return v;
+// }
},
{
header: "SeriesLink",
@@ -590,30 +593,37 @@ tvheadend.autoreceditor = function() {
})
},
// IH
-
-// This will now bring through the real limit (i.e. seconds). We can look that up from the Store to turn it into an index
-// or into a string equivalent, and populate the combobox with the same values so it will automatically match
-// see epg.js for the lookup/conversion code
-
{
- header: "Min"
- /*dataIndex: minduration,
- editor: new Ext.ux.form.ComboBox({
+ header: "Min. Duration",
+ dataIndex: 'minduration',
+ width: 75,
+ renderer: function(v) {
+ return tvheadend.durationLookupName(v);
+ },
+ editor: new Ext.form.ComboBox({
store: tvheadend.DurationStore,
mode: 'local',
valueField: 'value',
- displayField: 'label'
- })*/
- },
- {
- header: "Max"
- /*dataIndex: maxduration
- editor: new Ext.ux.form.ComboBox({
+ displayField: 'label',
+ editable: false,
+ triggerAction: 'all',
+ })
+ },
+ {
+ header: "Max. Duration",
+ dataIndex: 'maxduration',
+ width: 75,
+ renderer: function(v) {
+ return tvheadend.durationLookupName(v);
+ },
+ editor: new Ext.form.ComboBox({
store: tvheadend.DurationStore,
mode: 'local',
valueField: 'value',
- displayField: 'label'
- })*/
+ displayField: 'label',
+ editable: false,
+ triggerAction: 'all'
+ })
},
//
{
@@ -814,7 +824,7 @@ tvheadend.dvr = function() {
tvheadend.autorecRecord = Ext.data.Record.create(['enabled', 'title',
'serieslink', 'channel', 'tag', 'creator', 'contenttype', 'comment',
//IH
- 'mindurationstring', 'maxdurationstring',
+ 'minduration', 'maxduration',
//
'weekdays', 'pri', 'approx_time', 'config_name']);
diff --git a/src/webui/static/app/epg.js b/src/webui/static/app/epg.js
index 0e200b56..8f6768fb 100644
--- a/src/webui/static/app/epg.js
+++ b/src/webui/static/app/epg.js
@@ -30,6 +30,28 @@ tvheadend.contentGroupLookupName = function(code) {
tvheadend.ContentGroupStore.setDefaultSort('code', 'ASC');
//IH
+tvheadend.channelLookupName = function(key) {
+ channelString = "";
+
+ var index = tvheadend.channels.find('key', key);
+
+ if (index !== -1)
+ var channelString = tvheadend.channels.getAt(index).get('val');
+
+ return channelString;
+};
+
+tvheadend.durationLookupName = function(value) {
+ durationString = "";
+
+ var index = tvheadend.DurationStore.find('value', value);
+
+ if (index !== -1)
+ var durationString = tvheadend.DurationStore.getById(index).data.label;
+
+ return durationString;
+};
+
tvheadend.DurationStore = new Ext.data.SimpleStore({
storeId: 'durations',
id: 0,
@@ -506,22 +528,15 @@ tvheadend.epg = function() {
setduration = function(slider) {
var min = slider.getValue(0);
- var max = slider.getValue(1);
var minRec = tvheadend.DurationStore.getById(min);
+
+ epgStore.baseParams.minduration = minRec.data.value;
+
+ var max = slider.getValue(1);
var maxRec = tvheadend.DurationStore.getById(max);
- epgStore.baseParams.minduration = minRec.data.value;
epgStore.baseParams.maxduration = maxRec.data.value;
-//Debugging to test set and lookup
- var index = tvheadend.DurationStore.find( 'value', epgStore.baseParams.minduration );
- var string = tvheadend.DurationStore.getById(index).data.label;
- console.log('Min Duration record:', index, 'string:', string);
-
- var index = tvheadend.DurationStore.find( 'value', epgStore.baseParams.maxduration );
- var string = tvheadend.DurationStore.getById(index).data.label;
- console.log('Max Duration record:', index, 'string:', string);
-//
epgStore.reload();
};
//
@@ -612,7 +627,9 @@ tvheadend.epg = function() {
var title = epgStore.baseParams.title ? epgStore.baseParams.title
: "Don't care";
- var channel = epgStore.baseParams.channel ? epgStore.baseParams.channel
+//IH - correct to display content type as a string as opposed to the underlying (lookup) code
+ var channel = epgStore.baseParams.channel ? tvheadend.channelLookupName(epgStore.baseParams.channel)
+//
: "Don't care";
var tag = epgStore.baseParams.tag ? epgStore.baseParams.tag
: "Don't care";
@@ -621,9 +638,9 @@ tvheadend.epg = function() {
//
: "Don't care";
//IH
- var minduration = epgStore.baseParams.minduration ? tvheadend.DurationStore.getById(tvheadend.DurationStore.find('value', epgStore.baseParams.minduration)).data.label
+ var minduration = epgStore.baseParams.minduration ? tvheadend.durationLookupName(epgStore.baseParams.minduration)
: "Don't care";
- var maxduration = epgStore.baseParams.maxduration ? tvheadend.DurationStore.getById(tvheadend.DurationStore.find('value', epgStore.baseParams.maxduration)).data.label
+ var maxduration = epgStore.baseParams.maxduration ? tvheadend.durationLookupName(epgStore.baseParams.maxduration)
: "Don't care";
//
@@ -649,13 +666,6 @@ tvheadend.epg = function() {
});
}
-//
-// IH: TO DO
-//
-// Check that contenttype is still passed correctly (epgStore.baseParams.contenttype) to autorec vs the new contenttypestring - SHOULDN'T HAVE CHANGED
-// Add min/max to autorec rules (C)
-// Check they're displayed (js)
-//
function createAutoRec2(params) {
/* Really do it */
params.op = 'createAutoRec';