mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Fixed handling timers in case an event is modified and "phased out" while the timer is recording
This commit is contained in:
parent
4149053935
commit
38d48afad9
4
HISTORY
4
HISTORY
@ -7272,7 +7272,7 @@ Video Disk Recorder Revision History
|
||||
".keep" to prevent a directory from being deleted when it is empty. Currently the
|
||||
only file name that is ignored is ".sort".
|
||||
|
||||
2012-10-15: Version 1.7.32
|
||||
2012-10-16: Version 1.7.32
|
||||
|
||||
- Pressing the Play key during normal live viewing mode now opens the Recordings menu
|
||||
if there is no "last viewed" recording (thanks to Alexander Wenzel).
|
||||
@ -7303,3 +7303,5 @@ Video Disk Recorder Revision History
|
||||
closer).
|
||||
- Fixed a possible memory leak in SI::StructureLoop::getNextAsPointer() (reported by
|
||||
Sundararaj Reel).
|
||||
- Fixed handling timers in case an event is modified and "phased out" while the timer
|
||||
is recording.
|
||||
|
21
timers.c
21
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 2.13 2012/10/13 14:16:22 kls Exp $
|
||||
* $Id: timers.c 2.14 2012/10/16 08:22:39 kls Exp $
|
||||
*/
|
||||
|
||||
#include "timers.h"
|
||||
@ -465,10 +465,11 @@ bool cTimer::Matches(time_t t, bool Directly, int Margin) const
|
||||
startTime = event->StartTime();
|
||||
stopTime = event->EndTime();
|
||||
if (!Margin) { // this is an actual check
|
||||
if (event->Schedule()->PresentSeenWithin(EITPRESENTFOLLOWINGRATE)) // VPS control can only work with up-to-date events...
|
||||
return event->IsRunning(true);
|
||||
else
|
||||
return startTime <= t && t < stopTime; // ...otherwise we fall back to normal timer handling
|
||||
if (event->Schedule()->PresentSeenWithin(EITPRESENTFOLLOWINGRATE)) { // VPS control can only work with up-to-date events...
|
||||
if (event->StartTime() > 0) // checks for "phased out" events
|
||||
return event->IsRunning(true);
|
||||
}
|
||||
return startTime <= t && t < stopTime; // ...otherwise we fall back to normal timer handling
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -549,10 +550,12 @@ void cTimer::SetEventFromSchedule(const cSchedules *Schedules)
|
||||
lastSetEvent = now;
|
||||
const cEvent *Event = NULL;
|
||||
if (HasFlags(tfVps) && Schedule->Events()->First()->Vps()) {
|
||||
if (event && Recording())
|
||||
return; // let the recording end first
|
||||
if (event && (now <= event->EndTime() || Matches(0, true)))
|
||||
return; // stay with the old event until the timer has completely expired
|
||||
if (event && event->StartTime() > 0) { // checks for "phased out" events
|
||||
if (Recording())
|
||||
return; // let the recording end first
|
||||
if (now <= event->EndTime() || Matches(0, true))
|
||||
return; // stay with the old event until the timer has completely expired
|
||||
}
|
||||
// VPS timers only match if their start time exactly matches the event's VPS time:
|
||||
for (const cEvent *e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e)) {
|
||||
if (e->StartTime() && e->RunningStatus() != SI::RunningStatusNotRunning) { // skip outdated events
|
||||
|
Loading…
Reference in New Issue
Block a user