Mercurial > dedupe
changeset 1:aae83c0a771d
Refactor:
-Rename all Db to DB.
Add setup script
Add support for Sqlite3 in configuration.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Mon, 20 Aug 2012 17:32:58 +0200 |
| parents | a3834af36579 |
| children | 2833b7f8884a |
| files | CMakeLists.txt CMake_Modules/FindSqlite3.cmake DataController.cpp DataController.hpp FileDBLink.cpp FileDBLink.hpp FileDbLink.cpp FileDbLink.hpp MemoryDBLink.cpp MemoryDBLink.hpp MemoryDbLink.cpp MemoryDbLink.hpp setup.sh |
| diffstat | 13 files changed, 416 insertions(+), 334 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Mon Aug 20 15:49:48 2012 +0200 +++ b/CMakeLists.txt Mon Aug 20 17:32:58 2012 +0200 @@ -3,6 +3,8 @@ INCLUDE(PrecompiledHeader.cmake) +SET(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMake_Modules/") + FIND_PACKAGE(Boost) IF (Boost_FOUND) INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}) @@ -12,6 +14,8 @@ FIND_PACKAGE(Qt4 COMPONENTS QtOpenGL QtXml REQUIRED) +FIND_PACKAGE(Sqlite3 REQUIRED) + INCLUDE(${QT_USE_FILE}) ADD_DEFINITIONS(${QT_DEFINITIONS}) @@ -32,11 +36,9 @@ # Returns the moc_xxx.cpp files in the foo_MOC_SRCS variable QT4_WRAP_CPP(MOC_SOURCES ${MOC_HEADERS}) -MESSAGE(WARNING ${MOC_SOURCES}) - SET(CMAKE_CXX_FLAGS "-g2 -Wall -Werror -fno-inline") ADD_EXECUTABLE(DeDupe ${SOURCES} ${MOC_SOURCES}) -TARGET_LINK_LIBRARIES(DeDupe ${QT_LIBRARIES}) +TARGET_LINK_LIBRARIES(DeDupe ${QT_LIBRARIES} ${SQLITE3_LIBRARIES}) ENABLE_TESTING()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMake_Modules/FindSqlite3.cmake Mon Aug 20 17:32:58 2012 +0200 @@ -0,0 +1,56 @@ +# - find Sqlite 3 +# SQLITE3_INCLUDE_DIR - Where to find Sqlite 3 header files (directory) +# SQLITE3_LIBRARIES - Sqlite 3 libraries +# SQLITE3_LIBRARY_RELEASE - Where the release library is +# SQLITE3_LIBRARY_DEBUG - Where the debug library is +# SQLITE3_FOUND - Set to TRUE if we found everything (library, includes and executable) + +# Copyright (c) 2010 Pau Garcia i Quiles, <pgquiles@elpauer.org> +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. +# +# Generated by CModuler, a CMake Module Generator - http://gitorious.org/cmoduler + +IF( SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY_RELEASE AND SQLITE3_LIBRARY_DEBUG ) + SET(SQLITE3_FIND_QUIETLY TRUE) +ENDIF( SQLITE3_INCLUDE_DIR AND SQLITE3_LIBRARY_RELEASE AND SQLITE3_LIBRARY_DEBUG ) + +FIND_PATH( SQLITE3_INCLUDE_DIR sqlite3.h ) + +FIND_LIBRARY(SQLITE3_LIBRARY_RELEASE NAMES sqlite3 ) + +FIND_LIBRARY(SQLITE3_LIBRARY_DEBUG NAMES sqlite3 sqlite3d HINTS /usr/lib/debug/usr/lib/ ) + +IF( SQLITE3_LIBRARY_RELEASE OR SQLITE3_LIBRARY_DEBUG AND SQLITE3_INCLUDE_DIR ) + SET( SQLITE3_FOUND TRUE ) +ENDIF( SQLITE3_LIBRARY_RELEASE OR SQLITE3_LIBRARY_DEBUG AND SQLITE3_INCLUDE_DIR ) + +IF( SQLITE3_LIBRARY_DEBUG AND SQLITE3_LIBRARY_RELEASE ) + # if the generator supports configuration types then set + # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value + IF( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + SET( SQLITE3_LIBRARIES optimized ${SQLITE3_LIBRARY_RELEASE} debug ${SQLITE3_LIBRARY_DEBUG} ) + ELSE( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) + # if there are no configuration types and CMAKE_BUILD_TYPE has no value + # then just use the release libraries + SET( SQLITE3_LIBRARIES ${SQLITE3_LIBRARY_RELEASE} ) + ENDIF( CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE ) +ELSEIF( SQLITE3_LIBRARY_RELEASE ) + SET( SQLITE3_LIBRARIES ${SQLITE3_LIBRARY_RELEASE} ) +ELSE( SQLITE3_LIBRARY_DEBUG AND SQLITE3_LIBRARY_RELEASE ) + SET( SQLITE3_LIBRARIES ${SQLITE3_LIBRARY_DEBUG} ) +ENDIF( SQLITE3_LIBRARY_DEBUG AND SQLITE3_LIBRARY_RELEASE ) + +IF( SQLITE3_FOUND ) + IF( NOT SQLITE3_FIND_QUIETLY ) + MESSAGE( STATUS "Found Sqlite3 header file in ${SQLITE3_INCLUDE_DIR}") + MESSAGE( STATUS "Found Sqlite3 libraries: ${SQLITE3_LIBRARIES}") + ENDIF( NOT SQLITE3_FIND_QUIETLY ) +ELSE(SQLITE3_FOUND) + IF( SQLITE3_FIND_REQUIRED) + MESSAGE( FATAL_ERROR "Could not find Sqlite3" ) + ELSE( SQLITE3_FIND_REQUIRED) + MESSAGE( STATUS "Optional package Sqlite3 was not found" ) + ENDIF( SQLITE3_FIND_REQUIRED) +ENDIF(SQLITE3_FOUND)
--- a/DataController.cpp Mon Aug 20 15:49:48 2012 +0200 +++ b/DataController.cpp Mon Aug 20 17:32:58 2012 +0200 @@ -1,6 +1,6 @@ #include "DataController.hpp" -#include "MemoryDbLink.hpp" +#include "MemoryDBLink.hpp" #include "PermissionException.hpp" #include "DataController.hpp" @@ -26,7 +26,7 @@ #include "EditDistance.hpp" #include <cassert> -void findFiles(const QDir& dir, FileDbLink& dblink) +void findFiles(const QDir& dir, FileDBLink& dblink) { /* QProgressDialog progressDialog(this); @@ -55,7 +55,7 @@ } } -QTreeWidgetItem* DataController::createItem(const FileDbLink::DBInfo& info) +QTreeWidgetItem* DataController::createItem(const FileDBLink::DBInfo& info) { QTreeWidgetItem* item = new QTreeWidgetItem(); item->setData(0, Qt::DisplayRole, info.name()); @@ -86,7 +86,7 @@ { tw->clear(); - const QList<QSharedPointer<FileDbLink::DBInfo> > elems = dblink->sortOn(FileDbLink::EDIT, true); + const QList<QSharedPointer<FileDBLink::DBInfo> > elems = dblink->sortOn(FileDBLink::EDIT, true); QProgressBar bar; @@ -102,13 +102,13 @@ tw->setUpdatesEnabled(false); - foreach(QSharedPointer<FileDbLink::DBInfo> line, elems) { + foreach(QSharedPointer<FileDBLink::DBInfo> line, elems) { QTreeWidgetItem* item = 0; bool anyAdded = false; if (showNameDups) { QTreeWidgetItem* topLevelItem = 0; - foreach(QSharedPointer<FileDbLink::DBInfo> dup, elems) { + foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { if(dup != line && line->name() == dup->name() ) { if (!topLevelItem) { topLevelItem = new QTreeWidgetItem(); @@ -125,7 +125,7 @@ if (showSizeDups) { QTreeWidgetItem* topLevelItem = 0; - foreach(QSharedPointer<FileDbLink::DBInfo> dup, elems) { + foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { if(dup != line && line->size() == dup->size() ) { if (!topLevelItem) { topLevelItem = new QTreeWidgetItem(); @@ -142,7 +142,7 @@ if (showMTimeDups) { QTreeWidgetItem* topLevelItem = 0; - foreach(QSharedPointer<FileDbLink::DBInfo> dup, elems) { + foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { if(dup != line && line->mtime() == dup->mtime() ) { if (!topLevelItem) { topLevelItem = new QTreeWidgetItem(); @@ -159,7 +159,7 @@ if (showCheckSumDups) { QTreeWidgetItem* topLevelItem = 0; - foreach(QSharedPointer<FileDbLink::DBInfo> dup, elems) { + foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { if(dup != line && line->checksum() == dup->checksum() ) { if (!topLevelItem) { topLevelItem = new QTreeWidgetItem(); @@ -176,10 +176,10 @@ if (editDistanceCutoff < 1.0) { QTreeWidgetItem* topLevelItem = 0; - QMultiMap<int, QSharedPointer<FileDbLink::DBInfo> > oList; + QMultiMap<int, QSharedPointer<FileDBLink::DBInfo> > oList; int absoluteCutoff = line->name().length() * editDistanceCutoff; - foreach(QSharedPointer<FileDbLink::DBInfo> dup, elems) { + foreach(QSharedPointer<FileDBLink::DBInfo> dup, elems) { if(dup != line) { int distance = EditDistance::Compute(line->name(), dup->name()); @@ -198,7 +198,7 @@ anyAdded = true; } - foreach(QSharedPointer<FileDbLink::DBInfo> dup, oList.values()) { + foreach(QSharedPointer<FileDBLink::DBInfo> dup, oList.values()) { topLevelItem->addChild(createItem(*dup)); } } @@ -224,7 +224,7 @@ populateDelay->setInterval(500); connect(populateDelay, SIGNAL(timeout()), this, SLOT(populate())); - dblink = new MemoryDbLink(); + dblink = new MemoryDBLink(); findFiles(QDir("."), *dblink);
--- a/DataController.hpp Mon Aug 20 15:49:48 2012 +0200 +++ b/DataController.hpp Mon Aug 20 17:32:58 2012 +0200 @@ -3,7 +3,7 @@ #include <QtCore/QObject> -#include "FileDbLink.hpp" +#include "FileDBLink.hpp" class QMainWindow; class QTreeWidget; @@ -37,13 +37,13 @@ bool showMTimeDups, bool showCheckSumDups, float editDistanceCutoff); - QTreeWidgetItem* createItem(const FileDbLink::DBInfo& info); + QTreeWidgetItem* createItem(const FileDBLink::DBInfo& info); bool showFullPath; QMainWindow* mw; QTreeWidget* tw; - FileDbLink* dblink; + FileDBLink* dblink; QAction* nameFilter; QAction* sizeFilter;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FileDBLink.cpp Mon Aug 20 17:32:58 2012 +0200 @@ -0,0 +1,140 @@ +#include "FileDBLink.hpp" + +#include <QtCore/QDebug> +#include <QtCore/QtConcurrentMap> + +#include "PermissionException.hpp" +#include "EditDistance.hpp" + +#include <cassert> + +#include <functional> +#include <algorithm> +#include <iostream> + +#include <boost/bind.hpp> + +void FileDBLink::updateIfModified(const QString& path) +{ + QFileInfo fileinfo(path); + if (!exists(path)) { + addFile(fileinfo); + } +} + +void FileDBLink::addFile(const QFileInfo& fileinfo) +{ + addFile(fileinfo.absoluteFilePath(), fileinfo.size(), fileinfo.lastModified()); +} + +void FileDBLink::addFile(const QString& path, qint64 size, const QDateTime& lastModified) +{ + QCryptographicHash hash( QCryptographicHash::Sha1 ); + QFile file(path); + if ( file.open( QIODevice::ReadOnly ) ) { + hash.addData( file.readAll() ); + } + else { + QString errorMsg = path + ": " + file.errorString(); + qDebug()<<file.error(); + switch (file.error()) { + case QFile::PermissionsError: + throw PermissionException(errorMsg); + default: + throw IOException(errorMsg); + } + } + + addFile(path, size, lastModified, hash); + +} + +const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::sortOn(SORTORDER order, bool extended) +{ + QList<QSharedPointer<DBInfo> > list = (extended) ? computedValues() : computedValues(); + + switch (order) { + case PATH: + { + QList<QSharedPointer<FileDBLink::DBInfo> > oList; + foreach(QSharedPointer<DBInfo> info, list) { + oList.push_back(info); + } + return oList; + } + case SIZE: + { + QMultiMap<quint64, QSharedPointer<DBInfo> > oList; + foreach(QSharedPointer<DBInfo> info, list) { + oList.insert(info->size(), info); + } + return oList.values(); + } + case MTIME: + { + QMultiMap<QDateTime, QSharedPointer<DBInfo> > oList; + foreach(QSharedPointer<DBInfo> info, list) { + oList.insert(info->mtime(), info); + } + return oList.values(); + } + case CHECKSUM: + { + QMultiMap<QByteArray, QSharedPointer<DBInfo> > oList; + foreach(QSharedPointer<DBInfo> info, list) { + oList.insert(info->checksum(), info); + } + return oList.values(); + } + case EDIT: + { + assert(extended); + QMultiMap<int, QSharedPointer<DBInfo> > oList; + foreach(QSharedPointer<DBInfo> info, list) { + QSharedPointer<ExtendedDBInfo> ptr; + ptr = info.dynamicCast<ExtendedDBInfo>(); + oList.insert(ptr->editDistance(), info); + } + return oList.values(); + + } + } + abort(); +} + +QSharedPointer<FileDBLink::DBInfo> FileDBLink::computedValue(const QSharedPointer<DBInfo>& info, + const QList<QSharedPointer<DBInfo> >& entries) +{ + QString p1 = info->name(); + int minDist = 100000; + QString other; + for (QList<QSharedPointer<DBInfo> >::const_iterator it2 = entries.begin(); + it2 != entries.end(); ++it2) { + if (info == *it2) + continue; + QString p2 = (*it2)->name(); + int dist = EditDistance::Compute(p1, p2, false); + if (dist < minDist) { + minDist = dist; + other = (*it2)->path(); + } + } + return QSharedPointer<DBInfo>(new ExtendedDBInfo(*info, other, minDist)); +} + +const QList<QSharedPointer<FileDBLink::DBInfo> > FileDBLink::computedValues() const +{ + QList<QSharedPointer<DBInfo> > list; + QList<QSharedPointer<DBInfo> > entries = values(); + +#if 1 + list = QtConcurrent::blockingMapped(entries, boost::bind( &FileDBLink::computedValue, _1, entries)); +#else + for (QList<QSharedPointer<DBInfo> >::const_iterator it1 = entries.begin(); + it1 != entries.end(); ++it1) { + QSharedPointer<DBInfo> ext = computedValue(*it1, entries); + list.push_back(ext); + } +#endif + return list; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FileDBLink.hpp Mon Aug 20 17:32:58 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
--- a/FileDbLink.cpp Mon Aug 20 15:49:48 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -#include "FileDbLink.hpp" - -#include <QtCore/QDebug> -#include <QtCore/QtConcurrentMap> - -#include "PermissionException.hpp" -#include "EditDistance.hpp" - -#include <cassert> - -#include <functional> -#include <algorithm> -#include <iostream> - -#include <boost/bind.hpp> - -void FileDbLink::updateIfModified(const QString& path) -{ - QFileInfo fileinfo(path); - if (!exists(path)) { - addFile(fileinfo); - } -} - -void FileDbLink::addFile(const QFileInfo& fileinfo) -{ - addFile(fileinfo.absoluteFilePath(), fileinfo.size(), fileinfo.lastModified()); -} - -void FileDbLink::addFile(const QString& path, qint64 size, const QDateTime& lastModified) -{ - QCryptographicHash hash( QCryptographicHash::Sha1 ); - QFile file(path); - if ( file.open( QIODevice::ReadOnly ) ) { - hash.addData( file.readAll() ); - } - else { - QString errorMsg = path + ": " + file.errorString(); - qDebug()<<file.error(); - switch (file.error()) { - case QFile::PermissionsError: - throw PermissionException(errorMsg); - default: - throw IOException(errorMsg); - } - } - - addFile(path, size, lastModified, hash); - -} - -const QList<QSharedPointer<FileDbLink::DBInfo> > FileDbLink::sortOn(SORTORDER order, bool extended) -{ - QList<QSharedPointer<DBInfo> > list = (extended) ? computedValues() : computedValues(); - - switch (order) { - case PATH: - { - QList<QSharedPointer<FileDbLink::DBInfo> > oList; - foreach(QSharedPointer<DBInfo> info, list) { - oList.push_back(info); - } - return oList; - } - case SIZE: - { - QMultiMap<quint64, QSharedPointer<DBInfo> > oList; - foreach(QSharedPointer<DBInfo> info, list) { - oList.insert(info->size(), info); - } - return oList.values(); - } - case MTIME: - { - QMultiMap<QDateTime, QSharedPointer<DBInfo> > oList; - foreach(QSharedPointer<DBInfo> info, list) { - oList.insert(info->mtime(), info); - } - return oList.values(); - } - case CHECKSUM: - { - QMultiMap<QByteArray, QSharedPointer<DBInfo> > oList; - foreach(QSharedPointer<DBInfo> info, list) { - oList.insert(info->checksum(), info); - } - return oList.values(); - } - case EDIT: - { - assert(extended); - QMultiMap<int, QSharedPointer<DBInfo> > oList; - foreach(QSharedPointer<DBInfo> info, list) { - QSharedPointer<ExtendedDBInfo> ptr; - ptr = info.dynamicCast<ExtendedDBInfo>(); - oList.insert(ptr->editDistance(), info); - } - return oList.values(); - - } - } - abort(); -} - -QSharedPointer<FileDbLink::DBInfo> FileDbLink::computedValue(const QSharedPointer<DBInfo>& info, - const QList<QSharedPointer<DBInfo> >& entries) -{ - QString p1 = info->name(); - int minDist = 100000; - QString other; - for (QList<QSharedPointer<DBInfo> >::const_iterator it2 = entries.begin(); - it2 != entries.end(); ++it2) { - if (info == *it2) - continue; - QString p2 = (*it2)->name(); - int dist = EditDistance::Compute(p1, p2, false); - if (dist < minDist) { - minDist = dist; - other = (*it2)->path(); - } - } - return QSharedPointer<DBInfo>(new ExtendedDBInfo(*info, other, minDist)); -} - -const QList<QSharedPointer<FileDbLink::DBInfo> > FileDbLink::computedValues() const -{ - QList<QSharedPointer<DBInfo> > list; - QList<QSharedPointer<DBInfo> > entries = values(); - -#if 1 - list = QtConcurrent::blockingMapped(entries, boost::bind( &FileDbLink::computedValue, _1, entries)); -#else - for (QList<QSharedPointer<DBInfo> >::const_iterator it1 = entries.begin(); - it1 != entries.end(); ++it1) { - QSharedPointer<DBInfo> ext = computedValue(*it1, entries); - list.push_back(ext); - } -#endif - return list; -}
--- a/FileDbLink.hpp Mon Aug 20 15:49:48 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MemoryDBLink.cpp Mon Aug 20 17:32:58 2012 +0200 @@ -0,0 +1,41 @@ +#include "MemoryDBLink.hpp" + +#include <QtCore/QStringList> + +void MemoryDBLink::addFile(const QString& path, qint64 size, const QDateTime& dtime, const QCryptographicHash& hash) +{ + addFile(DBInfo(path, size, dtime, hash.result())); +} + +bool MemoryDBLink::tryAddFile(const DBInfo& dbinfo) +{ + QMap<QString, QSharedPointer<DBInfo> >::iterator pos; + pos = entries.find(dbinfo.path()); + if (pos == entries.end()) { + entries.insert(dbinfo.path(), QSharedPointer<DBInfo>(new DBInfo(dbinfo))); + return true; + } + return false; +} + +void MemoryDBLink::addFile(const DBInfo& dbinfo) +{ + if (!tryAddFile(dbinfo)) { + abort(); //Should throw exception + } +} + + +QStringList MemoryDBLink::toStringList() +{ + QStringList list; + foreach(QSharedPointer<DBInfo> info, entries) { + list << info->serialize(); + } + return list; +} + +const QList<QSharedPointer<FileDBLink::DBInfo> > MemoryDBLink::values() const +{ + return entries.values(); +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MemoryDBLink.hpp Mon Aug 20 17:32:58 2012 +0200 @@ -0,0 +1,25 @@ +#ifndef MEMORYDBLINK_HPP +#define MEMORYDBLINK_HPP +#include "FileDBLink.hpp" + +#include <QtCore/QMap> +#include <QtCore/QSharedPointer> + +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; + +private: + void addFile(const DBInfo& info); + bool tryAddFile(const DBInfo& info); + QMap<QString, QSharedPointer<DBInfo> > entries; +}; + +#endif //MEMORYDBLINK_HPP
--- a/MemoryDbLink.cpp Mon Aug 20 15:49:48 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -#include "MemoryDbLink.hpp" - -#include <QtCore/QStringList> - -void MemoryDbLink::addFile(const QString& path, qint64 size, const QDateTime& dtime, const QCryptographicHash& hash) -{ - addFile(DBInfo(path, size, dtime, hash.result())); -} - -bool MemoryDbLink::tryAddFile(const DBInfo& dbinfo) -{ - QMap<QString, QSharedPointer<DBInfo> >::iterator pos; - pos = entries.find(dbinfo.path()); - if (pos == entries.end()) { - entries.insert(dbinfo.path(), QSharedPointer<DBInfo>(new DBInfo(dbinfo))); - return true; - } - return false; -} - -void MemoryDbLink::addFile(const DBInfo& dbinfo) -{ - if (!tryAddFile(dbinfo)) { - abort(); //Should throw exception - } -} - - -QStringList MemoryDbLink::toStringList() -{ - QStringList list; - foreach(QSharedPointer<DBInfo> info, entries) { - list << info->serialize(); - } - return list; -} - -const QList<QSharedPointer<FileDbLink::DBInfo> > MemoryDbLink::values() const -{ - return entries.values(); -}
--- a/MemoryDbLink.hpp Mon Aug 20 15:49:48 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -#ifndef MEMORYDBLINK_HPP -#define MEMORYDBLINK_HPP -#include "FileDbLink.hpp" - -#include <QtCore/QMap> -#include <QtCore/QSharedPointer> - -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; - -private: - void addFile(const DBInfo& info); - bool tryAddFile(const DBInfo& info); - QMap<QString, QSharedPointer<DBInfo> > entries; -}; - -#endif //MEMORYDBLINK_HPP
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/setup.sh Mon Aug 20 17:32:58 2012 +0200 @@ -0,0 +1,24 @@ +#!/bin/sh + +ADD_DEFINITION() { + KEY=$1 + VALUE=$(eval "echo \${${KEY}}") + if [ -n "${VALUE}" ] + then + DEFINITIONS="${DEFINITIONS} -D${KEY}=${VALUE}" + fi +} + +LOCATION=$(dirname $0) + +if [ -f ~/.auto_cmake ] +then + . ~/.auto_cmake +fi + +DEFINITIONS="" + +ADD_DEFINITION BOOST_ROOT +ADD_DEFINITION QT_QMAKE_EXECUTABLE + +eval "cmake ${DEFINITIONS} ${LOCATION}"
