aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx/Ui/GameTableContextMenu.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx/Ui/GameTableContextMenu.cs')
-rw-r--r--Ryujinx/Ui/GameTableContextMenu.cs88
1 files changed, 78 insertions, 10 deletions
diff --git a/Ryujinx/Ui/GameTableContextMenu.cs b/Ryujinx/Ui/GameTableContextMenu.cs
index 61e6a80c..58c40791 100644
--- a/Ryujinx/Ui/GameTableContextMenu.cs
+++ b/Ryujinx/Ui/GameTableContextMenu.cs
@@ -111,22 +111,34 @@ namespace Ryujinx.Ui
MenuItem managePtcMenu = new MenuItem("Cache Management");
- MenuItem purgePtcCache = new MenuItem("Purge PPTC cache")
+ MenuItem purgePtcCache = new MenuItem("Purge PPTC Cache")
{
TooltipText = "Delete the Application's PPTC cache."
};
-
- MenuItem openPtcDir = new MenuItem("Open PPTC directory")
+
+ MenuItem purgeShaderCache = new MenuItem("Purge Shader Cache")
{
- TooltipText = "Open the directory which contains Application's PPTC cache."
+ TooltipText = "Delete the Application's shader cache."
};
+
+ MenuItem openPtcDir = new MenuItem("Open PPTC Directory")
+ {
+ TooltipText = "Open the directory which contains the Application's PPTC cache."
+ };
+
+ MenuItem openShaderCacheDir = new MenuItem("Open Shader Cache Directory")
+ {
+ TooltipText = "Open the directory which contains the Application's shader cache."
+ };
+
+ Menu manageSubMenu = new Menu();
- Menu managePtcSubMenu = new Menu();
-
- managePtcSubMenu.Append(purgePtcCache);
- managePtcSubMenu.Append(openPtcDir);
+ manageSubMenu.Append(purgePtcCache);
+ manageSubMenu.Append(purgeShaderCache);
+ manageSubMenu.Append(openPtcDir);
+ manageSubMenu.Append(openShaderCacheDir);
- managePtcMenu.Submenu = managePtcSubMenu;
+ managePtcMenu.Submenu = manageSubMenu;
openSaveUserDir.Activated += OpenSaveUserDir_Clicked;
openSaveDeviceDir.Activated += OpenSaveDeviceDir_Clicked;
@@ -138,8 +150,10 @@ namespace Ryujinx.Ui
extractExeFs.Activated += ExtractExeFs_Clicked;
extractLogo.Activated += ExtractLogo_Clicked;
purgePtcCache.Activated += PurgePtcCache_Clicked;
+ purgeShaderCache.Activated += PurgeShaderCache_Clicked;
openPtcDir.Activated += OpenPtcDir_Clicked;
-
+ openShaderCacheDir.Activated += OpenShaderCacheDir_Clicked;
+
this.Add(openSaveUserDir);
this.Add(openSaveDeviceDir);
this.Add(openSaveBcatDir);
@@ -640,6 +654,24 @@ namespace Ryujinx.Ui
Verb = "open"
});
}
+
+ private void OpenShaderCacheDir_Clicked(object sender, EventArgs args)
+ {
+ string titleId = _gameTableStore.GetValue(_rowIter, 2).ToString().Split("\n")[1].ToLower();
+ string shaderCacheDir = System.IO.Path.Combine(AppDataManager.GamesDirPath, titleId, "cache", "shader");
+
+ if (!Directory.Exists(shaderCacheDir))
+ {
+ Directory.CreateDirectory(shaderCacheDir);
+ }
+
+ Process.Start(new ProcessStartInfo
+ {
+ FileName = shaderCacheDir,
+ UseShellExecute = true,
+ Verb = "open"
+ });
+ }
private void PurgePtcCache_Clicked(object sender, EventArgs args)
{
@@ -678,5 +710,41 @@ namespace Ryujinx.Ui
warningDialog.Dispose();
}
+
+ private void PurgeShaderCache_Clicked(object sender, EventArgs args)
+ {
+ string[] tableEntry = _gameTableStore.GetValue(_rowIter, 2).ToString().Split("\n");
+ string titleId = tableEntry[1].ToLower();
+
+ DirectoryInfo shaderCacheDir = new DirectoryInfo(System.IO.Path.Combine(AppDataManager.GamesDirPath, titleId, "cache", "shader"));
+
+ MessageDialog warningDialog = new MessageDialog(null, DialogFlags.Modal, MessageType.Warning, ButtonsType.YesNo, null)
+ {
+ Title = "Ryujinx - Warning",
+ Text = $"You are about to delete the shader cache for '{tableEntry[0]}'. Are you sure you want to proceed?",
+ WindowPosition = WindowPosition.Center
+ };
+
+ List<DirectoryInfo> cacheDirectory = new List<DirectoryInfo>();
+
+ if (shaderCacheDir.Exists) { cacheDirectory.AddRange(shaderCacheDir.EnumerateDirectories("*")); }
+
+ if (cacheDirectory.Count > 0 && warningDialog.Run() == (int)ResponseType.Yes)
+ {
+ foreach (DirectoryInfo directory in cacheDirectory)
+ {
+ try
+ {
+ directory.Delete(true);
+ }
+ catch (Exception e)
+ {
+ Logger.Error?.Print(LogClass.Application, $"Error purging shader cache {directory.Name}: {e}");
+ }
+ }
+ }
+
+ warningDialog.Dispose();
+ }
}
}