From 4e1a60328e1236c5f54a36c147914b2c13a770d4 Mon Sep 17 00:00:00 2001
From: Kyle <59298462+Kfollen93@users.noreply.github.com>
Date: Thu, 7 Mar 2024 14:49:57 -0800
Subject: [PATCH] Add title of game to screenshot text (#6266)

* Add sanitize method

* Add app name to screenshot text output

* Add app name to screenshot text
---
 src/Ryujinx.Common/Utilities/FileSystemUtils.cs | 8 ++++++++
 src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs       | 9 +++++++--
 src/Ryujinx/AppHost.cs                          | 6 +++++-
 3 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs
index e76c2b60..a57fa8a7 100644
--- a/src/Ryujinx.Common/Utilities/FileSystemUtils.cs
+++ b/src/Ryujinx.Common/Utilities/FileSystemUtils.cs
@@ -1,4 +1,6 @@
+using System.Collections.Generic;
 using System.IO;
+using System.Linq;
 
 namespace Ryujinx.Common.Utilities
 {
@@ -44,5 +46,11 @@ namespace Ryujinx.Common.Utilities
             CopyDirectory(sourceDir, destinationDir, true);
             Directory.Delete(sourceDir, true);
         }
+
+        public static string SanitizeFileName(string fileName)
+        {
+            var reservedChars = new HashSet<char>(Path.GetInvalidFileNameChars());
+            return string.Concat(fileName.Select(c => reservedChars.Contains(c) ? '_' : c));
+        }
     }
 }
diff --git a/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs b/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs
index e27d0604..0e636792 100644
--- a/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs
+++ b/src/Ryujinx.Gtk3/UI/RendererWidgetBase.cs
@@ -3,6 +3,7 @@ using Gtk;
 using Ryujinx.Common;
 using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Logging;
+using Ryujinx.Common.Utilities;
 using Ryujinx.Graphics.GAL;
 using Ryujinx.Graphics.GAL.Multithreading;
 using Ryujinx.Graphics.Gpu;
@@ -378,8 +379,12 @@ namespace Ryujinx.UI
                 {
                     lock (this)
                     {
-                        var currentTime = DateTime.Now;
-                        string filename = $"ryujinx_capture_{currentTime.Year}-{currentTime.Month:D2}-{currentTime.Day:D2}_{currentTime.Hour:D2}-{currentTime.Minute:D2}-{currentTime.Second:D2}.png";
+                        string applicationName = Device.Processes.ActiveApplication.Name;
+                        string sanitizedApplicationName = FileSystemUtils.SanitizeFileName(applicationName);
+                        DateTime currentTime = DateTime.Now;
+
+                        string filename = $"{sanitizedApplicationName}_{currentTime.Year}-{currentTime.Month:D2}-{currentTime.Day:D2}_{currentTime.Hour:D2}-{currentTime.Minute:D2}-{currentTime.Second:D2}.png";
+
                         string directory = AppDataManager.Mode switch
                         {
                             AppDataManager.LaunchMode.Portable or AppDataManager.LaunchMode.Custom => System.IO.Path.Combine(AppDataManager.BaseDirPath, "screenshots"),
diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs
index 04cec957..2620ea68 100644
--- a/src/Ryujinx/AppHost.cs
+++ b/src/Ryujinx/AppHost.cs
@@ -22,6 +22,7 @@ using Ryujinx.Common.Configuration;
 using Ryujinx.Common.Configuration.Multiplayer;
 using Ryujinx.Common.Logging;
 using Ryujinx.Common.SystemInterop;
+using Ryujinx.Common.Utilities;
 using Ryujinx.Graphics.GAL;
 using Ryujinx.Graphics.GAL.Multithreading;
 using Ryujinx.Graphics.Gpu;
@@ -279,8 +280,11 @@ namespace Ryujinx.Ava
                 {
                     lock (_lockObject)
                     {
+                        string applicationName = Device.Processes.ActiveApplication.Name;
+                        string sanitizedApplicationName = FileSystemUtils.SanitizeFileName(applicationName);
                         DateTime currentTime = DateTime.Now;
-                        string filename = $"ryujinx_capture_{currentTime.Year}-{currentTime.Month:D2}-{currentTime.Day:D2}_{currentTime.Hour:D2}-{currentTime.Minute:D2}-{currentTime.Second:D2}.png";
+
+                        string filename = $"{sanitizedApplicationName}_{currentTime.Year}-{currentTime.Month:D2}-{currentTime.Day:D2}_{currentTime.Hour:D2}-{currentTime.Minute:D2}-{currentTime.Second:D2}.png";
 
                         string directory = AppDataManager.Mode switch
                         {