Mercurial > dedupe
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;
