Add JsonAsset.Save to fix saving new tag

#885
This commit is contained in:
Wojtek Figat
2023-02-16 14:32:52 +01:00
parent 123b7f5433
commit 969053a240
5 changed files with 105 additions and 88 deletions

View File

@@ -55,75 +55,6 @@ String LocalizedStringTable::GetPluralString(const String& id, int32 n) const
return String::Format(result.GetText(), n);
}
#if USE_EDITOR
bool LocalizedStringTable::Save(const StringView& path)
{
// Validate state
if (WaitForLoaded())
{
LOG(Error, "Asset loading failed. Cannot save it.");
return true;
}
if (IsVirtual() && path.IsEmpty())
{
LOG(Error, "To save virtual asset asset you need to specify the target asset path location.");
return true;
}
ScopeLock lock(Locker);
// Serialize data
rapidjson_flax::StringBuffer outputData;
PrettyJsonWriter writerObj(outputData);
JsonWriter& writer = writerObj;
writer.StartObject();
{
writer.JKEY("Locale");
writer.String(Locale);
if (FallbackTable.GetID().IsValid())
{
writer.JKEY("FallbackTable");
writer.Guid(FallbackTable.GetID());
}
writer.JKEY("Entries");
writer.StartObject();
for (auto& e : Entries)
{
writer.Key(e.Key);
if (e.Value.Count() == 1)
{
writer.String(e.Value[0]);
}
else
{
writer.StartArray();
for (auto& q : e.Value)
writer.String(q);
writer.EndArray();
}
}
writer.EndObject();
}
writer.EndObject();
// Save asset
#if COMPILE_WITH_ASSETS_IMPORTER
const bool saveResult = CreateJson::Create(path.HasChars() ? path : StringView(GetPath()), outputData, TypeName);
if (saveResult)
#endif
{
LOG(Error, "Cannot save \'{0}\'", ToString());
return true;
}
return false;
}
#endif
Asset::LoadResult LocalizedStringTable::loadAsset()
{
// Base
@@ -170,3 +101,41 @@ void LocalizedStringTable::unload(bool isReloading)
FallbackTable = nullptr;
Entries.Clear();
}
void LocalizedStringTable::OnGetData(rapidjson_flax::StringBuffer& buffer) const
{
PrettyJsonWriter writerObj(buffer);
JsonWriter& writer = writerObj;
writer.StartObject();
{
writer.JKEY("Locale");
writer.String(Locale);
if (FallbackTable.GetID().IsValid())
{
writer.JKEY("FallbackTable");
writer.Guid(FallbackTable.GetID());
}
writer.JKEY("Entries");
writer.StartObject();
for (auto& e : Entries)
{
writer.Key(e.Key);
if (e.Value.Count() == 1)
{
writer.String(e.Value[0]);
}
else
{
writer.StartArray();
for (auto& q : e.Value)
writer.String(q);
writer.EndArray();
}
}
writer.EndObject();
}
writer.EndObject();
}