changeset 7:d6fdca3bf24e

Make sure everything works for MemoryDBLink.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Wed, 22 Aug 2012 01:07:06 +0200
parents 7ebdd2373ea4
children d7b384b4a834
files DataController.cpp MemoryDBLink.cpp MemoryDBLink.hpp SqliteDBLink.cpp
diffstat 4 files changed, 76 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/DataController.cpp	Wed Aug 22 00:42:25 2012 +0200
+++ b/DataController.cpp	Wed Aug 22 01:07:06 2012 +0200
@@ -448,8 +448,12 @@
     dbpath.replace(QRegExp("^~/"),
 		   QString("%1%2").arg(QDesktopServices::storageLocation(QDesktopServices::HomeLocation)).arg(QDir::separator()));
   }
-    
+
+#if 1
   dblink = new SqliteDBLink(dbpath);
+#else
+  dblink = new MemoryDBLink();
+#endif
 
   setDir((searchPath_in.size() > 0) ? searchPath_in : QDir("."));
 
--- a/MemoryDBLink.cpp	Wed Aug 22 00:42:25 2012 +0200
+++ b/MemoryDBLink.cpp	Wed Aug 22 01:07:06 2012 +0200
@@ -2,9 +2,9 @@
 
 #include <QtCore/QStringList>
 
-void MemoryDBLink::addFile(const QString& path, qint64 size, const QDateTime& dtime, const QCryptographicHash& hash)
+void MemoryDBLink::addFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash)
 {
-  addFile(DBInfo(path, size, dtime, hash.result()));
+  addFile(DBInfo(path, size, dtime, hash));
 }
 
 bool MemoryDBLink::tryAddFile(const DBInfo& dbinfo)
@@ -35,7 +35,58 @@
   return list;
 }
 
-const QList<QSharedPointer<FileDBLink::DBInfo> > MemoryDBLink::values() const
+const QList<QSharedPointer<FileDBLink::DBInfo> > MemoryDBLink::values(const QString& prefix) const
+{
+  if (prefix.size() == 0)
+    return entries.values();
+
+  QList<QSharedPointer<FileDBLink::DBInfo> > list;
+  foreach (QString key, entries.keys()) {
+    if (key.startsWith(prefix))
+      list << entries[key];
+  }
+  return list;
+}
+
+
+void MemoryDBLink::deleteFileFromDB(const QString& path)
+{
+  entries.remove(path);
+}
+
+
+void MemoryDBLink::keepOnlyFromPrefix(const QString& prefix, const QStringList& files)
 {
-  return entries.values();
+  QStringList list;
+  foreach(QSharedPointer<DBInfo> info, values(prefix)) {
+    if (!files.contains(info->path())) {
+      list << info->path();
+    }
+  }
+  foreach(QString path, list) {
+    deleteFileFromDB(path);
+  }
 }
+
+FileDBLink::DBStatus MemoryDBLink::existsWithMtime(const QString& path, const QDateTime& mtime)
+{
+  if (entries.contains(path)) {
+    QSharedPointer<DBInfo> info = entries[path];
+    if (info->mtime() == mtime)
+      return SAME;
+    return MTIME_DIFFERENT;
+  }
+  return NONE;
+}
+
+void MemoryDBLink::updateFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash)
+{
+  updateFile(DBInfo(path, size, dtime, hash));
+}
+
+void MemoryDBLink::updateFile(const DBInfo& dbinfo)
+{
+  *entries[dbinfo.path()] = dbinfo;
+}
+
+
--- a/MemoryDBLink.hpp	Wed Aug 22 00:42:25 2012 +0200
+++ b/MemoryDBLink.hpp	Wed Aug 22 01:07:06 2012 +0200
@@ -7,18 +7,27 @@
 
 class MemoryDBLink : public FileDBLink {
 public:
-  virtual void addFile(const QString& path, qint64 size, const QDateTime& dtime, const QCryptographicHash& hash);
   bool exists(const QString& path)
   {
     return (entries.contains(path));
   }
 
   QStringList toStringList();
-  const QList<QSharedPointer<DBInfo> > values() const;
+
+  virtual void addFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash);
+  virtual void updateFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash);
+  DBStatus existsWithMtime(const QString& path, const QDateTime& mtime);
+
+  const QList<QSharedPointer<DBInfo> > values(const QString& prefix = QString() ) const;
+  virtual void keepOnlyFromPrefix(const QString& prefix, const QStringList& files);
+  virtual void deleteFileFromDB(const QString& path);
+
 
 private:
   void addFile(const DBInfo& info);
   bool tryAddFile(const DBInfo& info);
+  void updateFile(const DBInfo& dbinfo);
+
   QMap<QString, QSharedPointer<DBInfo> > entries;
 };
 
--- a/SqliteDBLink.cpp	Wed Aug 22 00:42:25 2012 +0200
+++ b/SqliteDBLink.cpp	Wed Aug 22 01:07:06 2012 +0200
@@ -68,11 +68,6 @@
   addFile(DBInfo(path, size, dtime, hash));
 }
 
-void SqliteDBLink::updateFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash)
-{
-  updateFile(DBInfo(path, size, dtime, hash));
-}
-
 bool SqliteDBLink::tryAddFile(const DBInfo& dbinfo)
 {
   if (exists(dbinfo.path()))
@@ -90,6 +85,11 @@
   return true;
 }
 
+void SqliteDBLink::updateFile(const QString& path, qint64 size, const QDateTime& dtime, const QByteArray& hash)
+{
+  updateFile(DBInfo(path, size, dtime, hash));
+}
+
 void SqliteDBLink::updateFile(const DBInfo& dbinfo)
 {
   QSqlQuery query;