]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Make episode duplicate detection configurable. 301/head
authorJohan Rehnberg <cleanrock@gmail.com>
Sun, 27 Oct 2013 11:19:09 +0000 (12:19 +0100)
committerJohan Rehnberg <cleanrock@gmail.com>
Sun, 27 Oct 2013 11:19:09 +0000 (12:19 +0100)
docs/html/config_dvr.html
src/dvr/dvr.h
src/dvr/dvr_db.c
src/webui/extjs.c
src/webui/static/app/dvr.js

index 2b72e8a02481f348ef7fac0daf1467a3f404faa1..354b3297ae938ad29323301fbbcbc3aecad93cb0 100644 (file)
   <dd>If checked, commercials will be dropped from the recordings. At the 
     moment, commercial detection only works for the swedish channel TV4.
 
+  <dt>Episode duplicate detection
+  <dd>If checked, broadcasts with matching title and matching non-zero episode number 
+      are considered duplicates.
+
   <dt>Post-processor command
   <dd>Command to run after finishing a recording. The command will be
       run in background and is executed even if a recording is aborted
index 59d285ccfb382046993529a717e9305ee9ec88df..a945e8f48e2ef6ba3f59b8091c06834fdb71a6c8 100644 (file)
@@ -66,6 +66,7 @@ extern struct dvr_entry_list dvrentries;
 #define DVR_CLEAN_TITLE                0x100
 #define DVR_TAG_FILES           0x200
 #define DVR_SKIP_COMMERCIALS    0x400
+#define DVR_EPISODE_DUPLICATE_DETECTION 0x800
 
 typedef enum {
   DVR_PRIO_IMPORTANT,
index 17949a73ddc14493169aaa3523e759c80e4acd37..c6168d8769a7c618c2cb43ebaa554069dd21f46c 100644 (file)
@@ -436,7 +436,7 @@ static int _dvr_duplicate_event ( epg_broadcast_t *e )
   epg_episode_num_t empty_epnum;
   int has_epnum = 1;
 
-  /* do not do episode duplicate check below if no episode number */
+  /* skip episode duplicate check below if no episode number */
   memset(&empty_epnum, 0, sizeof(empty_epnum));
   if (epg_episode_number_cmp(&empty_epnum, &e->episode->epnum) == 0)
     has_epnum = 0;
@@ -446,13 +446,18 @@ static int _dvr_duplicate_event ( epg_broadcast_t *e )
       if (de->de_bcast->episode == e->episode) return 1;
 
       if (has_epnum) {
-        const char* de_title = lang_str_get(de->de_bcast->episode->title, NULL);
-        const char* e_title = lang_str_get(e->episode->title, NULL);
-
-        /* duplicate if title and episode match */
-        if (de_title && e_title && strcmp(de_title, e_title) == 0
-            && epg_episode_number_cmp(&de->de_bcast->episode->epnum, &e->episode->epnum) == 0) {
-          return 1;
+        dvr_config_t *cfg = dvr_config_find_by_name_default(de->de_config_name);
+        int ep_dup_det = (cfg->dvr_flags & DVR_EPISODE_DUPLICATE_DETECTION);
+
+        if (ep_dup_det) {
+          const char* de_title = lang_str_get(de->de_bcast->episode->title, NULL);
+          const char* e_title = lang_str_get(e->episode->title, NULL);
+
+          /* duplicate if title and episode match */
+          if (de_title && e_title && strcmp(de_title, e_title) == 0
+              && epg_episode_number_cmp(&de->de_bcast->episode->epnum, &e->episode->epnum) == 0) {
+            return 1;
+          }
         }
       }
     }
@@ -1145,6 +1150,9 @@ dvr_init(void)
       if(!htsmsg_get_u32(m, "skip-commercials", &u32) && !u32)
         cfg->dvr_flags &= ~DVR_SKIP_COMMERCIALS;
 
+      if(!htsmsg_get_u32(m, "episode-duplicate-detection", &u32) && u32)
+        cfg->dvr_flags |= DVR_EPISODE_DUPLICATE_DETECTION;
+
       tvh_str_set(&cfg->dvr_postproc, htsmsg_get_str(m, "postproc"));
     }
 
@@ -1311,6 +1319,7 @@ dvr_save(dvr_config_t *cfg)
   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));
+  htsmsg_add_u32(m, "episode-duplicate-detection", !!(cfg->dvr_flags & DVR_EPISODE_DUPLICATE_DETECTION));
   if(cfg->dvr_postproc != NULL)
     htsmsg_add_str(m, "postproc", cfg->dvr_postproc);
 
index 6ff9fbb81ceda262542dd5f454dd29c0fdf56af7..86ffd2af383f79940745b21218935162be8f01d5 100644 (file)
@@ -1306,6 +1306,7 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque)
     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));
+    htsmsg_add_u32(r, "episodeDuplicateDetection", !!(cfg->dvr_flags & DVR_EPISODE_DUPLICATE_DETECTION));
 
     out = json_single_record(r, "dvrSettings");
 
@@ -1358,6 +1359,8 @@ extjs_dvr(http_connection_t *hc, const char *remain, void *opaque)
       flags |= DVR_TAG_FILES;
     if(http_arg_get(&hc->hc_req_args, "commSkip") != NULL)
       flags |= DVR_SKIP_COMMERCIALS;
+    if(http_arg_get(&hc->hc_req_args, "episodeDuplicateDetection") != NULL)
+      flags |= DVR_EPISODE_DUPLICATE_DETECTION;
 
 
     dvr_flags_set(cfg,flags);
index 02021eb3b8b91daa6112fa4628144e491b60575d..a4bb8e4686ed6c64dfeab46e7d96999b18eedcb5 100644 (file)
@@ -729,7 +729,7 @@ tvheadend.dvrsettings = function() {
        }, [ 'storage', 'postproc', 'retention', 'dayDirs', 'channelDirs',
                'channelInTitle', 'container', 'dateInTitle', 'timeInTitle',
                'preExtraTime', 'postExtraTime', 'whitespaceInTitle', 'titleDirs',
-               'episodeInTitle', 'cleanTitle', 'tagFiles', 'commSkip' ]);
+               'episodeInTitle', 'cleanTitle', 'tagFiles', 'commSkip', 'episodeDuplicateDetection' ]);
 
        var confcombo = new Ext.form.ComboBox({
                store : tvheadend.configNames,
@@ -822,6 +822,9 @@ tvheadend.dvrsettings = function() {
                }), new Ext.form.Checkbox({
                        fieldLabel : 'Skip commercials',
                        name : 'commSkip'
+               }), new Ext.form.Checkbox({
+                       fieldLabel : 'Episode duplicate detection',
+                       name : 'episodeDuplicateDetection'
                }), {
                        width : 300,
                        fieldLabel : 'Post-processor command',