From 369c14264c664b38049ac081cf60b8485a4042cb Mon Sep 17 00:00:00 2001 From: Arno Date: Thu, 22 Aug 2013 07:43:20 +0200 Subject: Give Pictures some love! * Show and archive size of pictures * Fix SqlQueries in PicFilesModel: removeFiles and changeMappings * use delegate in PictureView --- picfilesmodel.cpp | 56 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 32 insertions(+), 24 deletions(-) (limited to 'picfilesmodel.cpp') diff --git a/picfilesmodel.cpp b/picfilesmodel.cpp index cb54503..21344dc 100644 --- a/picfilesmodel.cpp +++ b/picfilesmodel.cpp @@ -21,15 +21,8 @@ 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 FROM pics, pics_mappings WHERE pics_mappings.imappings_parents_id IN (%1) 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, 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)"); - mDeleteFileQ = new QSqlQuery(mDb); - mDeleteFileQ->prepare("DELETE FROM pics WHERE ipicsid = :id"); - mDeleteMappingsQ = new QSqlQuery(mDb); - mDeleteMappingsQ->prepare("DELETE FROM pics_mappings WHERE ipics_id = :id"); - mAddMappingsQ = new QSqlQuery(mDb); - mAddMappingsQ->prepare("INSERT INTO pics_mappings(ipics_id, imappings_parents_id) VALUES(:pid, :id)"); - } void PicFilesModel::setMapping(int pMapId){ @@ -47,7 +40,7 @@ QVariant PicFilesModel::data(const QModelIndex &index, int role) const { } } if(role == Qt::ForegroundRole){ - if(index.column() == SizeDisplay){ + if(index.column() == Size){ int fileSize = index.data(SizeRole).toInt(); if(fileSize > 1024 * 1024 * 1024){ return QColor(Qt::red); @@ -78,8 +71,8 @@ QVariant PicFilesModel::data(const QModelIndex &index, int role) const { if(role == Md5SumRole){ return item->data(Md5Sum); } - if(role == SizeDisplayRole){ - return item->data(SizeDisplay); + if(role == PicSizeRole){ + return item->data(PicSize); } return SmTreeModel::data(index, role); } @@ -118,27 +111,43 @@ QList > PicFilesModel::allFiles() const { return retval; } -void PicFilesModel::removeFiles(const QList &files){ - foreach(QPersistentModelIndex pi, files){ - mDeleteFileQ->bindValue(":id", pi.data(IdRole)); - if(mDeleteFileQ->exec()){ - QFile::remove(pi.data(FullPathRole).toString()); - removeRows(pi.row(), 1, QModelIndex()); +void PicFilesModel::removeFiles(const QList > &files){ + QSqlQuery deleteFile(mDb); + deleteFile.prepare("DELETE FROM pics WHERE ipicsid = :id"); + QList success; + // remove from model + for(int i = 0; i < files.size(); ++i){ + QPair cur = files.at(i); + deleteFile.bindValue(":id", cur.first); + if(deleteFile.exec()){ + success << cur.first; + QFile::remove(cur.second); + } + } + // remove from view + foreach(int id, success){ + QModelIndex idx = find(id, Id); + if(idx.isValid()){ + removeRows(idx.row(), 1, QModelIndex()); } } } bool PicFilesModel::changeMappings(const QList &fileIds, const QList &parentIds){ mDb.transaction(); + QSqlQuery deleteMappingsQ(mDb); + deleteMappingsQ.prepare("DELETE FROM pics_mappings WHERE ipics_id = :id"); + QSqlQuery addMappingsQ(mDb); + addMappingsQ.prepare("INSERT INTO pics_mappings(ipics_id, imappings_parents_id) VALUES(:pid, :id)"); foreach(int fid, fileIds){ - mDeleteMappingsQ->bindValue(":id", fid); - if(!mDeleteMappingsQ->exec()){ + deleteMappingsQ.bindValue(":id", fid); + if(!deleteMappingsQ.exec()){ goto error; } foreach(QVariant pid, parentIds){ - mAddMappingsQ->bindValue(":pid", fid); - mAddMappingsQ->bindValue(":id", pid); - if(!mAddMappingsQ->exec()){ + addMappingsQ.bindValue(":pid", fid); + addMappingsQ.bindValue(":id", pid); + if(!addMappingsQ.exec()){ goto error; } } @@ -204,8 +213,7 @@ void PicFilesModel::populate(){ 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 + data << q.value(6); // picsize SmTreeItem *child = new SmTreeItem(data, root); root->appendChild(child); } -- cgit v1.2.3-70-g09d2