From: Jaroslav Kysela Date: Thu, 21 May 2015 18:34:43 +0000 (+0200) Subject: DVR: Another state cleanups, fixeds#2866 X-Git-Tag: v4.2.1~2506 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5ec3810aee525bfa39abe77195beabb913f5855c;p=thirdparty%2Ftvheadend.git DVR: Another state cleanups, fixeds#2866 --- diff --git a/src/dvr/dvr.h b/src/dvr/dvr.h index 9a4f0d0b3..41e320fe1 100644 --- a/src/dvr/dvr.h +++ b/src/dvr/dvr.h @@ -413,8 +413,6 @@ void dvr_entry_destroy_by_config(dvr_config_t *cfg, int delconf); int dvr_entry_set_state(dvr_entry_t *de, dvr_entry_sched_state_t state, dvr_rs_state_t rec_state, int error_code); -void dvr_entry_completed(dvr_entry_t *de, int error_code); - const char *dvr_entry_status(dvr_entry_t *de); const char *dvr_entry_schedstatus(dvr_entry_t *de); diff --git a/src/dvr/dvr_db.c b/src/dvr/dvr_db.c index e9595814f..95c011f71 100644 --- a/src/dvr/dvr_db.c +++ b/src/dvr/dvr_db.c @@ -226,16 +226,47 @@ dvr_dbus_timer_cb( void *aux ) } #endif +/* + * + */ +static void +dvr_entry_retention_timer(dvr_entry_t *de) +{ + gtimer_arm_abs(&de->de_timer, dvr_timer_expire, de, + de->de_stop + dvr_entry_get_retention(de) * 86400); +} + +/* + * No state + */ +static void +dvr_entry_nostate(dvr_entry_t *de, int error_code) +{ + dvr_entry_set_state(de, DVR_NOSTATE, DVR_RS_PENDING, de->de_last_error); + dvr_entry_retention_timer(de); +} + +/* + * Missed time + */ +static void +dvr_entry_missed_time(dvr_entry_t *de, int error_code) +{ + dvr_entry_set_state(de, DVR_MISSED_TIME, DVR_RS_PENDING, error_code); + dvr_entry_retention_timer(de); +} + /* * Completed */ -void +static void dvr_entry_completed(dvr_entry_t *de, int error_code) { dvr_entry_set_state(de, DVR_COMPLETED, DVR_RS_PENDING, error_code); #if ENABLE_INOTIFY dvr_inotify_add(de); #endif + dvr_entry_retention_timer(de); } /** @@ -342,11 +373,9 @@ dvr_entry_set_timer(dvr_entry_t *de) if(now >= stop || de->de_dont_reschedule) { if(htsmsg_is_empty(de->de_files)) - dvr_entry_set_state(de, DVR_MISSED_TIME, DVR_RS_PENDING, de->de_last_error); + dvr_entry_missed_time(de, de->de_last_error); else dvr_entry_completed(de, de->de_last_error); - gtimer_arm_abs(&de->de_timer, dvr_timer_expire, de, - de->de_stop + dvr_entry_get_retention(de) * 86400); } else if (de->de_sched_state == DVR_RECORDING) { @@ -364,7 +393,7 @@ dvr_entry_set_timer(dvr_entry_t *de) } else { - dvr_entry_set_state(de, DVR_NOSTATE, DVR_RS_PENDING, de->de_last_error); + dvr_entry_nostate(de, de->de_last_error); } } @@ -1124,7 +1153,7 @@ dvr_stop_recording(dvr_entry_t *de, int stopcode, int saveconf) if (rec_state == DVR_RS_PENDING || rec_state == DVR_RS_WAIT_PROGRAM_START || htsmsg_is_empty(de->de_files)) - dvr_entry_set_state(de, DVR_MISSED_TIME, DVR_RS_PENDING, stopcode); + dvr_entry_missed_time(de, stopcode); else dvr_entry_completed(de, stopcode); @@ -1176,8 +1205,10 @@ dvr_timer_start_recording(void *aux) tvhlog(LOG_INFO, "dvr", "\"%s\" on \"%s\" recorder starting", lang_str_get(de->de_title, NULL), DVR_CH_NAME(de)); - if (dvr_rec_subscribe(de)) + if (dvr_rec_subscribe(de)) { dvr_entry_completed(de, SM_CODE_BAD_SOURCE); + return; + } gtimer_arm_abs(&de->de_timer, dvr_timer_stop_recording, de, dvr_entry_get_stop_time(de)); diff --git a/src/dvr/dvr_rec.c b/src/dvr/dvr_rec.c index dc0713e54..727b09c0e 100644 --- a/src/dvr/dvr_rec.c +++ b/src/dvr/dvr_rec.c @@ -86,7 +86,8 @@ dvr_rec_subscribe(dvr_entry_t *de) tcp_get_ip_from_str(de->de_creator, &sa) != NULL) aa = access_get_by_addr(&sa); else { - tvherror("dvr", "unable to find access"); + tvherror("dvr", "unable to find access (owner '%s', creator '%s')", + de->de_owner, de->de_creator); return -1; }