]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
DVR: Add forced flag to allow to move 'data errors' to the finished recordings, fixes...
authorJaroslav Kysela <perex@perex.cz>
Wed, 20 Sep 2017 07:51:56 +0000 (09:51 +0200)
committerJaroslav Kysela <perex@perex.cz>
Wed, 20 Sep 2017 07:52:47 +0000 (09:52 +0200)
src/dvr/dvr.h
src/dvr/dvr_db.c
src/htsp_server.c
src/streaming.c
src/tvheadend.h

index 685ea9dfc2412336ecec51d4a346cc7785b0d550..d4a9ca13e7df45aced6623dcf55f97b09bfe5326 100644 (file)
@@ -589,7 +589,7 @@ int64_t dvr_entry_claenup(dvr_entry_t *de, int64_t requiredBytes);
 
 void dvr_entry_set_rerecord(dvr_entry_t *de, int cmd);
 
-void dvr_entry_move(dvr_entry_t *de, int failed);
+void dvr_entry_move(dvr_entry_t *de, int to_failed);
 
 dvr_entry_t *dvr_entry_stop(dvr_entry_t *de);
 
index 0435feceac8169f791e0b2910fb1a1c1b6c3afcc..fccb8b41b4a2c9868c18407c36380c6fbae9d519 100644 (file)
@@ -142,9 +142,11 @@ int dvr_entry_is_finished(dvr_entry_t *entry, int flags)
 
   int removed = entry->de_file_removed ||                                               /* Removed by tvheadend */
       (entry->de_sched_state != DVR_MISSED_TIME && dvr_get_filesize(entry, 0) == -1);   /* Removed externally? */
-  int success = entry->de_sched_state == DVR_COMPLETED &&
-      entry->de_last_error == SM_CODE_OK &&
-      entry->de_data_errors < DVR_MAX_DATA_ERRORS;
+  int success = entry->de_sched_state == DVR_COMPLETED;
+
+  if (success && entry->de_last_error != SM_CODE_FORCE_OK)
+      success = entry->de_last_error == SM_CODE_OK &&
+                entry->de_data_errors < DVR_MAX_DATA_ERRORS;
 
   if ((flags & DVR_FINISHED_REMOVED_SUCCESS) && removed && success)
     return 1;
@@ -653,7 +655,8 @@ dvr_entry_status(dvr_entry_t *de)
     }
     if (dvr_get_filesize(de, 0) == -1 && !de->de_file_removed)
       return N_("File missing");
-    if(de->de_data_errors >= DVR_MAX_DATA_ERRORS) /* user configurable threshold? */
+    if(de->de_last_error != SM_CODE_FORCE_OK &&
+       de->de_data_errors >= DVR_MAX_DATA_ERRORS) /* user configurable threshold? */
       return N_("Too many data errors");
     if(de->de_last_error)
       return streaming_code2txt(de->de_last_error);
@@ -3770,10 +3773,11 @@ dvr_entry_set_rerecord(dvr_entry_t *de, int cmd)
  *
  */
 void
-dvr_entry_move(dvr_entry_t *de, int failed)
+dvr_entry_move(dvr_entry_t *de, int to_failed)
 {
   if(de->de_sched_state == DVR_COMPLETED)
-    if (dvr_entry_completed(de, failed ? SM_CODE_USER_REQUEST : SM_CODE_OK))
+    if (dvr_entry_completed(de, to_failed ? SM_CODE_USER_REQUEST :
+                                            SM_CODE_FORCE_OK))
       idnode_changed(&de->de_id);
 }
 
index 1db4cd1e8d101bc0d6b188d298a6f8f67be99b14..69a0326947ff831ad66a06a6b451e541848a4fa5 100644 (file)
@@ -1026,7 +1026,8 @@ htsp_build_dvrentry(htsp_connection_t *htsp, dvr_entry_t *de, const char *method
     fsize = dvr_get_filesize(de, DVR_FILESIZE_UPDATE);
     if (fsize < 0)
       error = "File missing";
-    else if(de->de_last_error)
+    else if(de->de_last_error != SM_CODE_OK &&
+            de->de_last_error != SM_CODE_FORCE_OK)
       error = streaming_code2txt(de->de_last_error);
     break;
   case DVR_MISSED_TIME:
index afd2d0cf58b5d8e94aa9777aee667744f5ab0dec..fc9e555f289cff27815a899e2193ffd03c521855 100644 (file)
@@ -431,7 +431,9 @@ streaming_code2txt(int code)
   switch(code) {
   case SM_CODE_OK:
     return N_("OK");
-    
+  case SM_CODE_FORCE_OK:
+    return N_("Forced OK");
+
   case SM_CODE_SOURCE_RECONFIGURED:
     return N_("Source reconfigured");
   case SM_CODE_BAD_SOURCE:
index c05f46215b572c58b5b37e45004000d6ce445d3c..d65cac47c7d7f945ddf363ea75d7060485b43d75 100644 (file)
@@ -510,6 +510,8 @@ typedef enum {
 
 #define SM_CODE_UNDEFINED_ERROR           1
 
+#define SM_CODE_FORCE_OK                  10
+
 #define SM_CODE_SOURCE_RECONFIGURED       100
 #define SM_CODE_BAD_SOURCE                101
 #define SM_CODE_SOURCE_DELETED            102