From c16bbf7422f37108580e559ca849e5aafbdac672 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 25 Sep 2005 18:00:00 +0200 Subject: =?UTF-8?q?Version=201.3.33=20-=20Fixed=20two=20errors=20in=20'new?= =?UTF-8?q?plugin'=20(thanks=20to=20Alexander=20Rieger).=20-=20Fixed=20con?= =?UTF-8?q?verting=20arbitrarily=20formatted=20summary.vdr=20files=20(than?= =?UTF-8?q?ks=20to=20Thomas=20G=C3=BCnther).=20-=20Fixed=20handling=20colo?= =?UTF-8?q?r=20buttons=20in=20cMenuEditStrItem=20(thanks=20to=20Alexander?= =?UTF-8?q?=20Rieger).=20-=20Added=20cChannel::LinkChannels()=20and=20cCha?= =?UTF-8?q?nnel::RefChannel()=20(suggested=20by=20Helmut=20Auer).=20=20=20?= =?UTF-8?q?Note=20that=20VDR=20itself=20doesn't=20actually=20use=20the=20l?= =?UTF-8?q?inked=20channels,=20yet,=20so=20there=20is=20=20=20no=20guarant?= =?UTF-8?q?ee=20that=20this=20really=20works=20under=20all=20circumstances?= =?UTF-8?q?.=20-=20Added=20a=20missing=20include=20statement=20to=20the=20?= =?UTF-8?q?'sky'=20plugin=20(thanks=20to=20Alfred=20Zastrow=20=20=20for=20?= =?UTF-8?q?reporting=20this=20one).=20-=20Fixed=20handling=20key=20macros?= =?UTF-8?q?=20with=20keys=20after=20@plugin=20(thanks=20to=20Rolf=20Ahrenb?= =?UTF-8?q?erg=20for=20=20=20reporting=20this=20one).=20-=20Fixed=20error?= =?UTF-8?q?=20handling=20in=20cCiTransportConnection::RecvTPDU()=20(thanks?= =?UTF-8?q?=20to=20Georg=20Acher=20=20=20for=20reporting=20this=20one).=20?= =?UTF-8?q?-=20Removed=20obsolete=20'shift'=20code=20in=20device.[hc].=20-?= =?UTF-8?q?=20The=20SVDRP=20command=20DELR=20no=20longer=20triggers=20a=20?= =?UTF-8?q?complete=20reload=20of=20the=20global=20Recordings=20=20=20list?= =?UTF-8?q?,=20but=20rather=20deletes=20that=20particular=20entry.=20-=20T?= =?UTF-8?q?he=20list=20of=20recordings=20is=20now=20read=20in=20a=20separa?= =?UTF-8?q?te=20thread,=20resulting=20in=20a=20faster=20=20=20startup=20if?= =?UTF-8?q?=20there=20are=20a=20great=20many=20of=20recordings,=20or=20the?= =?UTF-8?q?=20disk(s)=20have=20to=20spin=20up.=20=20=20If=20the=20Recordin?= =?UTF-8?q?gs=20menu=20is=20opened=20while=20the=20list=20of=20recordings?= =?UTF-8?q?=20is=20still=20being=20read,=20=20=20the=20menu=20will=20be=20?= =?UTF-8?q?updated=20accordingly.=20=20=20Plugins=20that=20access=20the=20?= =?UTF-8?q?global=20Recordings=20variable=20should=20lock=20the=20thread?= =?UTF-8?q?=20=20=20by=20putting=20something=20like?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cThreadLock RecordingsLock(&Recordings); into the respective code block. Thanks to Carsten Koch for his help in testing and debugging this. - The 'new' indicator in the Recordings menu is now kept up-to-date (thanks to Thomas Günther). - Updated the Romanian OSD texts (thanks to Lucian Muresan). - Updated the Russian OSD texts (thanks to Oleg Roitburd). - The '.update' file in the video directory is now touched when a recording is added or deleted, so that other VDR instances can update their lists (thanks to Alexander Rieger). - Made the function ExchangeChars() public (suggested by Lucian Muresan). --- recording.h | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'recording.h') diff --git a/recording.h b/recording.h index 567c6c4..96bb4b5 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.40 2005/09/03 13:04:41 kls Exp $ + * $Id: recording.h 1.44 2005/09/25 14:30:13 kls Exp $ */ #ifndef __RECORDING_H @@ -71,7 +71,7 @@ public: int lifetime; cRecording(cTimer *Timer, const cEvent *Event); cRecording(const char *FileName); - ~cRecording(); + virtual ~cRecording(); virtual int Compare(const cListObject &ListObject) const; const char *Name(void) const { return name; } const char *FileName(void) const; @@ -79,6 +79,7 @@ public: const cRecordingInfo *Info(void) const { return info; } const char *PrefixFileName(char Prefix); int HierarchyLevels(void) const; + void ResetResume(void) const; bool IsNew(void) const { return GetResume() <= 0; } bool IsEdited(void) const; bool WriteInfo(void); @@ -90,16 +91,37 @@ public: // Returns false in case of error }; -class cRecordings : public cList { +class cRecordings : public cList, public cThread { private: + char *updateFileName; bool deleted; time_t lastUpdate; - void ScanVideoDir(const char *DirName); + int state; + void Refresh(bool Foreground = false); + void ScanVideoDir(const char *DirName, bool Foreground = false); +protected: + void Action(void); public: cRecordings(bool Deleted = false); - bool Load(void); - void TriggerUpdate(void) { lastUpdate = 0; } + virtual ~cRecordings(); + bool Load(void) { return Update(true); } + ///< Loads the current list of recordings and returns true if there + ///< is anything in it (for compatibility with older plugins - use + ///< Update(true) instead). + bool Update(bool Wait = false); + ///< Triggers an update of the list of recordings, which will run + ///< as a separate thread if Wait is false. If Wait is true, the + ///< function returns only after the update has completed. + ///< Returns true if Wait is true and there is anyting in the list + ///< of recordings, false otherwise. + void TouchUpdate(void); + ///< Touches the '.update' file in the video directory, so that other + ///< instances of VDR that access the same video directory can be triggered + ///< to update their recordings list. bool NeedsUpdate(void); + void ChangeState(void) { state++; } + bool StateChanged(int &State); + void ResetResume(const char *ResumeFileName = NULL); cRecording *GetByName(const char *FileName); void AddByName(const char *FileName); void DelByName(const char *FileName); @@ -112,7 +134,7 @@ public: int position; char *comment; cMark(int Position = 0, const char *Comment = NULL); - ~cMark(); + virtual ~cMark(); cString ToText(void); bool Parse(const char *s); bool Save(FILE *f); @@ -205,4 +227,10 @@ int SecondsToFrames(int Seconds); //XXX+ ->player??? int ReadFrame(int f, uchar *b, int Length, int Max); +char *ExchangeChars(char *s, bool ToFileSystem); + // Exchanges the characters in the given string to or from a file system + // specific representation (depending on ToFileSystem). The given string will + // be modified and may be reallocated if more space is needed. The return + // value points to the resulting string, which may be different from s. + #endif //__RECORDING_H -- cgit v1.2.3