65 lines
2.0 KiB
C#
65 lines
2.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using NLog;
|
|
using Resources.Models;
|
|
|
|
namespace Resources
|
|
{
|
|
public class FileWriter
|
|
{
|
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
private readonly BinaryWriter _binaryWriter;
|
|
private readonly Stream _stream;
|
|
|
|
public FileWriter(Stream stream)
|
|
{
|
|
_stream = stream;
|
|
_binaryWriter = new BinaryWriter(stream);
|
|
}
|
|
|
|
public void Write(FileDescriptor descriptor)
|
|
{
|
|
if (descriptor.Version == null)
|
|
throw new ArgumentException("Res file version required");
|
|
|
|
if (descriptor.HasNewHeader)
|
|
WriteNewHeader(descriptor);
|
|
else
|
|
WriteOldHeader(descriptor);
|
|
|
|
Logger.Trace("Writing images...");
|
|
new Writer(_stream).Write(descriptor.Resources);
|
|
}
|
|
|
|
private void WriteOldHeader(FileDescriptor descriptor)
|
|
{
|
|
var header = new Header
|
|
{
|
|
ResourcesCount = (uint)descriptor.Resources.Count,
|
|
Version = descriptor.Version.Value
|
|
};
|
|
Logger.Trace("Writing resources header...");
|
|
Logger.Trace("Signature: {0}, Version: {1}, ResourcesCount: {2}",
|
|
header.Signature, header.Version, header.ResourcesCount
|
|
);
|
|
header.WriteTo(_binaryWriter);
|
|
}
|
|
|
|
private void WriteNewHeader(FileDescriptor descriptor)
|
|
{
|
|
var header = new NewHeader
|
|
{
|
|
ResourcesCount = descriptor.ResourcesCount.Value,
|
|
Version = descriptor.Version.Value,
|
|
Unknown = descriptor.Unknown.Value
|
|
};
|
|
Logger.Trace("Writing resources header...");
|
|
Logger.Trace("Signature: {0}, Version: {1}, ResourcesCount: {2}, Unknown: {3}",
|
|
header.Signature, header.Version, header.ResourcesCount, header.Unknown
|
|
);
|
|
header.WriteTo(_binaryWriter);
|
|
}
|
|
|
|
}
|
|
} |