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