From acf45e858b6dc1df1c85e98d7b8b872f5d983c34 Mon Sep 17 00:00:00 2001 From: GPayne Date: Sun, 11 Sep 2022 19:42:56 -0600 Subject: [PATCH 1/2] Fixed file path bug with converting session recording version --- data/tasks/sessRecConvertVersion.task | 6 ++++++ .../openspace/interaction/sessionrecording.h | 11 ++++++++++- src/interaction/sessionrecording.cpp | 18 +++++------------- .../tasks/convertrecfileversiontask.cpp | 7 +------ 4 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 data/tasks/sessRecConvertVersion.task diff --git a/data/tasks/sessRecConvertVersion.task b/data/tasks/sessRecConvertVersion.task new file mode 100644 index 0000000000..b854e5feac --- /dev/null +++ b/data/tasks/sessRecConvertVersion.task @@ -0,0 +1,6 @@ +return { + { + Type = "ConvertRecFileVersionTask", + InputFilePath = "../../user/recordings/input.osrec" + } +} diff --git a/include/openspace/interaction/sessionrecording.h b/include/openspace/interaction/sessionrecording.h index b1981a8e3a..b7bf00fb52 100644 --- a/include/openspace/interaction/sessionrecording.h +++ b/include/openspace/interaction/sessionrecording.h @@ -550,6 +550,16 @@ public: */ std::string convertFile(std::string filename, int depth = 0); + /** + * Converts file format of a session recording file to the current format version + * (will determine the file format conversion to convert from based on the file's + * header version number). Accepts a relative path (currently from task runner dir) + * rather than a path assumed to be relative to ${RECORDINGS}. + * + * \param filename name of the file to convert + */ + void convertFileRelativePath(std::string filenameRelative); + /** * Goes to legacy session recording inherited class, and calls its convertFile() * method, and then returns the resulting conversion filename. @@ -617,7 +627,6 @@ protected: bool handleRecordingFile(std::string filenameIn); static bool isPath(std::string& filename); void removeTrailingPathSlashes(std::string& filename); - void extractFilenameFromPath(std::string& filename); bool playbackCamera(); bool playbackTimeChange(); bool playbackScript(); diff --git a/src/interaction/sessionrecording.cpp b/src/interaction/sessionrecording.cpp index 0eadd4499e..cc9a375457 100644 --- a/src/interaction/sessionrecording.cpp +++ b/src/interaction/sessionrecording.cpp @@ -143,15 +143,6 @@ void SessionRecording::removeTrailingPathSlashes(std::string& filename) { } } -void SessionRecording::extractFilenameFromPath(std::string& filename) { - size_t unixDelimiter = filename.find_last_of("/"); - if (unixDelimiter != std::string::npos) - filename = filename.substr(unixDelimiter + 1); - size_t windowsDelimiter = filename.find_last_of("\\"); - if (windowsDelimiter != std::string::npos) - filename = filename.substr(windowsDelimiter + 1); -} - bool SessionRecording::handleRecordingFile(std::string filenameIn) { if (isPath(filenameIn)) { LERROR("Recording filename must not contain path (/) elements"); @@ -2303,6 +2294,10 @@ void SessionRecording::readFileIntoStringStream(std::string filename, inputFstream.close(); } +void SessionRecording::convertFileRelativePath(std::string filenameRelative) { + convertFile(absPath(filenameRelative).string()); +} + std::string SessionRecording::convertFile(std::string filename, int depth) { std::string conversionOutFilename = filename; std::ifstream conversionInFile; @@ -2331,9 +2326,6 @@ std::string SessionRecording::convertFile(std::string filename, int depth) { //conversionInStream.seekg(conversionInStream.beg); newFilename = getLegacyConversionResult(filename, depth + 1); removeTrailingPathSlashes(newFilename); - if (isPath(newFilename)) { - extractFilenameFromPath(newFilename); - } if (filename == newFilename) { return filename; } @@ -2572,7 +2564,7 @@ std::string SessionRecording::determineConversionOutFilename(const std::string f filenameSansExtension = filename.substr(0, filename.find_last_of(".")); } filenameSansExtension += "_" + fileFormatVersion() + "-" + targetFileFormatVersion(); - return absPath("${RECORDINGS}/" + filenameSansExtension + fileExtension).string(); + return filenameSansExtension + fileExtension; } bool SessionRecording_legacy_0085::convertScript(std::stringstream& inStream, diff --git a/src/interaction/tasks/convertrecfileversiontask.cpp b/src/interaction/tasks/convertrecfileversiontask.cpp index 1255d3ee0a..61f3e31c61 100644 --- a/src/interaction/tasks/convertrecfileversiontask.cpp +++ b/src/interaction/tasks/convertrecfileversiontask.cpp @@ -52,11 +52,6 @@ ConvertRecFileVersionTask::ConvertRecFileVersionTask(const ghoul::Dictionary& di _inFilename = dictionary.value(KeyInFilePath); _inFilePath = absPath(_inFilename); - std::string::size_type idx = _inFilename.find_last_of('/'); - if (idx != std::string::npos) { - _inFilename = _inFilename.substr(idx + 1); - } - ghoul_assert(std::filesystem::is_regular_file(_inFilePath), "The file must exist"); if (!std::filesystem::is_regular_file(_inFilePath)) { LERROR(fmt::format("Failed to load session recording file: {}", _inFilePath)); @@ -100,7 +95,7 @@ void ConvertRecFileVersionTask::convert() { )); return; } - sessRec->convertFile(_inFilename); + sessRec->convertFileRelativePath(_inFilename); } documentation::Documentation ConvertRecFileVersionTask::documentation() { From 0ba064e14118ca5bb32ff393f61c9f2652f6f60c Mon Sep 17 00:00:00 2001 From: GPayne Date: Sun, 11 Sep 2022 21:42:46 -0600 Subject: [PATCH 2/2] Fix to account for possible empty string in session recording script --- src/interaction/sessionrecording.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/interaction/sessionrecording.cpp b/src/interaction/sessionrecording.cpp index cc9a375457..365fd801f4 100644 --- a/src/interaction/sessionrecording.cpp +++ b/src/interaction/sessionrecording.cpp @@ -1615,7 +1615,7 @@ std::string SessionRecording::isolateTermFromQuotes(std::string s) { } //If no quotes found, remove other possible characters from end std::string unwantedChars = " );"; - while (unwantedChars.find(s.back()) != std::string::npos) { + while (!s.empty() && (unwantedChars.find(s.back()) != std::string::npos)) { s.pop_back(); } return s;