1
0
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:
Klaus Schmidinger 2022-11-06 11:49:31 +01:00
parent 786245efe5
commit c8e4921a0a
3 changed files with 17 additions and 7 deletions

View File

@ -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.

View File

@ -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");

View File

@ -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;
} }