summaryrefslogtreecommitdiffstats
path: root/src/WorldStorage/ScoreboardSerializer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/WorldStorage/ScoreboardSerializer.cpp')
-rw-r--r--src/WorldStorage/ScoreboardSerializer.cpp55
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;
}