Files
Kenji-NX/src/Ryujinx.UI.Common/Helper/CustomSettingsHelper.cs
T
2026-09-05 14:13:06 -05:00

98 lines
4.9 KiB
C#

using Ryujinx.Common.Configuration;
using Ryujinx.Common.Logging;
using Ryujinx.Common.Utilities;
using Ryujinx.HLE;
using Ryujinx.UI.Common.Configuration;
using Ryujinx.UI.Common.Configuration.System;
using System.IO;
using CustomSettingsModel = Ryujinx.UI.Common.Models.CustomSettingsModel;
using Path = System.IO.Path;
namespace Ryujinx.UI.Common.Helper
{
public static class CustomSettingsHelper
{
private static readonly CustomSettingsMetadataJsonSerializerContext _serializerContext = new(JsonHelper.GetDefaultSerializerOptions());
public static CustomSettingsModel LoadCustomSettingsJson(string customSettingsJsonPath)
{
var customSettingsModel = new CustomSettingsModel();
if (!File.Exists(customSettingsJsonPath))
{
return customSettingsModel;
}
try
{
Logger.Info?.Print(LogClass.Configuration, $"Found custom settings data for application at {customSettingsJsonPath}");
customSettingsModel = JsonHelper.DeserializeFromFile(customSettingsJsonPath, _serializerContext.CustomSettingsModel);
return customSettingsModel;
}
catch
{
Logger.Error?.Print(LogClass.Configuration, $"Failed to deserialize custom settings data for application at {customSettingsJsonPath}");
return customSettingsModel;
}
}
public static void SaveCustomSettingsJson(string customSettingsJsonPath, CustomSettingsModel customSettingsModel)
{
if (!File.Exists(customSettingsJsonPath))
{
string directoryPath = Path.GetDirectoryName(customSettingsJsonPath);
if (!string.IsNullOrEmpty(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
}
JsonHelper.SerializeToFile(customSettingsJsonPath, customSettingsModel, _serializerContext.CustomSettingsModel);
}
public static bool HasCustomSettings(string customSettingsJsonPath)
{
return File.Exists(customSettingsJsonPath);
}
public static void DeleteCustomSettings(string customSettingsJsonPath)
{
FileInfo file = new(customSettingsJsonPath);
if (file.Exists)
{
file.Delete();
}
}
public static void OverrideSettings(CustomSettingsModel customSettingsModel)
{
ConfigurationState.Instance.System.EnableDockedMode.Value = customSettingsModel.EnableDockedMode;
ConfigurationState.Instance.System.Language.Value = (Language)customSettingsModel.SystemLanguage;
ConfigurationState.Instance.System.Region.Value = (Region)customSettingsModel.SystemRegion;
ConfigurationState.Instance.Graphics.VSyncMode.Value = (VSyncMode)customSettingsModel.VSyncMode;
ConfigurationState.Instance.System.DramSize.Value = (MemoryConfiguration)customSettingsModel.DramSize;
ConfigurationState.Instance.System.EnableFsIntegrityChecks.Value = customSettingsModel.EnableFsIntegrityChecks;
ConfigurationState.Instance.System.IgnoreMissingServices.Value = customSettingsModel.IgnoreMissingServices;
ConfigurationState.Instance.System.EnableLowPowerPptc.Value = customSettingsModel.EnableLowPowerPptc;
ConfigurationState.Instance.System.MemoryManagerMode.Value = (MemoryManagerMode)customSettingsModel.MemoryManagerMode;
ConfigurationState.Instance.System.UseHypervisor.Value = customSettingsModel.UseHypervisor;
ConfigurationState.Instance.Graphics.GraphicsBackend.Value = (GraphicsBackend)customSettingsModel.GraphicsBackend;
ConfigurationState.Instance.Graphics.PreferredGpu.Value = customSettingsModel.PreferredGpu;
ConfigurationState.Instance.Graphics.EnableShaderCache.Value = customSettingsModel.EnableShaderCache;
ConfigurationState.Instance.Graphics.EnableTextureRecompression.Value = customSettingsModel.EnableTextureRecompression;
ConfigurationState.Instance.Graphics.EnableMacroHLE.Value = customSettingsModel.EnableMacroHLE;
ConfigurationState.Instance.Graphics.EnableColorSpacePassthrough.Value = customSettingsModel.EnableColorSpacePassthrough;
ConfigurationState.Instance.Graphics.ResScale.Value = customSettingsModel.ResScale;
ConfigurationState.Instance.Graphics.MaxAnisotropy.Value = customSettingsModel.MaxAnisotropy;
ConfigurationState.Instance.Graphics.BackendThreading.Value = (BackendThreading)customSettingsModel.BackendThreading;
}
public static string PathToGameSettingsJson(ulong applicationIdBase)
{
return Path.Combine(AppDataManager.GamesDirPath, applicationIdBase.ToString("x16"), "settings.json");
}
}
}