QFileInfoGatherer: general cleanups

- fix typo in comment
- make translateDriveName file-static
- use QList::reserve()
- explicit ctor
- annotate functions called by owning thread/run()
- iconProvider() and resolveSymlinks() shouldn't be slots
- private instead of protected
- run() marked Q_DECL_OVERRIDE
- annotate which members are protected by 'mutex'

Change-Id: Ic176a030b0597c98f48185efd17260fd62532460
Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
Marc Mutz 2012-08-07 19:45:16 +02:00 committed by The Qt Project
parent 0c2b7b1020
commit 07c44f7bd3
2 changed files with 14 additions and 12 deletions

View File

@ -129,7 +129,7 @@ QFileIconProvider *QFileInfoGatherer::iconProvider() const
void QFileInfoGatherer::fetchExtendedInformation(const QString &path, const QStringList &files) void QFileInfoGatherer::fetchExtendedInformation(const QString &path, const QStringList &files)
{ {
QMutexLocker locker(&mutex); QMutexLocker locker(&mutex);
// See if we already have this dir/file in our que // See if we already have this dir/file in our queue
int loc = this->path.lastIndexOf(path); int loc = this->path.lastIndexOf(path);
while (loc > 0) { while (loc > 0) {
if (this->files.at(loc) == files) { if (this->files.at(loc) == files) {
@ -243,7 +243,7 @@ QExtendedInformation QFileInfoGatherer::getInfo(const QFileInfo &fileInfo) const
return info; return info;
} }
QString QFileInfoGatherer::translateDriveName(const QFileInfo &drive) const static QString translateDriveName(const QFileInfo &drive)
{ {
QString driveName = drive.absoluteFilePath(); QString driveName = drive.absoluteFilePath();
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
@ -280,6 +280,7 @@ void QFileInfoGatherer::getFileInfos(const QString &path, const QStringList &fil
if (files.isEmpty()) { if (files.isEmpty()) {
infoList = QDir::drives(); infoList = QDir::drives();
} else { } else {
infoList.reserve(files.count());
for (int i = 0; i < files.count(); ++i) for (int i = 0; i < files.count(); ++i)
infoList << QFileInfo(files.at(i)); infoList << QFileInfo(files.at(i));
} }

View File

@ -157,36 +157,37 @@ Q_SIGNALS:
void directoryLoaded(const QString &path); void directoryLoaded(const QString &path);
public: public:
QFileInfoGatherer(QObject *parent = 0); explicit QFileInfoGatherer(QObject *parent = 0);
~QFileInfoGatherer(); ~QFileInfoGatherer();
// only callable from this->thread():
void clear(); void clear();
void removePath(const QString &path); void removePath(const QString &path);
QExtendedInformation getInfo(const QFileInfo &info) const; QExtendedInformation getInfo(const QFileInfo &info) const;
QFileIconProvider *iconProvider() const;
bool resolveSymlinks() const;
public Q_SLOTS: public Q_SLOTS:
void list(const QString &directoryPath); void list(const QString &directoryPath);
void fetchExtendedInformation(const QString &path, const QStringList &files); void fetchExtendedInformation(const QString &path, const QStringList &files);
void updateFile(const QString &path); void updateFile(const QString &path);
void setResolveSymlinks(bool enable); void setResolveSymlinks(bool enable);
bool resolveSymlinks() const;
void setIconProvider(QFileIconProvider *provider); void setIconProvider(QFileIconProvider *provider);
QFileIconProvider *iconProvider() const;
protected:
void run();
void getFileInfos(const QString &path, const QStringList &files);
private: private:
void run() Q_DECL_OVERRIDE;
// called by run():
void getFileInfos(const QString &path, const QStringList &files);
void fetch(const QFileInfo &info, QElapsedTimer &base, bool &firstTime, QList<QPair<QString, QFileInfo> > &updatedFiles, const QString &path); void fetch(const QFileInfo &info, QElapsedTimer &base, bool &firstTime, QList<QPair<QString, QFileInfo> > &updatedFiles, const QString &path);
QString translateDriveName(const QFileInfo &drive) const;
private:
mutable QMutex mutex; mutable QMutex mutex;
// begin protected by mutex
QWaitCondition condition; QWaitCondition condition;
QAtomicInt abort;
QStack<QString> path; QStack<QString> path;
QStack<QStringList> files; QStack<QStringList> files;
// end protected by mutex
QAtomicInt abort;
#ifndef QT_NO_FILESYSTEMWATCHER #ifndef QT_NO_FILESYSTEMWATCHER
QFileSystemWatcher *watcher; QFileSystemWatcher *watcher;