From 57c07ee5b13c9ef20b8e51a3929b9917b802f5c9 Mon Sep 17 00:00:00 2001
From: Mikhail Svechnikov <m.svechnikov@fz-juelich.de>
Date: Tue, 17 Jan 2023 19:12:23 +0100
Subject: [PATCH] RealModel: delete old files

---
 GUI/Model/Model/ApplicationModels.cpp |  2 +-
 GUI/Model/Model/ApplicationModels.h   |  2 +-
 GUI/Model/Model/RealModel.cpp         | 11 ++++++++++-
 GUI/Model/Model/RealModel.h           |  5 ++++-
 GUI/Model/Project/IOService.cpp       |  2 +-
 5 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/GUI/Model/Model/ApplicationModels.cpp b/GUI/Model/Model/ApplicationModels.cpp
index 9cd154f1b20..740fae5e30f 100644
--- a/GUI/Model/Model/ApplicationModels.cpp
+++ b/GUI/Model/Model/ApplicationModels.cpp
@@ -49,7 +49,7 @@ JobModel* ApplicationModels::jobModel() const
     return m_jobModel.get();
 }
 
-void ApplicationModels::writeTo(QXmlStreamWriter* w, const QString& projectDir) const
+void ApplicationModels::writeTo(QXmlStreamWriter* w, const QString& projectDir)
 {
     // real model
     w->writeStartElement(Tag::RealModel);
diff --git a/GUI/Model/Model/ApplicationModels.h b/GUI/Model/Model/ApplicationModels.h
index be7c684cbba..1a0ca9203ec 100644
--- a/GUI/Model/Model/ApplicationModels.h
+++ b/GUI/Model/Model/ApplicationModels.h
@@ -33,7 +33,7 @@ public:
     RealModel* realModel() const;
     JobModel* jobModel() const;
 
-    void writeTo(QXmlStreamWriter* w, const QString &projectDir) const;
+    void writeTo(QXmlStreamWriter* w, const QString &projectDir);
     void readFrom(QXmlStreamReader* r, const QString& projectDir, MessageService* messageService);
 
     //! Returns all data items
diff --git a/GUI/Model/Model/RealModel.cpp b/GUI/Model/Model/RealModel.cpp
index 96e70b13cad..cba35a87ff7 100644
--- a/GUI/Model/Model/RealModel.cpp
+++ b/GUI/Model/Model/RealModel.cpp
@@ -52,7 +52,7 @@ void RealModel::clear()
         removeRealItem(realItem);
 }
 
-void RealModel::writeToProject(QXmlStreamWriter* w, const QString& projectDir) const
+void RealModel::writeToProject(QXmlStreamWriter* w, const QString& projectDir)
 {
     XML::writeAttribute(w, XML::Attrib::version, uint(1));
 
@@ -63,6 +63,7 @@ void RealModel::writeToProject(QXmlStreamWriter* w, const QString& projectDir) c
         realItem->writeTo(w, projectDir);
         w->writeEndElement();
     }
+    deleteOldDataFiles(projectDir);
 }
 
 void RealModel::readFromProject(QXmlStreamReader* r, const QString& projectDir,
@@ -155,6 +156,7 @@ QVector<RealItem*> RealModel::realItems2D() const
 void RealModel::removeRealItem(RealItem* realItem)
 {
     ASSERT(realItem);
+    m_realItemFilesToDelete.append(realItem->dataItem()->fileName());
     int index = realItems().indexOf(realItem);
     m_realItems.erase(m_realItems.begin() + index);
     emit realDataAddedOrRemoved();
@@ -167,3 +169,10 @@ QStringList RealModel::realItemNames() const
         result.append(item->realItemName());
     return result;
 }
+
+void RealModel::deleteOldDataFiles(const QString& projectDir)
+{
+    for(QString fileName : m_realItemFilesToDelete)
+            QFile::remove(projectDir + "/" + fileName);
+    m_realItemFilesToDelete.clear();
+}
diff --git a/GUI/Model/Model/RealModel.h b/GUI/Model/Model/RealModel.h
index 725c64cec7b..ea5e6ea9cb8 100644
--- a/GUI/Model/Model/RealModel.h
+++ b/GUI/Model/Model/RealModel.h
@@ -30,7 +30,7 @@ public:
 
     QVector<DataItem*> dataItems() const;
     void clear() override;
-    void writeToProject(QXmlStreamWriter* w, const QString &projectDir) const;
+    void writeToProject(QXmlStreamWriter* w, const QString &projectDir);
     void readFromProject(QXmlStreamReader* r, const QString& projectDir,
                          MessageService* messageService = nullptr);
 
@@ -53,7 +53,10 @@ signals:
     void realDataAddedOrRemoved();
 
 private:
+    void deleteOldDataFiles(const QString& projectDir);
+
     std::vector<std::unique_ptr<RealItem>> m_realItems;
+    QStringList m_realItemFilesToDelete;
 };
 
 #endif // BORNAGAIN_GUI_MODEL_MODEL_REALMODEL_H
diff --git a/GUI/Model/Project/IOService.cpp b/GUI/Model/Project/IOService.cpp
index 68e390d4e06..4434d858e42 100644
--- a/GUI/Model/Project/IOService.cpp
+++ b/GUI/Model/Project/IOService.cpp
@@ -71,7 +71,7 @@ void DatafieldIOService::saveDataFiles(const QString& projectDir)
     // dealing with files
     QStringList oldFiles = m_history.savedFileNames(projectDir);
     QStringList newFiles = newHistory.savedFileNames();
-    cleanOldFiles(projectDir, oldFiles, newFiles);
+//    cleanOldFiles(projectDir, oldFiles, newFiles);
 
     // if oldHistory contained some deleted items, that info will be dropped here
     m_history.setHistory(projectDir, newHistory);
-- 
GitLab