diff -rw vdr-1.3.12/config.c vdr-1.3.12_patched/config.c 299a300 > FreeDiskSpaceCalc = 0; 452a454 > else if (!strcasecmp(Name, "FreeDiskSpaceCalc")) FreeDiskSpaceCalc = atoi(Value); 512a515 > Store("FreeDiskSpaceCalc", FreeDiskSpaceCalc); diff -rw vdr-1.3.12/config.h vdr-1.3.12_patched/config.h 253a254 > int FreeDiskSpaceCalc; diff -rw vdr-1.3.12/i18n.c vdr-1.3.12_patched/i18n.c 2617a2618,2636 > { "Setup.OSD$Free disk space calc.", > "Freier Speicherplatz", > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > }, 4313a4333,4370 > { "traditional", > "traditionell", > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > }, > { "add *.del files", > "*.del Dateien berücksichtigen", > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > "",// TODO > }, diff -rw vdr-1.3.12/menu.c vdr-1.3.12_patched/menu.c 1724a1725 > Add(new cMenuEditBoolItem(tr("Setup.OSD$Free disk space calc."), &data.FreeDiskSpaceCalc, tr("traditional"), tr("add *.del files"))); 2263a2265 > updateHeadline = false; 2295,2305c2297 < #define MB_PER_MINUTE 25.75 // this is just an estimate! < < char buffer[40]; < int FreeMB; < int Percent = VideoDiskSpace(&FreeMB); < int Minutes = int(double(FreeMB) / MB_PER_MINUTE); < int Hours = Minutes / 60; < Minutes %= 60; < snprintf(buffer, sizeof(buffer), "%s - %s %d%% - %2d:%02d %s", tr("VDR"), tr("Disk"), Percent, Hours, Minutes, tr("free")); < //XXX -> skin function!!! < SetTitle(buffer); --- > UpdateHeadline(); 2366a2359,2375 > void cMenuMain::UpdateHeadline(void) > { > // Title with disk usage: > > #define MB_PER_MINUTE 25.75 // this is just an estimate! > > char buffer[40]; > int FreeMB; > int Percent = VideoDiskSpace(&FreeMB); > int Minutes = int(double(FreeMB) / MB_PER_MINUTE); > int Hours = Minutes / 60; > Minutes %= 60; > snprintf(buffer, sizeof(buffer), "%s - %s %d%% - %2d:%02d %s", tr("VDR"), tr("Disk"), Percent, Hours, Minutes, tr("free")); > //XXX -> skin function!!! > SetTitle(buffer); > } > 2378,2379c2387,2390 < case osRecordings: return AddSubMenu(new cMenuRecordings); < case osSetup: return AddSubMenu(new cMenuSetup); --- > case osRecordings: updateHeadline = true; > return AddSubMenu(new cMenuRecordings); > case osSetup: updateHeadline = true; > return AddSubMenu(new cMenuSetup); 2455a2467,2475 > void cMenuMain::Display(void) > { > if (updateHeadline) { > updateHeadline = false; > UpdateHeadline(); > } > cOsdMenu::Display(); > } > diff -rw vdr-1.3.12/menu.h vdr-1.3.12_patched/menu.h 35a36 > bool updateHeadline; 37a39 > void UpdateHeadline(void); 40a43 > virtual void Display(void); diff -rw vdr-1.3.12/tools.c vdr-1.3.12_patched/tools.c 270a271,334 > int UsedDirSpaceMB(const char *pszDirectory) > { > int iUsedMB = 0; > DIR *pDir; > struct dirent* pEntry; > struct stat ds; > if ((pDir = opendir(pszDirectory)) != NULL) { > while ((pEntry = readdir(pDir)) != NULL) { > // ignore . and .. > if ((strcmp(".", pEntry->d_name) == 0) || > (strcmp("..", pEntry->d_name) == 0)) { > continue; > } > char* pszBuffer = new char [strlen(pszDirectory) + strlen(pEntry->d_name) + 2]; > sprintf(pszBuffer, "%s/%s", pszDirectory, pEntry->d_name); > lstat(pszBuffer, &ds); > if (S_ISDIR(ds.st_mode)) { > iUsedMB += UsedDirSpaceMB(pszBuffer); > } else { > iUsedMB += (ds.st_size / (1024 * 1024)); > } > delete pszBuffer; > } > closedir(pDir); > } > return iUsedMB; > } > > int UsedMatchingDirSpaceMB(const char *pszDirectory, const char* pszDirSuffix) > { > // check if the given directory name ends with the suffix > int iUsedMB = 0; > int iLengthDiff = strlen(pszDirectory) - strlen(pszDirSuffix); > const char* pHelp = ((iLengthDiff < 0) ? pszDirectory : pszDirectory + iLengthDiff); > if (strcmp(pHelp, pszDirSuffix) == 0) { > // this directory match the given suffix. simply return its disk space > iUsedMB = UsedDirSpaceMB(pszDirectory); > } else { > // this directory does not match the given suffix. call recursively for each subdir > DIR *pDir; > struct dirent* pEntry; > struct stat ds; > if ((pDir = opendir(pszDirectory)) != NULL) { > chdir(pszDirectory); > while ((pEntry = readdir(pDir)) != NULL) { > // ignore . and .. > if ((strcmp(".", pEntry->d_name) == 0) || > (strcmp("..", pEntry->d_name) == 0)) { > continue; > } > char* pszBuffer = new char [strlen(pszDirectory) + strlen(pEntry->d_name) + 2]; > sprintf(pszBuffer, "%s/%s", pszDirectory, pEntry->d_name); > lstat(pszBuffer, &ds); > if (S_ISDIR(ds.st_mode)) { > iUsedMB += UsedMatchingDirSpaceMB(pszBuffer, pszDirSuffix); > } > delete pszBuffer; > } > closedir(pDir); > } > } > return iUsedMB; > } > diff -rw vdr-1.3.12/tools.h vdr-1.3.12_patched/tools.h 78a79,80 > int UsedDirSpaceMB(const char *pszDirectory); > int UsedMatchingDirSpaceMB(const char *pszDirectory, const char* pszDirSuffix); diff -rw vdr-1.3.12/videodir.c vdr-1.3.12_patched/videodir.c 19a20,21 > #include "config.h" > 30a33 > int ToBeDeletedMB(void); 60a64,68 > int cVideoDirectory::ToBeDeletedMB(void) > { > return UsedMatchingDirSpaceMB(name ? name : VideoDirectory, ".del"); > } > 186c194 < int free = 0, used = 0; --- > int free = 0, used = 0, deleted = 0; 191a200,202 > if (Setup.FreeDiskSpaceCalc) { > deleted += Dir.ToBeDeletedMB(); > } 192a204,205 > free += deleted; > used -= deleted;