diff --git a/src/utils/imageutils.cpp b/src/utils/imageutils.cpp new file mode 100644 index 00000000..5d98941d --- /dev/null +++ b/src/utils/imageutils.cpp @@ -0,0 +1,18 @@ +#include "imageutils.h" + +#include + +using namespace vnotex; + +QImage::Format ImageUtils::guessImageFormat(const QByteArray &p_data) +{ + auto image = QImage::fromData(p_data); + return image.format(); +} + +QString ImageUtils::guessImageSuffix(const QByteArray &p_data) +{ + QMimeDatabase mimeDb; + auto mimeType = mimeDb.mimeTypeForData(p_data); + return mimeType.preferredSuffix(); +} diff --git a/src/utils/imageutils.h b/src/utils/imageutils.h new file mode 100644 index 00000000..e9daeeda --- /dev/null +++ b/src/utils/imageutils.h @@ -0,0 +1,19 @@ +#ifndef IMAGEUTILS_H +#define IMAGEUTILS_H + +#include + +namespace vnotex +{ + class ImageUtils + { + public: + ImageUtils() = delete; + + static QImage::Format guessImageFormat(const QByteArray &p_data); + + static QString guessImageSuffix(const QByteArray &p_data); + }; +} + +#endif // IMAGEUTILS_H diff --git a/src/utils/utils.pri b/src/utils/utils.pri index 3affa106..a3dc991d 100644 --- a/src/utils/utils.pri +++ b/src/utils/utils.pri @@ -4,6 +4,7 @@ SOURCES += \ $$PWD/contentmediautils.cpp \ $$PWD/docsutils.cpp \ $$PWD/htmlutils.cpp \ + $$PWD/imageutils.cpp \ $$PWD/pathutils.cpp \ $$PWD/processutils.cpp \ $$PWD/textutils.cpp \ @@ -19,6 +20,7 @@ HEADERS += \ $$PWD/contentmediautils.h \ $$PWD/docsutils.h \ $$PWD/htmlutils.h \ + $$PWD/imageutils.h \ $$PWD/pathutils.h \ $$PWD/processutils.h \ $$PWD/textutils.h \ diff --git a/src/widgets/editors/markdowneditor.cpp b/src/widgets/editors/markdowneditor.cpp index 956ec7f3..98011325 100644 --- a/src/widgets/editors/markdowneditor.cpp +++ b/src/widgets/editors/markdowneditor.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -1092,7 +1093,11 @@ void MarkdownEditor::fetchImagesToLocalAndReplace(QString &p_text) // Network path. QByteArray data = vte::Downloader::download(QUrl(imageUrl)); if (!data.isEmpty()) { - tmpFile.reset(FileUtils::createTemporaryFile(info.suffix())); + auto suffix = info.suffix(); + if (suffix.isEmpty()) { + suffix = ImageUtils::guessImageSuffix(data); + } + tmpFile.reset(FileUtils::createTemporaryFile(suffix)); if (tmpFile->open() && tmpFile->write(data) > -1) { srcImagePath = tmpFile->fileName(); }