[Bug] VPS Recording not starting as long as another recording (with lower priority) is running

Message ID AANLkTik-0mUEF4-wpPWX1dav2fmoHFPYUaoVRMOkmoCZ@mail.gmail.com
State New
Headers

Commit Message

Markus Ehrnsperger March 14, 2011, 10:05 p.m. UTC
  2011/3/14 Markus Ehrnsperger <markus.ehrnsperger@googlemail.com>:
>>> Hi,
>>>
>>> I have a suggestion: Treat the VPS margin the same way as the time a
>>> non VPS timer will start before the EPG event starts. Example:
>>>
>>> Tagesschau, starts at 8:00 PM.
>>>
>>> If I don't use VPS, I will create a timer at 7:58 PM (in case the news
>>> start slightly before 8)
>>> If I use VPS, I will create a timer at 8:00 PM. The VPS margin is 2
>>> minutes (in this example).
>>>
>>>
>>> If I don't use VPS, another recording (with lower priority) will be
>>> stopped at 7.58 PM. The timer will start recording.
>>> If I use VPS, another recording (with lower priority) will be stopped
>>> at 7.58 PM (my suggestion). The next two minutes, the device will be
>>> used for VPS checking only. The recording will start at 8:00 PM.
>>>
>>> Of course, this might look like wasting a device for two minutes only
>>> to check the VPS. On the other side, not using VPS is even worse: I
>>> will waste the device and disk space. So, using VPS is still better.
>>> And, the timer with lower priority has lower priority by purpose. So,
>>> I want it to be interrupted.
>>>
>>> Summary:
>>> I suggest to use GetDevice as soon as the timer is within the VPS margin.
>>> This has the following advantages:
>>> - Easy to implement
>>> - Easy to understand for users, and expected behavior: The timer with
>>> higher priority has higher priority :) .
>>> - No rocket science
>>>
>>> I admit, it has some disadvantages. But, from my point of view, these
>>> are minor compared to the advantages. At the moment, I can use VPS
>>> only with care as I might miss a recording with very high priority.
>>>
>>> Markus
>>
>> Please provide a (tested) patch that implements this.
>>
>> Klaus
>>
> Hi,
>
> I attach a simple patch. I tried it out and it works for me. Any
> comments are very welkome.
>
> - Markus

Second try, this time with the patch attached (hopefully)
  

Patch

diff --git a/vdr.c b/vdr.c
index 34560e7..c47cf90 100644
--- a/vdr.c
+++ b/vdr.c
@@ -891,7 +891,10 @@  int main(int argc, char *argv[])
                         if (!d->Receiving() && d->ProvidesTransponder(Timer->Channel()) && Now - DeviceUsed[d->DeviceNumber()] > TIMERDEVICETIMEOUT)
                            Device = d; // use the actual device as a last resort
                         }
-                     // Switch the device to the transponder:
+                     if (!Device && InVpsMargin && !DeviceAvailable) {
+						 Device = cDevice::GetDevice(Timer->Channel(), Timer->Priority(), false);
+					    }
+						                      // Switch the device to the transponder:
                      if (Device) {
                         if (!Device->IsTunedToTransponder(Timer->Channel())) {
                            if (Device == cDevice::ActualDevice() && !Device->IsPrimaryDevice())