mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	Fixed multiple recording entries in case a recording is started during the initial reading of the video directory
This commit is contained in:
		@@ -3484,6 +3484,8 @@ Stefan Schallenberg <infos@nafets.de>
 | 
			
		||||
Claus Muus <email@clausmuus.de>
 | 
			
		||||
 for adding the new parameters "Setup/Miscellaneous/Volume steps" and
 | 
			
		||||
 ".../Volume linearize"
 | 
			
		||||
 for reporting multiple recording entries in case a recording is started during the
 | 
			
		||||
 initial reading of the video directory
 | 
			
		||||
 | 
			
		||||
Dieter Ferdinand <dieter.ferdinand@gmx.de>
 | 
			
		||||
 for reporting a problem with jumping to an absolute position via the Red key in
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								HISTORY
									
									
									
									
									
								
							@@ -9535,3 +9535,8 @@ Video Disk Recorder Revision History
 | 
			
		||||
- Now initializing the status variable in cDvbTuner::GetFrontendStatus() and
 | 
			
		||||
  cDvbTuner::GetSignalStats() to avoid problems with drivers that don't do this
 | 
			
		||||
  (thanks to Helmut Binder).
 | 
			
		||||
 | 
			
		||||
2020-10-30:
 | 
			
		||||
 | 
			
		||||
- Fixed multiple recording entries in case a recording is started during the initial
 | 
			
		||||
  reading of the video directory (reported by Claus Muus).
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								recording.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								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 4.28 2020/09/16 13:30:59 kls Exp $
 | 
			
		||||
 * $Id: recording.c 4.29 2020/10/30 16:08:29 kls Exp $
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "recording.h"
 | 
			
		||||
@@ -1375,6 +1375,7 @@ class cVideoDirectoryScannerThread : public cThread {
 | 
			
		||||
private:
 | 
			
		||||
  cRecordings *recordings;
 | 
			
		||||
  cRecordings *deletedRecordings;
 | 
			
		||||
  int count;
 | 
			
		||||
  bool initial;
 | 
			
		||||
  void ScanVideoDir(const char *DirName, int LinkLevel = 0, int DirLevel = 0);
 | 
			
		||||
protected:
 | 
			
		||||
@@ -1389,6 +1390,7 @@ cVideoDirectoryScannerThread::cVideoDirectoryScannerThread(cRecordings *Recordin
 | 
			
		||||
{
 | 
			
		||||
  recordings = Recordings;
 | 
			
		||||
  deletedRecordings = DeletedRecordings;
 | 
			
		||||
  count = 0;
 | 
			
		||||
  initial = true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1401,7 +1403,8 @@ void cVideoDirectoryScannerThread::Action(void)
 | 
			
		||||
{
 | 
			
		||||
  cStateKey StateKey;
 | 
			
		||||
  recordings->Lock(StateKey);
 | 
			
		||||
  initial = recordings->Count() == 0; // no name checking if the list is initially empty
 | 
			
		||||
  count = recordings->Count();
 | 
			
		||||
  initial = count == 0; // no name checking if the list is initially empty
 | 
			
		||||
  StateKey.Remove();
 | 
			
		||||
  deletedRecordings->Lock(StateKey, true);
 | 
			
		||||
  deletedRecordings->Clear();
 | 
			
		||||
@@ -1439,6 +1442,10 @@ void cVideoDirectoryScannerThread::ScanVideoDir(const char *DirName, int LinkLev
 | 
			
		||||
              if (Recordings) {
 | 
			
		||||
                 cStateKey StateKey;
 | 
			
		||||
                 Recordings->Lock(StateKey, true);
 | 
			
		||||
                 if (initial && count != recordings->Count()) {
 | 
			
		||||
                    dsyslog("activated name checking for initial read of video directory");
 | 
			
		||||
                    initial = false;
 | 
			
		||||
                    }
 | 
			
		||||
                 if (Recordings == deletedRecordings || initial || !Recordings->GetByName(buffer)) {
 | 
			
		||||
                    cRecording *r = new cRecording(buffer);
 | 
			
		||||
                    if (r->Name()) {
 | 
			
		||||
@@ -1448,6 +1455,7 @@ void cVideoDirectoryScannerThread::ScanVideoDir(const char *DirName, int LinkLev
 | 
			
		||||
                       if (Recordings == deletedRecordings)
 | 
			
		||||
                          r->SetDeleted();
 | 
			
		||||
                       Recordings->Add(r);
 | 
			
		||||
                       count = recordings->Count();
 | 
			
		||||
                       }
 | 
			
		||||
                    else
 | 
			
		||||
                       delete r;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user