--Boundary-00=_PGYiIZtTfdDoNWn Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline On Thursday 24 July 2008 23:44:14 Alex Merry wrote: > On Thursday 24 July 2008 22:03:06 Sebastian Tr=FCg wrote: > > The attached patch reverts my previous patch and marks the whole > > KDiskFreeSpace class deprecated (although that would not link here so I > > marked the methods). > > A new class takes its place that works 100% sync and has a rather nice > > API. > > > > May I commit? > Other than that (sorry, I'm a bit obsessive about apidocs), I think it > looks great. no need to be sorry. We want this to be right this time. :) Updated patch attached. Cheers, Sebastian --Boundary-00=_PGYiIZtTfdDoNWn Content-Type: text/x-diff; charset="iso-8859-1"; name="kdiskfreespace.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="kdiskfreespace.diff" Index: kio/kfile/kdiskfreespace.h =================================================================== --- kio/kfile/kdiskfreespace.h (revision 837497) +++ kio/kfile/kdiskfreespace.h (working copy) @@ -3,7 +3,6 @@ * * Copyright 2007 David Faure * Copyright 2008 Dirk Mueller - * Copyright 2008 Sebastian Trug * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -28,36 +27,11 @@ #include #include -#include - /** - * \class KDiskFreeSpacePrivate kdiskfreespace.h KDiskFreeSpace - * - * \brief Determine the space left on an arbitrary partition. - * - * This class wraps around the system calls to detemermine the - * free space left in a specific partition. It supports arbitrary - * paths and the mount point of the partition in question. - * - * The class is intended to be used as a fire-and-forget object - * very much like KJob. It is recommended to use the static - * findUsageInfo method instead of creating ones own instance: - * - * \code - * connect( KDiskFreeSpace::findUsageInfo( myPath ), SIGNAL(finished(KDiskFreeSpace*)), - * this, SLOT(mySlot(KDiskFreeSpace*)) ); - * - * void mySlot( KDiskFreeSpace* df ) { - * if (!df->error()) - * doSomethingWithTheDFInfo( df->mountPoint(), - * df->size(), - * df->used(), - * df->avail() ); - * } - * \code + * \deprecated Use KDiskFreeSpaceInfo */ -class KIO_EXPORT KDiskFreeSpace : public QObject // KDE 5 -> make it a KIO::Job +class KIO_EXPORT KDiskFreeSpace : public QObject { Q_OBJECT @@ -65,10 +39,8 @@ /** * Constructor - * - * It is recommended to use findUsageInfo instead. */ - explicit KDiskFreeSpace( QObject *parent = 0 ); + KDE_DEPRECATED explicit KDiskFreeSpace( QObject *parent = 0 ); /** * Destructor - this object autodeletes itself when it's done @@ -76,56 +48,6 @@ ~KDiskFreeSpace(); /** - * The mount point the requested partition is mounted on. - * - * Only valid after a successful run of readDF() or findUsageInfo() - * (ie. error() returns 0). - * - * \since 4.2 - */ - QString mountPoint() const; - - /** - * The size of the requested partition. - * - * Only valid after a successful run of readDF() or findUsageInfo() - * (ie. error() returns 0). - * - * \since 4.2 - */ - KIO::filesize_t size() const; - - /** - * The used space of the requested partition. - * - * Only valid after a successful run of readDF() or findUsageInfo() - * (ie. error() returns 0). - * - * \since 4.2 - */ - KIO::filesize_t used() const; - - /** - * The available space of the requested partition. - * - * Only valid after a successful run of readDF() or findUsageInfo() - * (ie. error() returns 0). - * - * \since 4.2 - */ - KIO::filesize_t avail() const; - - /** - * Returns the error code, if there has been an error. - * Only call this method from the slot connected to finished(). - * - * \return the error code for this job, 0 is no error. - * - * \since 4.2 - */ - int error() const; - - /** * Call this to fire a search on the disk usage information * for @p mountPoint. * The foundMountPoint() signal will be emitted @@ -137,10 +59,8 @@ * on a given instance of KDiskFreeSpace, given that it handles only * the request for one mount point and then auto-deletes itself. * Suicidal objects are not reusable... - * - * It is recommended to use findUsageInfo instead. */ - bool readDF( const QString & mountPoint ); + KDE_DEPRECATED bool readDF( const QString & mountPoint ); /** * Call this to fire a search on the disk usage information @@ -149,7 +69,7 @@ * if this mount point is found, with the info requested. * The done() signal is emitted in any case. */ - static KDiskFreeSpace * findUsageInfo( const QString & path ); // KDE 5 -> move this into the KIO namespace + KDE_DEPRECATED static KDiskFreeSpace * findUsageInfo( const QString & path ); Q_SIGNALS: /** @@ -158,24 +78,14 @@ * @param kibSize the total size of the partition in KiB * @param kibUsed the amount of KiB being used on the partition * @param kibAvail the available space on the partition in KiB - * \deprecated use finished */ void foundMountPoint( const QString & mountPoint, quint64 kibSize, quint64 kibUsed, quint64 kibAvail ); /** * Emitted when the request made via readDF is over, whether foundMountPoint was emitted or not. - * \deprecated use finished */ void done(); - /** - * Emitted once the request is done. Check error() to see if the call was - * successful. - * - * \since 4.2 - */ - void finished( KDiskFreeSpace* ); - private: class Private; Private * const d; Index: kio/kfile/kdiskfreespace.cpp =================================================================== --- kio/kfile/kdiskfreespace.cpp (revision 837497) +++ kio/kfile/kdiskfreespace.cpp (working copy) @@ -21,37 +21,25 @@ */ #include "kdiskfreespace.h" -#include -#include +#include "kdiskfreespaceinfo.h" #include #include -#include -#include -#include -#include -class KDiskFreeSpace::Private + +struct KDiskFreeSpace::Private { -public: Private(KDiskFreeSpace *parent) - : m_parent(parent), - total(0), - avail(0), - error(-1) + : m_parent(parent) {} bool _k_calculateFreeSpace(); KDiskFreeSpace *m_parent; QString m_path; - - QString mountPoint; - KIO::filesize_t total; - KIO::filesize_t avail; - int error; }; + KDiskFreeSpace::KDiskFreeSpace(QObject *parent) : QObject(parent), d(new Private(this)) { @@ -64,90 +52,27 @@ } -QString KDiskFreeSpace::mountPoint() const -{ - return d->mountPoint; -} - - -KIO::filesize_t KDiskFreeSpace::size() const -{ - return d->total; -} - - -KIO::filesize_t KDiskFreeSpace::used() const -{ - return d->total - d->avail; -} - - -KIO::filesize_t KDiskFreeSpace::avail() const -{ - return d->avail; -} - - -int KDiskFreeSpace::error() const -{ - return d->error; -} - - bool KDiskFreeSpace::readDF( const QString & mountPoint ) { d->m_path = mountPoint; return d->_k_calculateFreeSpace(); } -#ifdef Q_OS_WIN -#include -#include -#else -#include -#endif bool KDiskFreeSpace::Private::_k_calculateFreeSpace() { - // determine the mount point - KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath( m_path ); - if (mp) - mountPoint = mp->mountPoint(); - - error = -1; - -#ifdef Q_OS_WIN - quint64 availUser; - QFileInfo fi(mountPoint); - QString dir = QDir::toNativeSeparators(fi.absoluteDir().canonicalPath()); - - if(GetDiskFreeSpaceExW((LPCWSTR)dir.utf16(), - (PULARGE_INTEGER)&availUser, - (PULARGE_INTEGER)&total, - (PULARGE_INTEGER)&avail) != 0) { - error = 0; + KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo( m_path ); + if ( info.isValid() ) { + quint64 sizeKiB = info.size() / 1024; + quint64 availKiB = info.available() / 1024; + emit m_parent->foundMountPoint( info.mountPoint(), sizeKiB, sizeKiB-availKiB, availKiB ); } -#else - struct statvfs statvfs_buf; - if (!statvfs(QFile::encodeName(m_path).constData(), &statvfs_buf)) { - avail = statvfs_buf.f_bavail * statvfs_buf.f_frsize; - total = statvfs_buf.f_blocks * statvfs_buf.f_frsize; - error = 0; - } -#endif - - if (!error) { - quint64 totalKib = total / 1024; - quint64 availKib = avail / 1024; - emit m_parent->foundMountPoint( mountPoint, totalKib, totalKib-availKib, availKib ); - } - emit m_parent->done(); - emit m_parent->finished( m_parent ); + m_parent->deleteLater(); - return !error; + return info.isValid(); } KDiskFreeSpace * KDiskFreeSpace::findUsageInfo( const QString & path ) Index: kio/kfile/kdiskfreespaceinfo.h =================================================================== --- kio/kfile/kdiskfreespaceinfo.h (revision 0) +++ kio/kfile/kdiskfreespaceinfo.h (revision 0) @@ -0,0 +1,131 @@ +/* + * kdiskfreespaceinfo.h + * + * Copyright 2008 Sebastian Trug + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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. + */ + +#ifndef _KDISK_FREE_SPACE_INFO_H_ +#define _KDISK_FREE_SPACE_INFO_H_ + +#include +#include + +#include +#include + +/** + * \class KDiskFreeSpaceInfo kdiskfreespaceinfo.h KDiskFreeSpaceInfo + * + * \brief Determine the space left on an arbitrary partition. + * + * This class determines the free space left on the partition that holds a given + * path. This path can be the mount point or any file or directory on the + * partition. + * + * To find how much space is available on the partition containing @p path, + * simply do the following: + * + * \code + * KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo( path ); + * if( info.isValid() ) + * doSomething( info.available() ); + * \code + * + * \author Sebastian Trueg + * + * \since 4.2 + */ +class KIO_EXPORT KDiskFreeSpaceInfo +{ +public: + /** + * Copy constructor + */ + KDiskFreeSpaceInfo( const KDiskFreeSpaceInfo& ); + + /** + * Destructor + */ + ~KDiskFreeSpaceInfo(); + + /** + * Assignment operator + */ + KDiskFreeSpaceInfo& operator=( const KDiskFreeSpaceInfo& ); + + /** + * \return \p true if the available disk space was successfully + * determined and the values from mountPoint(), size(), available(), + * and used() are valid. \p false otherwise. + */ + bool isValid() const; + + /** + * The mount point of the partition the requested path points to + * + * Only valid if isValid() returns \p true. + */ + QString mountPoint() const; + + /** + * The total size of the partition mounted at mountPoint() + * + * Only valid if isValid() returns \p true. + * + * \return Total size of the requested partition in bytes. + */ + KIO::filesize_t size() const; + + /** + * The available space in the partition mounted at mountPoint() + * + * Only valid if isValid() returns \p true. + * + * \return Available space left on the requested partition in bytes. + */ + KIO::filesize_t available() const; + + /** + * The used space in the partition mounted at mountPoint() + * + * Only valid if isValid() returns \p true. + * + * \return Used space on the requested partition in bytes. + */ + KIO::filesize_t used() const; + + /** + * Static method used to determine the free disk space. + * + * \param path An arbitrary path. The available space will be + * determined for the partition containing path. + * + * Check isValid() to see if the process was successful. Then + * use mountPoint(), size(), available(), and used() to access + * the requested values. + */ + static KDiskFreeSpaceInfo freeSpaceInfo( const QString& path ); + +private: + KDiskFreeSpaceInfo(); + + class Private; + QSharedDataPointer d; +}; + +#endif + Index: kio/kfile/kdiskfreespaceinfo.cpp =================================================================== --- kio/kfile/kdiskfreespaceinfo.cpp (revision 0) +++ kio/kfile/kdiskfreespaceinfo.cpp (revision 0) @@ -0,0 +1,141 @@ +/* + * kdiskfreespaceinfo.h + * + * Copyright 2008 Sebastian Trug + * + * Based on kdiskfreespace.h + * Copyright 2007 David Faure + * Copyright 2008 Dirk Mueller + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License version 2 as published by the Free Software Foundation. + * + * 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 "kdiskfreespaceinfo.h" + +#include +#include + +#include + +#ifdef Q_OS_WIN +#include +#include +#else +#include +#endif + + +class KDiskFreeSpaceInfo::Private : public QSharedData +{ +public: + Private() + : valid(false), + size(0), + available(0) { + } + + bool valid; + QString mountPoint; + KIO::filesize_t size; + KIO::filesize_t available; +}; + + +KDiskFreeSpaceInfo::KDiskFreeSpaceInfo() + : d(new Private()) +{ +} + + +KDiskFreeSpaceInfo::KDiskFreeSpaceInfo( const KDiskFreeSpaceInfo& other ) +{ + d = other.d; +} + + +KDiskFreeSpaceInfo::~KDiskFreeSpaceInfo() +{ +} + + +KDiskFreeSpaceInfo& KDiskFreeSpaceInfo::operator=( const KDiskFreeSpaceInfo& other ) +{ + d = other.d; + return *this; +} + + +bool KDiskFreeSpaceInfo::isValid() const +{ + return d->valid; +} + + +QString KDiskFreeSpaceInfo::mountPoint() const +{ + return d->mountPoint; +} + + +KIO::filesize_t KDiskFreeSpaceInfo::size() const +{ + return d->size; +} + + +KIO::filesize_t KDiskFreeSpaceInfo::available() const +{ + return d->available; +} + + +KIO::filesize_t KDiskFreeSpaceInfo::used() const +{ + return d->size - d->available; +} + + +KDiskFreeSpaceInfo KDiskFreeSpaceInfo::freeSpaceInfo( const QString& path ) +{ + KDiskFreeSpaceInfo info; + + // determine the mount point + KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath( path ); + if (mp) + info.d->mountPoint = mp->mountPoint(); + +#ifdef Q_OS_WIN + quint64 availUser; + QFileInfo fi(info.d->mountPoint); + QString dir = QDir::toNativeSeparators(fi.absoluteDir().canonicalPath()); + + if(GetDiskFreeSpaceExW((LPCWSTR)dir.utf16(), + (PULARGE_INTEGER)&availUser, + (PULARGE_INTEGER)&info.d->size, + (PULARGE_INTEGER)&info.d->available) != 0) { + info.d->valid = true; + } +#else + struct statvfs statvfs_buf; + + if (!statvfs(QFile::encodeName(path).constData(), &statvfs_buf)) { + info.d->available = statvfs_buf.f_bavail * statvfs_buf.f_frsize; + info.d->size = statvfs_buf.f_blocks * statvfs_buf.f_frsize; + info.d->valid = true; + } +#endif + + return info; +} Index: kio/CMakeLists.txt =================================================================== --- kio/CMakeLists.txt (revision 837497) +++ kio/CMakeLists.txt (working copy) @@ -17,6 +17,9 @@ ${CMAKE_CURRENT_BINARY_DIR}/kfile ${CMAKE_CURRENT_BINARY_DIR} # e.g. for observer_stub.h ${CMAKE_SOURCE_DIR}/kwallet/client + ${CMAKE_SOURCE_DIR}/nepomuk + ${CMAKE_SOURCE_DIR}/nepomuk/core + ${CMAKE_SOURCE_DIR}/nepomuk/core/ontology ${KDE4_KDEUI_INCLUDES} ${CMAKE_SOURCE_DIR}/solid ${CMAKE_BINARY_DIR}/solid @@ -36,6 +39,7 @@ endif(WIN32) configure_file(kio/config-kdirwatch.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kio/config-kdirwatch.h ) +configure_file(kio/config-kfileitem.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kio/config-kfileitem.h ) configure_file(kssl/ksslconfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/kssl/ksslconfig.h ) #macro_additional_clean_files( ${CMAKE_CURRENT_BINARY_DIR}/kssl/ksslconfig.h ) @@ -157,6 +161,7 @@ kfile/kdevicelistitem.cpp kfile/kdevicelistmodel.cpp kfile/kdiskfreespace.cpp + kfile/kdiskfreespaceinfo.cpp kfile/kencodingfiledialog.cpp kfile/kfile.cpp kfile/kfiledialog.cpp @@ -246,6 +251,9 @@ target_link_libraries(kio ${KDE4_KDEUI_LIBS} ${ZLIB_LIBRARY} ${STRIGI_STREAMANALYZER_LIBRARY} ${STRIGI_STREAMS_LIBRARY} ${KDE4_SOLID_LIBS} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${X11_LIBRARIES}) +if(HAVE_NEPOMUK) + target_link_libraries(kio nepomuk) +endif(HAVE_NEPOMUK) set(SYS_INOTIFY_H_FOUND 0) if(SYS_INOTIFY_H_FOUND) @@ -379,6 +387,7 @@ kfile/kabstractfilewidget.h kfile/kdevicelistmodel.h kfile/kdiskfreespace.h + kfile/kdiskfreespaceinfo.h kfile/kencodingfiledialog.h kfile/kfile.h kfile/kfiledialog.h Index: includes/KDiskFreeSpaceInfo =================================================================== --- includes/KDiskFreeSpaceInfo (revision 0) +++ includes/KDiskFreeSpaceInfo (revision 0) @@ -0,0 +1 @@ +#include "../kdiskfreespaceinfo.h" Index: includes/CMakeLists.txt =================================================================== --- includes/CMakeLists.txt (revision 837497) +++ includes/CMakeLists.txt (working copy) @@ -147,6 +147,7 @@ KDirSelectDialog KDirWatch KDiskFreeSpace + KDiskFreeSpaceInfo KDoubleNumInput KDoubleSpinBox KDoubleValidator --Boundary-00=_PGYiIZtTfdDoNWn--