aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs')
-rw-r--r--Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs343
1 files changed, 343 insertions, 0 deletions
diff --git a/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs b/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs
new file mode 100644
index 00000000..28a2956a
--- /dev/null
+++ b/Ryujinx.Ui.Common/Configuration/ConfigurationFileFormat.cs
@@ -0,0 +1,343 @@
+using Ryujinx.Common.Configuration;
+using Ryujinx.Common.Configuration.Hid;
+using Ryujinx.Common.Logging;
+using Ryujinx.Common.Utilities;
+using Ryujinx.Ui.Common.Configuration.System;
+using Ryujinx.Ui.Common.Configuration.Ui;
+using System.Collections.Generic;
+using System.IO;
+
+namespace Ryujinx.Ui.Common.Configuration
+{
+ public class ConfigurationFileFormat
+ {
+ /// <summary>
+ /// The current version of the file format
+ /// </summary>
+ public const int CurrentVersion = 38;
+
+ /// <summary>
+ /// Version of the configuration file format
+ /// </summary>
+ public int Version { get; set; }
+
+ /// <summary>
+ /// Enables or disables logging to a file on disk
+ /// </summary>
+ public bool EnableFileLog { get; set; }
+
+ /// <summary>
+ /// Whether or not backend threading is enabled. The "Auto" setting will determine whether threading should be enabled at runtime.
+ /// </summary>
+ public BackendThreading BackendThreading { get; set; }
+
+ /// <summary>
+ /// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead.
+ /// </summary>
+ public int ResScale { get; set; }
+
+ /// <summary>
+ /// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1.
+ /// </summary>
+ public float ResScaleCustom { get; set; }
+
+ /// <summary>
+ /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide.
+ /// </summary>
+ public float MaxAnisotropy { get; set; }
+
+ /// <summary>
+ /// Aspect Ratio applied to the renderer window.
+ /// </summary>
+ public AspectRatio AspectRatio { get; set; }
+
+ /// <summary>
+ /// Dumps shaders in this local directory
+ /// </summary>
+ public string GraphicsShadersDumpPath { get; set; }
+
+ /// <summary>
+ /// Enables printing debug log messages
+ /// </summary>
+ public bool LoggingEnableDebug { get; set; }
+
+ /// <summary>
+ /// Enables printing stub log messages
+ /// </summary>
+ public bool LoggingEnableStub { get; set; }
+
+ /// <summary>
+ /// Enables printing info log messages
+ /// </summary>
+ public bool LoggingEnableInfo { get; set; }
+
+ /// <summary>
+ /// Enables printing warning log messages
+ /// </summary>
+ public bool LoggingEnableWarn { get; set; }
+
+ /// <summary>
+ /// Enables printing error log messages
+ /// </summary>
+ public bool LoggingEnableError { get; set; }
+
+ /// <summary>
+ /// Enables printing trace log messages
+ /// </summary>
+ public bool LoggingEnableTrace { get; set; }
+
+ /// <summary>
+ /// Enables printing guest log messages
+ /// </summary>
+ public bool LoggingEnableGuest { get; set; }
+
+ /// <summary>
+ /// Enables printing FS access log messages
+ /// </summary>
+ public bool LoggingEnableFsAccessLog { get; set; }
+
+ /// <summary>
+ /// Controls which log messages are written to the log targets
+ /// </summary>
+ public LogClass[] LoggingFilteredClasses { get; set; }
+
+ /// <summary>
+ /// Change Graphics API debug log level
+ /// </summary>
+ public GraphicsDebugLevel LoggingGraphicsDebugLevel { get; set; }
+
+ /// <summary>
+ /// Change System Language
+ /// </summary>
+ public Language SystemLanguage { get; set; }
+
+ /// <summary>
+ /// Change System Region
+ /// </summary>
+ public Region SystemRegion { get; set; }
+
+ /// <summary>
+ /// Change System TimeZone
+ /// </summary>
+ public string SystemTimeZone { get; set; }
+
+ /// <summary>
+ /// Change System Time Offset in seconds
+ /// </summary>
+ public long SystemTimeOffset { get; set; }
+
+ /// <summary>
+ /// Enables or disables Docked Mode
+ /// </summary>
+ public bool DockedMode { get; set; }
+
+ /// <summary>
+ /// Enables or disables Discord Rich Presence
+ /// </summary>
+ public bool EnableDiscordIntegration { get; set; }
+
+ /// <summary>
+ /// Checks for updates when Ryujinx starts when enabled
+ /// </summary>
+ public bool CheckUpdatesOnStart { get; set; }
+
+ /// <summary>
+ /// Show "Confirm Exit" Dialog
+ /// </summary>
+ public bool ShowConfirmExit { get; set; }
+
+ /// <summary>
+ /// Hide Cursor on Idle
+ /// </summary>
+ public bool HideCursorOnIdle { get; set; }
+
+ /// <summary>
+ /// Enables or disables Vertical Sync
+ /// </summary>
+ public bool EnableVsync { get; set; }
+
+ /// <summary>
+ /// Enables or disables Shader cache
+ /// </summary>
+ public bool EnableShaderCache { get; set; }
+
+ /// <summary>
+ /// Enables or disables profiled translation cache persistency
+ /// </summary>
+ public bool EnablePtc { get; set; }
+
+ /// <summary>
+ /// Enables or disables guest Internet access
+ /// </summary>
+ public bool EnableInternetAccess { get; set; }
+
+ /// <summary>
+ /// Enables integrity checks on Game content files
+ /// </summary>
+ public bool EnableFsIntegrityChecks { get; set; }
+
+ /// <summary>
+ /// Enables FS access log output to the console. Possible modes are 0-3
+ /// </summary>
+ public int FsGlobalAccessLogMode { get; set; }
+
+ /// <summary>
+ /// The selected audio backend
+ /// </summary>
+ public AudioBackend AudioBackend { get; set; }
+
+ /// <summary>
+ /// The audio volume
+ /// </summary>
+ public float AudioVolume { get; set; }
+
+ /// <summary>
+ /// The selected memory manager mode
+ /// </summary>
+ public MemoryManagerMode MemoryManagerMode { get; set; }
+
+ /// <summary>
+ /// Expands the RAM amount on the emulated system from 4GB to 6GB
+ /// </summary>
+ public bool ExpandRam { get; set; }
+
+ /// <summary>
+ /// Enable or disable ignoring missing services
+ /// </summary>
+ public bool IgnoreMissingServices { get; set; }
+
+ /// <summary>
+ /// Used to toggle columns in the GUI
+ /// </summary>
+ public GuiColumns GuiColumns { get; set; }
+
+ /// <summary>
+ /// Used to configure column sort settings in the GUI
+ /// </summary>
+ public ColumnSort ColumnSort { get; set; }
+
+ /// <summary>
+ /// A list of directories containing games to be used to load games into the games list
+ /// </summary>
+ public List<string> GameDirs { get; set; }
+
+ /// <summary>
+ /// Language Code for the UI
+ /// </summary>
+ public string LanguageCode { get; set; }
+
+ /// <summary>
+ /// Enable or disable custom themes in the GUI
+ /// </summary>
+ public bool EnableCustomTheme { get; set; }
+
+ /// <summary>
+ /// Path to custom GUI theme
+ /// </summary>
+ public string CustomThemePath { get; set; }
+
+ /// <summary>
+ /// Chooses the base style // Not Used
+ /// </summary>
+ public string BaseStyle { get; set; }
+
+ /// <summary>
+ /// Chooses the view mode of the game list // Not Used
+ /// </summary>
+ public int GameListViewMode { get; set; }
+
+ /// <summary>
+ /// Show application name in Grid Mode // Not Used
+ /// </summary>
+ public bool ShowNames { get; set; }
+
+ /// <summary>
+ /// Sets App Icon Size // Not Used
+ /// </summary>
+ public int GridSize { get; set; }
+
+ /// <summary>
+ /// Sorts Apps in the game list // Not Used
+ /// </summary>
+ public int ApplicationSort { get; set; }
+
+ /// <summary>
+ /// Sets if Grid is ordered in Ascending Order // Not Used
+ /// </summary>
+ public bool IsAscendingOrder { get; set; }
+
+ /// <summary>
+ /// Start games in fullscreen mode
+ /// </summary>
+ public bool StartFullscreen { get; set; }
+
+ /// <summary>
+ /// Show console window
+ /// </summary>
+ public bool ShowConsole { get; set; }
+
+ /// <summary>
+ /// Enable or disable keyboard support (Independent from controllers binding)
+ /// </summary>
+ public bool EnableKeyboard { get; set; }
+
+ /// <summary>
+ /// Enable or disable mouse support (Independent from controllers binding)
+ /// </summary>
+ public bool EnableMouse { get; set; }
+
+ /// <summary>
+ /// Hotkey Keyboard Bindings
+ /// </summary>
+ public KeyboardHotkeys Hotkeys { get; set; }
+
+ /// <summary>
+ /// Legacy keyboard control bindings
+ /// </summary>
+ /// <remarks>Kept for file format compatibility (to avoid possible failure when parsing configuration on old versions)</remarks>
+ /// TODO: Remove this when those older versions aren't in use anymore.
+ public List<object> KeyboardConfig { get; set; }
+
+ /// <summary>
+ /// Legacy controller control bindings
+ /// </summary>
+ /// <remarks>Kept for file format compatibility (to avoid possible failure when parsing configuration on old versions)</remarks>
+ /// TODO: Remove this when those older versions aren't in use anymore.
+ public List<object> ControllerConfig { get; set; }
+
+ /// <summary>
+ /// Input configurations
+ /// </summary>
+ public List<InputConfig> InputConfig { get; set; }
+
+ /// <summary>
+ /// Loads a configuration file from disk
+ /// </summary>
+ /// <param name="path">The path to the JSON configuration file</param>
+ public static bool TryLoad(string path, out ConfigurationFileFormat configurationFileFormat)
+ {
+ try
+ {
+ configurationFileFormat = JsonHelper.DeserializeFromFile<ConfigurationFileFormat>(path);
+
+ return true;
+ }
+ catch
+ {
+ configurationFileFormat = null;
+
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Save a configuration file to disk
+ /// </summary>
+ /// <param name="path">The path to the JSON configuration file</param>
+ public void SaveConfig(string path)
+ {
+ using FileStream fileStream = File.Create(path, 4096, FileOptions.WriteThrough);
+ JsonHelper.Serialize(fileStream, this, true);
+ }
+ }
+}