diff options
Diffstat (limited to 'pictureswidget.cpp')
-rw-r--r-- | pictureswidget.cpp | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/pictureswidget.cpp b/pictureswidget.cpp index 8492dd2..f274425 100644 --- a/pictureswidget.cpp +++ b/pictureswidget.cpp @@ -245,14 +245,14 @@ void PictureView::setFileMappings(){ } PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTreeModel(headers, parent) { + //conjure up model + mMappingTreeModel = static_cast<MappingTreeModel*>(SmGlobals::instance()->model("MappingTree")); + //setup database mDb = QSqlDatabase::database("treedb"); - mPopulateQ = new QSqlQuery(mDb); - mPopulateQ->prepare("SELECT pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum, pics.ipicsid FROM pics, pics_mappings WHERE pics_mappings.imapping_id = :mapid AND pics_mappings.ipics_id = pics.ipicsid ORDER BY pics.tfilename"); + mPopulateQS = QString("SELECT DISTINCT(pics.ipicsid), pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum FROM pics, pics_mappings WHERE pics_mappings.imapping_id IN (%1) AND pics_mappings.ipics_id = pics.ipicsid ORDER BY pics.tfilename"); mDeleteFileQ = new QSqlQuery(mDb); mDeleteFileQ->prepare("DELETE FROM pics WHERE ipicsid = :id"); - mCurMappingIdsQ = new QSqlQuery(mDb); - mCurMappingIdsQ->prepare("SELECT DISTINCT(pics_mappings.imapping_id) FROM pics_mappings, pics WHERE pics_mappings.ipics_id IN (SELECT ipicsid FROM pics, pics_mappings WHERE pics_mappings.imapping_id = :mid AND pics_mappings.ipics_id = pics.ipicsid)"); mCurMappingIdsQS = QString("SELECT DISTINCT(pics_mappings.imapping_id) FROM pics_mappings, pics WHERE pics_mappings.ipics_id IN (%1)"); mDeleteMappingsQ = new QSqlQuery(mDb); mDeleteMappingsQ->prepare("DELETE FROM pics_mappings WHERE ipics_id = :id"); @@ -262,6 +262,22 @@ PicFilesModel::PicFilesModel(const QStringList &headers, QObject *parent) : SmTr mAllFilesQ->prepare("SELECT pics.tfilename, pics.isize, pics.tformat, pics.dtadded, pics.cmd5sum, pics.ipicsid FROM pics"); } +PicFilesModel::~PicFilesModel(){ + delete mDeleteFileQ; + delete mDeleteMappingsQ; + delete mAddMappingsQ; + delete mAllFilesQ; + mDb = QSqlDatabase::database(); +} + +void PicFilesModel::setMapping(int mappingId){ + QList<QVariant> ids = mMappingTreeModel->childList(mappingId, MappingTreeModel::Id); + mMappingIds.clear(); + foreach(QVariant i, ids){ + mMappingIds << i.toInt(); + } +} + QList<int> PicFilesModel::mappingIds(const QList<QVariant> &fileIds){ QList<int> retval; QStringList ids; @@ -384,23 +400,21 @@ bool PicFilesModel::changeMappings(const QList<int> &fileIds, const QList<int> & void PicFilesModel::populate(){ SmTreeItem *root = new SmTreeItem(NumFields); - mPopulateQ->bindValue(":mapid", mMappingId); - if(mPopulateQ->exec()){ - while(mPopulateQ->next()){ - QList<QVariant> data; - data << mPopulateQ->value(0) << mPopulateQ->value(1) << mPopulateQ->value(2); // Filename, size and Mime type - data << Helper::createArchivePath(mPopulateQ->value(0).toString(), mPopulateQ->value(4).toString()); // full path; - data << mPopulateQ->value(5) << mPopulateQ->value(3) << mPopulateQ->value(4); //Id, added and md5 - QLocale l; - data << l.toString(mPopulateQ->value(1).toInt()); - SmTreeItem *child = new SmTreeItem(data, root); - root->appendChild(child); - } - mCurMappingsIds.clear(); - mCurMappingIdsQ->bindValue(":mid", mMappingId); - while(mCurMappingIdsQ->next()){ - mCurMappingsIds << mCurMappingIdsQ->value(0).toInt(); - } - setRoot(root); + QStringList idList; + foreach(int id, mMappingIds){ + idList << QString::number(id); + } + QString query = mPopulateQS.arg(idList.join(",")); + QSqlQuery q(query, mDb); + while(q.next()){ + QList<QVariant> data; + data << q.value(1) << q.value(2) << q.value(3); // Filename, size and Mime type + data << Helper::createArchivePath(q.value(1).toString(), q.value(5).toString()); // full path; + data << q.value(0) << q.value(4) << q.value(5); //Id, added and md5 + QLocale l; + data << l.toString(q.value(2).toInt()); //sizedisplay + SmTreeItem *child = new SmTreeItem(data, root); + root->appendChild(child); } + setRoot(root); } |