From 030bc6acaee0653eeb3a43d8e8afaa722a036b7a Mon Sep 17 00:00:00 2001 From: Fred Gleason Date: Thu, 10 Nov 2022 17:36:19 -0500 Subject: [PATCH] 2022-11-10 Fred Gleason * Added code to catch warning exception when processing image conversions in 'RDIMResizeImage()'. Signed-off-by: Fred Gleason --- ChangeLog | 3 +++ lib/rdfeed.cpp | 6 ++++-- lib/rdimagemagick.cpp | 21 ++++++++++++++++----- lib/rdimagemagick.h | 3 ++- utils/rddbmgr/updateschema.cpp | 25 +++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3f6d778f..f3126cee 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23648,3 +23648,6 @@ * Fixed a bug in the 'Edit Audio' dialog in rdlibrary(1) that could cause the right end of the audio waveform to be truncated when viewing long cuts. +2022-11-10 Fred Gleason + * Added code to catch warning exception when processing image + conversions in 'RDIMResizeImage()'. diff --git a/lib/rdfeed.cpp b/lib/rdfeed.cpp index a0a017aa..bd1c3f61 100644 --- a/lib/rdfeed.cpp +++ b/lib/rdfeed.cpp @@ -771,6 +771,8 @@ int RDFeed::importImageFile(const QString &pathname,QString *err_msg, // // Write it to the DB // + QString im_err; + QStringList f0=pathname.split(".",QString::SkipEmptyParts); sql=QString("insert into `FEED_IMAGES` set ")+ QString::asprintf("`FEED_ID`=%u,",id())+ @@ -782,9 +784,9 @@ int RDFeed::importImageFile(const QString &pathname,QString *err_msg, "`FILE_EXTENSION`='"+RDEscapeString(f0.last().toLower())+"',"+ "`DATA`="+RDEscapeBlob(data)+","+ "`DATA_MID_THUMB`="+ - RDEscapeBlob(RDIMResizeImage(data,RD_MID_THUMB_SIZE))+","+ + RDEscapeBlob(RDIMResizeImage(data,RD_MID_THUMB_SIZE,&im_err))+","+ "`DATA_SMALL_THUMB`="+ - RDEscapeBlob(RDIMResizeImage(data,RD_SMALL_THUMB_SIZE)); + RDEscapeBlob(RDIMResizeImage(data,RD_SMALL_THUMB_SIZE,&im_err)); ret=RDSqlQuery::run(sql,&ok).toInt(); if(!ok) { *err_msg="Unable to write images to database"; diff --git a/lib/rdimagemagick.cpp b/lib/rdimagemagick.cpp index 7f3635ca..576181a2 100644 --- a/lib/rdimagemagick.cpp +++ b/lib/rdimagemagick.cpp @@ -18,18 +18,29 @@ // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. // +#include + #include #include "rdimagemagick.h" -QByteArray RDIMResizeImage(const QByteArray &src_image,const QSize &size) +QByteArray RDIMResizeImage(const QByteArray &src_image,const QSize &size, + QString *err_msg) { - Magick::Image img(Magick::Blob(src_image.constData(),src_image.size())); - Magick::Geometry dst_size(size.width(),size.height()); Magick::Blob dst_blob; + *err_msg=""; + + try { + Magick::Image img(Magick::Blob(src_image.constData(),src_image.size())); + Magick::Geometry dst_size(size.width(),size.height()); - img.zoom(Magick::Geometry(size.width(),size.height())); - img.write(&dst_blob); + img.zoom(Magick::Geometry(size.width(),size.height())); + img.write(&dst_blob); + } + catch (Magick::WarningCoder &warn) { + *err_msg=QString::fromUtf8(warn.what()); + fprintf(stderr,"Magick: %s\n",warn.what()); + } return QByteArray((const char *)dst_blob.data(),dst_blob.length()); } diff --git a/lib/rdimagemagick.h b/lib/rdimagemagick.h index 83b04c3e..1f2e5ca9 100644 --- a/lib/rdimagemagick.h +++ b/lib/rdimagemagick.h @@ -24,7 +24,8 @@ #include #include -QByteArray RDIMResizeImage(const QByteArray &src_image,const QSize &size); +QByteArray RDIMResizeImage(const QByteArray &src_image,const QSize &size, + QString *err_msg); #endif // RDIMAGEMAGICK_H diff --git a/utils/rddbmgr/updateschema.cpp b/utils/rddbmgr/updateschema.cpp index b58fa92d..ed52ee86 100644 --- a/utils/rddbmgr/updateschema.cpp +++ b/utils/rddbmgr/updateschema.cpp @@ -11306,7 +11306,31 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) *err_msg=tr("unable to determine image file type"); return false; } + QString blob_err; + QByteArray mid_blob= + RDIMResizeImage(q->value(1).toByteArray(),RD_MID_THUMB_SIZE,&blob_err); + if(!blob_err.isEmpty()) { + fprintf(stderr,"rddbmgr: image %u:\"%s\" in RSS feed \"%s\": %s\n", + q->value(0).toUInt(), + q->value(3).toString().toUtf8().constData(), + q->value(2).toString().toUtf8().constData(), + blob_err.toUtf8().constData()); + } + QByteArray small_blob=RDIMResizeImage(q->value(1).toByteArray(), + RD_SMALL_THUMB_SIZE,&blob_err); + if(!blob_err.isEmpty()) { + fprintf(stderr,"rddbmgr: image %u:\"%s\" in RSS feed \"%s\": %s\n", + q->value(0).toUInt(), + q->value(3).toString().toUtf8().constData(), + q->value(2).toString().toUtf8().constData(), + blob_err.toUtf8().constData()); + } if((mimetype=="image/jpeg")||(mimetype=="image/png")) { + sql=QString("update `FEED_IMAGES` set ")+ + "`DATA_MID_THUMB`="+RDEscapeBlob(mid_blob)+","+ + "`DATA_SMALL_THUMB`="+RDEscapeBlob(small_blob)+" "+ + QString::asprintf("where `ID`=%u",q->value(0).toUInt()); + /* sql=QString("update `FEED_IMAGES` set ")+ "`DATA_MID_THUMB`="+ RDEscapeBlob(RDIMResizeImage(q->value(1).toByteArray(), @@ -11315,6 +11339,7 @@ bool MainObject::UpdateSchema(int cur_schema,int set_schema,QString *err_msg) RDEscapeBlob(RDIMResizeImage(q->value(1).toByteArray(), RD_SMALL_THUMB_SIZE))+" "+ QString::asprintf("where `ID`=%u",q->value(0).toUInt()); + */ if(!RDSqlQuery::apply(sql,err_msg)) { return false; }