diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/File.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/File.cs index c4684ade..e09314a5 100644 --- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/File.cs +++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/File.cs @@ -156,7 +156,7 @@ namespace UniversalEditor.ObjectModels.FileSystem public byte[] GetData(long offset, long length) { - if (mvarSource != null) return mvarSource.GetData(offset, length); + if (mvarSource != null) return mvarSource.GetDataInternal(offset, length); Console.WriteLine("DataRequest: " + mvarName + ": No source associated with this file"); return new byte[length]; @@ -380,7 +380,7 @@ namespace UniversalEditor.ObjectModels.FileSystem for (long i = 0; i < blockCount; i++) { - byte[] data = mvarSource.GetData(offset, blockSize); + byte[] data = mvarSource.GetDataInternal(offset, blockSize); offset += blockSize; bw.WriteBytes(data); diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSource.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSource.cs index d7c988a8..2a5f2029 100644 --- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSource.cs +++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSource.cs @@ -31,8 +31,20 @@ namespace UniversalEditor.ObjectModels.FileSystem public FileSourceTransformation.FileSourceTransformationCollection Transformations { get { return mvarTransformations; } } public byte[] GetData() { return GetData(0, GetLength()); } + public byte[] GetData(long offset, long length) + { + byte[] data = GetDataInternal(offset, length); + System.IO.MemoryStream msInput = new System.IO.MemoryStream(data); + for (int i = 0; i < Transformations.Count; i++) + { + System.IO.MemoryStream msOutput = new System.IO.MemoryStream(); + Transformations[i].Function(this, msInput, msOutput); + msInput = msOutput; + } + return msInput.ToArray(); + } - public abstract byte[] GetData(long offset, long length); + public abstract byte[] GetDataInternal(long offset, long length); public abstract long GetLength(); } } diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/AccessorFileSource.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/AccessorFileSource.cs index b3948cac..57d419ce 100644 --- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/AccessorFileSource.cs +++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/AccessorFileSource.cs @@ -34,7 +34,7 @@ namespace UniversalEditor.ObjectModels.FileSystem.FileSources mvarAccessor = accessor; } - public override byte[] GetData(long offset, long length) + public override byte[] GetDataInternal(long offset, long length) { mvarAccessor.Seek(offset, IO.SeekOrigin.Begin); byte[] data = mvarAccessor.Reader.ReadBytes(length); diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/CompressedEmbeddedFileSource.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/CompressedEmbeddedFileSource.cs index 413e2a0d..e602d376 100644 --- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/CompressedEmbeddedFileSource.cs +++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/CompressedEmbeddedFileSource.cs @@ -36,7 +36,7 @@ namespace UniversalEditor.ObjectModels.FileSystem.FileSources public long DecompressedLength { get; private set; } public long CompressedLength { get; private set; } - public override byte[] GetData(long offset, long length) + public override byte[] GetDataInternal(long offset, long length) { Reader.Seek(Offset, SeekOrigin.Begin); byte[] sourceData = Reader.ReadBytes(DecompressedLength); diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/EmbeddedFileSource.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/EmbeddedFileSource.cs index 8c391699..1c07db58 100644 --- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/EmbeddedFileSource.cs +++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/EmbeddedFileSource.cs @@ -39,7 +39,7 @@ namespace UniversalEditor.ObjectModels.FileSystem.FileSources private long mvarLength = 0; public long Length { get { return mvarLength; } set { mvarLength = value; } } - public override byte[] GetData(long offset, long length) + public override byte[] GetDataInternal(long offset, long length) { mvarReader.Seek(mvarOffset, SeekOrigin.Begin); byte[] sourceData = mvarReader.ReadBytes(mvarLength); diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/MemoryFileSource.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/MemoryFileSource.cs index a7c6a8f2..9fb40c30 100644 --- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/MemoryFileSource.cs +++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/MemoryFileSource.cs @@ -36,7 +36,7 @@ namespace UniversalEditor.ObjectModels.FileSystem.FileSources mvarData = data; } - public override byte[] GetData(long offset, long length) + public override byte[] GetDataInternal(long offset, long length) { long realLength = Math.Min(length, mvarData.Length); byte[] data = new byte[realLength]; diff --git a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/PhysicalFileSource.cs b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/PhysicalFileSource.cs index 322c9dc5..ce1f71b1 100644 --- a/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/PhysicalFileSource.cs +++ b/Libraries/UniversalEditor.Essential/ObjectModels/FileSystem/FileSources/PhysicalFileSource.cs @@ -31,7 +31,7 @@ namespace UniversalEditor.ObjectModels.FileSystem.FileSources private string mvarFileName = String.Empty; public string FileName { get { return mvarFileName; } set { mvarFileName = value; } } - public override byte[] GetData(long offset, long length) + public override byte[] GetDataInternal(long offset, long length) { byte[] sourceData = System.IO.File.ReadAllBytes(mvarFileName); long realLength = Math.Min(length, sourceData.Length); diff --git a/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/CHD/CHDHunkFileSource.cs b/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/CHD/CHDHunkFileSource.cs index b6cee3e6..ffc3b6a6 100644 --- a/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/CHD/CHDHunkFileSource.cs +++ b/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/CHD/CHDHunkFileSource.cs @@ -45,7 +45,7 @@ namespace UniversalEditor.DataFormats.FileSystem.CHD HunkSize = hunkSize; } - public override byte[] GetData(long offset, long length) + public override byte[] GetDataInternal(long offset, long length) { return ReadHunk(Reader, HunkId, offset, length); } diff --git a/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/HostileWaters/MBXFileSource.cs b/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/HostileWaters/MBXFileSource.cs index d2a9bfe3..716b7f7c 100644 --- a/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/HostileWaters/MBXFileSource.cs +++ b/Plugins/UniversalEditor.Plugins.FileSystem/DataFormats/FileSystem/HostileWaters/MBXFileSource.cs @@ -36,7 +36,7 @@ namespace UniversalEditor.DataFormats.FileSystem.HostileWaters private Reader mbxReader = null; - public override byte[] GetData(long offset, long length) + public override byte[] GetDataInternal(long offset, long length) { if (mbxReader == null) {