summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Mair <amair.sob@googlemail.com>2012-06-17 07:16:54 +0200
committerAndreas Mair <amair.sob@googlemail.com>2012-06-17 07:16:54 +0200
commit0aa13690ae0d77a8f8aca5c7014ba84f37037656 (patch)
tree7e5cab2bb1232c3e9cd09863458ed84a91ff0a24
parentdfc2b4424ba6142c948e793ac17899427cb0e4fc (diff)
downloadvdr-plugin-extrecmenu-0aa13690ae0d77a8f8aca5c7014ba84f37037656.tar.gz
vdr-plugin-extrecmenu-0aa13690ae0d77a8f8aca5c7014ba84f37037656.tar.bz2
Reduced calls to get the free disk space.
-rw-r--r--mymenurecordings.c77
-rw-r--r--mymenurecordings.h3
2 files changed, 44 insertions, 36 deletions
diff --git a/mymenurecordings.c b/mymenurecordings.c
index 6125cfd..0a08d12 100644
--- a/mymenurecordings.c
+++ b/mymenurecordings.c
@@ -19,6 +19,8 @@
#include "mymenucommands.h"
#include "tools.h"
+#define DISKSPACECHEK 5 // seconds between disk space checks
+
using namespace std;
// --- myMenuRecordingInfo ----------------------------------------------------
@@ -498,7 +500,8 @@ bool myMenuRecordings::golastreplayed=false;
bool myMenuRecordings::wasdvd;
bool myMenuRecordings::washdd;
dev_t myMenuRecordings::fsid=0;
-int myMenuRecordings::freediskspace=0;
+time_t myMenuRecordings::lastDiskSpaceCheck=0;
+int myMenuRecordings::lastFreeMB=-1;
myMenuRecordings::myMenuRecordings(const char *Base,int Level):cOsdMenu("")
{
@@ -588,57 +591,61 @@ myMenuRecordings::~myMenuRecordings()
int myMenuRecordings::FreeMB()
{
- if(mysetup.FileSystemFreeMB)
+ if (lastFreeMB<=0||time(NULL)-lastDiskSpaceCheck>DISKSPACECHEK)
{
- string path=VideoDirectory;
- path+="/";
- char *tmpbase=base?ExchangeChars(strdup(base),true):NULL;
- if(base)
- path+=tmpbase;
-
- struct stat statdir;
- if(!stat(path.c_str(),&statdir))
+ int freediskspace=0;
+ if(mysetup.FileSystemFreeMB)
{
- if(statdir.st_dev!=fsid)
+ string path=VideoDirectory;
+ path+="/";
+ char *tmpbase=base?ExchangeChars(strdup(base),true):NULL;
+ if(tmpbase)
+ path+=tmpbase;
+
+ struct stat statdir;
+ if(!stat(path.c_str(),&statdir))
{
- fsid=statdir.st_dev;
-
- struct statvfs fsstat;
- if(!statvfs(path.c_str(),&fsstat))
+ if(statdir.st_dev!=fsid)
{
- freediskspace=int((double)fsstat.f_bavail/(1024.0*1024.0/fsstat.f_bsize));
+ fsid=statdir.st_dev;
- for(cRecording *rec=DeletedRecordings.First();rec;rec=DeletedRecordings.Next(rec))
+ struct statvfs fsstat;
+ if(!statvfs(path.c_str(),&fsstat))
{
- if(!stat(rec->FileName(),&statdir))
+ freediskspace=int((double)fsstat.f_bavail/(1024.0*1024.0/fsstat.f_bsize));
+
+ for(cRecording *rec=DeletedRecordings.First();rec;rec=DeletedRecordings.Next(rec))
{
- if(statdir.st_dev==fsid)
- freediskspace+=DirSizeMB(rec->FileName());
+ if(!stat(rec->FileName(),&statdir))
+ {
+ if(statdir.st_dev==fsid)
+ freediskspace+=DirSizeMB(rec->FileName());
+ }
}
}
- }
- else
- {
- esyslog("[extrecmenu] error while getting filesystem size - statvfs (%s): %s",path.c_str(),strerror(errno));
- freediskspace=0;
+ else
+ {
+ esyslog("[extrecmenu] error while getting filesystem size - statvfs (%s): %s",path.c_str(),strerror(errno));
+ freediskspace=0;
+ }
}
}
+ else
+ {
+ esyslog("[extrecmenu] error while getting filesystem size - stat (%s): %s",path.c_str(),strerror(errno));
+ freediskspace=0;
+ }
+ free(tmpbase);
}
else
{
- esyslog("[extrecmenu] error while getting filesystem size - stat (%s): %s",path.c_str(),strerror(errno));
- freediskspace=0;
+ VideoDiskSpace(&freediskspace);
}
- free(tmpbase);
- }
- else
- {
- int freemb;
- VideoDiskSpace(&freemb);
- return freemb;
+ lastFreeMB=freediskspace;
+ lastDiskSpaceCheck=time(NULL);
}
- return freediskspace;
+ return lastFreeMB;
}
void myMenuRecordings::Title()
diff --git a/mymenurecordings.h b/mymenurecordings.h
index 236fa3c..6841e6c 100644
--- a/mymenurecordings.h
+++ b/mymenurecordings.h
@@ -36,7 +36,8 @@ class myMenuRecordings:public cOsdMenu
static bool washdd;
static bool golastreplayed;
static dev_t fsid;
- static int freediskspace;
+ static time_t lastDiskSpaceCheck;
+ static int lastFreeMB;
int level,helpkeys;
int recordingsstate;
char *base;