From 00982eaacc1ee33199cea57744a76fd3bd5edd07 Mon Sep 17 00:00:00 2001 From: Le Tan Date: Wed, 16 Nov 2016 21:54:52 +0800 Subject: [PATCH] fix images inserting when images folder does not exist Signed-off-by: Le Tan --- src/utils/vutils.cpp | 15 +++++++++++++++ src/utils/vutils.h | 1 + src/vmdeditoperations.cpp | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/utils/vutils.cpp b/src/utils/vutils.cpp index c70bef93..2b4b8307 100644 --- a/src/utils/vutils.cpp +++ b/src/utils/vutils.cpp @@ -144,3 +144,18 @@ QVector VUtils::imagesFromMarkdownFile(const QString &filePath) } return images; } + +void VUtils::makeDirectory(const QString &path) +{ + if (path.isEmpty()) { + return; + } + + // mkdir will return false if it already exists + QString basePath = basePathFromPath(path); + QString dirName = directoryNameFromPath(path); + QDir dir(basePath); + if (dir.mkdir(dirName)) { + qDebug() << "mkdir" << path; + } +} diff --git a/src/utils/vutils.h b/src/utils/vutils.h index 8ce1c048..0fe70145 100644 --- a/src/utils/vutils.h +++ b/src/utils/vutils.h @@ -24,6 +24,7 @@ public: static QString fileNameFromPath(const QString &path); static QString basePathFromPath(const QString &path); static QVector imagesFromMarkdownFile(const QString &filePath); + static void makeDirectory(const QString &path); private: static inline void addQssVarToMap(QVector > &map, const QString &key, const QString &value); diff --git a/src/vmdeditoperations.cpp b/src/vmdeditoperations.cpp index bfad7605..f5259937 100644 --- a/src/vmdeditoperations.cpp +++ b/src/vmdeditoperations.cpp @@ -44,6 +44,7 @@ void VMdEditOperations::insertImageFromQImage(const QString &title, const QStrin qDebug() << "insert image" << path << title << fileName; QString filePath = QDir(path).filePath(fileName); Q_ASSERT(!QFile(filePath).exists()); + VUtils::makeDirectory(path); bool ret = image.save(filePath); if (!ret) { QMessageBox msgBox(QMessageBox::Warning, QObject::tr("Warning"), QString("Fail to save image %1").arg(filePath), @@ -63,6 +64,7 @@ void VMdEditOperations::insertImageFromPath(const QString &title, qDebug() << "insert image" << path << title << fileName << oriImagePath; QString filePath = QDir(path).filePath(fileName); Q_ASSERT(!QFile(filePath).exists()); + VUtils::makeDirectory(path); bool ret = QFile::copy(oriImagePath, filePath); if (!ret) { qWarning() << "error: fail to copy" << oriImagePath << "to" << filePath;