From b979aae2fb6183314ae71549a4b24560fc3639ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20T=C3=B6rnblom?= Date: Mon, 7 Jan 2013 16:50:30 +0100 Subject: [PATCH] make skip commercials an option in the webif (default to on) --- docs/html/config_dvr.html | 4 ++++ src/dvr/dvr.h | 1 + src/dvr/dvr_db.c | 6 +++++- src/dvr/dvr_rec.c | 4 +++- src/webui/extjs.c | 4 ++++ src/webui/static/app/dvr.js | 5 ++++- 6 files changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/html/config_dvr.html b/docs/html/config_dvr.html index 05d6b8cc..2b72e8a0 100644 --- a/docs/html/config_dvr.html +++ b/docs/html/config_dvr.html @@ -74,6 +74,10 @@
If checked, media containers that support metadata will be tagged with the metadata associated with the event being recorded. +
Skip commercials +
If checked, commercials will be dropped from the recordings. At the + moment, commercial detection only works for the swedish channel TV4. +
Post-processor command
Command to run after finishing a recording. The command will be run in background and is executed even if a recording is aborted diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index 9cbfacf6..4c2174aa 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -65,6 +65,7 @@ extern struct dvr_entry_list dvrentries; #define DVR_EPISODE_IN_TITLE 0x80 #define DVR_CLEAN_TITLE 0x100 #define DVR_TAG_FILES 0x200 +#define DVR_SKIP_COMMERCIALS 0x400 typedef enum { DVR_PRIO_IMPORTANT, diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 627ef426..1b4edf2d 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -1000,6 +1000,9 @@ dvr_init(void) if(!htsmsg_get_u32(m, "tag-files", &u32) && !u32) cfg->dvr_flags &= ~DVR_TAG_FILES; + if(!htsmsg_get_u32(m, "skip-commercials", &u32) && !u32) + cfg->dvr_flags &= ~DVR_SKIP_COMMERCIALS; + tvh_str_set(&cfg->dvr_postproc, htsmsg_get_str(m, "postproc")); } @@ -1095,7 +1098,7 @@ dvr_config_create(const char *name) cfg->dvr_config_name = strdup(name); cfg->dvr_retention_days = 31; cfg->dvr_mc = MC_MATROSKA; - cfg->dvr_flags = DVR_TAG_FILES; + cfg->dvr_flags = DVR_TAG_FILES | DVR_SKIP_COMMERCIALS; /* series link support */ cfg->dvr_sl_brand_lock = 1; // use brand linking @@ -1160,6 +1163,7 @@ dvr_save(dvr_config_t *cfg) htsmsg_add_u32(m, "episode-in-title", !!(cfg->dvr_flags & DVR_EPISODE_IN_TITLE)); htsmsg_add_u32(m, "clean-title", !!(cfg->dvr_flags & DVR_CLEAN_TITLE)); htsmsg_add_u32(m, "tag-files", !!(cfg->dvr_flags & DVR_TAG_FILES)); + htsmsg_add_u32(m, "skip-commercials", !!(cfg->dvr_flags & DVR_SKIP_COMMERCIALS)); if(cfg->dvr_postproc != NULL) htsmsg_add_str(m, "postproc", cfg->dvr_postproc); diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 2f30bfb2..d933c195 100755 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -398,11 +398,13 @@ static void * dvr_thread(void *aux) { dvr_entry_t *de = aux; + dvr_config_t *cfg = dvr_config_find_by_name_default(de->de_config_name); streaming_queue_t *sq = &de->de_sq; streaming_message_t *sm; th_pkt_t *pkt; int run = 1; int started = 0; + int comm_skip = (cfg->dvr_flags & DVR_SKIP_COMMERCIALS); pthread_mutex_lock(&sq->sq_mutex); @@ -423,7 +425,7 @@ dvr_thread(void *aux) pkt = sm->sm_data; if(pkt->pkt_commercial == COMMERCIAL_YES) { dvr_rec_set_state(de, DVR_RS_COMMERCIAL, 0); - tsfix_set_comm_skip(de->de_tsfix, 1); + tsfix_set_comm_skip(de->de_tsfix, comm_skip); } else { dvr_rec_set_state(de, DVR_RS_RUNNING, 0); tsfix_set_comm_skip(de->de_tsfix, 0); diff --git a/src/webui/extjs.c b/src/webui/extjs.c index deca304b..88496e6f 100644 --- a/src/webui/extjs.c +++ b/src/webui/extjs.c @@ -1211,6 +1211,7 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque) htsmsg_add_u32(r, "episodeInTitle", !!(cfg->dvr_flags & DVR_EPISODE_IN_TITLE)); htsmsg_add_u32(r, "cleanTitle", !!(cfg->dvr_flags & DVR_CLEAN_TITLE)); htsmsg_add_u32(r, "tagFiles", !!(cfg->dvr_flags & DVR_TAG_FILES)); + htsmsg_add_u32(r, "commSkip", !!(cfg->dvr_flags & DVR_SKIP_COMMERCIALS)); out = json_single_record(r, "dvrSettings"); @@ -1261,6 +1262,9 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque) flags |= DVR_EPISODE_IN_TITLE; if(http_arg_get(&hc->hc_req_args, "tagFiles") != NULL) flags |= DVR_TAG_FILES; + if(http_arg_get(&hc->hc_req_args, "commSkip") != NULL) + flags |= DVR_SKIP_COMMERCIALS; + dvr_flags_set(cfg,flags); diff --git a/src/webui/static/app/dvr.js b/src/webui/static/app/dvr.js index 564eab3a..fa7d4041 100644 --- a/src/webui/static/app/dvr.js +++ b/src/webui/static/app/dvr.js @@ -703,7 +703,7 @@ tvheadend.dvrsettings = function() { }, [ 'storage', 'postproc', 'retention', 'dayDirs', 'channelDirs', 'channelInTitle', 'container', 'dateInTitle', 'timeInTitle', 'preExtraTime', 'postExtraTime', 'whitespaceInTitle', 'titleDirs', - 'episodeInTitle', 'cleanTitle', 'tagFiles' ]); + 'episodeInTitle', 'cleanTitle', 'tagFiles', 'commSkip' ]); var confcombo = new Ext.form.ComboBox({ store : tvheadend.configNames, @@ -793,6 +793,9 @@ tvheadend.dvrsettings = function() { }), new Ext.form.Checkbox({ fieldLabel : 'Tag files with metadata', name : 'tagFiles' + }), new Ext.form.Checkbox({ + fieldLabel : 'Skip commercials', + name : 'commSkip' }), { width : 300, fieldLabel : 'Post-processor command',