summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY1
-rw-r--r--recording.c28
-rw-r--r--recording.h6
4 files changed, 34 insertions, 2 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index d0d09033..05d9be35 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1966,6 +1966,7 @@ Markus Hahn <mhahn@reel-multimedia.com>
while editing a string item
for fixing detection of Premiere NVOD channel links
for making the default copy ctor of cRecording private
+ for a patch that was used to implement cRecording::Undelete()
Jaroslaw Swierczynski <swiergot@gmail.com>
for updating the Polish OSD texts and the fontosd-iso8859-2.c file
diff --git a/HISTORY b/HISTORY
index 5c81412d..41ac6f15 100644
--- a/HISTORY
+++ b/HISTORY
@@ -5483,3 +5483,4 @@ Video Disk Recorder Revision History
(suggested by Thomas Günther).
- Made the default copy ctor of cRecording private (thanks to Markus Hahn).
Same for the assign operator.
+- Added cRecording::Undelete() (based on a patch from Markus Hahn).
diff --git a/recording.c b/recording.c
index 7886adaa..51846114 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.155 2007/10/12 14:48:20 kls Exp $
+ * $Id: recording.c 1.156 2007/10/14 10:21:54 kls Exp $
*/
#include "recording.h"
@@ -829,6 +829,32 @@ bool cRecording::Remove(void)
return RemoveVideoFile(FileName());
}
+bool cRecording::Undelete(void)
+{
+ bool result = true;
+ char *NewName = strdup(FileName());
+ char *ext = strrchr(NewName, '.');
+ if (ext && strcmp(ext, DELEXT) == 0) {
+ strncpy(ext, RECEXT, strlen(ext));
+ if (access(NewName, F_OK) == 0) {
+ // the new name already exists, so let's not remove that one:
+ esyslog("ERROR: attempt to undelete '%s', while recording '%s' exists", FileName(), NewName);
+ result = false;
+ }
+ else {
+ isyslog("undeleting recording '%s'", FileName());
+ if (access(FileName(), F_OK) == 0)
+ result = RenameVideoFile(FileName(), NewName);
+ else {
+ isyslog("deleted recording '%s' vanished", FileName());
+ result = false;
+ }
+ }
+ }
+ free(NewName);
+ return result;
+}
+
void cRecording::ResetResume(void) const
{
resume = RESUME_NOT_INITIALIZED;
diff --git a/recording.h b/recording.h
index fb616f68..4bdcd1b2 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.58 2007/10/14 10:06:48 kls Exp $
+ * $Id: recording.h 1.59 2007/10/14 10:11:34 kls Exp $
*/
#ifndef __RECORDING_H
@@ -102,6 +102,10 @@ public:
bool Remove(void);
// Actually removes the file from the disk
// Returns false in case of error
+ bool Undelete(void);
+ // Changes the file name so that it will be visible in the "Recordings" menu again and
+ // not processed by cRemoveDeletedRecordingsThread.
+ // Returns false in case of error
};
class cRecordings : public cList<cRecording>, public cThread {