diff options
Diffstat (limited to 'smdirwatcher.cpp')
-rw-r--r-- | smdirwatcher.cpp | 39 |
1 files changed, 37 insertions, 2 deletions
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<QPair<QString, SmDirWatcher::DWEvent> > *data){ mSemFree = set; @@ -103,6 +110,11 @@ void SmDataColletor::init(QSemaphore *set, QSemaphore *get, QQueue<QPair<QString mDataQueue = data; } +void SmDataColletor::setCheckForPresent(bool present){ + QMutexLocker l(&mCheckForPresentMx); + mCheckForPresent = present; +} + void SmDataColletor::run(){ forever { mSemUsed->acquire(); @@ -135,7 +147,7 @@ SmTreeItem * SmDataColletor::populate(const QString &dir){ return retval; } -const QList<QVariant> SmDataColletor::fileData(const QFileInfo &fi) const{ +const QList<QVariant> SmDataColletor::fileData(const QFileInfo &fi){ QList<QVariant> data; data << fi.fileName() << fi.size(); QString mime = Helper::mimeType(fi.absoluteFilePath()); @@ -150,5 +162,28 @@ const QList<QVariant> 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; } |