Code formatting and reduced method size
This commit is contained in:
parent
bf23d183b2
commit
c0b91ed914
1 changed files with 57 additions and 47 deletions
|
@ -57,7 +57,7 @@ namespace Ryujinx.Common.Utilities
|
||||||
|
|
||||||
public static bool CanTrim(string filename, ILog log = null)
|
public static bool CanTrim(string filename, ILog log = null)
|
||||||
{
|
{
|
||||||
if (System.IO.Path.GetExtension(filename).ToUpperInvariant() == ".XCI")
|
if (Path.GetExtension(filename).Equals(".XCI", StringComparison.InvariantCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
var trimmer = new XCIFileTrimmer(filename, log);
|
var trimmer = new XCIFileTrimmer(filename, log);
|
||||||
return trimmer.CanBeTrimmed;
|
return trimmer.CanBeTrimmed;
|
||||||
|
@ -161,34 +161,12 @@ namespace Ryujinx.Common.Utilities
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.Pos = this.TrimmedFileSizeB;
|
this.Pos = this.TrimmedFileSizeB;
|
||||||
var buffer = new byte[BufferSize];
|
var freeSpaceValid = true;
|
||||||
var readSizeB = this.FileSizeB - this.TrimmedFileSizeB;
|
var readSizeB = this.FileSizeB - this.TrimmedFileSizeB;
|
||||||
var reads = readSizeB / XCIFileTrimmer.BufferSize;
|
|
||||||
long read = 0;
|
|
||||||
|
|
||||||
var time = Performance.Measure(() =>
|
var time = Performance.Measure(() =>
|
||||||
{
|
{
|
||||||
try
|
freeSpaceValid = CheckPadding(readSizeB);
|
||||||
{
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
var bytes = _fileStream.Read(buffer, 0, XCIFileTrimmer.BufferSize);
|
|
||||||
if (bytes == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (buffer.Take(bytes).AsParallel().Any(b => b != XCIFileTrimmer.PaddingByte))
|
|
||||||
{
|
|
||||||
Log?.Write(LogType.Warn, "Free space is NOT valid");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Log?.Progress(read, reads, "Verifying file can be trimmed", false);
|
|
||||||
read++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Log?.Progress(reads, reads, "Verifying file can be trimmed", true);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (time.TotalSeconds > 0)
|
if (time.TotalSeconds > 0)
|
||||||
|
@ -196,8 +174,8 @@ namespace Ryujinx.Common.Utilities
|
||||||
Log?.Write(LogType.Info, $"Checked at {readSizeB / (double)XCIFileTrimmer.BytesInAMegabyte / time.TotalSeconds:N} Mb/sec");
|
Log?.Write(LogType.Info, $"Checked at {readSizeB / (double)XCIFileTrimmer.BytesInAMegabyte / time.TotalSeconds:N} Mb/sec");
|
||||||
}
|
}
|
||||||
|
|
||||||
Log?.Write(LogType.Info, "Free space is valid");
|
if (freeSpaceValid) Log?.Write(LogType.Info, "Free space is valid");
|
||||||
this._freeSpaceValid = true;
|
this._freeSpaceValid = freeSpaceValid;
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -217,6 +195,31 @@ namespace Ryujinx.Common.Utilities
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool CheckPadding(long readSizeB)
|
||||||
|
{
|
||||||
|
var maxReads = readSizeB / XCIFileTrimmer.BufferSize;
|
||||||
|
long read = 0;
|
||||||
|
var buffer = new byte[BufferSize];
|
||||||
|
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
var bytes = _fileStream.Read(buffer, 0, XCIFileTrimmer.BufferSize);
|
||||||
|
if (bytes == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
Log?.Progress(read, maxReads, "Verifying file can be trimmed", false);
|
||||||
|
if (buffer.Take(bytes).AsParallel().Any(b => b != XCIFileTrimmer.PaddingByte))
|
||||||
|
{
|
||||||
|
Log?.Write(LogType.Warn, "Free space is NOT valid");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
read++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
protected void Reset()
|
protected void Reset()
|
||||||
{
|
{
|
||||||
this._freeSpaceChecked = false;
|
this._freeSpaceChecked = false;
|
||||||
|
@ -329,32 +332,13 @@ namespace Ryujinx.Common.Utilities
|
||||||
}
|
}
|
||||||
|
|
||||||
var outfileStream = new FileStream(this._filename, FileMode.Append, FileAccess.Write, FileShare.Write);
|
var outfileStream = new FileStream(this._filename, FileMode.Append, FileAccess.Write, FileShare.Write);
|
||||||
var buffer = new byte[BufferSize];
|
|
||||||
Array.Fill<byte>(buffer, XCIFileTrimmer.PaddingByte);
|
|
||||||
var bytesToWriteB = this.UntrimmedFileSizeB - this.FileSizeB;
|
var bytesToWriteB = this.UntrimmedFileSizeB - this.FileSizeB;
|
||||||
var bytesLeftToWriteB = bytesToWriteB;
|
|
||||||
var writes = bytesLeftToWriteB / XCIFileTrimmer.BufferSize;
|
|
||||||
var write = 0;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var time = Performance.Measure(() =>
|
var time = Performance.Measure(() =>
|
||||||
{
|
{
|
||||||
try
|
WritePadding(outfileStream, bytesToWriteB);
|
||||||
{
|
|
||||||
while (bytesLeftToWriteB > 0)
|
|
||||||
{
|
|
||||||
var bytesToWrite = Math.Min(XCIFileTrimmer.BufferSize, bytesLeftToWriteB);
|
|
||||||
outfileStream.Write(buffer, 0, (int)bytesToWrite);
|
|
||||||
bytesLeftToWriteB -= bytesToWrite;
|
|
||||||
Log?.Progress(write, writes, "Writing padding data...", false);
|
|
||||||
write++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Log?.Progress(write, writes, "Writing padding data...", true);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (time.TotalSeconds > 0)
|
if (time.TotalSeconds > 0)
|
||||||
|
@ -377,6 +361,32 @@ namespace Ryujinx.Common.Utilities
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void WritePadding(FileStream outfileStream, long bytesToWriteB)
|
||||||
|
{
|
||||||
|
var bytesLeftToWriteB = bytesToWriteB;
|
||||||
|
var writes = bytesLeftToWriteB / XCIFileTrimmer.BufferSize;
|
||||||
|
var write = 0;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var buffer = new byte[BufferSize];
|
||||||
|
Array.Fill<byte>(buffer, XCIFileTrimmer.PaddingByte);
|
||||||
|
|
||||||
|
while (bytesLeftToWriteB > 0)
|
||||||
|
{
|
||||||
|
var bytesToWrite = Math.Min(XCIFileTrimmer.BufferSize, bytesLeftToWriteB);
|
||||||
|
outfileStream.Write(buffer, 0, (int)bytesToWrite);
|
||||||
|
bytesLeftToWriteB -= bytesToWrite;
|
||||||
|
Log?.Progress(write, writes, "Writing padding data...", false);
|
||||||
|
write++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Log?.Progress(write, writes, "Writing padding data...", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void OpenReaders()
|
protected void OpenReaders()
|
||||||
{
|
{
|
||||||
if (_binaryReader == null)
|
if (_binaryReader == null)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue