GameTableContextMenu.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Gtk;
  2. using Ryujinx.HLE.FileSystem;
  3. using System;
  4. using System.Diagnostics;
  5. using System.IO;
  6. using System.Reflection;
  7. using GUI = Gtk.Builder.ObjectAttribute;
  8. namespace Ryujinx.Ui
  9. {
  10. public class GameTableContextMenu : Menu
  11. {
  12. private static ListStore _gameTableStore;
  13. private static TreeIter _rowIter;
  14. #pragma warning disable CS0649
  15. #pragma warning disable IDE0044
  16. [GUI] MenuItem _openSaveDir;
  17. #pragma warning restore CS0649
  18. #pragma warning restore IDE0044
  19. public GameTableContextMenu(ListStore gameTableStore, TreeIter rowIter) : this(new Builder("Ryujinx.Ui.GameTableContextMenu.glade"), gameTableStore, rowIter) { }
  20. private GameTableContextMenu(Builder builder, ListStore gameTableStore, TreeIter rowIter) : base(builder.GetObject("_contextMenu").Handle)
  21. {
  22. builder.Autoconnect(this);
  23. _openSaveDir.Activated += OpenSaveDir_Clicked;
  24. _gameTableStore = gameTableStore;
  25. _rowIter = rowIter;
  26. }
  27. //Events
  28. private void OpenSaveDir_Clicked(object sender, EventArgs args)
  29. {
  30. string titleName = _gameTableStore.GetValue(_rowIter, 2).ToString().Split("\n")[0];
  31. string titleId = _gameTableStore.GetValue(_rowIter, 2).ToString().Split("\n")[1].ToLower();
  32. string saveDir = System.IO.Path.Combine(new VirtualFileSystem().GetNandPath(), "user", "save", "0000000000000000", "00000000000000000000000000000001", titleId, "0");
  33. if (!Directory.Exists(saveDir))
  34. {
  35. MessageDialog messageDialog = new MessageDialog(null, DialogFlags.Modal, MessageType.Question, ButtonsType.YesNo, null)
  36. {
  37. Title = "Ryujinx",
  38. Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.Icon.png"),
  39. Text = $"Could not find save directory for {titleName} [{titleId}]",
  40. SecondaryText = "Would you like to create the directory?",
  41. WindowPosition = WindowPosition.Center
  42. };
  43. if (messageDialog.Run() == (int)ResponseType.Yes)
  44. {
  45. Directory.CreateDirectory(saveDir);
  46. }
  47. else
  48. {
  49. messageDialog.Dispose();
  50. return;
  51. }
  52. messageDialog.Dispose();
  53. }
  54. Process.Start(new ProcessStartInfo()
  55. {
  56. FileName = saveDir,
  57. UseShellExecute = true,
  58. Verb = "open"
  59. });
  60. }
  61. }
  62. }