From 3956fb84ccc26d5ba3be1814192b0c377adfbad0 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 6 Apr 2013 07:19:55 +0200 Subject: SmDirModel: check if file already is in database Indicate if we already have a file by coloring the filename darkGreen when browsing the filesystem. --- smdirwatcher.cpp | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) (limited to 'smdirwatcher.cpp') diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp index 2db94d9..09aead4 100644 --- a/smdirwatcher.cpp +++ b/smdirwatcher.cpp @@ -95,7 +95,14 @@ void SmDirWatcher::run(){ } } -SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields) {} +SmDataColletor::SmDataColletor(const int numFields, QObject *parent) : QThread(parent), mSemFree(0), mSemUsed(0), mDataQueue(0), mNumFields(numFields), mCheckForPresent(true) { + QSqlDatabase db = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "collectordb"); + db.open(); + mPicPresentQ = new QSqlQuery(db); + mPicPresentQ->prepare("SELECT COUNT(cmd5sum) FROM pics WHERE cmd5sum = :md5"); + mMovPresentQ = new QSqlQuery(db); + mMovPresentQ->prepare("SELECT COUNT(cmd5sum) FROM files WHERE cmd5sum = :md5"); +} void SmDataColletor::init(QSemaphore *set, QSemaphore *get, QQueue > *data){ mSemFree = set; @@ -103,6 +110,11 @@ void SmDataColletor::init(QSemaphore *set, QSemaphore *get, QQueueacquire(); @@ -135,7 +147,7 @@ SmTreeItem * SmDataColletor::populate(const QString &dir){ return retval; } -const QList SmDataColletor::fileData(const QFileInfo &fi) const{ +const QList SmDataColletor::fileData(const QFileInfo &fi){ QList data; data << fi.fileName() << fi.size(); QString mime = Helper::mimeType(fi.absoluteFilePath()); @@ -150,5 +162,28 @@ const QList SmDataColletor::fileData(const QFileInfo &fi) const{ } data << Helper::md5Sum(fi.absoluteFilePath()); data << si << fi.absoluteFilePath(); + data << 0; + mCheckForPresentMx.lock(); + bool p = mCheckForPresent; + mCheckForPresentMx.unlock(); + if(p){ + QSqlQuery *curQuery = 0; + if(mime.startsWith("video")){ + curQuery = mMovPresentQ; + } + if(mime.startsWith("image")){ + curQuery = mPicPresentQ; + } + if(curQuery){ + curQuery->bindValue(":md5", data.at(4)); + if(curQuery->exec()){ + QVariant res; + while(curQuery->next()){ + res = curQuery->value(0); + } + data[8] = res; + } + } + } return data; } -- cgit v1.2.3-70-g09d2