view 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 source

#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