diff options
author | Arno <arno@disconnect.de> | 2017-12-19 09:21:21 +0100 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-12-19 09:24:57 +0100 |
commit | 4b828d497a5c0b99a5ce34a3f9a607ddd7e7d1d7 (patch) | |
tree | db63628cc26a06fec5a0275212ef91e2863a6436 | |
parent | 444876f36473d7e0d5577e519145193dd43ad1e4 (diff) | |
download | ShemovCleaner-4b828d497a5c0b99a5ce34a3f9a607ddd7e7d1d7.tar.gz ShemovCleaner-4b828d497a5c0b99a5ce34a3f9a607ddd7e7d1d7.tar.bz2 ShemovCleaner-4b828d497a5c0b99a5ce34a3f9a607ddd7e7d1d7.zip |
Use QDirIterator in FileWidget
According to the documentation it should be faster, but it also has its
drawbacks. We can't use the progressbar any more, because we don't know
how many files we're going to get. Show the number of files in the
statusMessage instead, and show the total size of analyzed files in GB
when we're done.
-rw-r--r-- | filewidget.cpp | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/filewidget.cpp b/filewidget.cpp index ba8f617..7cb884b 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -31,6 +31,7 @@ #include <QApplication> #include <QContextMenuEvent> #include <QSignalMapper> +#include <QDirIterator> #include "filewidget.h" #include "filesorter.h" @@ -229,17 +230,14 @@ void FileWidget::gatherData(){ QSettings s; QStringList copyDirs = s.value("copydirs").toStringList(); QStringList copyDirFiles; - foreach(auto d, copyDirs){ - QDir copyDir(d); - foreach(auto cfi, copyDir.entryInfoList()){ - if(cfi.isFile()){ - copyDirFiles << cfi.fileName(); - } + for(const QString &d : copyDirs){ + QDirIterator it(d, QDir::Files | QDir::NoDotAndDotDot); + while(it.hasNext()){ + it.next(); + copyDirFiles << it.fileName(); } } - QDir d(mDir->text()); - QFileInfoList fl = d.entryInfoList(QStringList() << "*", QDir::Files | QDir::Dirs | QDir::NoDot, QDir::Name | QDir::DirsFirst); mFileView->setSortingEnabled(false); mModel->clear(); QStandardItem *root = mModel->invisibleRootItem(); @@ -250,15 +248,15 @@ void FileWidget::gatherData(){ QMimeDatabase db; qApp->setOverrideCursor(Qt::BusyCursor); - QString gatherMsg(tr("Gathering data: %1")); - mProgressBar->reset(); - mProgressBar->setMinimum(0); - mProgressBar->setMaximum(fl.count() - 1); - int count = 0; + QString gatherMsg(tr("Gathering data: %1 (%2)")); + int count = 1; + qint64 totalSize = 0; qApp->processEvents(); - foreach(QFileInfo fi, fl){ - emit statusMessage(gatherMsg.arg(fi.fileName())); + QDirIterator it(mDir->text(), QDir::Files | QDir::Dirs | QDir::NoDot); + while(it.hasNext()){ + QFileInfo fi = it.next(); + emit statusMessage(gatherMsg.arg(fi.fileName()).arg(QString::number(count))); QMimeType mime = db.mimeTypeForFile(fi); QList<QStandardItem*> fData; FileAttrs attr = NotPresent; @@ -331,6 +329,8 @@ void FileWidget::gatherData(){ fData[CopiedColumn]->setText(QChar(0x2640)); fData[CopiedColumn]->setForeground(redBrush); } + ++count; + totalSize += sizemb; } fData[DurationColumn]->setText(duration); fData[DurationColumn]->setData(seconds, SecondsRole); @@ -345,14 +345,13 @@ void FileWidget::gatherData(){ fData[i]->setData(md5, MD5SumRole); } root->appendRow(fData); - ++count; - mProgressBar->setValue(count); } mFileView->setSortingEnabled(true); readHeaderData(); qApp->restoreOverrideCursor(); selectFirst(); - emit statusMessage(QString(tr("Gathering data... DONE!"))); + double totalSizeGB = totalSize / 1024 / 1024 / 1024.0; + emit statusMessage(QString(tr("Analyzed %1 file(s) / (%2 GB)").arg(QString::number(count)).arg(QString::number(totalSizeGB, 'f', 2)))); emit freeSpaceChanged(mDir->text()); } |