diff options
-rw-r--r-- | helper.cpp | 51 | ||||
-rw-r--r-- | helper.h | 3 | ||||
-rw-r--r-- | pictureviewer2.cpp | 14 | ||||
-rw-r--r-- | shemov.pro | 3 |
4 files changed, 67 insertions, 4 deletions
@@ -26,6 +26,9 @@ #include <QJsonObject> #include <QPainter> #include <QDir> +#include <QRegularExpression> +#include <QSqlDatabase> +#include <QSqlQuery> #include <stdio.h> @@ -313,6 +316,54 @@ namespace Helper { return QVariant(); } + PicData convertToPng(PicData data){ + if(data.at(2) != "image/jpeg"){ + return PicData(); + } + PicData retval; + QString newFn = data.at(0).toString(); + newFn.replace(QRegularExpression("(jpg|jpeg)$", QRegularExpression::CaseInsensitiveOption), "png"); + Magick::Image img; + img.read(data.at(3).toByteArray().data()); + QTemporaryFile outFile("shemovconvertXXXXXX.png"); + if(outFile.open()){ + try { + img.write(outFile.fileName().toStdString()); + } + catch(Magick::Exception &e) { + return retval; + } + outFile.rename(newFn); + QString newMd5 = md5Sum(outFile.fileName()); + QString dest = moveToArchive(outFile.fileName(), newMd5, true); + QFileInfo destFi(dest); + if(!destFi.exists()){ + return PicData(); + } + QString mt = mimeType(dest); + retval = data; + retval[0] = newFn; //Filename + retval[1] = destFi.size(); //Size + retval[2] = mt; //Mime-Type + retval[3] = dest; //Full path + retval[6] = newMd5; //md5sum + QSqlDatabase db = QSqlDatabase::database("treedb"); + int id = data.at(4).toInt(); + QSqlQuery q(db); + q.prepare("UPDATE pics SET tfilename = :fn, cmd5sum = :md5, isize = :size, tformat = :format WHERE ipicsid = :id"); + q.bindValue(":fn", newFn); + q.bindValue(":md5", newMd5); + q.bindValue(":size", destFi.size()); + q.bindValue(":format", mt); + q.bindValue(":id", id); + + if(q.exec()){ + return retval; + } + } + return PicData(); + } + Duration::Duration() : mHours(0), mMinutes(0), mSeconds(0) {} Duration::Duration(qint64 seconds){ @@ -16,6 +16,8 @@ #include <QJsonDocument> #include <magic.h> +#include <pictureviewer2.h> +#include <ImageMagick-6/Magick++.h> class QString; class QFileInfo; @@ -37,6 +39,7 @@ namespace Helper { QPixmap preview(const QString &path); QImage snapshot(const QString &path, int where); QVariant picSize(const QString &path); + PicData convertToPng(PicData data); class Duration { public: Duration(); diff --git a/pictureviewer2.cpp b/pictureviewer2.cpp index fcdf4b7..7033a52 100644 --- a/pictureviewer2.cpp +++ b/pictureviewer2.cpp @@ -418,7 +418,15 @@ void PictureViewer2::showFile(const PicData &file){ mCurPicData = file; QPixmap pixmap(file.at(PicFilesModel::FullPath).toString()); if(pixmap.isNull()){ - pixmap = QPixmap(mDefaultFile); + mCurPicData = Helper::convertToPng(file); + mFiles[mCurPos] = mCurPicData; + if(mCurPicData.isEmpty()){ + return; + } + pixmap = QPixmap(mCurPicData.at(3).toString()); + if(pixmap.isNull()){ + pixmap = QPixmap(mDefaultFile); + } } if(mUseGradient){ setGradient(pixmap); @@ -441,7 +449,7 @@ void PictureViewer2::showFile(const PicData &file){ mCur->setPos(picRect.topLeft()); setWindowTitle(constructWindowTitle()); if(mConfigInfoPos != ConfigurationDialog::NoDisplay && mShowInfoItem){ - constructInfoItem(file, pixmap.size()); + constructInfoItem(mCurPicData, pixmap.size()); }else{ if(mFnItem){ mScene->removeItem(mFnItem); @@ -450,7 +458,7 @@ void PictureViewer2::showFile(const PicData &file){ } } if(mConfigMapPos != ConfigurationDialog::NoDisplay && mShowMappingItem){ - constructMappingItem(file); + constructMappingItem(mCurPicData); }else{ if(mMappingItem){ mScene->removeItem(mMappingItem); @@ -85,5 +85,6 @@ HEADERS = \ archivebrowsermodel.h \ unpacker.h \ searchdialog.h -LIBS += -lmagic -lXfixes -lX11 +LIBS += -lmagic -lXfixes -lX11 -lMagick++-6.Q16HDRI +INCLUDEPATH += /usr/include/ImageMagick-6/ RESOURCES = shemov.qrc |