2017-11-29 03:42:21 +01:00
|
|
|
|
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");
|
|
|
|
|
|
2018-02-02 00:23:37 +01:00
|
|
|
|
if (descriptor.HasNewHeader)
|
|
|
|
|
WriteNewHeader(descriptor);
|
|
|
|
|
else
|
|
|
|
|
WriteOldHeader(descriptor);
|
|
|
|
|
|
|
|
|
|
Logger.Trace("Writing images...");
|
2019-05-04 10:44:19 +02:00
|
|
|
|
new Writer(_stream).Write(descriptor.Resources);
|
2018-02-02 00:23:37 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void WriteOldHeader(FileDescriptor descriptor)
|
|
|
|
|
{
|
2017-11-29 03:42:21 +01:00
|
|
|
|
var header = new Header
|
|
|
|
|
{
|
2019-05-04 10:44:19 +02:00
|
|
|
|
ResourcesCount = (uint)descriptor.Resources.Count,
|
2017-11-29 03:42:21 +01:00
|
|
|
|
Version = descriptor.Version.Value
|
|
|
|
|
};
|
|
|
|
|
Logger.Trace("Writing resources header...");
|
2018-01-27 19:57:32 +01:00
|
|
|
|
Logger.Trace("Signature: {0}, Version: {1}, ResourcesCount: {2}",
|
|
|
|
|
header.Signature, header.Version, header.ResourcesCount
|
2017-11-29 03:42:21 +01:00
|
|
|
|
);
|
|
|
|
|
header.WriteTo(_binaryWriter);
|
2018-02-02 00:23:37 +01:00
|
|
|
|
}
|
2017-11-29 03:42:21 +01:00
|
|
|
|
|
2018-02-02 00:23:37 +01:00
|
|
|
|
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);
|
2017-11-29 03:42:21 +01:00
|
|
|
|
}
|
2018-02-02 00:23:37 +01:00
|
|
|
|
|
2017-11-29 03:42:21 +01:00
|
|
|
|
}
|
|
|
|
|
}
|