diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp index bd2bce0609..1a8607b8e2 100644 --- a/rbutil/rbutilqt/base/utils.cpp +++ b/rbutil/rbutilqt/base/utils.cpp @@ -114,6 +114,18 @@ QString Utils::resolvePathCase(QString path) //! @param path path on the filesystem to check //! @return size in bytes qulonglong Utils::filesystemFree(QString path) +{ + return filesystemSize(path, FilesystemFree); +} + + +qulonglong Utils::filesystemTotal(QString path) +{ + return filesystemSize(path, FilesystemTotal); +} + + +qulonglong Utils::filesystemSize(QString path, enum Utils::Size type) { qlonglong size = 0; #if defined(Q_OS_LINUX) || defined(Q_OS_MACX) @@ -123,16 +135,30 @@ qulonglong Utils::filesystemFree(QString path) ret = statvfs(qPrintable(path), &fs); - if(ret == 0) - size = (qulonglong)fs.f_frsize * (qulonglong)fs.f_bavail; + if(ret == 0) { + if(type == FilesystemFree) { + size = (qulonglong)fs.f_frsize * (qulonglong)fs.f_bavail; + } + if(type == FilesystemTotal) { + size = (qulonglong)fs.f_frsize * (qulonglong)fs.f_blocks; + } + } #endif #if defined(Q_OS_WIN32) BOOL ret; ULARGE_INTEGER freeAvailBytes; + ULARGE_INTEGER totalNumberBytes; - ret = GetDiskFreeSpaceExW((LPCTSTR)path.utf16(), &freeAvailBytes, NULL, NULL); - if(ret) - size = freeAvailBytes.QuadPart; + ret = GetDiskFreeSpaceExW((LPCTSTR)path.utf16(), &freeAvailBytes, + &totalNumberBytes, NULL); + if(ret) { + if(type == FilesystemFree) { + size = freeAvailBytes.QuadPart; + } + if(type == FilesystemTotal) { + size = totalNumberBytes.QuadPart; + } + } #endif qDebug() << "[Utils] Filesystem free:" << path << size; return size; diff --git a/rbutil/rbutilqt/base/utils.h b/rbutil/rbutilqt/base/utils.h index ae02a2ca95..bff05cce0a 100644 --- a/rbutil/rbutilqt/base/utils.h +++ b/rbutil/rbutilqt/base/utils.h @@ -31,9 +31,16 @@ class Utils : public QObject { public: + enum Size { + FilesystemTotal, + FilesystemFree + }; + static bool recursiveRmdir(const QString &dirName); static QString resolvePathCase(QString path); static qulonglong filesystemFree(QString path); + static qulonglong filesystemTotal(QString path); + static qulonglong filesystemSize(QString path, enum Size type); static QString findExecutable(QString name); static QString checkEnvironment(bool permission); static int compareVersionStrings(QString s1, QString s2); diff --git a/rbutil/rbutilqt/sysinfo.cpp b/rbutil/rbutilqt/sysinfo.cpp index a9fa5999b7..a28a9bb812 100644 --- a/rbutil/rbutilqt/sysinfo.cpp +++ b/rbutil/rbutilqt/sysinfo.cpp @@ -63,9 +63,10 @@ QString Sysinfo::getInfo() info += "" + tr("Filesystem") + "
"; QStringList drives = Autodetection::mountpoints(); for(int i = 0; i < drives.size(); i++) { - info += tr("%1, %2 MiB available") + info += tr("%1, %2 GiB of %3 GiB available") .arg(QDir::toNativeSeparators(drives.at(i))) - .arg(Utils::filesystemFree(drives.at(i)) / (1024*1024)); + .arg((double)Utils::filesystemFree(drives.at(i)) / (1<<30), 0, 'f', 2) + .arg((double)Utils::filesystemTotal(drives.at(i)) / (1<<30), 0, 'f', 2); if(i + 1 < drives.size()) info += "
"; }