From b65a3a4ebd4162c2cec9d9a941fafa801abb1b99 Mon Sep 17 00:00:00 2001 From: Adam Sutton Date: Wed, 19 Sep 2012 14:49:23 +0100 Subject: [PATCH] Ensure that recordings that never start are given a fault state. Fixes #1094. --- src/dvr/dvr_db.c | 10 ++++++---- src/dvr/dvr_rec.c | 22 ++++++++++++++-------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index 3b8a10fc..62bdfa94 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -755,14 +755,17 @@ dvr_stop_recording(dvr_entry_t *de, int stopcode) { dvr_config_t *cfg = dvr_config_find_by_name_default(de->de_config_name); - dvr_rec_unsubscribe(de, stopcode); + if (de->de_rec_state == DVR_RS_PENDING || de->de_rec_state == DVR_RS_WAIT_PROGRAM_START) + de->de_sched_state = DVR_MISSED_TIME; + else + de->de_sched_state = DVR_COMPLETED; - de->de_sched_state = DVR_COMPLETED; + dvr_rec_unsubscribe(de, stopcode); tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\": " "End of program: %s", lang_str_get(de->de_title, NULL), de->de_channel->ch_name, - streaming_code2txt(de->de_last_error) ?: "Program ended"); + dvr_entry_status(de)); dvr_entry_save(de); htsp_dvr_entry_update(de); @@ -773,7 +776,6 @@ dvr_stop_recording(dvr_entry_t *de, int stopcode) } - /** * */ diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index 8e492859..1dd0d57a 100755 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -298,13 +298,19 @@ dvr_rec_fatal_error(dvr_entry_t *de, const char *fmt, ...) static void dvr_rec_set_state(dvr_entry_t *de, dvr_rs_state_t newstate, int error) { - if(de->de_rec_state == newstate) - return; - de->de_rec_state = newstate; - de->de_last_error = error; - if(error) - de->de_errors++; - dvr_entry_notify(de); + int notify = 0; + if(de->de_rec_state != newstate) { + de->de_rec_state = newstate; + notify = 1; + } + if(de->de_last_error != error) { + de->de_last_error = error; + notify = 1; + if(error) + de->de_errors++; + } + if (notify) + dvr_entry_notify(de); } /** @@ -501,7 +507,7 @@ dvr_thread(void *aux) case SMT_NOSTART: if(de->de_last_error != sm->sm_code) { - dvr_rec_set_state(de, DVR_RS_ERROR, sm->sm_code); + dvr_rec_set_state(de, DVR_RS_PENDING, sm->sm_code); tvhlog(LOG_ERR, "dvr", "Recording unable to start: \"%s\": %s",