When estimating the remaining disk space (in hours), the average data rate of all existing recordings is now taken into account

This commit is contained in:
Klaus Schmidinger 2012-03-13 13:22:06 +01:00
parent 845d6f36c1
commit 71f02e4f80
4 changed files with 54 additions and 12 deletions

View File

@ -7037,3 +7037,6 @@ Video Disk Recorder Revision History
the given device.
- When toggling a timer between "Single" and "Repeating", the previous setting is now
retained in case the user toggles back to the original value.
- When estimating the remaining disk space (in hours), the average data rate of all
existing recordings is now taken into account. If this value can't be determined,
the previous value of 25.75 MB/min is taken.

7
menu.c
View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: menu.c 2.44 2012/03/11 13:20:45 kls Exp $
* $Id: menu.c 2.45 2012/03/13 13:14:38 kls Exp $
*/
#include "menu.h"
@ -78,7 +78,10 @@ bool cFreeDiskSpace::HasChanged(bool ForceCheck)
int Percent = VideoDiskSpace(&FreeMB);
lastDiskSpaceCheck = time(NULL);
if (ForceCheck || FreeMB != lastFreeMB) {
int Minutes = int(double(FreeMB) / MB_PER_MINUTE);
int MBperMinute = Recordings.MBperMinute();
if (MBperMinute <= 0)
MBperMinute = MB_PER_MINUTE;
int Minutes = int(double(FreeMB) / MBperMinute);
int Hours = Minutes / 60;
Minutes %= 60;
freeDiskSpaceString = cString::sprintf("%s %d%% - %2d:%02d %s", tr("Disk"), Percent, Hours, Minutes, tr("free"));

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: recording.c 2.52 2012/03/12 14:49:28 kls Exp $
* $Id: recording.c 2.53 2012/03/13 13:17:57 kls Exp $
*/
#include "recording.h"
@ -1063,6 +1063,17 @@ int cRecording::LengthInSeconds(void) const
return -1;
}
int cRecording::FileSizeMB(void) const
{
if (fileSizeMB < 0) {
int fs = DirSizeMB(FileName());
if (time(NULL) - LastModifiedTime(FileName()) < MININDEXAGE)
return fs; // check again later for ongoing recordings
fileSizeMB = fs;
}
return fileSizeMB;
}
// --- cRecordings -----------------------------------------------------------
cRecordings Recordings;
@ -1127,14 +1138,13 @@ void cRecordings::ScanVideoDir(const char *DirName, bool Foreground, int LinkLev
cRecording *r = new cRecording(buffer);
if (r->Name()) {
r->NumFrames(); // initializes the numFrames member
r->FileSizeMB(); // initializes the fileSizeMB member
if (deleted)
r->deleted = time(NULL);
Lock();
Add(r);
ChangeState();
Unlock();
if (deleted) {
r->fileSizeMB = DirSizeMB(buffer);
r->deleted = time(NULL);
}
}
else
delete r;
@ -1216,7 +1226,6 @@ void cRecordings::DelByName(const char *FileName)
if (ext) {
strncpy(ext, DELEXT, strlen(ext));
if (access(recording->FileName(), F_OK) == 0) {
recording->fileSizeMB = DirSizeMB(recording->FileName());
recording->deleted = time(NULL);
DeletedRecordings.Add(recording);
recording = NULL; // to prevent it from being deleted below
@ -1241,12 +1250,33 @@ int cRecordings::TotalFileSizeMB(void)
int size = 0;
LOCK_THREAD;
for (cRecording *recording = First(); recording; recording = Next(recording)) {
if (recording->fileSizeMB > 0 && IsOnVideoDirectoryFileSystem(recording->FileName()))
size += recording->fileSizeMB;
int FileSizeMB = recording->FileSizeMB();
if (FileSizeMB > 0 && IsOnVideoDirectoryFileSystem(recording->FileName()))
size += FileSizeMB;
}
return size;
}
double cRecordings::MBperMinute(void)
{
int size = 0;
int length = 0;
LOCK_THREAD;
for (cRecording *recording = First(); recording; recording = Next(recording)) {
if (IsOnVideoDirectoryFileSystem(recording->FileName())) {
int FileSizeMB = recording->FileSizeMB();
if (FileSizeMB > 0) {
int LengthInSeconds = recording->LengthInSeconds();
if (LengthInSeconds > 0) {
size += FileSizeMB;
length += LengthInSeconds;
}
}
}
}
return (size && length) ? double(size) * 60 / length : -1;
}
void cRecordings::ResetResume(const char *ResumeFileName)
{
LOCK_THREAD;

View File

@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: recording.h 2.29 2012/03/12 11:44:06 kls Exp $
* $Id: recording.h 2.30 2012/03/13 12:41:05 kls Exp $
*/
#ifndef __RECORDING_H
@ -129,6 +129,9 @@ public:
///< If the number of frames is unknown, -1 will be returned.
int LengthInSeconds(void) const;
///< Returns the length (in seconds) of this recording, or -1 in case of error.
int FileSizeMB(void) const;
///< Returns the total file size of this recording (in MB), or -1 if the file
///< size is unknown.
bool IsNew(void) const { return GetResume() <= 0; }
bool IsEdited(void) const;
bool IsPesRecording(void) const { return isPesRecording; }
@ -190,7 +193,10 @@ public:
void AddByName(const char *FileName, bool TriggerUpdate = true);
void DelByName(const char *FileName);
void UpdateByName(const char *FileName);
int TotalFileSizeMB(void); ///< Only for deleted recordings!
int TotalFileSizeMB(void);
double MBperMinute(void);
///< Returns the average data rate (in MB/min) of all recordings, or -1 if
///< this value is unknown.
};
extern cRecordings Recordings;