From 42f971784065a47c40042d79649126ddc8c19253 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Malte=20K=C3=B6gel?= <koegel@vr.rwth-aachen.de>
Date: Wed, 11 Oct 2023 10:45:50 +0200
Subject: [PATCH] Also move log folders (PositionLogs, GazeTrackingLogs,
 ParticipantLogs) to RecyclingBin when restarting study.

---
 .../StudyFrameworkPlugin/Private/SFGameInstance.cpp   |  2 +-
 Source/StudyFrameworkPlugin/Private/SFParticipant.cpp | 11 ++++++++++-
 Source/StudyFrameworkPlugin/Public/SFParticipant.h    |  2 +-
 3 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
index 01b914f..4670399 100644
--- a/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFGameInstance.cpp
@@ -255,7 +255,7 @@ void USFGameInstance::PrepareWithStudySetup(ASFStudySetup* Setup)
 			ParticipantSequenceNumber = 0;
 			Conditions = StudySetup->GetAllConditionsForRun(ParticipantSequenceNumber);
 			//clear data
-			USFParticipant::ClearPhaseLongtables(Setup);
+			USFParticipant::ClearLogData(Setup);
 			break;
 		case 0:
 			FSFLoggingUtils::Log("[USFGameInstance::PrepareWithStudySetup]: Continue last participant");
diff --git a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
index bc88b18..b567717 100644
--- a/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
+++ b/Source/StudyFrameworkPlugin/Private/SFParticipant.cpp
@@ -702,21 +702,30 @@ void USFParticipant::CreateLongTableBackUp(const FString PathToSrcFile) const
 
 }
 
-void USFParticipant::ClearPhaseLongtables(ASFStudySetup* StudySetup)
+void USFParticipant::ClearLogData(ASFStudySetup* StudySetup)
 {
 	const FString LongTableFolder = FPaths::ProjectDir() + "StudyFramework/StudyLogs/";
 	const FString Extension = "*.csv";
 	const FString SearchPattern = LongTableFolder + Extension;
+	const TArray<FString> LogSubfolders = {"ParticipantLogs", "GazeTrackingLogs", "PositionLogs"};
 	TArray<FString> FileNames;
 	IFileManager& FileManager = IFileManager::Get();
 	FileManager.FindFiles(FileNames, *SearchPattern, true, false);
 	//Instead of actually deleting files, we want to move them to a recycling bin folder, to minimize risk of data loss
 	FString NewParentFolderPath = LongTableFolder + "RecyclingBin/" + "RestartStudyBackup-" + FDateTime::Now().ToString() + "/";
+	//Move PhaseTables (.csv-files)
 	for (FString Filename : FileNames)
 	{
 		const FString FullName = LongTableFolder + Filename;
 		FileManager.Move(*(NewParentFolderPath + Filename), *FullName);
 	}
+	//Move execution-based log folders (PositionLogs, etc.)
+	for (FString Subfolder : LogSubfolders) {
+		const FString FullName = LongTableFolder + Subfolder;
+		if (FileManager.DirectoryExists(*FullName)) {
+			FileManager.Move(*(NewParentFolderPath + Subfolder), *FullName);
+		}
+	}
 	FSFLoggingUtils::Log("Moved .csv files: " + NewParentFolderPath);
 }
 
diff --git a/Source/StudyFrameworkPlugin/Public/SFParticipant.h b/Source/StudyFrameworkPlugin/Public/SFParticipant.h
index c88de85..feb1d4d 100644
--- a/Source/StudyFrameworkPlugin/Public/SFParticipant.h
+++ b/Source/StudyFrameworkPlugin/Public/SFParticipant.h
@@ -74,7 +74,7 @@ public:
 	// for the data to be ready to use in statistics software. This methods clears all
 	// of that data (e.g. if study is entirely restarted).
 	// The data can be recovered from /StudyLogs/RecyclingBin
-	static void ClearPhaseLongtables(ASFStudySetup* StudySetup);
+	static void ClearLogData(ASFStudySetup* StudySetup);
 
 	// Whenever we delete data in a file (e.g. with by restarting a condition),
 	// we want to create a backup, to enable data recovery
-- 
GitLab