AppDataManager.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using Ryujinx.Common.Logging;
  2. using System;
  3. using System.IO;
  4. namespace Ryujinx.Common.Configuration
  5. {
  6. public static class AppDataManager
  7. {
  8. private static readonly string _defaultBaseDirPath;
  9. private const string DefaultBaseDir = "Ryujinx";
  10. // The following 3 are always part of Base Directory
  11. private const string GamesDir = "games";
  12. private const string ProfilesDir = "profiles";
  13. private const string KeysDir = "system";
  14. public static bool IsCustomBasePath { get; private set; }
  15. public static string BaseDirPath { get; private set; }
  16. public static string GamesDirPath { get; private set; }
  17. public static string ProfilesDirPath { get; private set; }
  18. public static string KeysDirPath { get; private set; }
  19. public static string KeysDirPathAlt { get; }
  20. public const string DefaultNandDir = "bis";
  21. public const string DefaultSdcardDir = "sdcard";
  22. private const string DefaultModsDir = "mods";
  23. public static string CustomModsPath { get; set; }
  24. public static string CustomNandPath { get; set; } // TODO: Actually implement this into VFS
  25. public static string CustomSdCardPath { get; set; } // TODO: Actually implement this into VFS
  26. static AppDataManager()
  27. {
  28. _defaultBaseDirPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), DefaultBaseDir);
  29. KeysDirPathAlt = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".switch");
  30. }
  31. public static void Initialize(string baseDirPath)
  32. {
  33. BaseDirPath = _defaultBaseDirPath;
  34. if (baseDirPath != null && baseDirPath != _defaultBaseDirPath)
  35. {
  36. if (!Directory.Exists(baseDirPath))
  37. {
  38. Logger.Error?.Print(LogClass.Application, $"Custom Data Directory '{baseDirPath}' does not exist. Using defaults...");
  39. }
  40. else
  41. {
  42. BaseDirPath = baseDirPath;
  43. IsCustomBasePath = true;
  44. }
  45. }
  46. SetupBasePaths();
  47. }
  48. private static void SetupBasePaths()
  49. {
  50. Directory.CreateDirectory(BaseDirPath);
  51. Directory.CreateDirectory(GamesDirPath = Path.Combine(BaseDirPath, GamesDir));
  52. Directory.CreateDirectory(ProfilesDirPath = Path.Combine(BaseDirPath, ProfilesDir));
  53. Directory.CreateDirectory(KeysDirPath = Path.Combine(BaseDirPath, KeysDir));
  54. }
  55. public static string GetModsPath() => CustomModsPath ?? Directory.CreateDirectory(Path.Combine(BaseDirPath, DefaultModsDir)).FullName;
  56. }
  57. }