gdkchan's requested change
This commit is contained in:
parent
2894c6bca1
commit
0aacf17b2b
1 changed files with 31 additions and 29 deletions
|
@ -22,8 +22,6 @@ namespace Ryujinx.Ui
|
||||||
{
|
{
|
||||||
public class GameTableContextMenu : Menu
|
public class GameTableContextMenu : Menu
|
||||||
{
|
{
|
||||||
public static Result OperationCancelled = new Result(468, 1357);
|
|
||||||
|
|
||||||
private ListStore _gameTableStore;
|
private ListStore _gameTableStore;
|
||||||
private TreeIter _rowIter;
|
private TreeIter _rowIter;
|
||||||
private VirtualFileSystem _virtualFileSystem;
|
private VirtualFileSystem _virtualFileSystem;
|
||||||
|
@ -155,7 +153,8 @@ namespace Ryujinx.Ui
|
||||||
private void ExtractSection(NcaSectionType ncaSectionType)
|
private void ExtractSection(NcaSectionType ncaSectionType)
|
||||||
{
|
{
|
||||||
FileChooserDialog fileChooser = new FileChooserDialog("Choose the folder to extract into", null, FileChooserAction.SelectFolder, "Cancel", ResponseType.Cancel, "Extract", ResponseType.Accept);
|
FileChooserDialog fileChooser = new FileChooserDialog("Choose the folder to extract into", null, FileChooserAction.SelectFolder, "Cancel", ResponseType.Cancel, "Extract", ResponseType.Accept);
|
||||||
|
fileChooser.SetPosition(WindowPosition.Center);
|
||||||
|
|
||||||
int response = fileChooser.Run();
|
int response = fileChooser.Run();
|
||||||
string destination = fileChooser.Filename;
|
string destination = fileChooser.Filename;
|
||||||
|
|
||||||
|
@ -258,13 +257,13 @@ namespace Ryujinx.Ui
|
||||||
fsClient.Register(source.ToU8Span(), ncaFileSystem);
|
fsClient.Register(source.ToU8Span(), ncaFileSystem);
|
||||||
fsClient.Register(output.ToU8Span(), new LocalFileSystem(destination));
|
fsClient.Register(output.ToU8Span(), new LocalFileSystem(destination));
|
||||||
|
|
||||||
Result resultCode = CopyDirectory(fsClient, $"{source}:/", $"{output}:/");
|
(Result? resultCode, bool canceled) = CopyDirectory(fsClient, $"{source}:/", $"{output}:/");
|
||||||
|
|
||||||
if (resultCode.IsFailure())
|
if (!canceled)
|
||||||
{
|
{
|
||||||
if (resultCode != OperationCancelled)
|
if (resultCode.Value.IsFailure())
|
||||||
{
|
{
|
||||||
Logger.PrintError(LogClass.Application, $"LibHac returned error code: {resultCode.ErrorCode}");
|
Logger.PrintError(LogClass.Application, $"LibHac returned error code: {resultCode.Value.ErrorCode}");
|
||||||
|
|
||||||
Gtk.Application.Invoke(delegate
|
Gtk.Application.Invoke(delegate
|
||||||
{
|
{
|
||||||
|
@ -273,24 +272,24 @@ namespace Ryujinx.Ui
|
||||||
GtkDialog.CreateErrorDialog("Extraction failed. Read the log file for further information.");
|
GtkDialog.CreateErrorDialog("Extraction failed. Read the log file for further information.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
else if (resultCode.Value.IsSuccess())
|
||||||
else if (resultCode.IsSuccess())
|
|
||||||
{
|
|
||||||
Gtk.Application.Invoke(delegate
|
|
||||||
{
|
{
|
||||||
_dialog?.Dispose();
|
Gtk.Application.Invoke(delegate
|
||||||
|
|
||||||
MessageDialog dialog = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Ok, null)
|
|
||||||
{
|
{
|
||||||
Title = "Ryujinx - NCA Section Extractor",
|
_dialog?.Dispose();
|
||||||
Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.Icon.png"),
|
|
||||||
SecondaryText = "Extraction has completed successfully.",
|
|
||||||
WindowPosition = WindowPosition.Center
|
|
||||||
};
|
|
||||||
|
|
||||||
dialog.Run();
|
MessageDialog dialog = new MessageDialog(null, DialogFlags.DestroyWithParent, MessageType.Info, ButtonsType.Ok, null)
|
||||||
dialog.Dispose();
|
{
|
||||||
});
|
Title = "Ryujinx - NCA Section Extractor",
|
||||||
|
Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.Icon.png"),
|
||||||
|
SecondaryText = "Extraction has completed successfully.",
|
||||||
|
WindowPosition = WindowPosition.Center
|
||||||
|
};
|
||||||
|
|
||||||
|
dialog.Run();
|
||||||
|
dialog.Dispose();
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fsClient.Unmount(source);
|
fsClient.Unmount(source);
|
||||||
|
@ -304,10 +303,10 @@ namespace Ryujinx.Ui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Result CopyDirectory(FileSystemClient fs, string sourcePath, string destPath)
|
private (Result? result, bool canceled) CopyDirectory(FileSystemClient fs, string sourcePath, string destPath)
|
||||||
{
|
{
|
||||||
Result rc = fs.OpenDirectory(out DirectoryHandle sourceHandle, sourcePath, OpenDirectoryMode.All);
|
Result rc = fs.OpenDirectory(out DirectoryHandle sourceHandle, sourcePath, OpenDirectoryMode.All);
|
||||||
if (rc.IsFailure()) return rc;
|
if (rc.IsFailure()) return (rc, false);
|
||||||
|
|
||||||
using (sourceHandle)
|
using (sourceHandle)
|
||||||
{
|
{
|
||||||
|
@ -315,7 +314,7 @@ namespace Ryujinx.Ui
|
||||||
{
|
{
|
||||||
if (_cancel)
|
if (_cancel)
|
||||||
{
|
{
|
||||||
return OperationCancelled;
|
return (null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
string subSrcPath = PathTools.Normalize(PathTools.Combine(sourcePath, entry.Name));
|
string subSrcPath = PathTools.Normalize(PathTools.Combine(sourcePath, entry.Name));
|
||||||
|
@ -325,8 +324,11 @@ namespace Ryujinx.Ui
|
||||||
{
|
{
|
||||||
fs.EnsureDirectoryExists(subDstPath);
|
fs.EnsureDirectoryExists(subDstPath);
|
||||||
|
|
||||||
rc = CopyDirectory(fs, subSrcPath, subDstPath);
|
(Result? result, bool canceled) = CopyDirectory(fs, subSrcPath, subDstPath);
|
||||||
if (rc.IsFailure()) return rc;
|
if (canceled || result.Value.IsFailure())
|
||||||
|
{
|
||||||
|
return (result, canceled);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.Type == DirectoryEntryType.File)
|
if (entry.Type == DirectoryEntryType.File)
|
||||||
|
@ -334,12 +336,12 @@ namespace Ryujinx.Ui
|
||||||
fs.CreateOrOverwriteFile(subDstPath, entry.Size);
|
fs.CreateOrOverwriteFile(subDstPath, entry.Size);
|
||||||
|
|
||||||
rc = CopyFile(fs, subSrcPath, subDstPath);
|
rc = CopyFile(fs, subSrcPath, subDstPath);
|
||||||
if (rc.IsFailure()) return rc;
|
if (rc.IsFailure()) return (rc, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Result.Success;
|
return (Result.Success, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Result CopyFile(FileSystemClient fs, string sourcePath, string destPath)
|
public Result CopyFile(FileSystemClient fs, string sourcePath, string destPath)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue