Mercurial > dedupe
view FileDBLink.hpp @ 101:6c6f3a5f96ea
Better support for batch operations.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Thu, 13 Feb 2014 15:19:37 +0100 |
| parents | c7da835ea912 |
| children | 6bc013d5788b |
line wrap: on
line source
#ifndef FILEDBLINK #define FILEDBLINK #include <QtCore/QCryptographicHash> #include <QtCore/QDateTime> #include <QtCore/QFileInfo> class FileDBLink : public QObject { Q_OBJECT public: class DBInfo { public: DBInfo(const QString& path, quint64 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_; quint64 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_; }; typedef QSharedPointer<DBInfo> dbinf_ptr_t; static dbinf_ptr_t computedValue(const dbinf_ptr_t& info, const QList<dbinf_ptr_t >&); static QByteArray computeHash(const QString& path, QCryptographicHash::Algorithm = QCryptographicHash::Sha1); signals: void progressUpdate(int, int); public: enum DBStatus { NONE = 0, MTIME_DIFFERENT, SAME}; virtual ~FileDBLink(); void updateIfModified(const QString& path, bool lazy = false); virtual void addFile(const QString& path, quint64 size, const QDateTime& dtime, const QByteArray& hash, bool lazy) = 0; virtual void keepOnlyFromPrefix(const QString& prefix, const QStringList& files, bool lazy = false) = 0; virtual void deleteFileFromDB(const QString& path, bool lazy = false) = 0; virtual const QList<dbinf_ptr_t> filesWithSize(quint64 size, const QString& prefix = QString()) const; bool updateAllWithSize(quint64 size); virtual dbinf_ptr_t value(const QString& path) const; void addFile(const QString& path, quint64 size, const QDateTime& dtime, bool lazy = false); void addFile(const QFileInfo& fileinfo, bool lazy = false); virtual void updateFile(const QString& path, quint64 size, const QDateTime& dtime, const QByteArray& hash, bool lazy = false) = 0; void updateFile(const QString& path, quint64 size, const QDateTime& dtime, bool lazy = false); void updateFile(const QFileInfo& fileinfo, bool lazy = false); virtual bool exists(const QString& path) = 0; virtual DBStatus existsWithMtime(const QString& path, const QDateTime& mtime) = 0; virtual bool commit(const QString& prefix = QString()); virtual const QList<dbinf_ptr_t> values(const QString& prefix = QString() ) const = 0; virtual const QList<dbinf_ptr_t> computedValues(const QString& prefix = QString() ) const; enum SORTORDER { PATH, SIZE, MTIME, CHECKSUM, EDIT }; virtual const QList<dbinf_ptr_t> sortOn(const QString& prefix, SORTORDER order, bool extended = false); }; #endif //FILEDBLINK
