From 4b828d497a5c0b99a5ce34a3f9a607ddd7e7d1d7 Mon Sep 17 00:00:00 2001 From: Arno Date: Tue, 19 Dec 2017 09:21:21 +0100 Subject: 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. --- filewidget.cpp | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) (limited to 'filewidget.cpp') diff --git a/filewidget.cpp b/filewidget.cpp index ba8f617..7cb884b 100644 --- a/filewidget.cpp +++ b/filewidget.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #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 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()); } -- cgit v1.2.3-70-g09d2