From 3e0d67533f1d31f9d0d0ac0b48922c719c5d8424 Mon Sep 17 00:00:00 2001
From: Marco Carvalho <marcolucio27@gmail.com>
Date: Sun, 7 Apr 2024 17:55:34 -0300
Subject: [PATCH] Enhance Error Handling with Try-Pattern Refactoring (#6610)

* Enhance Error Handling with Try-Pattern Refactoring

* refactoring

* refactoring

* Update src/Ryujinx.HLE/FileSystem/ContentPath.cs

Co-authored-by: gdkchan <gab.dark.100@gmail.com>

---------

Co-authored-by: gdkchan <gab.dark.100@gmail.com>
---
 src/Ryujinx.HLE/FileSystem/ContentManager.cs | 21 ++++++++------------
 src/Ryujinx.HLE/FileSystem/ContentPath.cs    | 16 +++++++++------
 2 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/src/Ryujinx.HLE/FileSystem/ContentManager.cs b/src/Ryujinx.HLE/FileSystem/ContentManager.cs
index b27eb5ea..3c34a886 100644
--- a/src/Ryujinx.HLE/FileSystem/ContentManager.cs
+++ b/src/Ryujinx.HLE/FileSystem/ContentManager.cs
@@ -104,20 +104,15 @@ namespace Ryujinx.HLE.FileSystem
 
                 foreach (StorageId storageId in Enum.GetValues<StorageId>())
                 {
-                    string contentDirectory = null;
-                    string contentPathString = null;
-                    string registeredDirectory = null;
-
-                    try
-                    {
-                        contentPathString = ContentPath.GetContentPath(storageId);
-                        contentDirectory = ContentPath.GetRealPath(contentPathString);
-                        registeredDirectory = Path.Combine(contentDirectory, "registered");
-                    }
-                    catch (NotSupportedException)
+                    if (!ContentPath.TryGetContentPath(storageId, out var contentPathString))
                     {
                         continue;
                     }
+                    if (!ContentPath.TryGetRealPath(contentPathString, out var contentDirectory))
+                    {
+                        continue;
+                    }
+                    var registeredDirectory = Path.Combine(contentDirectory, "registered");
 
                     Directory.CreateDirectory(registeredDirectory);
 
@@ -471,8 +466,8 @@ namespace Ryujinx.HLE.FileSystem
 
         public void InstallFirmware(string firmwareSource)
         {
-            string contentPathString = ContentPath.GetContentPath(StorageId.BuiltInSystem);
-            string contentDirectory = ContentPath.GetRealPath(contentPathString);
+            ContentPath.TryGetContentPath(StorageId.BuiltInSystem, out var contentPathString);
+            ContentPath.TryGetRealPath(contentPathString, out var contentDirectory);
             string registeredDirectory = Path.Combine(contentDirectory, "registered");
             string temporaryDirectory = Path.Combine(contentDirectory, "temp");
 
diff --git a/src/Ryujinx.HLE/FileSystem/ContentPath.cs b/src/Ryujinx.HLE/FileSystem/ContentPath.cs
index 02539c5c..ffc212f7 100644
--- a/src/Ryujinx.HLE/FileSystem/ContentPath.cs
+++ b/src/Ryujinx.HLE/FileSystem/ContentPath.cs
@@ -26,17 +26,19 @@ namespace Ryujinx.HLE.FileSystem
         public const string Nintendo = "Nintendo";
         public const string Contents = "Contents";
 
-        public static string GetRealPath(string switchContentPath)
+        public static bool TryGetRealPath(string switchContentPath, out string realPath)
         {
-            return switchContentPath switch
+            realPath = switchContentPath switch
             {
                 SystemContent => Path.Combine(AppDataManager.BaseDirPath, SystemNandPath, Contents),
                 UserContent => Path.Combine(AppDataManager.BaseDirPath, UserNandPath, Contents),
                 SdCardContent => Path.Combine(GetSdCardPath(), Nintendo, Contents),
                 System => Path.Combine(AppDataManager.BaseDirPath, SystemNandPath),
                 User => Path.Combine(AppDataManager.BaseDirPath, UserNandPath),
-                _ => throw new NotSupportedException($"Content Path \"`{switchContentPath}`\" is not supported."),
+                _ => null,
             };
+
+            return realPath != null;
         }
 
         public static string GetContentPath(ContentStorageId contentStorageId)
@@ -50,15 +52,17 @@ namespace Ryujinx.HLE.FileSystem
             };
         }
 
-        public static string GetContentPath(StorageId storageId)
+        public static bool TryGetContentPath(StorageId storageId, out string contentPath)
         {
-            return storageId switch
+            contentPath = storageId switch
             {
                 StorageId.BuiltInSystem => SystemContent,
                 StorageId.BuiltInUser => UserContent,
                 StorageId.SdCard => SdCardContent,
-                _ => throw new NotSupportedException($"Storage Id \"`{storageId}`\" is not supported."),
+                _ => null,
             };
+
+            return contentPath != null;
         }
 
         public static StorageId GetStorageId(string contentPathString)