// recursively calculates the selected folder size int64_t CGUIWindowFileManager::CalculateFolderSize(const CStdString &strDirectory, CGUIDialogProgress *pProgress) { const CURL pathToUrl(strDirectory); if (pProgress) { // update our progress control pProgress->Progress(); pProgress->SetLine(1, strDirectory); if (pProgress->IsCanceled()) return -1; } // start by calculating the size of the files in this folder... int64_t totalSize = 0; CFileItemList items; CVirtualDirectory rootDir; rootDir.SetSources(*CMediaSourceSettings::Get().GetSources("files")); rootDir.GetDirectory(pathToUrl, items, false); for (int i=0; i < items.Size(); i++) { if (items[i]->m_bIsFolder && !items[i]->IsParentFolder()) // folder { int64_t folderSize = CalculateFolderSize(items[i]->GetPath(), pProgress); if (folderSize < 0) return -1; totalSize += folderSize; } else // file totalSize += items[i]->m_dwSize; } return totalSize; }
// recursively calculates the selected folder size __int64 CGUIWindowFileManager::CalculateFolderSize(const CStdString &strDirectory, CGUIDialogProgress *pProgress) { if (pProgress) { // update our progress control pProgress->Progress(); pProgress->SetLine(1, strDirectory); if (pProgress->IsCanceled()) return -1; } // start by calculating the size of the files in this folder... __int64 totalSize = 0; CFileItemList items; CVirtualDirectory rootDir; rootDir.SetSources(g_settings.m_fileSources); rootDir.GetDirectory(strDirectory, items, false); for (int i=0; i < items.Size(); i++) { if (items[i]->m_bIsFolder && !items[i]->IsParentFolder()) // folder { __int64 folderSize = CalculateFolderSize(items[i]->m_strPath, pProgress); if (folderSize < 0) return -1; totalSize += folderSize; } else // file totalSize += items[i]->m_dwSize; } return totalSize; }