public OwRootHandler(BinaryReader stream, BackgroundWorkerEx worker, CASCHandler casc)
{
worker?.ReportProgress(0, "Loading \"root\"...");
string str = Encoding.ASCII.GetString(stream.ReadBytes((int)stream.BaseStream.Length));
string[] array = str.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
List <string> APMNames = new List <string>();
for (int i = 1; i < array.Length; i++)
{
string[] filedata = array[i].Split('|');
string name = filedata[4];
if (Path.GetExtension(name) == ".apm" && name.Contains("RDEV"))
{
APMNames.Add(Path.GetFileNameWithoutExtension(name));
if (!name.Contains("L" + LanguageScan))
{
continue;
}
// add apm file for dev purposes
ulong apmNameHash = Hasher.ComputeHash(name);
MD5Hash apmMD5 = filedata[0].ToByteArray().ToMD5();
_rootData[apmNameHash] = new OWRootEntry()
{
baseEntry = new RootEntry()
{
MD5 = apmMD5, LocaleFlags = LocaleFlags.All, ContentFlags = ContentFlags.None
}
};
CASCFile.FileNames[apmNameHash] = name;
EncodingEntry apmEnc;
if (!casc.Encoding.GetEntry(apmMD5, out apmEnc))
{
continue;
}
using (Stream apmStream = casc.OpenFile(apmEnc.Key))
{
apmFiles.Add(new APMFile(name, apmStream, casc));
}
}
worker?.ReportProgress((int)(i / (array.Length / 100f)));
}
APMList = APMNames.ToArray();
APMNames.Clear();
}