mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-23 10:22:49 +00:00
93 lines
2.5 KiB
C++
93 lines
2.5 KiB
C++
/*
|
|
This file is part of the KDE project
|
|
|
|
Copyright (C) 2008 Tobias Koenig <tokoe@kde.org>
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2 of the License, or (at your option) any later version.
|
|
|
|
This library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public License
|
|
along with this library; see the file COPYING.LIB. If not, write to
|
|
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
|
Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "discspaceutil.h"
|
|
|
|
#include <QtCore/QDirIterator>
|
|
#include <QtCore/QFileInfo>
|
|
|
|
#include <kdiskfreespaceinfo.h>
|
|
#include <kdebug.h>
|
|
#include <kde_file.h>
|
|
|
|
DiscSpaceUtil::DiscSpaceUtil( const QString &directory )
|
|
: mDirectory( directory ),
|
|
mFullSize( 0 )
|
|
{
|
|
calculateFullSize();
|
|
}
|
|
|
|
qulonglong DiscSpaceUtil::sizeOfPath( const QString &path )
|
|
{
|
|
QFileInfo info( path );
|
|
if ( !info.exists() ) {
|
|
return 0;
|
|
}
|
|
|
|
if ( info.isSymLink() ) {
|
|
// QFileInfo::size does not return the actual size of a symlink. #253776
|
|
KDE_struct_stat buff;
|
|
return static_cast<qulonglong>(KDE::lstat(path, &buff) == 0 ? buff.st_size : 0);
|
|
} else if ( info.isFile() ) {
|
|
return info.size();
|
|
} else if ( info.isDir() ) {
|
|
QDirIterator it( path, QDirIterator::NoIteratorFlags );
|
|
|
|
qulonglong sum = 0;
|
|
while ( it.hasNext() ) {
|
|
const QFileInfo info = it.next();
|
|
|
|
if (info.fileName() != QLatin1String(".") && info.fileName() != QLatin1String(".."))
|
|
sum += sizeOfPath( info.absoluteFilePath() );
|
|
}
|
|
|
|
return sum;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
double DiscSpaceUtil::usage( qulonglong size ) const
|
|
{
|
|
if ( mFullSize == 0 )
|
|
return 0;
|
|
|
|
return (((double)size*100)/(double)mFullSize);
|
|
}
|
|
|
|
qulonglong DiscSpaceUtil::size() const
|
|
{
|
|
return mFullSize;
|
|
}
|
|
|
|
QString DiscSpaceUtil::mountPoint() const
|
|
{
|
|
return mMountPoint;
|
|
}
|
|
|
|
void DiscSpaceUtil::calculateFullSize()
|
|
{
|
|
KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo( mDirectory );
|
|
if ( info.isValid() ) {
|
|
mFullSize = info.size();
|
|
mMountPoint = info.mountPoint();
|
|
}
|
|
}
|