Hello,
I hope it's OK to post this kind of things (it's my first post here).
First I thought about a plugin, which handles all the shutdown-questions, which are spread around in various shutdown-scripts and extensions. ... but a (normal) plugin is not able to prevent vdr from shutdown.
Patching vdr is one point, but on the other side I read a statement from LinVDR, that they won't use patched VDR (which is quite ok from my point of view).
As I'm a fan of LinVDR, I looked for a way of doing it right. AFAIK there are 2 possibilities: 1. change the interface of plugin- and pluginmanager-class 2. add a new mode of operation to vdr.
I think the first point was already discussed in the past, so I looked on how to solve the second. The vdr could distinguish between LiveTV (usage as settop-box) and recording-mode (usage as a video-recorder). In settop-box-mode the user has to care about power-on and power-off - in video-recorder-mode it's up to the vdr to care about power-state.
The state could be implemented this way (diff -Naur vdr.org.c vdr.c): * * * * * * * start of diff * * * * * * --- vdr.org.c 2006-03-02 08:15:41.052766272 +0100 +++ vdr.c 2006-03-02 08:22:40.933934632 +0100 @@ -176,6 +176,7 @@ bool DisplayHelp = false; bool DisplayVersion = false; bool DaemonMode = false; + bool LiveTvMode = false; int SysLogTarget = LOG_USER; bool MuteAudio = false; int WatchdogTimeout = DEFAULTWATCHDOG; @@ -930,6 +931,10 @@ Skins.Message(mtError, tr("Can't shutdown - option '-s' not given!")); break; } + if (LiveTvMode) { + LiveTvMode = false; + break; + } if (cRecordControls::Active()) { if (Interface->Confirm(tr("Recording - shut down anyway?"))) ForceShutdown = true; @@ -1047,7 +1052,7 @@ Skins.Message(mtInfo, tr("Editing process finished")); } } - if (!Interact && ((!cRecordControls::Active() && !cCutter::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) { + if (!LiveTvMode && !Interact && ((!cRecordControls::Active() && !cCutter::Active() && (!Interface->HasSVDRPConnection() || UserShutdown)) || ForceShutdown)) { time_t Now = time(NULL); if (Now - LastActivity > ACTIVITYTIMEOUT) { // Shutdown: @@ -1060,6 +1065,7 @@ // Apparently the user started VDR manually dsyslog("assuming manual start of VDR"); LastActivity = Now; + LiveTvMode = true; continue; // don't run into the actual shutdown procedure below } else * * * * * * * end of diff * * * * * *
To suport plugins changing the operating mode, the var LiveTvMode could be made static with provided setter and getter. So the plugins could change the mode and the user is stil able to overwrite the mode and shutdown the vdr immediatelly.
Having a toggle entry in the OSD-menu, the user could also switch to LiveTvMode in case that the vdr has been started for a recording event.
Please let me know, what you (especially Klaus) are think about this suggestion.
Kind regards
geronimo