summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--filesystemwidget.cpp2
-rw-r--r--smdirmodel.cpp14
-rw-r--r--smdirmodel.h7
-rw-r--r--smdirwatcher.cpp39
-rw-r--r--smdirwatcher.h10
5 files changed, 65 insertions, 7 deletions
diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp
index a28fea3..dce3b19 100644
--- a/filesystemwidget.cpp
+++ b/filesystemwidget.cpp
@@ -43,7 +43,7 @@ FilesystemWidget::FilesystemWidget(QWidget *parent) : QWidget(parent), mClipboar
mIconProvider = new SheMovIconProvider;
mModel->setIconProvider(mIconProvider);
- QStringList fHeaders = QStringList() << tr("Name") << tr("Size") << tr("Type") << tr("Created") << tr("Md5Sum") << tr("Dur./Size") << tr("Bitrate") << tr("Full Path");
+ QStringList fHeaders = QStringList() << tr("Name") << tr("Size") << tr("Type") << tr("Created") << tr("Md5Sum") << tr("Dur./Size") << tr("Bitrate") << tr("Full Path") << tr("Present");
mFileModel = new SmDirModel(fHeaders, this);
connect(mFileModel, SIGNAL(needResize()), this, SLOT(resizeFileView()));
diff --git a/smdirmodel.cpp b/smdirmodel.cpp
index 8a6c961..6053890 100644
--- a/smdirmodel.cpp
+++ b/smdirmodel.cpp
@@ -57,6 +57,8 @@ QVariant SmDirModel::data(const QModelIndex &index, int role) const{
return i->data(Bitrate);
case FullPathRole:
return i->data(FullPath);
+ case PresentRole:
+ return i->data(Present);
case Qt::DecorationRole: {
if(index.column() == 0){
QStringList mime = i->data(Type).toString().split('/');
@@ -67,8 +69,15 @@ QVariant SmDirModel::data(const QModelIndex &index, int role) const{
return mIcons.value("other");
}
return mIcons.value(mime.at(0).toLower());
+ }else{
+ return QVariant();
}
}
+ case Qt::ForegroundRole:
+ if(index.column() == 0 && i->data(Present).toInt() > 0){
+ return QVariant(QColor(Qt::darkGreen));
+ }
+ return SmTreeModel::data(index, role);
case Qt::DisplayRole: {
if(index.column() == DurSize){
QVariant d = i->data(DurSize);
@@ -85,6 +94,7 @@ QVariant SmDirModel::data(const QModelIndex &index, int role) const{
}
}
+
default:
return SmTreeModel::data(index, role);
}
@@ -187,6 +197,10 @@ void SmDirModel::refresh(){
setDir(mCurrentDir);
}
+void SmDirModel::setCheckForPresent(bool check){
+ mCollector->setCheckForPresent(check);
+}
+
void SmDirModel::populate(SmTreeItem *root){
setRoot(root);
emit needResize();
diff --git a/smdirmodel.h b/smdirmodel.h
index fac9041..8f000e4 100644
--- a/smdirmodel.h
+++ b/smdirmodel.h
@@ -22,9 +22,9 @@ class SmDataColletor;
class SmDirModel : public SmTreeModel {
Q_OBJECT
public:
- enum CustomRoles { NameRole = Qt::UserRole + 1, SizeRole = Qt::UserRole + 2, TypeRole = Qt::UserRole + 3, CreatedRole = Qt::UserRole + 4, Md5sumRole = Qt::UserRole + 5, DurSizeRole = Qt::UserRole + 6, BitrateRole = Qt::UserRole + 7, FullPathRole = Qt::UserRole + 8 };
- enum Fields { Name = 0, Size = 1, Type = 2, Created = 3, Md5sum = 4, DurSize = 5, Bitrate = 6, FullPath = 7 };
- enum { NumFields = 8 };
+ enum CustomRoles { NameRole = Qt::UserRole + 1, SizeRole = Qt::UserRole + 2, TypeRole = Qt::UserRole + 3, CreatedRole = Qt::UserRole + 4, Md5sumRole = Qt::UserRole + 5, DurSizeRole = Qt::UserRole + 6, BitrateRole = Qt::UserRole + 7, FullPathRole = Qt::UserRole + 8, PresentRole = Qt::UserRole + 9 };
+ enum Fields { Name = 0, Size = 1, Type = 2, Created = 3, Md5sum = 4, DurSize = 5, Bitrate = 6, FullPath = 7, Present = 8 };
+ enum { NumFields = 9 };
enum FileDate { Access, Modified, Status };
explicit SmDirModel(const QStringList &headers, QObject *parent = 0);
~SmDirModel();
@@ -40,6 +40,7 @@ class SmDirModel : public SmTreeModel {
void dirEvent(const QList<QVariant> &data, int e);
void readSettings();
void refresh();
+ void setCheckForPresent(bool check);
private slots:
void populate(SmTreeItem *root);
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;
}
diff --git a/smdirwatcher.h b/smdirwatcher.h
index 4a85c5a..3a30360 100644
--- a/smdirwatcher.h
+++ b/smdirwatcher.h
@@ -13,6 +13,9 @@
#include <QVariant>
#include <QFileInfo>
#include <QQueue>
+#include <QMutex>
+#include <QSqlDatabase>
+#include <QSqlQuery>
class SmTreeItem;
class QSemaphore;
@@ -53,6 +56,7 @@ class SmDataColletor : public QThread {
void init(QSemaphore *set, QSemaphore *get, QQueue<QPair<QString, SmDirWatcher::DWEvent> > *data);
public slots:
+ void setCheckForPresent(bool present);
void run();
signals:
@@ -62,13 +66,17 @@ class SmDataColletor : public QThread {
private:
SmTreeItem *populate(const QString &dir);
- const QList<QVariant> fileData(const QFileInfo &fi) const;
+ const QList<QVariant> fileData(const QFileInfo &fi);
QString mCurrent;
QSemaphore *mSemFree;
QSemaphore *mSemUsed;
QQueue<QPair<QString, SmDirWatcher::DWEvent> > *mDataQueue;
int mMode;
const int mNumFields;
+ bool mCheckForPresent;
+ QMutex mCheckForPresentMx;
+ QSqlQuery *mPicPresentQ;
+ QSqlQuery *mMovPresentQ;
};
#endif // SMDIRWATCHER_H