2017-11-25 00:03:47 +01:00
|
|
|
|
using System;
|
|
|
|
|
using System.IO;
|
2018-01-27 19:57:32 +01:00
|
|
|
|
using System.Text;
|
2017-11-25 00:03:47 +01:00
|
|
|
|
using NLog;
|
2017-11-29 03:42:21 +01:00
|
|
|
|
using Resources.Models;
|
2017-11-25 00:03:47 +01:00
|
|
|
|
|
|
|
|
|
namespace Resources
|
|
|
|
|
{
|
2017-11-29 03:42:21 +01:00
|
|
|
|
public class FileReader
|
2017-11-25 00:03:47 +01:00
|
|
|
|
{
|
|
|
|
|
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
|
|
|
|
|
|
2017-11-29 03:42:21 +01:00
|
|
|
|
public static FileDescriptor Read(Stream stream)
|
2017-11-25 00:03:47 +01:00
|
|
|
|
{
|
2017-11-29 03:42:21 +01:00
|
|
|
|
var binaryReader = new BinaryReader(stream);
|
2017-11-25 00:03:47 +01:00
|
|
|
|
|
2018-01-27 19:57:32 +01:00
|
|
|
|
var signature = Encoding.ASCII.GetString(binaryReader.ReadBytes(5));
|
|
|
|
|
Logger.Trace("Resources signature was read:");
|
|
|
|
|
stream.Seek(0, SeekOrigin.Begin);
|
|
|
|
|
Logger.Trace("Signature: {0}", signature);
|
|
|
|
|
|
|
|
|
|
Header header;
|
|
|
|
|
switch (signature) {
|
|
|
|
|
case Header.ResSignature:
|
|
|
|
|
header = Header.ReadFrom(binaryReader);
|
|
|
|
|
break;
|
|
|
|
|
case NewHeader.ResSignature:
|
|
|
|
|
header = NewHeader.ReadFrom(binaryReader);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new ArgumentException($"Signature '{signature}' is no recognized.");
|
|
|
|
|
}
|
2017-11-25 00:03:47 +01:00
|
|
|
|
|
2018-01-27 19:57:32 +01:00
|
|
|
|
Logger.Trace("Resources header was read:");
|
|
|
|
|
Logger.Trace("Version: {0}, ResourcesCount: {1}", header.Version, header.ResourcesCount);
|
2017-11-25 00:03:47 +01:00
|
|
|
|
|
2017-11-29 03:42:21 +01:00
|
|
|
|
return new FileDescriptor
|
|
|
|
|
{
|
|
|
|
|
Version = header.Version,
|
|
|
|
|
Images = new Reader(stream).Read(header.ResourcesCount)
|
|
|
|
|
};
|
2017-11-25 00:03:47 +01:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|