Skip to content

Commit

Permalink
Update to Support XCI files with KeyAreas
Browse files Browse the repository at this point in the history
  • Loading branch information
amurgshere committed Jan 28, 2024
1 parent 374479c commit 46f2baf
Show file tree
Hide file tree
Showing 4 changed files with 335 additions and 174 deletions.
1 change: 1 addition & 0 deletions src/Ryujinx.Ava/Assets/Locales/en_US.json
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,7 @@
"TrimXCIFileDialogSecondaryText": "Current File Size: {0:n} MB\nGame Data Size: {1:n} MB\nDisk Space Savings: {2:n} MB",
"TrimXCIFileNoTrimNecessary": "XCI File does not need to be trimmed. Check logs for further details",
"TrimXCIFileReadOnlyFileCannotFix": "XCI File is Read Only and could not be made writable. Check logs for further details",
"TrimXCIFileFileSizeChanged": "XCI File has changed in size since it was scanned. Please check the file is not being written to and try again.",
"TrimXCIFileFreeSpaceCheckFailed": "XCI File has data in the free space area, it is not safe to trim",
"TrimXCIFileInvalidXCIFile": "XCI File contains invalid data. Check logs for further details",
"TrimXCIFileFileIOWriteError": "XCI File could not be opened for writing. Check logs for further details",
Expand Down
27 changes: 15 additions & 12 deletions src/Ryujinx.Ava/UI/ViewModels/MainWindowViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1730,27 +1730,30 @@ public static async Task PerformanceCheck()
}
}

public async void ProcessTrimResult(String filename, Ryujinx.Common.Utilities.XCIFileTrimmer.TrimStatus trimStatus)
public async void ProcessTrimResult(String filename, Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome operationOutcome)
{
string notifyUser = null;

switch (trimStatus)
switch (operationOutcome)
{
case Ryujinx.Common.Utilities.XCIFileTrimmer.TrimStatus.NoTrimNecessary:
case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.NoTrimNecessary:
notifyUser = LocaleManager.Instance[LocaleKeys.TrimXCIFileNoTrimNecessary];
break;
case Ryujinx.Common.Utilities.XCIFileTrimmer.TrimStatus.ReadOnlyFileCannotFix:
case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.ReadOnlyFileCannotFix:
notifyUser = LocaleManager.Instance[LocaleKeys.TrimXCIFileReadOnlyFileCannotFix];
break;
case Ryujinx.Common.Utilities.XCIFileTrimmer.TrimStatus.FreeSpaceCheckFailed:
case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.FreeSpaceCheckFailed:
notifyUser = LocaleManager.Instance[LocaleKeys.TrimXCIFileFreeSpaceCheckFailed];
break;
case Ryujinx.Common.Utilities.XCIFileTrimmer.TrimStatus.InvalidXCIFile:
case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.InvalidXCIFile:
notifyUser = LocaleManager.Instance[LocaleKeys.TrimXCIFileInvalidXCIFile];
break;
case Ryujinx.Common.Utilities.XCIFileTrimmer.TrimStatus.FileIOWriteError:
case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.FileIOWriteError:
notifyUser = LocaleManager.Instance[LocaleKeys.TrimXCIFileFileIOWriteError];
break;
case Ryujinx.Common.Utilities.XCIFileTrimmer.OperationOutcome.FileSizeChanged:
notifyUser = LocaleManager.Instance[LocaleKeys.TrimXCIFileFileSizeChanged];
break;
}

if (notifyUser != null)
Expand All @@ -1773,9 +1776,9 @@ public async Task TrimXCIFile(string filename)

if (trimmer.CanBeTrimmed)
{
var savings = (double)trimmer.DiskSpaceSavings / 1024.0 / 1024.0;
var currentFileSize = (double)trimmer.RealFileSize / 1024.0 / 1024.0;
var cartDataSize = (double)trimmer.DataSize / 1024.0 / 1024.0;
var savings = (double)trimmer.DiskSpaceSavingsB / 1024.0 / 1024.0;
var currentFileSize = (double)trimmer.FileSizeB / 1024.0 / 1024.0;
var cartDataSize = (double)trimmer.DataSizeB / 1024.0 / 1024.0;
var secondaryText = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.TrimXCIFileDialogSecondaryText, currentFileSize, cartDataSize, savings);

var result = await ContentDialogHelper.CreateConfirmationDialog(
Expand All @@ -1801,11 +1804,11 @@ public async Task TrimXCIFile(string filename)
try
{
var trimStatus = trimmer.Trim();
var operationOutcome = trimmer.Trim();
Dispatcher.UIThread.Post(() =>
{
ProcessTrimResult(filename, trimStatus);
ProcessTrimResult(filename, operationOutcome);
});
}
finally
Expand Down

0 comments on commit 46f2baf

Please sign in to comment.