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()));