From e77607c9d040736ca65622d790402d2cf115aee4 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 14 Oct 2014 11:52:54 +0200 Subject: [PATCH] DVR timerec: fix the weekdays handling, allow times through midnight, fixes #2372 --- src/dvr/dvr_timerec.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/dvr/dvr_timerec.c b/src/dvr/dvr_timerec.c index c819f37b..4812b9cf 100644 --- a/src/dvr/dvr_timerec.c +++ b/src/dvr/dvr_timerec.c @@ -104,7 +104,7 @@ void dvr_timerec_check(dvr_timerec_entry_t *dte) { dvr_entry_t *de; - time_t start, stop; + time_t start, stop, limit; struct tm tm_start, tm_stop; const char *title; char buf[200]; @@ -114,19 +114,13 @@ dvr_timerec_check(dvr_timerec_entry_t *dte) if(dte->dte_start < 0 || dte->dte_start >= 24*60 || dte->dte_stop < 0 || dte->dte_stop >= 24*60) goto fail; - if(dte->dte_start >= dte->dte_stop) - goto fail; - if(dte->dte_channel == NULL) + if(dte->dte_channel == NULL) goto fail; - if(dte->dte_weekdays != 0x7f) { - localtime_r(&dispatch_clock, &tm_start); - if(!((1 << ((tm_start.tm_wday ?: 7) - 1)) & dte->dte_weekdays)) - goto fail; - } - + limit = dispatch_clock - 600; + start = dvr_timerec_timecorrection(dispatch_clock, dte->dte_start, &tm_start); stop = dvr_timerec_timecorrection(dispatch_clock, dte->dte_stop, &tm_stop); - if (stop < dispatch_clock - 600) { + if (start < limit && stop < limit) { /* next day */ start = dvr_timerec_timecorrection(dispatch_clock + 24*60*60, dte->dte_start, @@ -134,14 +128,18 @@ dvr_timerec_check(dvr_timerec_entry_t *dte) stop = dvr_timerec_timecorrection(dispatch_clock + 24*60*60, dte->dte_stop, &tm_stop); - } else { - start = dvr_timerec_timecorrection(dispatch_clock, dte->dte_start, &tm_start); } /* day boundary correction */ if (start > stop) stop += 24 * 60 * 60; assert(start < stop); + if(dte->dte_weekdays != 0x7f) { + localtime_r(&start, &tm_start); + if(!((1 << ((tm_start.tm_wday ?: 7) - 1)) & dte->dte_weekdays)) + goto fail; + } + /* purge the old entry */ de = dte->dte_spawn; if (de) {