diff FileDbLink.hpp @ 0:a3834af36579

Working with memory backend.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Mon, 20 Aug 2012 15:49:48 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FileDbLink.hpp	Mon Aug 20 15:49:48 2012 +0200
@@ -0,0 +1,109 @@
+#ifndef FILEDBLINK
+#define FILEDBLINK
+
+#include <QtCore/QDateTime>
+#include <QtCore/QCryptographicHash>
+#include <QtCore/QFileInfo>
+
+class FileDbLink {
+public:
+  class DBInfo {
+  public:
+    DBInfo(const QString& path, qint64 size, const QDateTime& mtime, const QByteArray& hash) : path_(path),
+												       size_(size),
+												       mtime_(mtime),
+												       hash_(hash)
+    {}
+    DBInfo() {}
+
+    virtual ~DBInfo() {}
+
+    const QString& path() const
+    {
+      return path_;
+    }
+
+    QString name() const
+    {
+      QFileInfo finf(path());
+      return finf.fileName();
+    }
+
+    quint64 size() const
+    {
+      return size_;
+    }
+
+    const QDateTime& mtime() const
+    {
+      return mtime_;
+    }
+
+    const QByteArray checksum() const
+    {
+      return hash_;
+    }
+
+    virtual QString serialize() const
+    {
+      QString size = QString::number(size_);
+      QString str = path_;
+      str += ", " + size;
+      str += ", " + mtime_.toString();
+      str += ", " + hash_.toHex();
+      return str;
+    }
+
+  private:
+    QString path_;
+    qint64 size_;
+    QDateTime mtime_;
+    QByteArray hash_;
+  };
+
+  class ExtendedDBInfo : public DBInfo {
+  public:
+    ExtendedDBInfo(const DBInfo& dbinfo, const QString& closestEditPath, int editDistance) : DBInfo(dbinfo), closestEditPath_(closestEditPath), editDistance_(editDistance) {}
+    ExtendedDBInfo() {}
+
+    virtual ~ExtendedDBInfo() {}
+
+    virtual QString serialize() const
+    {
+      QString dist = QString::number(editDistance_);
+      QString str = DBInfo::serialize();
+      str += ", " + closestEditPath_;
+      str += ", " + dist;
+      return str;
+    }
+
+    int editDistance() const
+    {
+      return editDistance_;
+    }
+
+  private:
+    QString closestEditPath_;
+    int editDistance_;
+  };
+
+  static QSharedPointer<DBInfo> computedValue(const QSharedPointer<DBInfo>& info, const QList<QSharedPointer<DBInfo> >&);
+
+
+public:
+  virtual ~FileDbLink() {}
+
+  void updateIfModified(const QString& path);
+  virtual void addFile(const QString& path, qint64 size, const QDateTime& dtime, const QCryptographicHash& hash) = 0;
+  void addFile(const QString& path, qint64 size, const QDateTime& dtime);
+  void addFile(const QFileInfo& fileinfo);
+  virtual bool exists(const QString& path) = 0;
+  virtual const QList<QSharedPointer<DBInfo> > values() const = 0;
+  virtual const QList<QSharedPointer<DBInfo> > computedValues() const;
+
+  enum SORTORDER { PATH, SIZE, MTIME, CHECKSUM, EDIT };
+
+  virtual const QList<QSharedPointer<DBInfo> > sortOn(SORTORDER order, bool extended = false);
+};
+
+#endif //FILEDBLINK