]> 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:51:56 +0000 (09:51 +0200)
src/dvr/dvr.h
src/dvr/dvr_db.c
src/htsp_server.c
src/streaming.c
src/tvheadend.h

index 3ebc6db7df5e5f3827949898c6e86927d3fdb151..925b023a409f638e6bab7b2a392a9954bea6c8bc 100644 (file)
@@ -593,7 +593,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 5b474b93f423d806e8511bcf673cfd319db3dc60..012da9fd2730cc88902b13f4c4f36e68f01100cb 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);
@@ -3769,10 +3772,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 16b18544d6eaa1fde595bfdad70f5c543193112b..ea3bc7ba72e08141bba4b7e8846c9d8018c0ed0a 100644 (file)
@@ -1035,7 +1035,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 38a0f1aea51f5ed1aaf910df373999102817139c..7dc547488a7b22195c7e8a6ff46fe3f7ab15cab6 100644 (file)
@@ -431,6 +431,8 @@ 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");
index 673dd1ea492bc8549739874160729f4dd1889f54..6e379221f741d83680c4f34106bbf39d94f326ca 100644 (file)
@@ -528,6 +528,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