From 02c668a6a9c6cbf4fc1638122be53b7155c900e0 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Tue, 20 Apr 2021 09:50:02 +0200 Subject: [PATCH] EXPIRELATENCY now only applies to VPS timers --- HISTORY | 3 ++- timers.c | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/HISTORY b/HISTORY index a009605f..41ea8673 100644 --- a/HISTORY +++ b/HISTORY @@ -9641,7 +9641,7 @@ Video Disk Recorder Revision History - No longer switching devices for pattern timers (thanks to Helmut Binder). - cTimer::TriggerRespawn() now only acts on local timers. -2021-04-18: +2021-04-19: - When spawning pattern timers, the new function cTimers::GetTimerForEvent() is now used to check whether a matching event already has a local spawned timer. Reason: creating a timer @@ -9660,3 +9660,4 @@ Video Disk Recorder Revision History timer is still recording. - The new functions cTimer::Start/StopTimeEvent() are now used in the LCARS skin to display the start/stop times of timers in the main menu. +- EXPIRELATENCY now only applies to VPS timers. diff --git a/timers.c b/timers.c index fed6d88d..0cd2bf54 100644 --- a/timers.c +++ b/timers.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: timers.c 5.14 2021/04/18 14:56:40 kls Exp $ + * $Id: timers.c 5.15 2021/04/20 09:50:02 kls Exp $ */ #include "timers.h" @@ -693,10 +693,13 @@ eTimerMatch cTimer::Matches(const cEvent *Event, int *Overlap) const bool cTimer::Expired(void) const { - return IsSingleEvent() - && !Recording() - && StopTime() + EXPIRELATENCY <= time(NULL) - && (!HasFlags(tfVps) || !event || !event->Vps() || event->EndTime() + EXPIRELATENCY <= time(NULL)); + if (IsSingleEvent() && !Recording()) { + time_t ExpireTime = StopTimeEvent(); + if (HasFlags(tfVps)) + ExpireTime += EXPIRELATENCY; + return ExpireTime <= time(NULL); + } + return false; } time_t cTimer::StartTime(void) const @@ -776,8 +779,10 @@ bool cTimer::SpawnPatternTimers(const cSchedules *Schedules, cTimers *Timers) // Check all following matching events that would start while the first timer // is still recording: bool UseVps = Timer->HasFlags(tfVps); - time_t Limit = Timer->StopTime() + EXPIRELATENCY; - if (!UseVps) + time_t Limit = Timer->StopTimeEvent(); + if (UseVps) + Limit += EXPIRELATENCY; + else Limit += Setup.MarginStart * 60; for (e = Schedule->Events()->Next(e); e; e = Schedule->Events()->Next(e)) { if (e->StartTime() <= Limit) {