diff options
Diffstat (limited to 'src/WorldStorage/ScoreboardSerializer.cpp')
-rw-r--r-- | src/WorldStorage/ScoreboardSerializer.cpp | 55 |
1 files changed, 16 insertions, 39 deletions
diff --git a/src/WorldStorage/ScoreboardSerializer.cpp b/src/WorldStorage/ScoreboardSerializer.cpp index 7b41f92b1..3ad4d42ee 100644 --- a/src/WorldStorage/ScoreboardSerializer.cpp +++ b/src/WorldStorage/ScoreboardSerializer.cpp @@ -4,8 +4,7 @@ #include "Globals.h" #include "ScoreboardSerializer.h" -#include "../StringCompression.h" -#include "zlib/zlib.h" +#include "OSSupport/GZipFile.h" #include "FastNBT.h" #include "../Scoreboard.h" @@ -31,29 +30,24 @@ cScoreboardSerializer::cScoreboardSerializer(const AString & a_WorldName, cScore bool cScoreboardSerializer::Load(void) { - AString Data = cFile::ReadWholeFile(m_Path); - if (Data.empty()) + try { - return false; - } + const auto Data = GZipFile::ReadRestOfFile(m_Path); + const cParsedNBT NBT(Data.GetView()); - AString Uncompressed; - int res = UncompressStringGZIP(Data.data(), Data.size(), Uncompressed); + if (!NBT.IsValid()) + { + // NBT Parsing failed + return false; + } - if (res != Z_OK) - { - return false; + return LoadScoreboardFromNBT(NBT); } - - // Parse the NBT data: - cParsedNBT NBT(Uncompressed.data(), Uncompressed.size()); - if (!NBT.IsValid()) + catch (const std::exception & Oops) { - // NBT Parsing failed + LOGWARNING("Failed to load scoreboard from \"%s\": %s", m_Path.c_str(), Oops.what()); return false; } - - return LoadScoreboardFromNBT(NBT); } @@ -63,32 +57,15 @@ bool cScoreboardSerializer::Load(void) bool cScoreboardSerializer::Save(void) { cFastNBTWriter Writer; - SaveScoreboardToNBT(Writer); - Writer.Finish(); - #ifdef _DEBUG - cParsedNBT TestParse(Writer.GetResult().data(), Writer.GetResult().size()); +#ifdef _DEBUG + cParsedNBT TestParse(Writer.GetResult()); ASSERT(TestParse.IsValid()); - #endif // _DEBUG - - cFile File; - if (!File.Open(m_Path, cFile::fmWrite)) - { - return false; - } - - AString Compressed; - int res = CompressStringGZIP(Writer.GetResult().data(), Writer.GetResult().size(), Compressed); - - if (res != Z_OK) - { - return false; - } +#endif // _DEBUG - File.Write(Compressed.data(), Compressed.size()); - File.Close(); + GZipFile::Write(m_Path, Writer.GetResult()); return true; } |