From f28037d458847a79c8e284312d53ff7f3ef9dcc9 Mon Sep 17 00:00:00 2001 From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de> Date: Wed, 18 Jan 2023 10:44:07 +0100 Subject: [PATCH] check for empty projectDir --- GUI/Model/Data/DataItem.cpp | 7 +++++-- GUI/Model/Data/DataItem.h | 4 ++-- GUI/Model/Data/RealItem.cpp | 4 ++-- GUI/Model/Job/JobItem.cpp | 2 +- GUI/Model/Project/IOService.cpp | 2 +- GUI/Support/IO/SaveLoadInterface.h | 2 +- 6 files changed, 12 insertions(+), 9 deletions(-) diff --git a/GUI/Model/Data/DataItem.cpp b/GUI/Model/Data/DataItem.cpp index 3145c73f8c1..6b5f6fd3f2f 100644 --- a/GUI/Model/Data/DataItem.cpp +++ b/GUI/Model/Data/DataItem.cpp @@ -90,8 +90,11 @@ bool DataItem::containsNonXMLData() const return static_cast<bool>(m_datafield); } -QString DataItem::loadDatafield(const QString& projectDir, MessageService* messageService) +QString DataItem::loadDatafield(MessageService* messageService, const QString& projectDir) { + if (projectDir.isEmpty()) + return {}; + ASSERT(messageService); const QString filename = fileName(projectDir); try { @@ -123,7 +126,7 @@ bool DataItem::saveDatafield(const QString& projectDir) void DataItem::saveDatafieldInBackground(const QString &projectDir) { - if (!containsNonXMLData() || !isModifiedSinceLastSave()) + if (!containsNonXMLData() || !isModifiedSinceLastSave() || projectDir.isEmpty()) return; std::unique_lock<std::mutex> lock(m_update_data_mutex); diff --git a/GUI/Model/Data/DataItem.h b/GUI/Model/Data/DataItem.h index 47769f26d68..2eac217a529 100644 --- a/GUI/Model/Data/DataItem.h +++ b/GUI/Model/Data/DataItem.h @@ -56,9 +56,9 @@ public: void setFileName(const QString& filename); QDateTime lastModified() const override; bool containsNonXMLData() const override; - QString loadDatafield(const QString& projectDir, MessageService* messageService) override; + QString loadDatafield(MessageService* messageService, const QString& projectDir = "") override; bool saveDatafield(const QString& projectDir) override; - void saveDatafieldInBackground(const QString& projectDir); + void saveDatafieldInBackground(const QString& projectDir = ""); void setLastModified(const QDateTime& dtime); diff --git a/GUI/Model/Data/RealItem.cpp b/GUI/Model/Data/RealItem.cpp index 65cd1fe38f9..2b5e9a4428c 100644 --- a/GUI/Model/Data/RealItem.cpp +++ b/GUI/Model/Data/RealItem.cpp @@ -423,13 +423,13 @@ QString RealItem::readFrom(QXmlStreamReader* r, const QString& projectDir, // data } else if (tag == Tag::Data) { m_dataItem.reset(readItemToEnd<DataItem>(r, this, tag)); - dataError = m_dataItem->loadDatafield(projectDir, messageService); + dataError = m_dataItem->loadDatafield(messageService, projectDir); XML::gotoEndElementOfTag(r, tag); // native data } else if (tag == Tag::NativeData) { m_nativeDataItem.reset(readItemToEnd<DataItem>(r, this, tag)); - nativeDataError == m_nativeDataItem->loadDatafield(projectDir, messageService); + nativeDataError == m_nativeDataItem->loadDatafield(messageService, projectDir); XML::gotoEndElementOfTag(r, tag); // native data units diff --git a/GUI/Model/Job/JobItem.cpp b/GUI/Model/Job/JobItem.cpp index 5f5ffaefdf0..517f480153d 100644 --- a/GUI/Model/Job/JobItem.cpp +++ b/GUI/Model/Job/JobItem.cpp @@ -628,7 +628,7 @@ void JobItem::readFrom(QXmlStreamReader* r, const QString& projectDir, // simulated data } else if (tag == Tag::SimulatedData) { m_simulatedDataItem.reset(readItemToEnd<DataItem>(r, this, Tag::SimulatedData)); - simError = m_simulatedDataItem->loadDatafield(projectDir, messageService); + simError = m_simulatedDataItem->loadDatafield(messageService, projectDir); XML::gotoEndElementOfTag(r, tag); // fit suite diff --git a/GUI/Model/Project/IOService.cpp b/GUI/Model/Project/IOService.cpp index 4434d858e42..847121138ac 100644 --- a/GUI/Model/Project/IOService.cpp +++ b/GUI/Model/Project/IOService.cpp @@ -82,7 +82,7 @@ void DatafieldIOService::loadDataFiles(const QString& projectDir, MessageService DatafieldDirHistory newHistory; for (SaveLoadInterface* item : dataInterfaces()) { try { - item->loadDatafield(projectDir, messageService); + item->loadDatafield(messageService, projectDir); newHistory.markAsSaved(item); // handling crash of GUI during job run and non-existing file if (auto* jobItem = parentJobItem(item)) { diff --git a/GUI/Support/IO/SaveLoadInterface.h b/GUI/Support/IO/SaveLoadInterface.h index d1893fe73a4..c44d9de6fc5 100644 --- a/GUI/Support/IO/SaveLoadInterface.h +++ b/GUI/Support/IO/SaveLoadInterface.h @@ -29,7 +29,7 @@ public: virtual ~SaveLoadInterface() = default; //! Loads non-XML data from _projectDir_ and returns success flag. - virtual QString loadDatafield(const QString& projectDir, MessageService* messageService) = 0; + virtual QString loadDatafield(MessageService* messageService, const QString& projectDir = "") = 0; //! Saves non-XML data in _projectDir_ and returns success flag. virtual bool saveDatafield(const QString& projectDir) = 0; -- GitLab