mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Improved handling VPS timers to better react to EPG changes during an ongoing recording
This commit is contained in:
parent
c6796ac6df
commit
af3cb1c9c3
3
HISTORY
3
HISTORY
@ -9162,7 +9162,7 @@ Video Disk Recorder Revision History
|
|||||||
a subdirectory.
|
a subdirectory.
|
||||||
- SVDRP peering can now be limited to the default SVDRP host (see MANUAL for details).
|
- SVDRP peering can now be limited to the default SVDRP host (see MANUAL for details).
|
||||||
|
|
||||||
2018-03-09: Version 2.3.9
|
2018-03-11: Version 2.3.9
|
||||||
|
|
||||||
- Updated the Italian OSD texts (thanks to Diego Pierotto).
|
- Updated the Italian OSD texts (thanks to Diego Pierotto).
|
||||||
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
- Updated the Finnish OSD texts (thanks to Rolf Ahrenberg).
|
||||||
@ -9306,3 +9306,4 @@ Video Disk Recorder Revision History
|
|||||||
- Removed sending the SVDRP command UPDR to peer VDRs whenever a change is made to the
|
- Removed sending the SVDRP command UPDR to peer VDRs whenever a change is made to the
|
||||||
recordings in the video directory (which was introduced in version 2.3.8), because it
|
recordings in the video directory (which was introduced in version 2.3.8), because it
|
||||||
triggered re-reading the video directory too fast.
|
triggered re-reading the video directory too fast.
|
||||||
|
- Improved handling VPS timers to better react to EPG changes during an ongoing recording.
|
||||||
|
@ -200,6 +200,7 @@ Timers:
|
|||||||
The old version of cSkinDisplayMenu::SetItemEvent() (without the TimerActive
|
The old version of cSkinDisplayMenu::SetItemEvent() (without the TimerActive
|
||||||
parameter) is still there for backwards compatibility. It may be removed in a future
|
parameter) is still there for backwards compatibility. It may be removed in a future
|
||||||
version, so plugin authors should switch to the new one.
|
version, so plugin authors should switch to the new one.
|
||||||
|
- Improved handling VPS timers to better react to EPG changes during an ongoing recording.
|
||||||
|
|
||||||
Plugins:
|
Plugins:
|
||||||
|
|
||||||
|
28
timers.c
28
timers.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: timers.c 4.16 2018/02/28 10:05:52 kls Exp $
|
* $Id: timers.c 4.17 2018/03/11 13:03:23 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "timers.h"
|
#include "timers.h"
|
||||||
@ -485,9 +485,16 @@ eTimerMatch cTimer::Matches(const cEvent *Event, int *Overlap) const
|
|||||||
bool UseVps = HasFlags(tfVps) && Event->Vps();
|
bool UseVps = HasFlags(tfVps) && Event->Vps();
|
||||||
Matches(UseVps ? Event->Vps() : Event->StartTime(), true);
|
Matches(UseVps ? Event->Vps() : Event->StartTime(), true);
|
||||||
int overlap = 0;
|
int overlap = 0;
|
||||||
if (UseVps)
|
if (UseVps) {
|
||||||
overlap = (startTime == Event->Vps()) ? FULLMATCH + (Event->IsRunning() ? 200 : 100) : 0;
|
if (startTime == Event->Vps()) {
|
||||||
if (!overlap) {
|
overlap = FULLMATCH;
|
||||||
|
if (Event->IsRunning())
|
||||||
|
overlap += 200;
|
||||||
|
else if (Event->RunningStatus() != SI::RunningStatusNotRunning)
|
||||||
|
overlap += 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
if (startTime <= Event->StartTime() && Event->EndTime() <= stopTime)
|
if (startTime <= Event->StartTime() && Event->EndTime() <= stopTime)
|
||||||
overlap = FULLMATCH;
|
overlap = FULLMATCH;
|
||||||
else if (stopTime <= Event->StartTime() || Event->EndTime() <= startTime)
|
else if (stopTime <= Event->StartTime() || Event->EndTime() <= startTime)
|
||||||
@ -498,8 +505,6 @@ eTimerMatch cTimer::Matches(const cEvent *Event, int *Overlap) const
|
|||||||
startTime = stopTime = 0;
|
startTime = stopTime = 0;
|
||||||
if (Overlap)
|
if (Overlap)
|
||||||
*Overlap = overlap;
|
*Overlap = overlap;
|
||||||
if (UseVps)
|
|
||||||
return overlap > FULLMATCH ? tmFull : tmNone;
|
|
||||||
return overlap >= FULLMATCH ? tmFull : overlap > 0 ? tmPartial : tmNone;
|
return overlap >= FULLMATCH ? tmFull : overlap > 0 ? tmPartial : tmNone;
|
||||||
}
|
}
|
||||||
return tmNone;
|
return tmNone;
|
||||||
@ -509,7 +514,10 @@ eTimerMatch cTimer::Matches(const cEvent *Event, int *Overlap) const
|
|||||||
|
|
||||||
bool cTimer::Expired(void) const
|
bool cTimer::Expired(void) const
|
||||||
{
|
{
|
||||||
return IsSingleEvent() && !Recording() && StopTime() + EXPIRELATENCY <= time(NULL) && (!HasFlags(tfVps) || !event || !event->Vps());
|
return IsSingleEvent()
|
||||||
|
&& !Recording()
|
||||||
|
&& StopTime() + EXPIRELATENCY <= time(NULL)
|
||||||
|
&& (!HasFlags(tfVps) || !event || !event->Vps() || event->EndTime() + EXPIRELATENCY <= time(NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
time_t cTimer::StartTime(void) const
|
time_t cTimer::StartTime(void) const
|
||||||
@ -543,11 +551,11 @@ bool cTimer::SetEventFromSchedule(const cSchedules *Schedules)
|
|||||||
if (HasFlags(tfVps) && Schedule->Events()->First()->Vps()) {
|
if (HasFlags(tfVps) && Schedule->Events()->First()->Vps()) {
|
||||||
// VPS timers only match if their start time exactly matches the event's VPS time:
|
// 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)) {
|
for (const cEvent *e = Schedule->Events()->First(); e; e = Schedule->Events()->Next(e)) {
|
||||||
if (e->StartTime() && e->RunningStatus() != SI::RunningStatusNotRunning) { // skip outdated events
|
if (e->StartTime()) {
|
||||||
int overlap = 0;
|
int overlap = 0;
|
||||||
Matches(e, &overlap);
|
if (Matches(e, &overlap) == tmFull) {
|
||||||
if (overlap > FULLMATCH) {
|
|
||||||
Event = e;
|
Event = e;
|
||||||
|
if (overlap > FULLMATCH)
|
||||||
break; // take the first matching event
|
break; // take the first matching event
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user