diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 927cd13a..8f695e16 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -2474,6 +2474,7 @@ Christoph Haubrich tag of the 'info' file for adding a workaround in detecting frame height for channels with wrong crop parameters for reporting duplicate component entries in the info of an ongoing recording + for reporting a problem where the info file of an ongoing recording was not re-read Pekka Mauno for fixing cSchedule::GetFollowingEvent() in case there is currently no present diff --git a/HISTORY b/HISTORY index f9034797..4082fe8d 100644 --- a/HISTORY +++ b/HISTORY @@ -10119,8 +10119,10 @@ Video Disk Recorder Revision History - Now deleting old recording info before reading modified info file (suggested by Stefan Hofmann). -2025-04-15: +2025-04-16: - Fixed some misplaced 'override' keywords in the 'hello' and 'skincurses' plugins. - cRecording now fetches priority, lifetime and framesPerSecond from cRecordingInfo. APIVERSNUM is now 30008. +- Now forcing re-reading the info file of an ongoing recording (reported by Christoph + Haubrich). diff --git a/recording.c b/recording.c index 254b1c79..17ab6b9b 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 5.40 2025/04/15 19:38:46 kls Exp $ + * $Id: recording.c 5.41 2025/04/16 09:14:20 kls Exp $ */ #include "recording.h" @@ -497,13 +497,13 @@ void cRecordingInfo::SetErrors(int Errors) errors = Errors; } -bool cRecordingInfo::Read(FILE *f) +bool cRecordingInfo::Read(FILE *f, bool Force) { if (ownEvent) { struct stat st; if (fstat(fileno(f), &st)) return false; - if (modified == st.st_mtime) + if (modified == st.st_mtime && !Force) return true; if (modified) { delete ownEvent; @@ -614,13 +614,13 @@ bool cRecordingInfo::Write(FILE *f, const char *Prefix) const return true; } -bool cRecordingInfo::Read(void) +bool cRecordingInfo::Read(bool Force) { bool Result = false; if (fileName) { FILE *f = fopen(fileName, "r"); if (f) { - if (Read(f)) + if (Read(f, Force)) Result = true; else esyslog("ERROR: EPG data problem in file %s", fileName); @@ -1281,9 +1281,9 @@ bool cRecording::DeleteMarks(void) return cMarks::DeleteMarksFile(this); } -void cRecording::ReadInfo(void) +void cRecording::ReadInfo(bool Force) { - info->Read(); + info->Read(Force); } bool cRecording::WriteInfo(const char *OtherFileName) @@ -1729,7 +1729,7 @@ void cRecordings::DelByName(const char *FileName) void cRecordings::UpdateByName(const char *FileName) { if (cRecording *Recording = GetByName(FileName)) - Recording->ReadInfo(); + Recording->ReadInfo(true); } int cRecordings::TotalFileSizeMB(void) const diff --git a/recording.h b/recording.h index 701f5012..61365d49 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 5.14 2025/04/15 19:38:46 kls Exp $ + * $Id: recording.h 5.15 2025/04/16 09:14:20 kls Exp $ */ #ifndef __RECORDING_H @@ -80,7 +80,7 @@ private: char *fileName; int errors; cRecordingInfo(const cChannel *Channel = NULL, const cEvent *Event = NULL); - bool Read(FILE *f); + bool Read(FILE *f, bool Force = false); public: cRecordingInfo(const char *FileName); ~cRecordingInfo(); @@ -110,7 +110,7 @@ public: int Errors(void) const { return errors; } // returns -1 if undefined void SetErrors(int Errors); bool Write(FILE *f, const char *Prefix = "") const; - bool Read(void); + bool Read(bool Force = false); bool Write(void) const; void SetData(const char *Title, const char *ShortText, const char *Description); void SetAux(const char *Aux); @@ -201,7 +201,7 @@ public: ///< Deletes the editing marks from this recording (if any). ///< Returns true if the operation was successful. If there is no marks file ///< for this recording, it also returns true. - void ReadInfo(void); + void ReadInfo(bool Force = false); bool WriteInfo(const char *OtherFileName = NULL); ///< Writes in info file of this recording. If OtherFileName is given, the info ///< file will be written under that recording file name instead of this