From: Jaroslav Kysela Date: Tue, 14 Oct 2014 09:52:54 +0000 (+0200) Subject: DVR timerec: fix the weekdays handling, allow times through midnight, fixes #2372 X-Git-Tag: v4.1~1038 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e77607c9d040736ca65622d790402d2cf115aee4;p=thirdparty%2Ftvheadend.git DVR timerec: fix the weekdays handling, allow times through midnight, fixes #2372 --- diff --git a/src/dvr/dvr_timerec.c b/src/dvr/dvr_timerec.c index c819f37b9..4812b9cf0 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) + if(dte->dte_channel == NULL) goto fail; - 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) {