aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Common/Configuration/AppDataManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Common/Configuration/AppDataManager.cs')
-rw-r--r--src/Ryujinx.Common/Configuration/AppDataManager.cs129
1 files changed, 120 insertions, 9 deletions
diff --git a/src/Ryujinx.Common/Configuration/AppDataManager.cs b/src/Ryujinx.Common/Configuration/AppDataManager.cs
index 35aea3c2..f3df0fc9 100644
--- a/src/Ryujinx.Common/Configuration/AppDataManager.cs
+++ b/src/Ryujinx.Common/Configuration/AppDataManager.cs
@@ -30,6 +30,8 @@ namespace Ryujinx.Common.Configuration
public static string KeysDirPath { get; private set; }
public static string KeysDirPathUser { get; }
+ public static string LogsDirPath { get; private set; }
+
public const string DefaultNandDir = "bis";
public const string DefaultSdcardDir = "sdcard";
private const string DefaultModsDir = "mods";
@@ -46,15 +48,7 @@ namespace Ryujinx.Common.Configuration
public static void Initialize(string baseDirPath)
{
- string appDataPath;
- if (OperatingSystem.IsMacOS())
- {
- appDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Application Support");
- }
- else
- {
- appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
- }
+ string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
if (appDataPath.Length == 0)
{
@@ -118,9 +112,126 @@ namespace Ryujinx.Common.Configuration
SetupBasePaths();
}
+ public static string GetOrCreateLogsDir()
+ {
+ if (Directory.Exists(LogsDirPath))
+ {
+ return LogsDirPath;
+ }
+
+ Logger.Notice.Print(LogClass.Application, "Logging directory not found; attempting to create new logging directory.");
+ LogsDirPath = SetUpLogsDir();
+
+ return LogsDirPath;
+ }
+
+ private static string SetUpLogsDir()
+ {
+ string logDir = "";
+
+ if (Mode == LaunchMode.Portable)
+ {
+ logDir = Path.Combine(BaseDirPath, "Logs");
+ try
+ {
+ Directory.CreateDirectory(logDir);
+ }
+ catch
+ {
+ Logger.Warning?.Print(LogClass.Application, $"Logging directory could not be created '{logDir}'");
+
+ return null;
+ }
+ }
+ else
+ {
+ if (OperatingSystem.IsMacOS())
+ {
+ // NOTE: Should evaluate to "~/Library/Logs/Ryujinx/".
+ logDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Library", "Logs", DefaultBaseDir);
+ try
+ {
+ Directory.CreateDirectory(logDir);
+ }
+ catch
+ {
+ Logger.Warning?.Print(LogClass.Application, $"Logging directory could not be created '{logDir}'");
+ logDir = "";
+ }
+
+ if (string.IsNullOrEmpty(logDir))
+ {
+ // NOTE: Should evaluate to "~/Library/Application Support/Ryujinx/Logs".
+ logDir = Path.Combine(BaseDirPath, "Logs");
+
+ try
+ {
+ Directory.CreateDirectory(logDir);
+ }
+ catch
+ {
+ Logger.Warning?.Print(LogClass.Application, $"Logging directory could not be created '{logDir}'");
+
+ return null;
+ }
+ }
+ }
+ else if (OperatingSystem.IsWindows())
+ {
+ // NOTE: Should evaluate to a "Logs" directory in whatever directory Ryujinx was launched from.
+ logDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs");
+ try
+ {
+ Directory.CreateDirectory(logDir);
+ }
+ catch
+ {
+ Logger.Warning?.Print(LogClass.Application, $"Logging directory could not be created '{logDir}'");
+ logDir = "";
+ }
+
+ if (string.IsNullOrEmpty(logDir))
+ {
+ // NOTE: Should evaluate to "C:\Users\user\AppData\Roaming\Ryujinx\Logs".
+ logDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), DefaultBaseDir, "Logs");
+
+ try
+ {
+ Directory.CreateDirectory(logDir);
+ }
+ catch
+ {
+ Logger.Warning?.Print(LogClass.Application, $"Logging directory could not be created '{logDir}'");
+
+ return null;
+ }
+ }
+ }
+ else if (OperatingSystem.IsLinux())
+ {
+ // NOTE: Should evaluate to "~/.config/Ryujinx/Logs".
+ logDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), DefaultBaseDir, "Logs");
+
+ try
+ {
+ Directory.CreateDirectory(logDir);
+ }
+ catch
+ {
+ Logger.Warning?.Print(LogClass.Application, $"Logging directory could not be created '{logDir}'");
+
+ return null;
+ }
+ }
+ }
+
+ return logDir;
+ }
+
private static void SetupBasePaths()
{
Directory.CreateDirectory(BaseDirPath);
+ LogsDirPath = SetUpLogsDir();
Directory.CreateDirectory(GamesDirPath = Path.Combine(BaseDirPath, GamesDir));
Directory.CreateDirectory(ProfilesDirPath = Path.Combine(BaseDirPath, ProfilesDir));
Directory.CreateDirectory(KeysDirPath = Path.Combine(BaseDirPath, KeysDir));