diff FileDBLink.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 b5943e4bf676
line wrap: on
line diff
--- a/FileDBLink.cpp	Mon Aug 20 17:32:58 2012 +0200
+++ b/FileDBLink.cpp	Tue Aug 21 14:25:33 2012 +0200
@@ -17,8 +17,18 @@
 void FileDBLink::updateIfModified(const QString& path)
 {
   QFileInfo fileinfo(path);
-  if (!exists(path)) {
+  FileDBLink::DBStatus status = existsWithMtime(path, fileinfo.lastModified());
+
+  switch (status) {
+  case FileDBLink::NONE: {
     addFile(fileinfo);
+    break;
+  }
+  case FileDBLink::MTIME_DIFFERENT: {
+    updateFile(fileinfo);
+  }
+  default: {
+  }
   }
 }
 
@@ -45,13 +55,39 @@
     }
   }
   
-  addFile(path, size, lastModified, hash);
+  addFile(path, size, lastModified, hash.result());
 
 }
 
-const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::sortOn(SORTORDER order, bool extended)
+void FileDBLink::updateFile(const QFileInfo& fileinfo)
+{
+  updateFile(fileinfo.absoluteFilePath(), fileinfo.size(), fileinfo.lastModified());
+}
+
+void FileDBLink::updateFile(const QString& path, qint64 size, const QDateTime& lastModified)
 {
-  QList<QSharedPointer<DBInfo> > list = (extended) ? computedValues() : computedValues();
+  QCryptographicHash hash( QCryptographicHash::Sha1 );
+  QFile file(path);
+  if ( file.open( QIODevice::ReadOnly ) ) {
+    hash.addData( file.readAll() );
+  }
+  else {
+    QString errorMsg = path + ": " + file.errorString();
+    qDebug()<<file.error();
+    switch (file.error()) {
+    case QFile::PermissionsError:
+      throw PermissionException(errorMsg);
+    default:
+      throw IOException(errorMsg);
+    }
+  }
+  
+  updateFile(path, size, lastModified, hash.result());
+}
+
+const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::sortOn(const QString& prefix, SORTORDER order, bool extended)
+{
+  QList<QSharedPointer<DBInfo> > list = (extended) ? computedValues(prefix) : values(prefix);
 
   switch (order) {
   case PATH:
@@ -122,10 +158,10 @@
   return QSharedPointer<DBInfo>(new ExtendedDBInfo(*info, other, minDist));
 }
 
-const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::computedValues() const
+const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::computedValues(const QString& prefix) const
 {
   QList<QSharedPointer<DBInfo> > list;
-  QList<QSharedPointer<DBInfo> > entries = values();
+  QList<QSharedPointer<DBInfo> > entries = values(prefix);
 
 #if 1
   list = QtConcurrent::blockingMapped(entries, boost::bind( &FileDBLink::computedValue, _1, entries));