diff --git a/CONTRIBUTORS b/CONTRIBUTORS index d0d09033..05d9be35 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1966,6 +1966,7 @@ Markus Hahn 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 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, public cThread {