Code formatting and reduced method size

This commit is contained in:
Aaron Murgatroyd 2024-07-06 22:36:40 +10:00
parent bf23d183b2
commit c0b91ed914

View file

@ -57,7 +57,7 @@ namespace Ryujinx.Common.Utilities
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);
return trimmer.CanBeTrimmed;
@ -161,34 +161,12 @@ namespace Ryujinx.Common.Utilities
try
{
this.Pos = this.TrimmedFileSizeB;
var buffer = new byte[BufferSize];
var freeSpaceValid = true;
var readSizeB = this.FileSizeB - this.TrimmedFileSizeB;
var reads = readSizeB / XCIFileTrimmer.BufferSize;
long read = 0;
var time = Performance.Measure(() =>
{
try
{
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);
}
freeSpaceValid = CheckPadding(readSizeB);
});
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, "Free space is valid");
this._freeSpaceValid = true;
if (freeSpaceValid) Log?.Write(LogType.Info, "Free space is valid");
this._freeSpaceValid = freeSpaceValid;
}
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()
{
this._freeSpaceChecked = false;
@ -329,32 +332,13 @@ namespace Ryujinx.Common.Utilities
}
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 bytesLeftToWriteB = bytesToWriteB;
var writes = bytesLeftToWriteB / XCIFileTrimmer.BufferSize;
var write = 0;
try
{
var time = Performance.Measure(() =>
{
try
{
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);
}
WritePadding(outfileStream, bytesToWriteB);
});
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()
{
if (_binaryReader == null)