REFACTOR: All refactor in DiscImageChef.Filters.

This commit is contained in:
2017-12-22 16:17:40 +00:00
parent c59e424ec8
commit af478a92d1
13 changed files with 68 additions and 106 deletions

View File

@@ -180,7 +180,7 @@ namespace DiscImageChef.Filters
public override string GetFilename()
{
return basePath != null ? Path.GetFileName(basePath) : null;
return Path.GetFileName(basePath);
}
public override DateTime GetLastWriteTime()
@@ -380,10 +380,8 @@ namespace DiscImageChef.Filters
unarStream.Read(unar_b, 0, 26);
header = BigEndianMarshal.ByteArrayToStructureBigEndian<AppleDoubleHeader>(unar_b);
unarStream.Close();
if(header.magic == AppleDoubleMagic &&
(header.version == AppleDoubleVersion || header.version == AppleDoubleVersion2)) return true;
return false;
return header.magic == AppleDoubleMagic &&
(header.version == AppleDoubleVersion || header.version == AppleDoubleVersion2);
}
public override bool IsOpened()
@@ -633,8 +631,7 @@ namespace DiscImageChef.Filters
break;
}
dataFork = new AppleDoubleEntry();
dataFork.id = (uint)AppleDoubleEntryID.DataFork;
dataFork = new AppleDoubleEntry {id = (uint)AppleDoubleEntryID.DataFork};
if(File.Exists(path))
{
FileStream dataFs = new FileStream(path, FileMode.Open, FileAccess.Read);

View File

@@ -157,7 +157,7 @@ namespace DiscImageChef.Filters
public override void Close()
{
bytes = null;
if(stream != null) stream.Close();
stream?.Close();
isBytes = false;
isStream = false;
isPath = false;
@@ -194,7 +194,7 @@ namespace DiscImageChef.Filters
public override string GetFilename()
{
return basePath != null ? Path.GetFileName(basePath) : null;
return Path.GetFileName(basePath);
}
public override DateTime GetLastWriteTime()

View File

@@ -55,7 +55,7 @@ namespace DiscImageChef.Filters
public override void Close()
{
if(dataStream != null) dataStream.Close();
dataStream?.Close();
dataStream = null;
basePath = null;
opened = false;
@@ -93,10 +93,7 @@ namespace DiscImageChef.Filters
if(buffer.Length <= 512) return true;
if(buffer[buffer.Length - 512] == 0x6B && buffer[buffer.Length - 511] == 0x6F &&
buffer[buffer.Length - 510] == 0x6C && buffer[buffer.Length - 509] == 0x79) return false;
return true;
return buffer[buffer.Length - 512] != 0x6B || buffer[buffer.Length - 511] != 0x6F || buffer[buffer.Length - 510] != 0x6C || buffer[buffer.Length - 509] != 0x79;
}
public override bool Identify(Stream stream)
@@ -116,9 +113,7 @@ namespace DiscImageChef.Filters
stream.Read(buffer, 0, 4);
stream.Seek(0, SeekOrigin.Begin);
// Check it is not an UDIF
if(buffer[0] == 0x6B && buffer[1] == 0x6F && buffer[2] == 0x6C && buffer[3] == 0x79) return false;
return true;
return buffer[0] != 0x6B || buffer[1] != 0x6F || buffer[2] != 0x6C || buffer[3] != 0x79;
}
public override bool Identify(string path)

View File

@@ -39,12 +39,12 @@ namespace DiscImageChef.Filters
{
public class FiltersList
{
public SortedDictionary<string, Filter> filtersList;
public SortedDictionary<string, Filter> Filters;
public FiltersList()
{
Assembly assembly = Assembly.GetAssembly(typeof(Filter));
filtersList = new SortedDictionary<string, Filter>();
Filters = new SortedDictionary<string, Filter>();
foreach(Type type in assembly.GetTypes())
try
@@ -52,7 +52,7 @@ namespace DiscImageChef.Filters
if(!type.IsSubclassOf(typeof(Filter))) continue;
Filter filter = (Filter)type.GetConstructor(Type.EmptyTypes)?.Invoke(new object[] { });
if(filter != null && !filtersList.ContainsKey(filter.Name.ToLower())) filtersList.Add(filter.Name.ToLower(), filter);
if(filter != null && !Filters.ContainsKey(filter.Name.ToLower())) Filters.Add(filter.Name.ToLower(), filter);
}
catch(Exception exception) { DicConsole.ErrorWriteLine("Exception {0}", exception); }
}
@@ -61,7 +61,7 @@ namespace DiscImageChef.Filters
{
Filter noFilter = null;
foreach(Filter filter in filtersList.Values)
foreach(Filter filter in Filters.Values)
if(filter.UUID != new Guid("12345678-AAAA-BBBB-CCCC-123456789000"))
{
if(!filter.Identify(path)) continue;
@@ -84,7 +84,7 @@ namespace DiscImageChef.Filters
public SortedDictionary<string, Filter> GetFiltersList()
{
return filtersList;
return Filters;
}
}
}

View File

@@ -42,9 +42,8 @@ namespace DiscImageChef.Filters
public class ForcedSeekStream<T> : Stream where T : Stream
{
T baseStream;
object[] parameters;
long streamLength;
const int bufferLen = 1048576;
const int BUFFER_LEN = 1048576;
FileStream backStream;
string backFile;
@@ -55,9 +54,8 @@ namespace DiscImageChef.Filters
/// <param name="args">Parameters that are used to create the base stream.</param>
public ForcedSeekStream(long length, params object[] args)
{
parameters = args;
streamLength = length;
baseStream = (T)Activator.CreateInstance(typeof(T), parameters);
baseStream = (T)Activator.CreateInstance(typeof(T), args);
backFile = Path.GetTempFileName();
backStream = new FileStream(backFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
if(length == 0) CalculateLength();
@@ -69,8 +67,7 @@ namespace DiscImageChef.Filters
/// <param name="args">Parameters that are used to create the base stream.</param>
public ForcedSeekStream(params object[] args)
{
parameters = args;
baseStream = (T)Activator.CreateInstance(typeof(T), parameters);
baseStream = (T)Activator.CreateInstance(typeof(T), args);
backFile = Path.GetTempFileName();
backStream = new FileStream(backFile, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
CalculateLength();
@@ -87,41 +84,29 @@ namespace DiscImageChef.Filters
int read;
do
{
byte[] buffer = new byte[bufferLen];
read = baseStream.Read(buffer, 0, bufferLen);
byte[] buffer = new byte[BUFFER_LEN];
read = baseStream.Read(buffer, 0, BUFFER_LEN);
backStream.Write(buffer, 0, read);
}
while(read == bufferLen);
while(read == BUFFER_LEN);
streamLength = backStream.Length;
backStream.Position = 0;
}
public override bool CanRead
{
get { return baseStream.CanRead; }
}
public override bool CanRead => baseStream.CanRead;
public override bool CanSeek
{
get { return true; }
}
public override bool CanSeek => true;
public override bool CanWrite
{
get { return false; }
}
public override bool CanWrite => false;
public override long Length
{
get { return streamLength; }
}
public override long Length => streamLength;
public override long Position
{
get { return backStream.Position; }
get => backStream.Position;
set { SetPosition(value); }
set => SetPosition(value);
}
void SetPosition(long position)
@@ -136,15 +121,15 @@ namespace DiscImageChef.Filters
backStream.Position = backStream.Length;
long toposition = position - backStream.Position;
int fullBufferReads = (int)(toposition / bufferLen);
int restToRead = (int)(toposition % bufferLen);
int fullBufferReads = (int)(toposition / BUFFER_LEN);
int restToRead = (int)(toposition % BUFFER_LEN);
byte[] buffer;
for(int i = 0; i < fullBufferReads; i++)
{
buffer = new byte[bufferLen];
baseStream.Read(buffer, 0, bufferLen);
backStream.Write(buffer, 0, bufferLen);
buffer = new byte[BUFFER_LEN];
baseStream.Read(buffer, 0, BUFFER_LEN);
backStream.Write(buffer, 0, BUFFER_LEN);
}
buffer = new byte[restToRead];
@@ -213,13 +198,13 @@ namespace DiscImageChef.Filters
public override void Close()
{
if(backStream != null) backStream.Close();
backStream?.Close();
File.Delete(backFile);
}
~ForcedSeekStream()
{
if(backStream != null) backStream.Close();
backStream?.Close();
File.Delete(backFile);
}
}

View File

@@ -54,7 +54,7 @@ namespace DiscImageChef.Filters
public override void Close()
{
if(dataStream != null) dataStream.Close();
dataStream?.Close();
dataStream = null;
basePath = null;
opened = false;

View File

@@ -55,7 +55,7 @@ namespace DiscImageChef.Filters
public override void Close()
{
if(dataStream != null) dataStream.Close();
dataStream?.Close();
dataStream = null;
basePath = null;
opened = false;

View File

@@ -161,7 +161,7 @@ namespace DiscImageChef.Filters
public short computerID;
}
const uint MacBinaryMagic = 0x6D42494E;
const uint MACBINARY_MAGIC = 0x6D42494E;
long dataForkOff;
long rsrcForkOff;
@@ -183,7 +183,7 @@ namespace DiscImageChef.Filters
public override void Close()
{
bytes = null;
if(stream != null) stream.Close();
stream?.Close();
isBytes = false;
isStream = false;
isPath = false;
@@ -274,7 +274,7 @@ namespace DiscImageChef.Filters
Array.Copy(buffer, 0, hdr_b, 0, 128);
header = BigEndianMarshal.ByteArrayToStructureBigEndian<MacBinaryHeader>(hdr_b);
return header.magic == MacBinaryMagic || header.version == 0 && header.filename[0] > 0 &&
return header.magic == MACBINARY_MAGIC || header.version == 0 && header.filename[0] > 0 &&
header.filename[0] < 64 && header.zero1 == 0 &&
header.zero2 == 0 && header.reserved == 0 &&
(header.dataLength > 0 || header.resourceLength > 0);
@@ -289,7 +289,7 @@ namespace DiscImageChef.Filters
stream.Read(hdr_b, 0, 128);
header = BigEndianMarshal.ByteArrayToStructureBigEndian<MacBinaryHeader>(hdr_b);
return header.magic == MacBinaryMagic || header.version == 0 && header.filename[0] > 0 &&
return header.magic == MACBINARY_MAGIC || header.version == 0 && header.filename[0] > 0 &&
header.filename[0] < 64 && header.zero1 == 0 &&
header.zero2 == 0 && header.reserved == 0 &&
(header.dataLength > 0 || header.resourceLength > 0);
@@ -305,7 +305,7 @@ namespace DiscImageChef.Filters
header = BigEndianMarshal.ByteArrayToStructureBigEndian<MacBinaryHeader>(hdr_b);
fstream.Close();
return header.magic == MacBinaryMagic || header.version == 0 && header.filename[0] > 0 &&
return header.magic == MACBINARY_MAGIC || header.version == 0 && header.filename[0] > 0 &&
header.filename[0] < 64 && header.zero1 == 0 &&
header.zero2 == 0 && header.reserved == 0 &&
(header.dataLength > 0 || header.resourceLength > 0);

View File

@@ -297,29 +297,17 @@ namespace DiscImageChef.Filters
baseStream.Dispose();
}
public override bool CanRead
{
get { return baseStream.CanRead; }
}
public override bool CanRead => baseStream.CanRead;
public override bool CanSeek
{
get { return baseStream.CanSeek; }
}
public override bool CanSeek => baseStream.CanSeek;
public override bool CanWrite
{
get { return baseStream.CanWrite; }
}
public override bool CanWrite => baseStream.CanWrite;
public override long Length
{
get { return streamEnd - streamStart + 1; }
}
public override long Length => streamEnd - streamStart + 1;
public override long Position
{
get { return baseStream.Position - streamStart; }
get => baseStream.Position - streamStart;
set
{

View File

@@ -41,9 +41,9 @@ namespace DiscImageChef.Filters
{
public class PCExchange : Filter
{
const string FileId = "FILEID.DAT";
const string FinderInfo = "FINDER.DAT";
const string Resources = "RESOURCE.FRK";
const string FILE_ID = "FILEID.DAT";
const string FINDER_INFO = "FINDER.DAT";
const string RESOURCES = "RESOURCE.FRK";
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct PCExchangeEntry
@@ -147,7 +147,7 @@ namespace DiscImageChef.Filters
public override string GetFilename()
{
return basePath != null ? Path.GetFileName(basePath) : null;
return Path.GetFileName(basePath);
}
public override DateTime GetLastWriteTime()
@@ -200,9 +200,9 @@ namespace DiscImageChef.Filters
{
string parentFolder = Path.GetDirectoryName(path);
if(!File.Exists(Path.Combine(parentFolder ?? throw new InvalidOperationException(), FinderInfo))) return false;
if(!File.Exists(Path.Combine(parentFolder ?? throw new InvalidOperationException(), FINDER_INFO))) return false;
if(!Directory.Exists(Path.Combine(parentFolder, Resources))) return false;
if(!Directory.Exists(Path.Combine(parentFolder, RESOURCES))) return false;
string baseFilename = Path.GetFileName(path);
@@ -210,7 +210,7 @@ namespace DiscImageChef.Filters
bool rsrcFound = false;
FileStream finderDatStream =
new FileStream(Path.Combine(parentFolder, FinderInfo), FileMode.Open, FileAccess.Read);
new FileStream(Path.Combine(parentFolder, FINDER_INFO), FileMode.Open, FileAccess.Read);
while(finderDatStream.Position + 0x5C <= finderDatStream.Length)
{
@@ -234,8 +234,8 @@ namespace DiscImageChef.Filters
File.Exists(Path.Combine(parentFolder, dosName)) ||
File.Exists(Path.Combine(parentFolder, dosNameLow));
rsrcFound |= File.Exists(Path.Combine(parentFolder, Resources, dosName)) ||
File.Exists(Path.Combine(parentFolder, Resources, dosNameLow));
rsrcFound |= File.Exists(Path.Combine(parentFolder, RESOURCES, dosName)) ||
File.Exists(Path.Combine(parentFolder, RESOURCES, dosNameLow));
break;
}
@@ -266,7 +266,7 @@ namespace DiscImageChef.Filters
string baseFilename = Path.GetFileName(path);
FileStream finderDatStream =
new FileStream(Path.Combine(parentFolder ?? throw new InvalidOperationException(), FinderInfo), FileMode.Open, FileAccess.Read);
new FileStream(Path.Combine(parentFolder ?? throw new InvalidOperationException(), FINDER_INFO), FileMode.Open, FileAccess.Read);
while(finderDatStream.Position + 0x5C <= finderDatStream.Length)
{
@@ -292,10 +292,10 @@ namespace DiscImageChef.Filters
dataPath = Path.Combine(parentFolder, dosNameLow);
else dataPath = null;
if(File.Exists(Path.Combine(parentFolder, Resources, dosName)))
rsrcPath = Path.Combine(parentFolder, Resources, dosName);
else if(File.Exists(Path.Combine(parentFolder, Resources, dosNameLow)))
rsrcPath = Path.Combine(parentFolder, Resources, dosNameLow);
if(File.Exists(Path.Combine(parentFolder, RESOURCES, dosName)))
rsrcPath = Path.Combine(parentFolder, RESOURCES, dosName);
else if(File.Exists(Path.Combine(parentFolder, RESOURCES, dosNameLow)))
rsrcPath = Path.Combine(parentFolder, RESOURCES, dosNameLow);
else rsrcPath = null;
lastWriteTime = DateHandlers.MacToDateTime(datEntry.modificationDate);

View File

@@ -54,7 +54,7 @@ namespace DiscImageChef.Filters
public override void Close()
{
if(dataStream != null) dataStream.Close();
dataStream?.Close();
dataStream = null;
basePath = null;
opened = false;
@@ -153,18 +153,18 @@ namespace DiscImageChef.Filters
dataStream.Seek(0, SeekOrigin.Begin);
}
int Decode(byte[] buf, int size_max, ref ulong num)
int Decode(byte[] buf, int sizeMax, ref ulong num)
{
if(size_max == 0) return 0;
if(sizeMax == 0) return 0;
if(size_max > 9) size_max = 9;
if(sizeMax > 9) sizeMax = 9;
num = (ulong)(buf[0] & 0x7F);
int i = 0;
while((buf[i++] & 0x80) == 0x80)
{
if(i >= size_max || buf[i] == 0x00) return 0;
if(i >= sizeMax || buf[i] == 0x00) return 0;
num |= (ulong)(buf[i] & 0x7F) << (i * 7);
}
@@ -239,10 +239,7 @@ namespace DiscImageChef.Filters
{
if(basePath?.EndsWith(".xz", StringComparison.InvariantCultureIgnoreCase) == true)
return basePath.Substring(0, basePath.Length - 3);
if(basePath?.EndsWith(".xzip", StringComparison.InvariantCultureIgnoreCase) == true)
return basePath.Substring(0, basePath.Length - 5);
return basePath;
return basePath?.EndsWith(".xzip", StringComparison.InvariantCultureIgnoreCase) == true ? basePath.Substring(0, basePath.Length - 5) : basePath;
}
public override string GetParentFolder()

View File

@@ -51,7 +51,7 @@ namespace DiscImageChef.Filters
public override void Close()
{
if(dataStream != null) dataStream.Close();
dataStream?.Close();
dataStream = null;
basePath = null;
opened = false;
@@ -153,7 +153,7 @@ namespace DiscImageChef.Filters
public override string GetFilename()
{
return basePath != null ? Path.GetFileName(basePath) : null;
return Path.GetFileName(basePath);
}
public override string GetParentFolder()

View File

@@ -50,7 +50,7 @@ namespace DiscImageChef.Commands
DicConsole.WriteLine("Supported filters:");
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("GUID\t\t\t\t\tFilter");
foreach(KeyValuePair<string, Filter> kvp in filtersList.filtersList)
foreach(KeyValuePair<string, Filter> kvp in filtersList.Filters)
if(formatsOptions.Verbose) DicConsole.VerboseWriteLine("{0}\t{1}", kvp.Value.UUID, kvp.Value.Name);
else DicConsole.WriteLine(kvp.Value.Name);