mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Now checking for '.timer' file to determine whether a recording is still active
This commit is contained in:
parent
786245efe5
commit
c8e4921a0a
6
HISTORY
6
HISTORY
@ -9780,7 +9780,7 @@ Video Disk Recorder Revision History
|
|||||||
out by Onur Sentürk).
|
out by Onur Sentürk).
|
||||||
- Official release.
|
- Official release.
|
||||||
|
|
||||||
2022-11-04:
|
2022-11-06:
|
||||||
|
|
||||||
- Added UPDATE-2.6.0, which was missing in the official 2.6.0 release.
|
- Added UPDATE-2.6.0, which was missing in the official 2.6.0 release.
|
||||||
- Fixed unexpected calls of the '-r' script when a recording is interrupted and
|
- Fixed unexpected calls of the '-r' script when a recording is interrupted and
|
||||||
@ -9788,3 +9788,7 @@ Video Disk Recorder Revision History
|
|||||||
- Now dropping capabilities after opening terminal.
|
- Now dropping capabilities after opening terminal.
|
||||||
- Now assuming the lock when removing deleted recordings even if the disk is full
|
- Now assuming the lock when removing deleted recordings even if the disk is full
|
||||||
(reported by Claus Muus).
|
(reported by Claus Muus).
|
||||||
|
- When checking whether a recording is still active, VDR no longer checks whether the
|
||||||
|
index file is being written, but rather checks for the presence of a '.timer' file.
|
||||||
|
The cutter now writes a dummy '.timer' file with timer ID '0' to make this work
|
||||||
|
for recordings that are currently being edited.
|
||||||
|
4
cutter.c
4
cutter.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: cutter.c 4.6 2018/01/18 12:19:31 kls Exp $
|
* $Id: cutter.c 5.1 2022/11/06 11:25:13 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "cutter.h"
|
#include "cutter.h"
|
||||||
@ -677,6 +677,7 @@ bool cCutter::Start(void)
|
|||||||
cRecordingUserCommand::InvokeCommand(RUC_EDITINGRECORDING, editedVersionName, originalVersionName);
|
cRecordingUserCommand::InvokeCommand(RUC_EDITINGRECORDING, editedVersionName, originalVersionName);
|
||||||
if (cVideoDirectory::RemoveVideoFile(editedVersionName) && MakeDirs(editedVersionName, true)) {
|
if (cVideoDirectory::RemoveVideoFile(editedVersionName) && MakeDirs(editedVersionName, true)) {
|
||||||
Recording.WriteInfo(editedVersionName);
|
Recording.WriteInfo(editedVersionName);
|
||||||
|
SetRecordingTimerId(editedVersionName, cString::sprintf("%d@%s", 0, Setup.SVDRPHostName));
|
||||||
cuttingThread = new cCuttingThread(originalVersionName, editedVersionName);
|
cuttingThread = new cCuttingThread(originalVersionName, editedVersionName);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -693,6 +694,7 @@ void cCutter::Stop(void)
|
|||||||
const char *Error = cuttingThread ? cuttingThread->Error() : NULL;
|
const char *Error = cuttingThread ? cuttingThread->Error() : NULL;
|
||||||
delete cuttingThread;
|
delete cuttingThread;
|
||||||
cuttingThread = NULL;
|
cuttingThread = NULL;
|
||||||
|
SetRecordingTimerId(editedVersionName, NULL);
|
||||||
if ((Interrupted || Error) && *editedVersionName) {
|
if ((Interrupted || Error) && *editedVersionName) {
|
||||||
if (Interrupted)
|
if (Interrupted)
|
||||||
isyslog("editing process has been interrupted");
|
isyslog("editing process has been interrupted");
|
||||||
|
14
recording.c
14
recording.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* how to reach the author.
|
||||||
*
|
*
|
||||||
* $Id: recording.c 5.14 2022/01/24 10:44:21 kls Exp $
|
* $Id: recording.c 5.15 2022/11/06 11:26:16 kls Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "recording.h"
|
#include "recording.h"
|
||||||
@ -66,7 +66,6 @@
|
|||||||
#define DISKCHECKDELTA 100 // seconds between checks for free disk space
|
#define DISKCHECKDELTA 100 // seconds between checks for free disk space
|
||||||
#define REMOVELATENCY 10 // seconds to wait until next check after removing a file
|
#define REMOVELATENCY 10 // seconds to wait until next check after removing a file
|
||||||
#define MARKSUPDATEDELTA 10 // seconds between checks for updating editing marks
|
#define MARKSUPDATEDELTA 10 // seconds between checks for updating editing marks
|
||||||
#define MININDEXAGE 3600 // seconds before an index file is considered no longer to be written
|
|
||||||
#define MAXREMOVETIME 10 // seconds after which to return from removing deleted recordings
|
#define MAXREMOVETIME 10 // seconds after which to return from removing deleted recordings
|
||||||
|
|
||||||
#define MAX_LINK_LEVEL 6
|
#define MAX_LINK_LEVEL 6
|
||||||
@ -1351,6 +1350,11 @@ int cRecording::IsInUse(void) const
|
|||||||
return Use;
|
return Use;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool StillRecording(const char *Directory)
|
||||||
|
{
|
||||||
|
return access(AddDirectory(Directory, TIMERRECFILE), F_OK) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
void cRecording::ResetResume(void) const
|
void cRecording::ResetResume(void) const
|
||||||
{
|
{
|
||||||
resume = RESUME_NOT_INITIALIZED;
|
resume = RESUME_NOT_INITIALIZED;
|
||||||
@ -1360,7 +1364,7 @@ int cRecording::NumFrames(void) const
|
|||||||
{
|
{
|
||||||
if (numFrames < 0) {
|
if (numFrames < 0) {
|
||||||
int nf = cIndexFile::GetLength(FileName(), IsPesRecording());
|
int nf = cIndexFile::GetLength(FileName(), IsPesRecording());
|
||||||
if (time(NULL) - LastModifiedTime(cIndexFile::IndexFileName(FileName(), IsPesRecording())) < MININDEXAGE)
|
if (StillRecording(FileName()))
|
||||||
return nf; // check again later for ongoing recordings
|
return nf; // check again later for ongoing recordings
|
||||||
numFrames = nf;
|
numFrames = nf;
|
||||||
}
|
}
|
||||||
@ -1379,7 +1383,7 @@ int cRecording::FileSizeMB(void) const
|
|||||||
{
|
{
|
||||||
if (fileSizeMB < 0) {
|
if (fileSizeMB < 0) {
|
||||||
int fs = DirSizeMB(FileName());
|
int fs = DirSizeMB(FileName());
|
||||||
if (time(NULL) - LastModifiedTime(cIndexFile::IndexFileName(FileName(), IsPesRecording())) < MININDEXAGE)
|
if (StillRecording(FileName()))
|
||||||
return fs; // check again later for ongoing recordings
|
return fs; // check again later for ongoing recordings
|
||||||
fileSizeMB = fs;
|
fileSizeMB = fs;
|
||||||
}
|
}
|
||||||
@ -2610,7 +2614,7 @@ cIndexFile::cIndexFile(const char *FileName, bool Record, bool IsPesRecording, b
|
|||||||
}
|
}
|
||||||
else if (isPesRecording)
|
else if (isPesRecording)
|
||||||
ConvertFromPes(index, size);
|
ConvertFromPes(index, size);
|
||||||
if (!index || time(NULL) - buf.st_mtime >= MININDEXAGE) {
|
if (!index || !StillRecording(FileName)) {
|
||||||
close(f);
|
close(f);
|
||||||
f = -1;
|
f = -1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user