mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Calling the '-r' program after editing, too
This commit is contained in:
parent
e1f7348922
commit
f412897373
42
INSTALL
42
INSTALL
@ -162,16 +162,44 @@ Executing commands before and after a recording:
|
||||
------------------------------------------------
|
||||
|
||||
You can use the '-r' option to define a program or script that gets called
|
||||
before and after a recording is performed.
|
||||
before and after a recording is performed, and after an editing process
|
||||
has finished.
|
||||
|
||||
The program will be called with one integer parameter that is "1" if this
|
||||
is *before* the recording, and "0" if this is *after* the recording.
|
||||
The program will be called with two string parameters. The first parameter
|
||||
is one of
|
||||
|
||||
before if this is *before* a recording starts
|
||||
after if this is *after* a recording has finished
|
||||
edited if this is after a recording has been *edited*
|
||||
|
||||
and the second parameter contains the full name of the recording's
|
||||
directory (which may not yet exists at that moment in the "before" case).
|
||||
In the "edited" case it will be the name of the edited version.
|
||||
|
||||
Within this program you can do anything you would like to do before and/or
|
||||
after a recording. However, the program must return as soon as possible,
|
||||
because otherwise it will block further execution of VDR. Be expecially careful
|
||||
to make sure the program returns before the watchdog timeout you may have set
|
||||
up with the '-w' option!
|
||||
after a recording or after an editing process. However, the program must return
|
||||
as soon as possible, because otherwise it will block further execution of VDR.
|
||||
Be especially careful to make sure the program returns before the watchdog
|
||||
timeout you may have set up with the '-w' option! If the operation you want to
|
||||
perform will take longer, you will have to run it as a background job.
|
||||
|
||||
An example script for use with the '-r' option could look like this:
|
||||
|
||||
#!/bin/sh
|
||||
case "$1" in
|
||||
before)
|
||||
echo "Before recording $2"
|
||||
;;
|
||||
after)
|
||||
echo "After recording $2"
|
||||
;;
|
||||
edited)
|
||||
echo "Edited recording $2"
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: unknown state: $1"
|
||||
;;
|
||||
esac
|
||||
|
||||
Command line options:
|
||||
---------------------
|
||||
|
13
dvbapi.c
13
dvbapi.c
@ -7,7 +7,7 @@
|
||||
* DVD support initially written by Andreas Schultz <aschultz@warp10.net>
|
||||
* based on dvdplayer-0.5 by Matjaz Thaler <matjaz.thaler@guest.arnes.si>
|
||||
*
|
||||
* $Id: dvbapi.c 1.128 2001/09/22 13:39:56 kls Exp $
|
||||
* $Id: dvbapi.c 1.129 2001/09/23 13:44:27 kls Exp $
|
||||
*/
|
||||
|
||||
//#define DVDDEBUG 1
|
||||
@ -2406,16 +2406,18 @@ void cCuttingBuffer::Action(void)
|
||||
|
||||
// --- cVideoCutter ----------------------------------------------------------
|
||||
|
||||
char *cVideoCutter::editedVersionName = NULL;
|
||||
cCuttingBuffer *cVideoCutter::cuttingBuffer = NULL;
|
||||
|
||||
bool cVideoCutter::Start(const char *FileName)
|
||||
{
|
||||
if (!cuttingBuffer) {
|
||||
cRecording Recording(FileName);
|
||||
const char *EditedVersionName = Recording.PrefixFileName('%');
|
||||
if (EditedVersionName && RemoveVideoFile(EditedVersionName) && MakeDirs(EditedVersionName, true)) {
|
||||
const char *evn = Recording.PrefixFileName('%');
|
||||
if (evn && RemoveVideoFile(evn) && MakeDirs(evn, true)) {
|
||||
editedVersionName = strdup(evn);
|
||||
Recording.WriteSummary();
|
||||
cuttingBuffer = new cCuttingBuffer(FileName, EditedVersionName);
|
||||
cuttingBuffer = new cCuttingBuffer(FileName, editedVersionName);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -2434,6 +2436,9 @@ bool cVideoCutter::Active(void)
|
||||
if (cuttingBuffer->Active())
|
||||
return true;
|
||||
Stop();
|
||||
cRecordingUserCommand::InvokeCommand(RUC_EDITEDRECORDING, editedVersionName);
|
||||
delete editedVersionName;
|
||||
editedVersionName = NULL;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
3
dvbapi.h
3
dvbapi.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: dvbapi.h 1.52 2001/09/22 13:40:30 kls Exp $
|
||||
* $Id: dvbapi.h 1.53 2001/09/23 11:01:46 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __DVBAPI_H
|
||||
@ -73,6 +73,7 @@ class cCuttingBuffer;
|
||||
|
||||
class cVideoCutter {
|
||||
private:
|
||||
static char *editedVersionName;
|
||||
static cCuttingBuffer *cuttingBuffer;
|
||||
public:
|
||||
static bool Start(const char *FileName);
|
||||
|
24
menu.c
24
menu.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.c 1.126 2001/09/22 14:17:27 kls Exp $
|
||||
* $Id: menu.c 1.127 2001/09/23 10:58:48 kls Exp $
|
||||
*/
|
||||
|
||||
#include "menu.h"
|
||||
@ -2104,12 +2104,11 @@ eOSState cDisplayChannel::ProcessKey(eKeys Key)
|
||||
|
||||
// --- cRecordControl --------------------------------------------------------
|
||||
|
||||
const char *cRecordControl::userCommand = NULL;
|
||||
|
||||
cRecordControl::cRecordControl(cDvbApi *DvbApi, cTimer *Timer)
|
||||
{
|
||||
eventInfo = NULL;
|
||||
instantId = NULL;
|
||||
fileName = NULL;
|
||||
dvbApi = DvbApi;
|
||||
if (!dvbApi) dvbApi = cDvbApi::PrimaryDvbApi;//XXX
|
||||
timer = Timer;
|
||||
@ -2130,8 +2129,9 @@ cRecordControl::cRecordControl(cDvbApi *DvbApi, cTimer *Timer)
|
||||
Summary = eventInfo->GetExtendedDescription();
|
||||
}
|
||||
cRecording Recording(timer, Subtitle, Summary);
|
||||
InvokeUserCommand(true);
|
||||
if (dvbApi->StartRecord(Recording.FileName(), Channels.GetByNumber(timer->channel)->ca, timer->priority))
|
||||
fileName = strdup(Recording.FileName());
|
||||
cRecordingUserCommand::InvokeCommand(RUC_BEFORERECORDING, fileName);
|
||||
if (dvbApi->StartRecord(fileName, Channels.GetByNumber(timer->channel)->ca, timer->priority))
|
||||
Recording.WriteSummary();
|
||||
Interface->DisplayRecording(dvbApi->CardIndex(), true);
|
||||
}
|
||||
@ -2143,6 +2143,7 @@ cRecordControl::~cRecordControl()
|
||||
{
|
||||
Stop(true);
|
||||
delete instantId;
|
||||
delete fileName;
|
||||
}
|
||||
|
||||
bool cRecordControl::GetEventInfo(void)
|
||||
@ -2173,17 +2174,6 @@ bool cRecordControl::GetEventInfo(void)
|
||||
return false;
|
||||
}
|
||||
|
||||
void cRecordControl::InvokeUserCommand(bool Before)
|
||||
{
|
||||
if (userCommand) {
|
||||
char *cmd;
|
||||
asprintf(&cmd, "%s %d", userCommand, Before);
|
||||
isyslog(LOG_INFO, "executing '%s'", cmd);
|
||||
system(cmd);
|
||||
delete cmd;
|
||||
}
|
||||
}
|
||||
|
||||
void cRecordControl::Stop(bool KeepInstant)
|
||||
{
|
||||
if (timer) {
|
||||
@ -2198,7 +2188,7 @@ void cRecordControl::Stop(bool KeepInstant)
|
||||
}
|
||||
timer = NULL;
|
||||
Interface->DisplayRecording(dvbApi->CardIndex(), false);
|
||||
InvokeUserCommand(false);
|
||||
cRecordingUserCommand::InvokeCommand(RUC_AFTERRECORDING, fileName);
|
||||
}
|
||||
}
|
||||
|
||||
|
6
menu.h
6
menu.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: menu.h 1.29 2001/09/22 14:02:37 kls Exp $
|
||||
* $Id: menu.h 1.30 2001/09/23 10:57:33 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef _MENU_H
|
||||
@ -71,17 +71,15 @@ public:
|
||||
|
||||
class cRecordControl {
|
||||
private:
|
||||
static const char *userCommand;
|
||||
cDvbApi *dvbApi;
|
||||
cTimer *timer;
|
||||
const cEventInfo *eventInfo;
|
||||
char *instantId;
|
||||
char *fileName;
|
||||
bool GetEventInfo(void);
|
||||
void InvokeUserCommand(bool Before);
|
||||
public:
|
||||
cRecordControl(cDvbApi *DvbApi, cTimer *Timer = NULL);
|
||||
virtual ~cRecordControl();
|
||||
static void SetUserCommand(const char *UserCommand) { userCommand = UserCommand; }
|
||||
bool Process(time_t t);
|
||||
bool Uses(cDvbApi *DvbApi) { return DvbApi == dvbApi; }
|
||||
void Stop(bool KeepInstant = false);
|
||||
|
16
recording.c
16
recording.c
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: recording.c 1.36 2001/09/02 15:09:28 kls Exp $
|
||||
* $Id: recording.c 1.37 2001/09/23 13:43:29 kls Exp $
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
@ -513,3 +513,17 @@ cMark *cMarks::GetNext(int Position)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// --- cRecordingUserCommand -------------------------------------------------
|
||||
|
||||
const char *cRecordingUserCommand::command = NULL;
|
||||
|
||||
void cRecordingUserCommand::InvokeCommand(const char *State, const char *RecordingFileName)
|
||||
{
|
||||
if (command) {
|
||||
char *cmd;
|
||||
asprintf(&cmd, "%s %s '%s'", command, State, RecordingFileName);
|
||||
isyslog(LOG_INFO, "executing '%s'", cmd);
|
||||
system(cmd);
|
||||
delete cmd;
|
||||
}
|
||||
}
|
||||
|
14
recording.h
14
recording.h
@ -4,7 +4,7 @@
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: recording.h 1.16 2001/09/02 11:35:56 kls Exp $
|
||||
* $Id: recording.h 1.17 2001/09/23 13:43:58 kls Exp $
|
||||
*/
|
||||
|
||||
#ifndef __RECORDING_H
|
||||
@ -83,4 +83,16 @@ public:
|
||||
cMark *GetNext(int Position);
|
||||
};
|
||||
|
||||
#define RUC_BEFORERECORDING "before"
|
||||
#define RUC_AFTERRECORDING "after"
|
||||
#define RUC_EDITEDRECORDING "edited"
|
||||
|
||||
class cRecordingUserCommand {
|
||||
private:
|
||||
static const char *command;
|
||||
public:
|
||||
static void SetCommand(const char *Command) { command = Command; }
|
||||
static void InvokeCommand(const char *State, const char *RecordingFileName);
|
||||
};
|
||||
|
||||
#endif //__RECORDING_H
|
||||
|
4
vdr.c
4
vdr.c
@ -22,7 +22,7 @@
|
||||
*
|
||||
* The project's page is at http://www.cadsoft.de/people/kls/vdr
|
||||
*
|
||||
* $Id: vdr.c 1.77 2001/09/23 10:11:07 kls Exp $
|
||||
* $Id: vdr.c 1.78 2001/09/23 10:59:29 kls Exp $
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
@ -182,7 +182,7 @@ int main(int argc, char *argv[])
|
||||
return 2;
|
||||
}
|
||||
break;
|
||||
case 'r': cRecordControl::SetUserCommand(optarg);
|
||||
case 'r': cRecordingUserCommand::SetCommand(optarg);
|
||||
break;
|
||||
case 's': Shutdown = optarg;
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user