#!/bin/sh /usr/share/dpatch/dpatch-run ## update-resume - version 0.1 - Thomas Günther ## ## 2005-03-08: version 0.1 ## - trigger reread of the resume file after replaying a recording ## - reset resume of a recording when the resume file is deleted ## - trigger reread of the resume files for all recordings if Resume ID is ## changed ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: Updates resume of a recording after replay. @DPATCH@ --- vdr-1.3.18/menu.c +++ vdr-1.3.18/menu.c @@ -2161,6 +2161,8 @@ // --- cMenuSetupReplay ------------------------------------------------------ class cMenuSetupReplay : public cMenuSetupBase { +protected: + virtual void Store(void); public: cMenuSetupReplay(void); }; @@ -2173,6 +2175,13 @@ Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99)); } +void cMenuSetupReplay::Store(void) +{ + if (Setup.ResumeID != data.ResumeID) + Recordings.ResetResume(); + cMenuSetupBase::Store(); +} + // --- cMenuSetupMisc -------------------------------------------------------- class cMenuSetupMisc : public cMenuSetupBase { --- vdr-1.3.18/recording.c +++ vdr-1.3.18/recording.c @@ -199,6 +199,7 @@ if (safe_write(f, &Index, sizeof(Index)) < 0) LOG_ERROR_STR(fileName); close(f); + Recordings.ResetResume(fileName); return true; } } @@ -210,6 +211,7 @@ if (fileName) { if (remove(fileName) < 0 && errno != ENOENT) LOG_ERROR_STR(fileName); + Recordings.ResetResume(fileName); } } @@ -616,6 +618,11 @@ return RemoveVideoFile(FileName()); } +void cRecording::ResetResume(void) const +{ + resume = RESUME_NOT_INITIALIZED; +} + // --- cRecordings ----------------------------------------------------------- cRecordings Recordings; @@ -702,6 +709,13 @@ Del(recording); } +void cRecordings::ResetResume(const char *ResumeFileName) +{ + for (cRecording *recording = First(); recording; recording = Next(recording)) + if (!ResumeFileName || strncmp(ResumeFileName, recording->FileName(), strlen(recording->FileName())) == 0) + recording->ResetResume(); +} + // --- cMark ----------------------------------------------------------------- cMark::cMark(int Position, const char *Comment) --- vdr-1.3.18/recording.h +++ vdr-1.3.18/recording.h @@ -58,6 +58,7 @@ const char *PrefixFileName(char Prefix); int HierarchyLevels(void) const; bool IsNew(void) const { return GetResume() <= 0; } + void ResetResume(void) const; bool IsEdited(void) const; bool WriteSummary(void); bool Delete(void); @@ -78,6 +79,7 @@ bool Load(void); void TriggerUpdate(void) { lastUpdate = 0; } bool NeedsUpdate(void); + void ResetResume(const char *ResumeFileName = NULL); cRecording *GetByName(const char *FileName); void AddByName(const char *FileName); void DelByName(const char *FileName);