From e21b8e0c1d845962b55287f7ff7742ff680383a6 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 8 Feb 2024 17:40:18 +0100 Subject: [PATCH] Utils: Add FilePath constructor for TempFileSaver Change-Id: I15286be055bd69544e4283740bd0c3411573475c Reviewed-by: Reviewed-by: hjk --- src/libs/utils/fileutils.cpp | 28 ++++++++++++++++++++++++++++ src/libs/utils/fileutils.h | 4 ++++ 2 files changed, 32 insertions(+) diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 4530ea206b8..a2998e2f07d 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -238,6 +238,11 @@ bool FileSaver::finalize() } TempFileSaver::TempFileSaver(const QString &templ) +{ + initFromString(templ); +} + +void TempFileSaver::initFromString(const QString &templ) { m_file.reset(new QTemporaryFile{}); auto tempFile = static_cast(m_file.get()); @@ -253,6 +258,29 @@ TempFileSaver::TempFileSaver(const QString &templ) m_filePath = FilePath::fromString(tempFile->fileName()); } +TempFileSaver::TempFileSaver(const FilePath &templ) +{ + if (templ.isEmpty() || !templ.needsDevice()) { + initFromString(templ.path()); + } else { + expected_str result = templ.createTempFile(); + if (!result) { + m_errorString = Tr::tr("Cannot create temporary file %1: %2") + .arg(templ.toUserOutput(), result.error()); + m_hasError = true; + return; + } + + m_file.reset(new QFile(result->toFSPathString())); + if (!m_file->open(QIODevice::WriteOnly)) { + m_errorString = Tr::tr("Cannot create temporary file %1: %2") + .arg(result->toUserOutput(), m_file->errorString()); + m_hasError = true; + } + m_filePath = *result; + } +} + TempFileSaver::~TempFileSaver() { m_file.reset(); diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 316030b0397..b20f7568dbe 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -222,10 +222,14 @@ class QTCREATOR_UTILS_EXPORT TempFileSaver : public FileSaverBase { public: explicit TempFileSaver(const QString &templ = QString()); + explicit TempFileSaver(const FilePath &templ); ~TempFileSaver() override; void setAutoRemove(bool on) { m_autoRemove = on; } +protected: + void initFromString(const QString &templ); + private: bool m_autoRemove = true; };