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;