Skip to content

Commit

Permalink
make final exported files cleaner
Browse files Browse the repository at this point in the history
  • Loading branch information
diogotr7 committed Jan 26, 2025
1 parent 222cef7 commit 23ad0f9
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 54 deletions.
61 changes: 25 additions & 36 deletions src/StarBreaker.DataCore/DataCoreBinaryJson.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,10 @@ public void SaveToFile(DataCoreRecord record, DataCoreExtractionOptions options,
var context = new Context(record.GetFileName(Database), writer, options);

context.Writer.WriteStartObject();
context.Writer.WriteString("__Name", record.GetName(Database));
context.Writer.WriteString("__RecordId", record.Id.ToString());
context.Writer.WriteString("RecordName_", record.GetName(Database));
context.Writer.WriteString("RecordId_", record.Id.ToString());

//context.Writer.WriteStartObject("__Record");
WriteInstance(record.StructIndex, record.InstanceIndex, context);
//context.Writer.WriteEndObject();

context.Writer.WriteEndObject();

Expand All @@ -51,8 +49,8 @@ public string GetFromMainRecord(DataCoreRecord record, DataCoreExtractionOptions
var context = new Context(record.GetFileName(Database), writer, options);

writer.WriteStartObject();
writer.WriteString("__Name", record.GetName(Database));
writer.WriteString("__RecordId", record.Id.ToString());
writer.WriteString("RecordName_", record.GetName(Database));
writer.WriteString("RecordId_", record.Id.ToString());

WriteInstance(record.StructIndex, record.InstanceIndex, context);

Expand All @@ -67,8 +65,8 @@ private void WriteInstance(int structIndex, int instanceIndex, Context context)
{
var reader = Database.GetReader(structIndex, instanceIndex);

context.Writer.WriteString("__Type", Database.StructDefinitions[structIndex].GetName(Database));
context.Writer.WriteString("__Pointer", $"__ptr:{structIndex},{instanceIndex}");
context.Writer.WriteString("Type_", Database.StructDefinitions[structIndex].GetName(Database));
context.Writer.WriteString("Pointer_", $"ptr:{structIndex},{instanceIndex}");

WriteStruct(structIndex, ref reader, context);
}
Expand All @@ -93,23 +91,17 @@ private void WriteAttribute(DataCorePropertyDefinition prop, ref SpanReader read
case DataType.Reference:
var reference = reader.Read<DataCoreReference>();
if (reference.RecordId == CigGuid.Empty || reference.InstanceIndex == -1)
{
context.Writer.WriteNull(propName);
}
else
{
context.Writer.WriteStartObject(propName);
WriteFromReference(reference, context);
context.Writer.WriteEndObject();
}
WriteFromReference(reference, context, propName);

break;
case DataType.WeakPointer:
var weakPointer = reader.Read<DataCorePointer>();
if (weakPointer.StructIndex == -1 || weakPointer.InstanceIndex == -1)
context.Writer.WriteNull(propName);
else
context.Writer.WriteString(propName, $"__ptr:{weakPointer.StructIndex},{weakPointer.InstanceIndex}");
context.Writer.WriteString(propName, $"ptr:{weakPointer.StructIndex},{weakPointer.InstanceIndex}");

break;
case DataType.StrongPointer:
Expand All @@ -121,7 +113,7 @@ private void WriteAttribute(DataCorePropertyDefinition prop, ref SpanReader read
else
{
context.Writer.WriteStartObject(propName);
WriteFromStrongPointer(strongPointer, context);
WriteInstance(strongPointer.StructIndex, strongPointer.InstanceIndex, context);
context.Writer.WriteEndObject();
}

Expand Down Expand Up @@ -166,27 +158,17 @@ private void WriteArray(DataCorePropertyDefinition prop, ref SpanReader reader,
case DataType.Reference:
var reference = Database.ReferenceValues[i];
if (reference.RecordId == CigGuid.Empty || reference.InstanceIndex == -1)
{
context.Writer.WriteNullValue();
}
else
{
context.Writer.WriteStartObject();
WriteFromReference(Database.ReferenceValues[i], context);
context.Writer.WriteEndObject();
}
WriteFromReference(Database.ReferenceValues[i], context, null);

break;
case DataType.WeakPointer:
var weakPointer = Database.WeakValues[i];
if (weakPointer.StructIndex == -1 || weakPointer.InstanceIndex == -1)
{
context.Writer.WriteNullValue();
}
else
{
context.Writer.WriteStringValue($"__ptr:{weakPointer.StructIndex},{weakPointer.InstanceIndex}");
}
context.Writer.WriteStringValue($"ptr:{weakPointer.StructIndex},{weakPointer.InstanceIndex}");

break;
case DataType.StrongPointer:
Expand All @@ -198,7 +180,7 @@ private void WriteArray(DataCorePropertyDefinition prop, ref SpanReader reader,
else
{
context.Writer.WriteStartObject();
WriteFromStrongPointer(Database.StrongValues[i], context);
WriteInstance(strongPointer.StructIndex, strongPointer.InstanceIndex, context);
context.Writer.WriteEndObject();
}

Expand Down Expand Up @@ -230,22 +212,29 @@ private void WriteArray(DataCorePropertyDefinition prop, ref SpanReader reader,
context.Writer.WriteEndArray();
}

private void WriteFromStrongPointer(DataCorePointer pointer, Context context) => WriteInstance(pointer.StructIndex, pointer.InstanceIndex, context);

private void WriteFromReference(DataCoreReference reference, Context context)
private void WriteFromReference(DataCoreReference reference, Context context, string? propName)
{
var record = Database.GetRecord(reference.RecordId);

if (Database.MainRecords.Contains(reference.RecordId))
{
//if we're referencing a full on file, just add a small mention to it
context.Writer.WriteString("RecordId", record.Id.ToString());
context.Writer.WriteString("Type", Database.StructDefinitions[record.StructIndex].GetName(Database));
context.Writer.WriteString("File", Path.ChangeExtension(DataCoreUtils.ComputeRelativePath(record.GetFileName(Database), context.Path), "json"));
var relativePath = DataCoreUtils.ComputeRelativePath(record.GetFileName(Database), context.Path);
if (propName == null)
context.Writer.WriteStringValue(relativePath);
else
context.Writer.WriteString(propName, relativePath);

return;
}

if (propName != null)
context.Writer.WriteStartObject(propName);
else
context.Writer.WriteStartObject();

WriteInstance(record.StructIndex, record.InstanceIndex, context);
context.Writer.WriteEndObject();
}

private sealed class Context
Expand Down
23 changes: 10 additions & 13 deletions src/StarBreaker.DataCore/DataCoreBinaryXml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public void SaveToFile(DataCoreRecord record, DataCoreExtractionOptions options,
var context = new Context(record.GetFileName(Database), options, writer);

writer.WriteStartElement(XmlConvert.EncodeName(record.GetName(Database)));
context.Writer.WriteAttributeString("__RecordId", record.Id.ToString());
context.Writer.WriteAttributeString("RecordId", record.Id.ToString());

WriteInstance(record.StructIndex, record.InstanceIndex, context);

Expand All @@ -51,7 +51,7 @@ public string GetFromMainRecord(DataCoreRecord record, DataCoreExtractionOptions
var context = new Context(record.GetFileName(Database), options, writer);

writer.WriteStartElement(XmlConvert.EncodeName(record.GetName(Database)));
writer.WriteAttributeString("__RecordId", record.Id.ToString());
writer.WriteAttributeString("RecordId", record.Id.ToString());

WriteInstance(record.StructIndex, record.InstanceIndex, context);

Expand All @@ -66,8 +66,8 @@ private void WriteInstance(int structIndex, int instanceIndex, Context context)
{
var reader = Database.GetReader(structIndex, instanceIndex);

context.Writer.WriteAttributeString("__Type", Database.StructDefinitions[structIndex].GetName(Database));
context.Writer.WriteAttributeString("__Pointer", $"__ptr:{structIndex},{instanceIndex}");
context.Writer.WriteAttributeString("Type", Database.StructDefinitions[structIndex].GetName(Database));
context.Writer.WriteAttributeString("Pointer", $"{structIndex},{instanceIndex}");

WriteStruct(structIndex, ref reader, context);
}
Expand Down Expand Up @@ -103,8 +103,7 @@ private void WriteAttribute(DataCorePropertyDefinition prop, ref SpanReader read
var weakPointer = reader.Read<DataCorePointer>();
context.Writer.WriteStartElement(propName);

if (weakPointer.StructIndex != -1 && weakPointer.InstanceIndex != -1)
context.Writer.WriteAttributeString("__ptr", $"{weakPointer.StructIndex},{weakPointer.InstanceIndex}");
context.Writer.WriteAttributeString("Pointer", $"{weakPointer.StructIndex},{weakPointer.InstanceIndex}");

context.Writer.WriteEndElement();
break;
Expand Down Expand Up @@ -151,8 +150,8 @@ private void WriteArray(DataCorePropertyDefinition prop, ref SpanReader reader,

var propName = prop.GetName(Database);
context.Writer.WriteStartElement(propName);
context.Writer.WriteAttributeString("__Count", count.ToString(CultureInfo.InvariantCulture));
context.Writer.WriteAttributeString("__Type", Database.StructDefinitions[prop.StructIndex].GetName(Database));
context.Writer.WriteAttributeString("Type", Database.StructDefinitions[prop.StructIndex].GetName(Database));
context.Writer.WriteAttributeString("Count", count.ToString(CultureInfo.InvariantCulture));

for (var i = firstIndex; i < firstIndex + count; i++)
{
Expand Down Expand Up @@ -191,7 +190,7 @@ private void WriteArray(DataCorePropertyDefinition prop, ref SpanReader reader,
context.Writer.WriteStartElement(Database.StructDefinitions[prop.StructIndex].GetName(Database));
}

context.Writer.WriteAttributeString("__ptr", $"{weakPointer.StructIndex},{weakPointer.InstanceIndex}");
context.Writer.WriteAttributeString("Pointer", $"{weakPointer.StructIndex},{weakPointer.InstanceIndex}");

context.Writer.WriteEndElement();

Expand Down Expand Up @@ -247,9 +246,7 @@ private void WriteFromReference(DataCoreReference reference, Context context)
if (Database.MainRecords.Contains(reference.RecordId))
{
//if we're referencing a full on file, just add a small mention to it
context.Writer.WriteElementString("RecordId", record.Id.ToString());
context.Writer.WriteElementString("Type", Database.StructDefinitions[record.StructIndex].GetName(Database));
context.Writer.WriteElementString("File", DataCoreUtils.ComputeRelativePath(record.GetFileName(Database), context.Path));
context.Writer.WriteAttributeString("ReferencedFile", DataCoreUtils.ComputeRelativePath(record.GetFileName(Database), context.Path));
return;
}

Expand All @@ -263,7 +260,7 @@ private sealed class Context

public XmlWriter Writer { get; }

public Context(string path, DataCoreExtractionOptions options, XmlWriter writer = null)
public Context(string path, DataCoreExtractionOptions options, XmlWriter writer)
{
Path = path;
Options = options;
Expand Down
4 changes: 1 addition & 3 deletions src/StarBreaker.DataCore/IDataCoreBinary.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using System.Xml.Linq;

namespace StarBreaker.DataCore;
namespace StarBreaker.DataCore;

public interface IDataCoreBinary<out T>
{
Expand Down
4 changes: 2 additions & 2 deletions src/StarBreaker.Sandbox/DataCoreSandbox.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ public static void Run()

//ExtractUnp4k();
//ExtractProblematic();
ExtractAll();
//WriteJson();
//ExtractAll();
WriteJson();
}

private static void GenerateTypes()
Expand Down

0 comments on commit 23ad0f9

Please sign in to comment.