Does the back key not really stop the replay?
Commit Message
On 06.09.2013 21:55, Thomas Maass wrote:
> ...
> When pressing the back key during replay, the replay is not really stopped
> immediately. It has another behaviour than pressing stop or blue.
> When pressing back, the replay stops, and I get back to the menu. But the
> recording seems to be still open.
That's because when pressing kBack, the cReplayControl::ProcessKey()
returns osRecordings
case kBack: if (Setup.DelTimeshiftRec) {
cRecordControl* rc = cRecordControls::GetRecordControl(fileName);
return rc && rc->InstantId() ? osEnd : osRecordings;
}
return osRecordings;
which, in turn, makes the main loop in vdr.c call cControl::Shutdown():
case osRecordings:
DELETE_MENU;
cControl::Shutdown();
Menu = new cMenuMain(osRecordings);
break;
> I derived the cReplayControl class in my plugin, to add the archive-hdd
> functions.
> Before play, the archive-hdd gets mounted, then the videofiles are
> symlinked to
> the recordingdir under /video. After stopping the replay, the symlinks
> should be
> removed again, and the archive-hdd should be unmounted.
> I did not find a better place to do the unlinking and unmounting, than the
> destructor of my class cMyReplayControl. This works only, when stopping the
> replay with stop or blue. When stopping with back, I get a "busy" while
> unmounting.
> And my derived class only implements my own destructor, nothing else.
>
> Klaus, can you check the exact behaviour when pressing back during replay?
> I cannot see kBack in cReplayControl::ProcessKey.
But it *is* there - see above.
Since kBlue and kBack are both supposed to end replay, and the only
difference is that kBack shall open the Recordings menu, I see no reason
why the code should actually be different. What is done in case kBack is
also done in cReplayControl::Stop(), so I guess the following change should
make it behave as you expect:
Klaus
@@ -4990,10 +4990,8 @@
else
Show();
break;
- case kBack: if (Setup.DelTimeshiftRec) {
- cRecordControl* rc = cRecordControls::GetRecordControl(fileName);
- return rc && rc->InstantId() ? osEnd : osRecordings;
- }
+ case kBack: Hide();
+ Stop();
return osRecordings;
default: return osUnknown;
}