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