From: Jaroslav Kysela Date: Wed, 20 Sep 2017 07:51:56 +0000 (+0200) Subject: DVR: Add forced flag to allow to move 'data errors' to the finished recordings, fixes... X-Git-Tag: v4.2.4~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da9f14c7962e9d8ac06fa495e291aa321553da4a;p=thirdparty%2Ftvheadend.git DVR: Add forced flag to allow to move 'data errors' to the finished recordings, fixes #4603 --- diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index 685ea9dfc..d4a9ca13e 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -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); diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 0435fecea..fccb8b41b 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -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); } diff --git a/src/htsp_server.c b/src/htsp_server.c index 1db4cd1e8..69a032694 100644 --- a/src/htsp_server.c +++ b/src/htsp_server.c @@ -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: diff --git a/src/streaming.c b/src/streaming.c index afd2d0cf5..fc9e555f2 100644 --- a/src/streaming.c +++ b/src/streaming.c @@ -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: diff --git a/src/tvheadend.h b/src/tvheadend.h index c05f46215..d65cac47c 100644 --- a/src/tvheadend.h +++ b/src/tvheadend.h @@ -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