| Written by Matthias Schwarzott <zzam@gentoo.org> |
| |
| |
| GENTOO_USE: !shutdown_rewrite |
| GENTOO_CAP: CAP_SHUTDOWN_SVDRP |
| |
| diff -ru --exclude='*.o' vdr-1.3.36-orig/svdrp.c vdr-1.3.36/svdrp.c |
| --- vdr-1.3.36-orig/svdrp.c 2005-12-29 00:02:26.000000000 +0100 |
| +++ vdr-1.3.36/svdrp.c 2005-12-29 00:18:45.000000000 +0100 |
| @@ -293,6 +293,9 @@ |
| " Updates a timer. Settings must be in the same format as returned\n" |
| " by the LSTT command. If a timer with the same channel, day, start\n" |
| " and stop time does not yet exists, it will be created.", |
| + "DOWN [ <minutes> ]\n" |
| + " Starts an automatic shutdown (with 5 minutes waiting time) in given\n" |
| + " minutes or now if no number was given.", |
| "VOLU [ <number> | + | - | mute ]\n" |
| " Set the audio volume to the given number (which is limited to the range\n" |
| " 0...255). If the special options '+' or '-' are given, the volume will\n" |
| @@ -1342,6 +1345,16 @@ |
| Reply(501, "Missing timer settings"); |
| } |
| |
| +extern time_t LastActivity; |
| +void cSVDRP::CmdDOWN(const char *Option) |
| +{ |
| + if (isnumber(Option)) |
| + LastActivity = time(NULL) - Setup.MinUserInactivity*60 + strtol(Option, NULL, 10)*60; |
| + else |
| + LastActivity = time(NULL) - Setup.MinUserInactivity*60; |
| + Reply(250, "Automatic shutdown triggered"); |
| +} |
| + |
| void cSVDRP::CmdVOLU(const char *Option) |
| { |
| if (*Option) { |
| @@ -1413,6 +1426,7 @@ |
| else if (CMD("STAT")) CmdSTAT(s); |
| else if (CMD("UPDT")) CmdUPDT(s); |
| else if (CMD("VOLU")) CmdVOLU(s); |
| + else if (CMD("DOWN")) CmdDOWN(s); |
| else if (CMD("QUIT")) Close(true); |
| else Reply(500, "Command unrecognized: \"%s\"", Cmd); |
| } |
| diff -ru --exclude='*.o' vdr-1.3.36-orig/svdrp.h vdr-1.3.36/svdrp.h |
| --- vdr-1.3.36-orig/svdrp.h 2005-12-29 00:02:26.000000000 +0100 |
| +++ vdr-1.3.36/svdrp.h 2005-12-30 02:28:08.000000000 +0100 |
| @@ -59,6 +59,7 @@ |
| void CmdDELC(const char *Option); |
| void CmdDELR(const char *Option); |
| void CmdDELT(const char *Option); |
| + void CmdDOWN(const char *Option); |
| void CmdEDIT(const char *Option); |
| void CmdGRAB(const char *Option); |
| void CmdHELP(const char *Option); |
| diff -ru --exclude='*.o' vdr-1.3.36-orig/vdr.c vdr-1.3.36/vdr.c |
| --- vdr-1.3.36-orig/vdr.c 2005-12-29 00:02:26.000000000 +0100 |
| +++ vdr-1.3.36/vdr.c 2005-12-29 00:09:49.000000000 +0100 |
| @@ -89,6 +89,8 @@ |
| exit(1); |
| } |
| |
| +time_t LastActivity; |
| + |
| int main(int argc, char *argv[]) |
| { |
| // Save terminal settings: |
| @@ -395,7 +397,7 @@ |
| int PreviousChannel[2] = { 1, 1 }; |
| int PreviousChannelIndex = 0; |
| time_t LastChannelChanged = time(NULL); |
| - time_t LastActivity = 0; |
| + LastActivity = 0; // now being a global variable |
| time_t LastCamMenu = 0; |
| int MaxLatencyTime = 0; |
| bool ForceShutdown = false; |