From 48210c7186c6c070274c8bf279615cff07d9a092 Mon Sep 17 00:00:00 2001 From: William JCM Date: Wed, 22 Sep 2021 19:46:41 +0200 Subject: [PATCH] UESaveFile: prevent reloading data on save. --- src/UESaveFile/UESaveFile.cpp | 21 ++++++++++++++++++++- src/UESaveFile/UESaveFile.h | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/UESaveFile/UESaveFile.cpp b/src/UESaveFile/UESaveFile.cpp index 5b995f2..a8cf307 100644 --- a/src/UESaveFile/UESaveFile.cpp +++ b/src/UESaveFile/UESaveFile.cpp @@ -39,6 +39,10 @@ auto UESaveFile::lastError() const -> const std::string& { } auto UESaveFile::reloadData() -> bool { + if(_noReloadAfterSave) { + return valid(); + } + loadData(); return valid(); } @@ -48,7 +52,7 @@ auto UESaveFile::props() -> Containers::ArrayView { } auto UESaveFile::saveToFile() -> bool { - BinaryWriter writer{_filepath + ".other"}; + BinaryWriter writer{_filepath + ".tmp"}; if(!writer.open()) { return false; @@ -97,6 +101,21 @@ auto UESaveFile::saveToFile() -> bool { writer.writeUnsignedInt(0); + if(!Utility::Directory::copy(_filepath, _filepath + ".bak")) { + return false; + } + + if(!Utility::Directory::rm(_filepath)) { + return false; + } + + if(!Utility::Directory::move(_filepath + ".tmp", _filepath)) { + Utility::Directory::move(_filepath + ".bak", _filepath); + return false; + } + + _noReloadAfterSave = true; + return true; } diff --git a/src/UESaveFile/UESaveFile.h b/src/UESaveFile/UESaveFile.h index fba6e4d..7dedaa7 100644 --- a/src/UESaveFile/UESaveFile.h +++ b/src/UESaveFile/UESaveFile.h @@ -63,6 +63,8 @@ class UESaveFile { std::string _filepath; + bool _noReloadAfterSave = false; + Containers::StaticArray<4, char> _magicBytes{'G', 'V', 'A', 'S'}; UnsignedInt _saveVersion = 0;