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