diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2001-02-04 12:36:32 +0100 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2001-02-04 12:36:32 +0100 |
commit | 1c81b279eed647bbe938a2e89a66ce6e0d3d2121 (patch) | |
tree | c9e7bc225cc2203e32dee16a70a6986f8b580928 | |
parent | 2adfad282320b6a6b116284507aac870d536a69a (diff) | |
download | vdr-1c81b279eed647bbe938a2e89a66ce6e0d3d2121.tar.gz vdr-1c81b279eed647bbe938a2e89a66ce6e0d3d2121.tar.bz2 |
Automatically removing deleted recordings after a while
-rw-r--r-- | HISTORY | 4 | ||||
-rw-r--r-- | menu.c | 11 | ||||
-rw-r--r-- | menu.h | 3 | ||||
-rw-r--r-- | recording.c | 32 | ||||
-rw-r--r-- | recording.h | 3 | ||||
-rw-r--r-- | tools.c | 8 | ||||
-rw-r--r-- | vdr.c | 4 |
7 files changed, 54 insertions, 11 deletions
@@ -350,7 +350,7 @@ Video Disk Recorder Revision History - Encrypted channels can now be selected even without knowing the PNR (however, it is still necessary for the EPG info). -2001-02-03: Version 0.71 +2001-02-04: Version 0.71 - Fixed 'Transfer Mode' in cases where a non-primary interface was switched to a channel that only the primary interface can receive (which could happen in @@ -376,3 +376,5 @@ Video Disk Recorder Revision History to 0), but once they are written back (due to some channel editing) the file will have the new format. - The EPG scanner now scans each transponder only once per cycle. +- Deleted recordings are now automatically removed from disk after a while (not + only when disk space is being needed for a new recording). @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.62 2001/02/03 16:05:31 kls Exp $ + * $Id: menu.c 1.63 2001/02/04 11:48:01 kls Exp $ */ #include "menu.h" @@ -2019,6 +2019,15 @@ void cRecordControls::Process(void) } } +bool cRecordControls::Active(void) +{ + for (int i = 0; i < MAXDVBAPI; i++) { + if (RecordControls[i]) + return true; + } + return false; +} + // --- cProgressBar ---------------------------------------------------------- class cProgressBar : public cBitmap { @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.16 2000/12/25 14:25:29 kls Exp $ + * $Id: menu.h 1.17 2001/02/04 11:47:21 kls Exp $ */ #ifndef _MENU_H @@ -74,6 +74,7 @@ public: static void Stop(cDvbApi *DvbApi); static const char *GetInstantId(const char *LastInstantId); static void Process(void); + static bool Active(void); }; class cReplayControl : public cOsdBase { diff --git a/recording.c b/recording.c index 064731df..dd364638 100644 --- a/recording.c +++ b/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.24 2001/01/13 12:17:15 kls Exp $ + * $Id: recording.c 1.25 2001/02/04 12:36:32 kls Exp $ */ #define _GNU_SOURCE @@ -32,8 +32,34 @@ #define MINDISKSPACE 1024 // MB -#define DISKCHECKDELTA 300 // seconds between checks for free disk space -#define REMOVELATENCY 10 // seconds to wait until next check after removing a file +#define DELETEDLIFETIME 1 // hours after which a deleted recording will be actually removed +#define REMOVECHECKDELTA 3600 // seconds between checks for removing deleted files +#define DISKCHECKDELTA 300 // seconds between checks for free disk space +#define REMOVELATENCY 10 // seconds to wait until next check after removing a file + +void RemoveDeletedRecordings(void) +{ + static time_t LastRemoveCheck = 0; + if (time(NULL) - LastRemoveCheck > REMOVECHECKDELTA) { + // Remove the oldest file that has been "deleted": + cRecordings Recordings; + if (Recordings.Load(true)) { + cRecording *r = Recordings.First(); + cRecording *r0 = r; + while (r) { + if (r->start < r0->start) + r0 = r; + r = Recordings.Next(r); + } + if (r0 && time(NULL) - r0->start > DELETEDLIFETIME * 60) { + r0->Remove(); + LastRemoveCheck += REMOVELATENCY; + return; + } + } + LastRemoveCheck = time(NULL); + } +} void AssertFreeDiskSpace(void) { diff --git a/recording.h b/recording.h index 454c356f..2d3ea392 100644 --- a/recording.h +++ b/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.11 2000/12/16 14:25:20 kls Exp $ + * $Id: recording.h 1.12 2001/02/04 11:44:37 kls Exp $ */ #ifndef __RECORDING_H @@ -14,6 +14,7 @@ #include "config.h" #include "tools.h" +void RemoveDeletedRecordings(void); void AssertFreeDiskSpace(void); class cRecording : public cListObject { @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 1.27 2001/01/13 15:35:02 kls Exp $ + * $Id: tools.c 1.28 2001/02/04 11:27:49 kls Exp $ */ #define _GNU_SOURCE @@ -237,8 +237,10 @@ bool RemoveFileOrDir(const char *FileName, bool FollowSymlinks) } } dsyslog(LOG_INFO, "removing %s", FileName); - if (remove(FileName) == 0) - return true; + if (remove(FileName) < 0) { + LOG_ERROR_STR(FileName); + return false; + } } else if (errno != ENOENT) { LOG_ERROR_STR(FileName); @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/people/kls/vdr * - * $Id: vdr.c 1.50 2001/02/02 15:48:11 kls Exp $ + * $Id: vdr.c 1.51 2001/02/04 11:51:11 kls Exp $ */ #include <getopt.h> @@ -324,6 +324,8 @@ int main(int argc, char *argv[]) EITScanner.Process(); cVideoCutter::Active(); } + if (!*Interact && !cRecordControls::Active()) + RemoveDeletedRecordings(); } isyslog(LOG_INFO, "caught signal %d", Interrupted); Setup.CurrentChannel = cDvbApi::CurrentChannel(); |