From 2c022561f692a813b44da39d6ffdcb373aa4c7ba Mon Sep 17 00:00:00 2001 From: Arno Date: Wed, 10 Dec 2014 22:10:50 +0100 Subject: Various Bugfixes and cleanups * remove debug statements from SmDirWatcher * Don't crash on parentDir when current Dir is already deleted * Fix PicFilesModel MappingQuery. It needlessly referenced the table pics in FROM causing an expensive full table scan! * Fix findRecursive in PicFilesModel: Stupid typo! * Give SmDirWatcher a separate DB-Connection. One Thread, one Connection * Remove several includes This should have been 6 commits, but that's how debugging works :( --- filesystemwidget.cpp | 13 ++++++++++--- newpicsdialog.cpp | 4 +--- picfilesmodel.cpp | 4 ++-- smdirmodel.cpp | 1 - smdirmodel.h | 2 -- smdirwatcher.cpp | 15 +++++---------- smdirwatcher.h | 11 +---------- 7 files changed, 19 insertions(+), 31 deletions(-) diff --git a/filesystemwidget.cpp b/filesystemwidget.cpp index 779db2e..60c2d78 100644 --- a/filesystemwidget.cpp +++ b/filesystemwidget.cpp @@ -227,11 +227,18 @@ void FilesystemWidget::fileViewActivated(const QModelIndex &idx){ void FilesystemWidget::parentDir(){ QModelIndex idx = mDirView->currentIndex(); + QModelIndex prev = idx.sibling(idx.row() - 1, idx.column()); + QString pName; + if(prev.isValid()){ + pName = idx.data().toString(); + } + QString sel = idx.data().toString(); if(idx.parent().isValid()){ mDirView->setCurrentIndex(idx.parent()); - } - QString sel = idx.data().toString(); - emit upSelected(sel); + } + if(!pName.isEmpty()){ + emit upSelected(sel); + } } void FilesystemWidget::goBack(){ diff --git a/newpicsdialog.cpp b/newpicsdialog.cpp index e665f3b..f6057c0 100644 --- a/newpicsdialog.cpp +++ b/newpicsdialog.cpp @@ -174,9 +174,7 @@ void NewPicsDialog::accept(){ foreach(QVariant mpid, mappingParentsIds){ addMappingQ.bindValue(":mapid", mpid); addMappingQ.bindValue(":md5", d.md5sum); - if(!addMappingQ.exec()){ - return; - } + addMappingQ.exec(); } mFilesModel->clear(); } diff --git a/picfilesmodel.cpp b/picfilesmodel.cpp index 6010e1d..dfe0f2d 100644 --- a/picfilesmodel.cpp +++ b/picfilesmodel.cpp @@ -22,7 +22,7 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr //setup database mDb = QSqlDatabase::database("treedb"); mPopulateQS = QString("SELECT DISTINCT(pics.ipicsid), pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum, pics.cpicsize FROM pics, pics_mappings WHERE pics_mappings.imappings_parents_id IN (%1) AND pics_mappings.ipics_id = pics.ipicsid ORDER BY pics.tfilename"); - mMappingsQS = QString("SELECT DISTINCT(pics_mappings.imappings_parents_id) FROM pics_mappings, pics WHERE pics_mappings.ipics_id IN (%1)"); + mMappingsQS = QString("SELECT DISTINCT(pics_mappings.imappings_parents_id) FROM pics_mappings WHERE pics_mappings.ipics_id IN (%1)"); } void PicFilesModel::setMapping(int pMapId){ @@ -223,7 +223,7 @@ SmTreeItem *PicFilesModel::findRecursive(SmTreeItem *start, const QVariant &name } for(int i = 0; i < start->childCount(); ++i){ SmTreeItem *child = start->child(i); - if(child->data(0) == name && start->data(1) == id){ + if(child->data(0) == name && child->data(1) == id){ return child; } if(child->childCount()){ diff --git a/smdirmodel.cpp b/smdirmodel.cpp index 4f6968a..1552044 100644 --- a/smdirmodel.cpp +++ b/smdirmodel.cpp @@ -16,7 +16,6 @@ #include "helper.h" SmDirModel::SmDirModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mHeaders(headers), mExpensiveOps(true){ - mDb = QSqlDatabase::database("treedb"); mWatch = new SmDirWatcher(NumFields, this); connect(mWatch, SIGNAL(needRefresh()), this, SLOT(refresh())); mRunTimer = new QTimer(this); diff --git a/smdirmodel.h b/smdirmodel.h index c4cc4ab..a775553 100644 --- a/smdirmodel.h +++ b/smdirmodel.h @@ -9,7 +9,6 @@ #define SMDIRMODEL_H #include -#include #include #include @@ -60,7 +59,6 @@ class SmDirModel : public SmTreeModel { QTimer *mRunTimer; QTimer *mRefreshTimer; QMap mIcons; - QSqlDatabase mDb; bool mExpensiveOps; }; diff --git a/smdirwatcher.cpp b/smdirwatcher.cpp index 24deee1..8c0570e 100644 --- a/smdirwatcher.cpp +++ b/smdirwatcher.cpp @@ -25,6 +25,8 @@ SmDirWatcher::SmDirWatcher(int numFields, QObject *parent) : QThread(parent), mF mBufLen = 1024 * (sizeof(struct inotify_event) + 16); mINdata = new char[mBufLen]; mFd = inotify_init(); + mDb = QSqlDatabase::cloneDatabase(QSqlDatabase::database("treedb"), "dirwatcherdb"); + mDb.open(); } void SmDirWatcher::setDir(const QString &dir){ @@ -95,8 +97,7 @@ QList SmDirWatcher::generalData(const QString &path){ int SmDirWatcher::presenceData(QString &md5){ int retval = SmDirModel::InNone; - QSqlDatabase db = QSqlDatabase::database("treedb"); - QSqlQuery present1Q(db); + QSqlQuery present1Q(mDb); present1Q.prepare("SELECT COUNT(*) FROM files WHERE cmd5sum = :md5"); present1Q.bindValue(":md5", md5); present1Q.exec(); @@ -106,7 +107,7 @@ int SmDirWatcher::presenceData(QString &md5){ retval = SmDirModel::InFiles; } } - QSqlQuery present2Q(db); + QSqlQuery present2Q(mDb); present2Q.prepare("SELECT COUNT(*) from files_origin WHERE cmd5sum = :md5"); present2Q.bindValue(":md5", md5); while(present2Q.next()){ @@ -115,7 +116,7 @@ int SmDirWatcher::presenceData(QString &md5){ retval = SmDirModel::InOrigin; } } - QSqlQuery present3Q(db); + QSqlQuery present3Q(mDb); present3Q.prepare("SELECT COUNT(*) FROM pics WHERE cmd5sum = :md5"); present3Q.bindValue(":md5", md5); while(present3Q.next()){ @@ -127,8 +128,6 @@ int SmDirWatcher::presenceData(QString &md5){ return retval; } -#include - void SmDirWatcher::run(){ struct pollfd pfd[1]; pfd[0].fd = mFd; @@ -153,16 +152,12 @@ void SmDirWatcher::run(){ QString name = QString("%1/%2").arg(mCurrent).arg(e->name); QList d = generalData(name); if(mask & IN_CREATE || mask & IN_MOVED_TO){ - qDebug() << "Adding" << name; emit newData(d, Added); }else if(mask & IN_DELETE || mask & IN_MOVED_FROM){ - qDebug() << "DEL|MOVE" << name; emit newData(d, Deleted); }else if(mask & IN_MODIFY){ - qDebug() << "MOD" << name; emit newData(d, Modified); }else if(mask & IN_CLOSE_WRITE){ - qDebug() << "CLOSEW" << name; emit newData(d, CloseWrite); } i += sizeof(inotify_event) + e->len; diff --git a/smdirwatcher.h b/smdirwatcher.h index 579a4c3..bf89050 100644 --- a/smdirwatcher.h +++ b/smdirwatcher.h @@ -9,21 +9,11 @@ #define SMDIRWATCHER_H #include -#include #include -#include -#include -#include #include #include -#include -#include class SmTreeItem; -class QSemaphore; -class SmDataColletor; -class AsyncTask; -class Md5Summer; class SmDirWatcher : public QThread { Q_OBJECT @@ -56,6 +46,7 @@ class SmDirWatcher : public QThread { int mBufLen; int mNumFields; bool mExpensiveOps; + QSqlDatabase mDb; }; #endif // SMDIRWATCHER_H -- cgit v1.2.3-70-g09d2