Mercurial > dedupe
diff DataController.cpp @ 2:2833b7f8884a
Sql backend is working.
Need to get more speed on comparisson.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Tue, 21 Aug 2012 14:25:33 +0200 |
| parents | aae83c0a771d |
| children | 7a44ba08673d |
line wrap: on
line diff
--- a/DataController.cpp Mon Aug 20 17:32:58 2012 +0200 +++ b/DataController.cpp Tue Aug 21 14:25:33 2012 +0200 @@ -1,6 +1,9 @@ +#include "CompileTimeConstants.h" + #include "DataController.hpp" #include "MemoryDBLink.hpp" +#include "SqliteDBLink.hpp" #include "PermissionException.hpp" #include "DataController.hpp" @@ -14,6 +17,7 @@ #include <QtCore/QDateTime> #include <QtGui/QMainWindow> +#include <QtGui/QDesktopServices> #include <QtGui/QTreeWidget> #include <QtGui/QHeaderView> #include <QtGui/QMenuBar> @@ -25,36 +29,66 @@ #include "EditDistance.hpp" -#include <cassert> -void findFiles(const QDir& dir, FileDBLink& dblink) +void DataController::findFiles(const QDir& dir, QStringList& list) { - /* - QProgressDialog progressDialog(this); - progressDialog.setCancelButtonText(tr("&Cancel")); - progressDialog.setRange(0, files.size()); - progressDialog.setWindowTitle(tr("Find Files")); - */ - foreach(QString filename, dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs)) { filename = dir.absoluteFilePath(filename); - findFiles(QDir(filename), dblink); + findFiles(QDir(filename), list); } foreach(QString filename, dir.entryList(QDir::Files)) { - filename = dir.absoluteFilePath(filename); + list << dir.absoluteFilePath(filename); + } +} + +QStringList DataController::findFiles(const QDir& dir) +{ + QStringList list; + findFiles(dir, list); + return list; +} + +void DataController::findFiles(const QDir& dir, FileDBLink& dblink) +{ + QStringList list = findFiles(dir); + + QProgressBar bar; + + QDateTime last = QDateTime::currentDateTime(); + + bar.resize(200,25); + bar.setValue(0); + bar.setMinimum(0); + bar.setMaximum(list.size()); + bar.show(); + + connect(this, SIGNAL(populateProgress(int)), &bar, SLOT(setValue(int))); + + int n = 0; + foreach(QString filename, findFiles(dir)) { try { dblink.updateIfModified(filename); } catch (const PermissionException& e) { - qDebug()<<e.toString(); + qDebug() << e.toString(); } catch (Exception& e) { - qDebug()<<e.toString(); + qDebug() << e.toString(); exit(1); } + + emit populateProgress(++n); + + QDateTime now = QDateTime::currentDateTime(); + if (last.msecsTo(now) > 500) { + QCoreApplication::processEvents(); + last = now; + } } + } + QTreeWidgetItem* DataController::createItem(const FileDBLink::DBInfo& info) { QTreeWidgetItem* item = new QTreeWidgetItem(); @@ -86,7 +120,7 @@ { tw->clear(); - const QList<QSharedPointer<FileDBLink::DBInfo> > elems = dblink->sortOn(FileDBLink::EDIT, true); + const QList<QSharedPointer<FileDBLink::DBInfo> > elems = dblink->values(dir.path()); QProgressBar bar; @@ -216,6 +250,10 @@ } +void DataController::setDir(const QDir& dir) +{ + this->dir = dir.absolutePath(); +} DataController::DataController() : showFullPath(false) { @@ -224,9 +262,16 @@ populateDelay->setInterval(500); connect(populateDelay, SIGNAL(timeout()), this, SLOT(populate())); - dblink = new MemoryDBLink(); + QString dbpath = DB_DEFAULT_LOCATION; + + dbpath.replace(QRegExp("^~/"), + QString("%1%2").arg(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)).arg(QDir::separator())); - findFiles(QDir("."), *dblink); + dblink = new SqliteDBLink(dbpath); + + setDir(QDir(".")); + + findFiles(dir, *dblink); mw = new QMainWindow(); QMenuBar* mb = new QMenuBar(); @@ -254,6 +299,7 @@ checksumFilter = filterBar->addAction("Checksum"); checksumFilter->setCheckable(true); + checksumFilter->setChecked(true); connect(checksumFilter, SIGNAL(toggled(bool)), this, SLOT(delayPopulate())); QWidget* widget = new QWidget(); @@ -265,7 +311,7 @@ layout->addWidget(editCutoffSpin); editCutoffSpin->setMinimum(0); editCutoffSpin->setMaximum(100); - editCutoffSpin->setValue(70); + editCutoffSpin->setValue(0); editCutoffSpin->setSingleStep(10); editCutoffSpin->setSuffix("%"); connect(editCutoffSpin, SIGNAL(valueChanged(int)), this, SLOT(delayPopulate()));
