Mercurial > dedupe
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 1:aae83c0a771d | 2:2833b7f8884a |
|---|---|
| 1 #include "CompileTimeConstants.h" | |
| 2 | |
| 1 #include "DataController.hpp" | 3 #include "DataController.hpp" |
| 2 | 4 |
| 3 #include "MemoryDBLink.hpp" | 5 #include "MemoryDBLink.hpp" |
| 6 #include "SqliteDBLink.hpp" | |
| 4 | 7 |
| 5 #include "PermissionException.hpp" | 8 #include "PermissionException.hpp" |
| 6 #include "DataController.hpp" | 9 #include "DataController.hpp" |
| 7 | 10 |
| 8 #include <QtGui/QApplication> | 11 #include <QtGui/QApplication> |
| 12 #include <QtCore/QTimer> | 15 #include <QtCore/QTimer> |
| 13 #include <QtCore/QCryptographicHash> | 16 #include <QtCore/QCryptographicHash> |
| 14 #include <QtCore/QDateTime> | 17 #include <QtCore/QDateTime> |
| 15 | 18 |
| 16 #include <QtGui/QMainWindow> | 19 #include <QtGui/QMainWindow> |
| 20 #include <QtGui/QDesktopServices> | |
| 17 #include <QtGui/QTreeWidget> | 21 #include <QtGui/QTreeWidget> |
| 18 #include <QtGui/QHeaderView> | 22 #include <QtGui/QHeaderView> |
| 19 #include <QtGui/QMenuBar> | 23 #include <QtGui/QMenuBar> |
| 20 #include <QtGui/QToolBar> | 24 #include <QtGui/QToolBar> |
| 21 #include <QtGui/QDoubleSpinBox> | 25 #include <QtGui/QDoubleSpinBox> |
| 23 #include <QtGui/QHBoxLayout> | 27 #include <QtGui/QHBoxLayout> |
| 24 #include <QtGui/QProgressBar> | 28 #include <QtGui/QProgressBar> |
| 25 | 29 |
| 26 #include "EditDistance.hpp" | 30 #include "EditDistance.hpp" |
| 27 | 31 |
| 28 #include <cassert> | 32 void DataController::findFiles(const QDir& dir, QStringList& list) |
| 29 void findFiles(const QDir& dir, FileDBLink& dblink) | 33 { |
| 30 { | |
| 31 /* | |
| 32 QProgressDialog progressDialog(this); | |
| 33 progressDialog.setCancelButtonText(tr("&Cancel")); | |
| 34 progressDialog.setRange(0, files.size()); | |
| 35 progressDialog.setWindowTitle(tr("Find Files")); | |
| 36 */ | |
| 37 | |
| 38 foreach(QString filename, dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs)) { | 34 foreach(QString filename, dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs)) { |
| 39 filename = dir.absoluteFilePath(filename); | 35 filename = dir.absoluteFilePath(filename); |
| 40 findFiles(QDir(filename), dblink); | 36 findFiles(QDir(filename), list); |
| 41 } | 37 } |
| 42 | 38 |
| 43 foreach(QString filename, dir.entryList(QDir::Files)) { | 39 foreach(QString filename, dir.entryList(QDir::Files)) { |
| 44 filename = dir.absoluteFilePath(filename); | 40 list << dir.absoluteFilePath(filename); |
| 41 } | |
| 42 } | |
| 43 | |
| 44 QStringList DataController::findFiles(const QDir& dir) | |
| 45 { | |
| 46 QStringList list; | |
| 47 findFiles(dir, list); | |
| 48 return list; | |
| 49 } | |
| 50 | |
| 51 void DataController::findFiles(const QDir& dir, FileDBLink& dblink) | |
| 52 { | |
| 53 QStringList list = findFiles(dir); | |
| 54 | |
| 55 QProgressBar bar; | |
| 56 | |
| 57 QDateTime last = QDateTime::currentDateTime(); | |
| 58 | |
| 59 bar.resize(200,25); | |
| 60 bar.setValue(0); | |
| 61 bar.setMinimum(0); | |
| 62 bar.setMaximum(list.size()); | |
| 63 bar.show(); | |
| 64 | |
| 65 connect(this, SIGNAL(populateProgress(int)), &bar, SLOT(setValue(int))); | |
| 66 | |
| 67 int n = 0; | |
| 68 foreach(QString filename, findFiles(dir)) { | |
| 45 try { | 69 try { |
| 46 dblink.updateIfModified(filename); | 70 dblink.updateIfModified(filename); |
| 47 } | 71 } |
| 48 catch (const PermissionException& e) { | 72 catch (const PermissionException& e) { |
| 49 qDebug()<<e.toString(); | 73 qDebug() << e.toString(); |
| 50 } | 74 } |
| 51 catch (Exception& e) { | 75 catch (Exception& e) { |
| 52 qDebug()<<e.toString(); | 76 qDebug() << e.toString(); |
| 53 exit(1); | 77 exit(1); |
| 54 } | 78 } |
| 55 } | 79 |
| 56 } | 80 emit populateProgress(++n); |
| 81 | |
| 82 QDateTime now = QDateTime::currentDateTime(); | |
| 83 if (last.msecsTo(now) > 500) { | |
| 84 QCoreApplication::processEvents(); | |
| 85 last = now; | |
| 86 } | |
| 87 } | |
| 88 | |
| 89 } | |
| 90 | |
| 57 | 91 |
| 58 QTreeWidgetItem* DataController::createItem(const FileDBLink::DBInfo& info) | 92 QTreeWidgetItem* DataController::createItem(const FileDBLink::DBInfo& info) |
| 59 { | 93 { |
| 60 QTreeWidgetItem* item = new QTreeWidgetItem(); | 94 QTreeWidgetItem* item = new QTreeWidgetItem(); |
| 61 item->setData(0, Qt::DisplayRole, info.name()); | 95 item->setData(0, Qt::DisplayRole, info.name()); |
| 84 bool showMTimeDups, bool showCheckSumDups, | 118 bool showMTimeDups, bool showCheckSumDups, |
| 85 float editDistanceCutoff) | 119 float editDistanceCutoff) |
| 86 { | 120 { |
| 87 tw->clear(); | 121 tw->clear(); |
| 88 | 122 |
| 89 const QList<QSharedPointer<FileDBLink::DBInfo> > elems = dblink->sortOn(FileDBLink::EDIT, true); | 123 const QList<QSharedPointer<FileDBLink::DBInfo> > elems = dblink->values(dir.path()); |
| 90 | 124 |
| 91 QProgressBar bar; | 125 QProgressBar bar; |
| 92 | 126 |
| 93 bar.resize(200,25); | 127 bar.resize(200,25); |
| 94 bar.setValue(0); | 128 bar.setValue(0); |
| 214 } | 248 } |
| 215 tw->setUpdatesEnabled(true); | 249 tw->setUpdatesEnabled(true); |
| 216 | 250 |
| 217 } | 251 } |
| 218 | 252 |
| 253 void DataController::setDir(const QDir& dir) | |
| 254 { | |
| 255 this->dir = dir.absolutePath(); | |
| 256 } | |
| 219 | 257 |
| 220 DataController::DataController() : showFullPath(false) | 258 DataController::DataController() : showFullPath(false) |
| 221 { | 259 { |
| 222 populateDelay = new QTimer(this); | 260 populateDelay = new QTimer(this); |
| 223 populateDelay->setSingleShot(true); | 261 populateDelay->setSingleShot(true); |
| 224 populateDelay->setInterval(500); | 262 populateDelay->setInterval(500); |
| 225 connect(populateDelay, SIGNAL(timeout()), this, SLOT(populate())); | 263 connect(populateDelay, SIGNAL(timeout()), this, SLOT(populate())); |
| 226 | 264 |
| 227 dblink = new MemoryDBLink(); | 265 QString dbpath = DB_DEFAULT_LOCATION; |
| 228 | 266 |
| 229 findFiles(QDir("."), *dblink); | 267 dbpath.replace(QRegExp("^~/"), |
| 268 QString("%1%2").arg(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)).arg(QDir::separator())); | |
| 269 | |
| 270 dblink = new SqliteDBLink(dbpath); | |
| 271 | |
| 272 setDir(QDir(".")); | |
| 273 | |
| 274 findFiles(dir, *dblink); | |
| 230 | 275 |
| 231 mw = new QMainWindow(); | 276 mw = new QMainWindow(); |
| 232 QMenuBar* mb = new QMenuBar(); | 277 QMenuBar* mb = new QMenuBar(); |
| 233 | 278 |
| 234 QMenu* menu = mb->addMenu("&View"); | 279 QMenu* menu = mb->addMenu("&View"); |
| 252 mtimeFilter->setCheckable(true); | 297 mtimeFilter->setCheckable(true); |
| 253 connect(mtimeFilter, SIGNAL(toggled(bool)), this, SLOT(delayPopulate())); | 298 connect(mtimeFilter, SIGNAL(toggled(bool)), this, SLOT(delayPopulate())); |
| 254 | 299 |
| 255 checksumFilter = filterBar->addAction("Checksum"); | 300 checksumFilter = filterBar->addAction("Checksum"); |
| 256 checksumFilter->setCheckable(true); | 301 checksumFilter->setCheckable(true); |
| 302 checksumFilter->setChecked(true); | |
| 257 connect(checksumFilter, SIGNAL(toggled(bool)), this, SLOT(delayPopulate())); | 303 connect(checksumFilter, SIGNAL(toggled(bool)), this, SLOT(delayPopulate())); |
| 258 | 304 |
| 259 QWidget* widget = new QWidget(); | 305 QWidget* widget = new QWidget(); |
| 260 QLayout* layout = new QHBoxLayout(); | 306 QLayout* layout = new QHBoxLayout(); |
| 261 layout->setContentsMargins(0,0,0,0); | 307 layout->setContentsMargins(0,0,0,0); |
| 263 layout->addWidget(new QLabel("Edit distance", widget)); | 309 layout->addWidget(new QLabel("Edit distance", widget)); |
| 264 editCutoffSpin = new QSpinBox(widget); | 310 editCutoffSpin = new QSpinBox(widget); |
| 265 layout->addWidget(editCutoffSpin); | 311 layout->addWidget(editCutoffSpin); |
| 266 editCutoffSpin->setMinimum(0); | 312 editCutoffSpin->setMinimum(0); |
| 267 editCutoffSpin->setMaximum(100); | 313 editCutoffSpin->setMaximum(100); |
| 268 editCutoffSpin->setValue(70); | 314 editCutoffSpin->setValue(0); |
| 269 editCutoffSpin->setSingleStep(10); | 315 editCutoffSpin->setSingleStep(10); |
| 270 editCutoffSpin->setSuffix("%"); | 316 editCutoffSpin->setSuffix("%"); |
| 271 connect(editCutoffSpin, SIGNAL(valueChanged(int)), this, SLOT(delayPopulate())); | 317 connect(editCutoffSpin, SIGNAL(valueChanged(int)), this, SLOT(delayPopulate())); |
| 272 filterBar->addWidget(widget); | 318 filterBar->addWidget(widget); |
| 273 | 319 |
