From 4a6ae533dd4d84d2e7d41ebb4fe340f11ded1f9d Mon Sep 17 00:00:00 2001 From: Xpl0itR Date: Fri, 24 Jan 2020 19:02:10 +0000 Subject: [PATCH] AcK's requested changes --- Ryujinx/Ui/GameTableContextMenu.cs | 30 ++++++++++++++++++++++----- Ryujinx/Ui/GameTableContextMenu.glade | 6 +++--- Ryujinx/Ui/MainWindow.cs | 1 - 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/Ryujinx/Ui/GameTableContextMenu.cs b/Ryujinx/Ui/GameTableContextMenu.cs index cf3f5991c5..de2a8b323d 100644 --- a/Ryujinx/Ui/GameTableContextMenu.cs +++ b/Ryujinx/Ui/GameTableContextMenu.cs @@ -48,6 +48,14 @@ namespace Ryujinx.Ui _gameTableStore = gameTableStore; _rowIter = rowIter; _virtualFileSystem = virtualFileSystem; + + string ext = System.IO.Path.GetExtension(_gameTableStore.GetValue(_rowIter, 9).ToString()).ToLower(); + if (ext != ".nca" && ext != ".nsp" && ext != ".pfs0" && ext != ".xci") + { + _extractRomFs.Sensitive = false; + _extractExeFs.Sensitive = false; + _extractLogo.Sensitive = false; + } } private bool TryFindSaveData(string titleName, string titleIdText, out ulong saveDataId) @@ -197,8 +205,10 @@ namespace Ryujinx.Ui if (mainNca == null) { Logger.PrintError(LogClass.Application, "Extraction failed. The main NCA was not present in the selected file."); + GtkDialog.CreateErrorDialog("Extraction failed. The main NCA was not present in the selected file."); fileChooser.Dispose(); + return; } @@ -217,7 +227,12 @@ namespace Ryujinx.Ui _virtualFileSystem.FsClient.Register(ncaSectionType.ToString().ToU8Span(), ncaFileSystem); _virtualFileSystem.FsClient.Register("output".ToU8Span(), new LocalFileSystem(fileChooser.Filename)); - CopyDirectory(_virtualFileSystem.FsClient, $"{ncaSectionType}:/", "output:/"); + Result rc = CopyDirectory(_virtualFileSystem.FsClient, $"{ncaSectionType}:/", "output:/"); + if (rc.IsFailure()) + { + Logger.PrintError(LogClass.Application, $"LibHac returned error code: {rc.ErrorCode}"); + GtkDialog.CreateErrorDialog($"Extraction failed. Read the log file for further information."); + } _virtualFileSystem.FsClient.Unmount(ncaSectionType.ToString()); _virtualFileSystem.FsClient.Unmount("output"); @@ -227,9 +242,10 @@ namespace Ryujinx.Ui fileChooser.Dispose(); } - private static void CopyDirectory(FileSystemClient fs, string sourcePath, string destPath) + private static Result CopyDirectory(FileSystemClient fs, string sourcePath, string destPath) { - fs.OpenDirectory(out DirectoryHandle sourceHandle, sourcePath, OpenDirectoryMode.All).ThrowIfFailure(); + Result rc = fs.OpenDirectory(out DirectoryHandle sourceHandle, sourcePath, OpenDirectoryMode.All); + if (rc.IsFailure()) return rc; using (sourceHandle) { @@ -242,17 +258,21 @@ namespace Ryujinx.Ui { fs.EnsureDirectoryExists(subDstPath); - CopyDirectory(fs, subSrcPath, subDstPath); + rc = CopyDirectory(fs, subSrcPath, subDstPath); + if (rc.IsFailure()) return rc; } if (entry.Type == DirectoryEntryType.File) { fs.CreateOrOverwriteFile(subDstPath, entry.Size); - CopyFile(fs, subSrcPath, subDstPath); + rc = CopyFile(fs, subSrcPath, subDstPath); + if (rc.IsFailure()) return rc; } } } + + return Result.Success; } public static Result CopyFile(FileSystemClient fs, string sourcePath, string destPath) diff --git a/Ryujinx/Ui/GameTableContextMenu.glade b/Ryujinx/Ui/GameTableContextMenu.glade index 908f21bd91..13bade4e50 100644 --- a/Ryujinx/Ui/GameTableContextMenu.glade +++ b/Ryujinx/Ui/GameTableContextMenu.glade @@ -24,7 +24,7 @@ True False - Extract RomFS + Extract RomFS Section True @@ -32,7 +32,7 @@ True False - Extract ExeFS + Extract ExeFS Section True @@ -40,7 +40,7 @@ diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs index 231c7e888f..734103fed2 100644 --- a/Ryujinx/Ui/MainWindow.cs +++ b/Ryujinx/Ui/MainWindow.cs @@ -547,7 +547,6 @@ namespace Ryujinx.Ui if (treeIter.UserData == IntPtr.Zero) return; GameTableContextMenu contextMenu = new GameTableContextMenu(_tableStore, treeIter, _virtualFileSystem); - contextMenu.ShowAll(); contextMenu.PopupAtPointer(null); }