From 32cdccde127bde93f462e4d9d25a05aa0c8e79e9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 18:06:18 -0600 Subject: [PATCH 01/24] misc: Move UserError to Common project --- src/{Ryujinx.UI.Common => Ryujinx.Common/UI}/UserError.cs | 2 +- src/Ryujinx.UI.Common/Helper/SetupValidator.cs | 1 + src/Ryujinx/AppHost.cs | 1 + src/Ryujinx/UI/Helpers/UserErrorDialog.cs | 1 + src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs | 1 + src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 1 + 6 files changed, 6 insertions(+), 1 deletion(-) rename src/{Ryujinx.UI.Common => Ryujinx.Common/UI}/UserError.cs (96%) diff --git a/src/Ryujinx.UI.Common/UserError.cs b/src/Ryujinx.Common/UI/UserError.cs similarity index 96% rename from src/Ryujinx.UI.Common/UserError.cs rename to src/Ryujinx.Common/UI/UserError.cs index 706971efa..cdcc42eac 100644 --- a/src/Ryujinx.UI.Common/UserError.cs +++ b/src/Ryujinx.Common/UI/UserError.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common +namespace Ryujinx.Common.UI { /// /// Represent a common error that could be reported to the user by the emulator. diff --git a/src/Ryujinx.UI.Common/Helper/SetupValidator.cs b/src/Ryujinx.UI.Common/Helper/SetupValidator.cs index 45d9f8f0d..ddd9c9e30 100644 --- a/src/Ryujinx.UI.Common/Helper/SetupValidator.cs +++ b/src/Ryujinx.UI.Common/Helper/SetupValidator.cs @@ -1,4 +1,5 @@ using Ryujinx.Common.Logging; +using Ryujinx.Common.UI; using Ryujinx.HLE.FileSystem; using System; using System.IO; diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 1f538868b..03860da43 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -25,6 +25,7 @@ using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.Common.SystemInterop; +using Ryujinx.Common.UI; using Ryujinx.Common.Utilities; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.GAL.Multithreading; diff --git a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs index b981a8275..3864be0fa 100644 --- a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs +++ b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs @@ -1,4 +1,5 @@ using Ryujinx.Ava.Common.Locale; +using Ryujinx.Common.UI; using Ryujinx.UI.Common; using System.Threading.Tasks; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 2f1800290..6e014fedc 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -24,6 +24,7 @@ using Ryujinx.Ava.UI.Windows; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; +using Ryujinx.Common.UI; using Ryujinx.Common.Utilities; using Ryujinx.Cpu; using Ryujinx.HLE; diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index da4314e79..0e1e88b9c 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -17,6 +17,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Common; using Ryujinx.Common.Logging; +using Ryujinx.Common.UI; using Ryujinx.Graphics.Gpu; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; From 7f376b4f45261d2e77474495e4d2ab16e41e02d6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 18:13:38 -0600 Subject: [PATCH 02/24] misc: Move SystemInfo into Avalonia project --- src/Ryujinx/Program.cs | 2 +- .../Utilities}/SystemInfo/LinuxSystemInfo.cs | 2 +- .../Utilities}/SystemInfo/MacOSSystemInfo.cs | 2 +- .../Utilities}/SystemInfo/SystemInfo.cs | 2 +- .../Utilities}/SystemInfo/WindowsSystemInfo.cs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/SystemInfo/LinuxSystemInfo.cs (98%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/SystemInfo/MacOSSystemInfo.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/SystemInfo/SystemInfo.cs (98%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/SystemInfo/WindowsSystemInfo.cs (98%) diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index bde08a372..98bbfa2bb 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -8,6 +8,7 @@ using Projektanker.Icons.Avalonia.MaterialDesign; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.SystemInfo; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.GraphicsDriver; @@ -20,7 +21,6 @@ using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; -using Ryujinx.UI.Common.SystemInfo; using System; using System.IO; using System.Linq; diff --git a/src/Ryujinx.UI.Common/SystemInfo/LinuxSystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs similarity index 98% rename from src/Ryujinx.UI.Common/SystemInfo/LinuxSystemInfo.cs rename to src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs index c7fe05a09..6ca38aa36 100644 --- a/src/Ryujinx.UI.Common/SystemInfo/LinuxSystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/LinuxSystemInfo.cs @@ -5,7 +5,7 @@ using System.Globalization; using System.IO; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.SystemInfo +namespace Ryujinx.Ava.Utilities.SystemInfo { [SupportedOSPlatform("linux")] class LinuxSystemInfo : SystemInfo diff --git a/src/Ryujinx.UI.Common/SystemInfo/MacOSSystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/MacOSSystemInfo.cs similarity index 99% rename from src/Ryujinx.UI.Common/SystemInfo/MacOSSystemInfo.cs rename to src/Ryujinx/Utilities/SystemInfo/MacOSSystemInfo.cs index 894c3cadc..6b0beacf8 100644 --- a/src/Ryujinx.UI.Common/SystemInfo/MacOSSystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/MacOSSystemInfo.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Text; -namespace Ryujinx.UI.Common.SystemInfo +namespace Ryujinx.Ava.Utilities.SystemInfo { [SupportedOSPlatform("macos")] partial class MacOSSystemInfo : SystemInfo diff --git a/src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs similarity index 98% rename from src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs rename to src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs index 2dfa9160d..b7e33d3b4 100644 --- a/src/Ryujinx.UI.Common/SystemInfo/SystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs @@ -5,7 +5,7 @@ using System.Runtime.InteropServices; using System.Runtime.Intrinsics.X86; using System.Text; -namespace Ryujinx.UI.Common.SystemInfo +namespace Ryujinx.Ava.Utilities.SystemInfo { public class SystemInfo { diff --git a/src/Ryujinx.UI.Common/SystemInfo/WindowsSystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/WindowsSystemInfo.cs similarity index 98% rename from src/Ryujinx.UI.Common/SystemInfo/WindowsSystemInfo.cs rename to src/Ryujinx/Utilities/SystemInfo/WindowsSystemInfo.cs index 4a2c8795d..73845be11 100644 --- a/src/Ryujinx.UI.Common/SystemInfo/WindowsSystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/WindowsSystemInfo.cs @@ -4,7 +4,7 @@ using System.Management; using System.Runtime.InteropServices; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.SystemInfo +namespace Ryujinx.Ava.Utilities.SystemInfo { [SupportedOSPlatform("windows")] partial class WindowsSystemInfo : SystemInfo From 9baaa2b8f83a77dd5ecc0eda5c17156fd1a3f2d3 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 18:37:37 -0600 Subject: [PATCH 03/24] misc: Move image assets to Avalonia project --- .../App/ApplicationLibrary.cs | 21 +-- .../Resources/Controller_JoyConLeft.svg | 1 - .../Resources/Controller_JoyConPair.svg | 1 - .../Resources/Controller_JoyConRight.svg | 1 - .../Resources/Controller_ProCon.svg | 132 ------------------ .../Ryujinx.UI.Common.csproj | 23 +-- .../Assets/UIImages}/Icon_Blank.png | Bin .../Assets/UIImages}/Icon_NCA.png | Bin .../Assets/UIImages}/Icon_NRO.png | Bin .../Assets/UIImages}/Icon_NSO.png | Bin .../Assets/UIImages}/Icon_NSP.png | Bin .../Assets/UIImages}/Icon_XCI.png | Bin .../Assets/UIImages}/Logo_Amiibo.png | Bin .../Assets/UIImages}/Logo_Discord_Dark.png | Bin .../Assets/UIImages}/Logo_Discord_Light.png | Bin .../Assets/UIImages}/Logo_GitHub_Dark.png | Bin .../Assets/UIImages}/Logo_GitHub_Light.png | Bin .../Assets/UIImages}/Logo_Ryujinx.png | Bin .../UIImages}/Logo_Ryujinx_AntiAlias.png | Bin .../DiscordIntegrationModule.cs | 2 +- src/Ryujinx/Ryujinx.csproj | 18 ++- src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml | 2 +- src/Ryujinx/UI/Applet/SwkbdAppletDialog.axaml | 2 +- .../UI/Controls/UpdateWaitWindow.axaml | 2 +- .../UI/ViewModels/AboutWindowViewModel.cs | 6 +- .../UI/ViewModels/AmiiboWindowViewModel.cs | 2 +- .../UI/ViewModels/Input/InputViewModel.cs | 8 +- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- src/Ryujinx/UI/Windows/AboutWindow.axaml | 2 +- 29 files changed, 36 insertions(+), 189 deletions(-) delete mode 100644 src/Ryujinx.UI.Common/Resources/Controller_JoyConLeft.svg delete mode 100644 src/Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg delete mode 100644 src/Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg delete mode 100644 src/Ryujinx.UI.Common/Resources/Controller_ProCon.svg rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Icon_Blank.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Icon_NCA.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Icon_NRO.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Icon_NSO.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Icon_NSP.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Icon_XCI.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Logo_Amiibo.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Logo_Discord_Dark.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Logo_Discord_Light.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Logo_GitHub_Dark.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Logo_GitHub_Light.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Logo_Ryujinx.png (100%) rename src/{Ryujinx.UI.Common/Resources => Ryujinx/Assets/UIImages}/Logo_Ryujinx_AntiAlias.png (100%) rename src/{Ryujinx.UI.Common => Ryujinx}/DiscordIntegrationModule.cs (99%) diff --git a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs index e78af3121..8ae7534c1 100644 --- a/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs +++ b/src/Ryujinx.UI.Common/App/ApplicationLibrary.cs @@ -10,6 +10,7 @@ using LibHac.Ns; using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; @@ -76,21 +77,11 @@ namespace Ryujinx.UI.App.Common TitleUpdates = _titleUpdates.AsObservableCache(); DownloadableContents = _downloadableContents.AsObservableCache(); - _nspIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NSP.png"); - _xciIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_XCI.png"); - _ncaIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NCA.png"); - _nroIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NRO.png"); - _nsoIcon = GetResourceBytes("Ryujinx.UI.Common.Resources.Icon_NSO.png"); - } - - private static byte[] GetResourceBytes(string resourceName) - { - Stream resourceStream = Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName)!; - byte[] resourceByteArray = new byte[resourceStream.Length]; - - resourceStream.ReadExactly(resourceByteArray); - - return resourceByteArray; + _nspIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NSP.png"); + _xciIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_XCI.png"); + _ncaIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NCA.png"); + _nroIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NRO.png"); + _nsoIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NSO.png"); } /// The npdm file doesn't contain valid data. diff --git a/src/Ryujinx.UI.Common/Resources/Controller_JoyConLeft.svg b/src/Ryujinx.UI.Common/Resources/Controller_JoyConLeft.svg deleted file mode 100644 index 03585e656..000000000 --- a/src/Ryujinx.UI.Common/Resources/Controller_JoyConLeft.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg b/src/Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg deleted file mode 100644 index c073c9c0c..000000000 --- a/src/Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg b/src/Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg deleted file mode 100644 index f4f125148..000000000 --- a/src/Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/Ryujinx.UI.Common/Resources/Controller_ProCon.svg b/src/Ryujinx.UI.Common/Resources/Controller_ProCon.svg deleted file mode 100644 index f5380f3ad..000000000 --- a/src/Ryujinx.UI.Common/Resources/Controller_ProCon.svg +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A - - - - X - - - - Y - - - - B - - - - - - - - - - ZL - - - - - ZR - - - - R - - - - - L - - - diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj index 1ee9a4aa0..9a487b55a 100644 --- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj +++ b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj @@ -21,25 +21,6 @@ - - - - - - - - - - - - - - - - - - - @@ -61,4 +42,8 @@ + + + + diff --git a/src/Ryujinx.UI.Common/Resources/Icon_Blank.png b/src/Ryujinx/Assets/UIImages/Icon_Blank.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_Blank.png rename to src/Ryujinx/Assets/UIImages/Icon_Blank.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NCA.png b/src/Ryujinx/Assets/UIImages/Icon_NCA.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NCA.png rename to src/Ryujinx/Assets/UIImages/Icon_NCA.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NRO.png b/src/Ryujinx/Assets/UIImages/Icon_NRO.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NRO.png rename to src/Ryujinx/Assets/UIImages/Icon_NRO.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NSO.png b/src/Ryujinx/Assets/UIImages/Icon_NSO.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NSO.png rename to src/Ryujinx/Assets/UIImages/Icon_NSO.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_NSP.png b/src/Ryujinx/Assets/UIImages/Icon_NSP.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_NSP.png rename to src/Ryujinx/Assets/UIImages/Icon_NSP.png diff --git a/src/Ryujinx.UI.Common/Resources/Icon_XCI.png b/src/Ryujinx/Assets/UIImages/Icon_XCI.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Icon_XCI.png rename to src/Ryujinx/Assets/UIImages/Icon_XCI.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Amiibo.png b/src/Ryujinx/Assets/UIImages/Logo_Amiibo.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Amiibo.png rename to src/Ryujinx/Assets/UIImages/Logo_Amiibo.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Discord_Dark.png b/src/Ryujinx/Assets/UIImages/Logo_Discord_Dark.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Discord_Dark.png rename to src/Ryujinx/Assets/UIImages/Logo_Discord_Dark.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Discord_Light.png b/src/Ryujinx/Assets/UIImages/Logo_Discord_Light.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Discord_Light.png rename to src/Ryujinx/Assets/UIImages/Logo_Discord_Light.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_GitHub_Dark.png b/src/Ryujinx/Assets/UIImages/Logo_GitHub_Dark.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_GitHub_Dark.png rename to src/Ryujinx/Assets/UIImages/Logo_GitHub_Dark.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_GitHub_Light.png b/src/Ryujinx/Assets/UIImages/Logo_GitHub_Light.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_GitHub_Light.png rename to src/Ryujinx/Assets/UIImages/Logo_GitHub_Light.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Ryujinx.png b/src/Ryujinx/Assets/UIImages/Logo_Ryujinx.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Ryujinx.png rename to src/Ryujinx/Assets/UIImages/Logo_Ryujinx.png diff --git a/src/Ryujinx.UI.Common/Resources/Logo_Ryujinx_AntiAlias.png b/src/Ryujinx/Assets/UIImages/Logo_Ryujinx_AntiAlias.png similarity index 100% rename from src/Ryujinx.UI.Common/Resources/Logo_Ryujinx_AntiAlias.png rename to src/Ryujinx/Assets/UIImages/Logo_Ryujinx_AntiAlias.png diff --git a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs similarity index 99% rename from src/Ryujinx.UI.Common/DiscordIntegrationModule.cs rename to src/Ryujinx/DiscordIntegrationModule.cs index efeeb2586..92c8e2aa6 100644 --- a/src/Ryujinx.UI.Common/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -8,7 +8,7 @@ using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; using System.Text; -namespace Ryujinx.UI.Common +namespace Ryujinx.Ava { public static class DiscordIntegrationModule { diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 5e5adf2a0..998257dff 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -134,15 +134,21 @@ + + + + + + + + + + + + - - - SettingsHacksView.axaml - Code - - \ No newline at end of file diff --git a/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml b/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml index c7aa56fb8..22c2851e1 100644 --- a/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml +++ b/src/Ryujinx/UI/Applet/ErrorAppletWindow.axaml @@ -25,7 +25,7 @@ Height="80" MinWidth="50" Margin="5,10,20,10" - Source="resm:Ryujinx.UI.Common.Resources.Logo_Ryujinx.png?assembly=Ryujinx.UI.Common" /> + Source="resm:Ryujinx.Assets.UIImages.Logo_Ryujinx.png?assembly=Ryujinx" /> + Source="resm:Ryujinx.Assets.UIImages.Logo_Ryujinx.png?assembly=Ryujinx" /> + Source="resm:Ryujinx.Assets.UIImages.Logo_Ryujinx.png?assembly=Ryujinx" /> new(Avalonia.Platform.AssetLoader.Open(new Uri(uri))); diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index ab08ce385..468a7c269 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -68,7 +68,7 @@ namespace Ryujinx.Ava.UI.ViewModels _amiiboSeries = new ObservableCollection(); _amiibos = new AvaloniaList(); - _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx.UI.Common/Resources/Logo_Amiibo.png"); + _amiiboLogoBytes = EmbeddedResources.Read("Ryujinx/Assets/UIImages/Logo_Amiibo.png"); _ = LoadContentAsync(); } diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 493e6659d..79daab701 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -35,10 +35,10 @@ namespace Ryujinx.Ava.UI.ViewModels.Input public class InputViewModel : BaseModel, IDisposable { private const string Disabled = "disabled"; - private const string ProControllerResource = "Ryujinx.UI.Common/Resources/Controller_ProCon.svg"; - private const string JoyConPairResource = "Ryujinx.UI.Common/Resources/Controller_JoyConPair.svg"; - private const string JoyConLeftResource = "Ryujinx.UI.Common/Resources/Controller_JoyConLeft.svg"; - private const string JoyConRightResource = "Ryujinx.UI.Common/Resources/Controller_JoyConRight.svg"; + private const string ProControllerResource = "Ryujinx/Assets/Icons/Controller_ProCon.svg"; + private const string JoyConPairResource = "Ryujinx/Assets/Icons/Controller_JoyConPair.svg"; + private const string JoyConLeftResource = "Ryujinx/Assets/Icons/Controller_JoyConLeft.svg"; + private const string JoyConRightResource = "Ryujinx/Assets/Icons/Controller_JoyConRight.svg"; private const string KeyboardString = "keyboard"; private const string ControllerString = "controller"; private readonly MainWindow _mainWindow; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 6e014fedc..c5f9f57ec 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -134,7 +134,7 @@ namespace Ryujinx.Ava.UI.ViewModels // For an example of this, download canary 1.2.95, then open the settings menu, and look at the icon in the top-left. // The border gets reduced to colored pixels in the 4 corners. public static readonly Bitmap IconBitmap = - new(Assembly.GetAssembly(typeof(ConfigurationState))!.GetManifestResourceStream("Ryujinx.UI.Common.Resources.Logo_Ryujinx_AntiAlias.png")!); + new(Assembly.GetAssembly(typeof(MainWindowViewModel))!.GetManifestResourceStream("Ryujinx.Assets.UIImages.Logo_Ryujinx_AntiAlias.png")!); public MainWindow Window { get; init; } diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml b/src/Ryujinx/UI/Windows/AboutWindow.axaml index c5abb0241..1b00ad23c 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml @@ -38,7 +38,7 @@ Date: Sun, 29 Dec 2024 19:09:28 -0600 Subject: [PATCH 04/24] misc: move Models & Helpers into Common & Avalonia projects --- .../Helpers}/CommandLineState.cs | 0 .../Helpers}/ConsoleHelper.cs | 0 .../Helpers}/FileAssociationHelper.cs | 0 .../Helpers}/LinuxHelper.cs | 0 .../Helpers}/ObjectiveC.cs | 0 .../Helpers}/OpenHelper.cs | 0 .../Helpers}/ValueFormatUtils.cs | 0 .../Helper/AppletMetadata.cs | 64 ------------------- .../Ryujinx.UI.Common.csproj | 4 -- src/Ryujinx/AppHost.cs | 3 +- .../Common}/Models/Amiibo/AmiiboApi.cs | 2 +- .../Models/Amiibo/AmiiboApiGamesSwitch.cs | 2 +- .../Common}/Models/Amiibo/AmiiboApiUsage.cs | 2 +- .../Common}/Models/Amiibo/AmiiboJson.cs | 2 +- .../Amiibo/AmiiboJsonSerializerContext.cs | 6 +- .../Models/DownloadableContentModel.cs | 2 +- .../Github/GithubReleaseAssetJsonResponse.cs | 2 +- .../Github/GithubReleasesJsonResponse.cs | 2 +- .../GithubReleasesJsonSerializerContext.cs | 6 +- .../Common}/Models/TitleUpdateModel.cs | 2 +- .../Common}/Models/XCITrimmerFileModel.cs | 4 +- src/Ryujinx/DiscordIntegrationModule.cs | 2 +- src/Ryujinx/Program.cs | 2 +- .../Controls/ApplicationContextMenu.axaml.cs | 3 +- .../UI/Controls/ApplicationGridView.axaml.cs | 2 +- .../UI/Controls/ApplicationListView.axaml.cs | 2 +- .../UI/Helpers/ApplicationOpenedEventArgs.cs | 2 +- .../UI/Helpers/MultiplayerInfoConverter.cs | 2 +- .../XCITrimmerFileSpaceSavingsConverter.cs | 2 +- .../Helpers/XCITrimmerFileStatusConverter.cs | 2 +- .../XCITrimmerFileStatusDetailConverter.cs | 2 +- .../Models/Generic/LastPlayedSortComparer.cs | 2 +- .../Models/Generic/TimePlayedSortComparer.cs | 2 +- src/Ryujinx/UI/Models/SaveModel.cs | 2 +- .../UI/ViewModels/AmiiboWindowViewModel.cs | 2 +- .../ViewModels/AppListFavoriteComparable.cs | 2 +- .../DownloadableContentManagerViewModel.cs | 4 +- .../UI/ViewModels/MainWindowViewModel.cs | 2 +- .../UI/ViewModels/TitleUpdateViewModel.cs | 4 +- .../UI/ViewModels/XCITrimmerViewModel.cs | 14 +++- .../UI/Views/Main/MainMenuBarView.axaml.cs | 1 + src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 2 +- .../DownloadableContentManagerWindow.axaml | 2 +- .../DownloadableContentManagerWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- .../UI/Windows/TitleUpdateWindow.axaml | 2 +- .../UI/Windows/TitleUpdateWindow.axaml.cs | 4 +- src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml | 5 +- .../UI/Windows/XCITrimmerWindow.axaml.cs | 2 +- src/Ryujinx/Updater.cs | 2 +- .../ApplicationCountUpdatedEventArgs.cs | 2 +- .../Utilities/AppLibrary}/ApplicationData.cs | 2 +- .../ApplicationJsonSerializerContext.cs | 2 +- .../AppLibrary}/ApplicationLibrary.cs | 6 +- .../AppLibrary}/ApplicationMetadata.cs | 2 +- .../Utilities/AppLibrary}/LdnGameData.cs | 2 +- .../LdnGameDataReceivedEventArgs.cs | 2 +- .../LdnGameDataSerializerContext.cs | 7 +- src/Ryujinx/Utilities/AppletMetadata.cs | 60 +++++++++++++++++ .../Utilities}/DownloadableContentsHelper.cs | 4 +- .../Utilities}/SetupValidator.cs | 2 +- .../Utilities}/ShortcutHelper.cs | 3 +- .../Utilities}/TitleHelper.cs | 3 +- .../Utilities}/TitleUpdatesHelper.cs | 4 +- 65 files changed, 141 insertions(+), 146 deletions(-) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/CommandLineState.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/ConsoleHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/FileAssociationHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/LinuxHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/ObjectiveC.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/OpenHelper.cs (100%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx.Common/Helpers}/ValueFormatUtils.cs (100%) delete mode 100644 src/Ryujinx.UI.Common/Helper/AppletMetadata.cs rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboApi.cs (97%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboApiGamesSwitch.cs (90%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboApiUsage.cs (84%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboJson.cs (87%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Amiibo/AmiiboJsonSerializerContext.cs (69%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/DownloadableContentModel.cs (93%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Github/GithubReleaseAssetJsonResponse.cs (82%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Github/GithubReleasesJsonResponse.cs (85%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/Github/GithubReleasesJsonSerializerContext.cs (74%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/TitleUpdateModel.cs (91%) rename src/{Ryujinx.UI.Common => Ryujinx/Common}/Models/XCITrimmerFileModel.cs (95%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationCountUpdatedEventArgs.cs (81%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationData.cs (99%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationJsonSerializerContext.cs (85%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationLibrary.cs (99%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/ApplicationMetadata.cs (97%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/LdnGameData.cs (96%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/LdnGameDataReceivedEventArgs.cs (81%) rename src/{Ryujinx.UI.Common/App => Ryujinx/Utilities/AppLibrary}/LdnGameDataSerializerContext.cs (76%) create mode 100644 src/Ryujinx/Utilities/AppletMetadata.cs rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/DownloadableContentsHelper.cs (98%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/SetupValidator.cs (99%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/ShortcutHelper.cs (99%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/TitleHelper.cs (95%) rename src/{Ryujinx.UI.Common/Helper => Ryujinx/Utilities}/TitleUpdatesHelper.cs (98%) diff --git a/src/Ryujinx.UI.Common/Helper/CommandLineState.cs b/src/Ryujinx.Common/Helpers/CommandLineState.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/CommandLineState.cs rename to src/Ryujinx.Common/Helpers/CommandLineState.cs diff --git a/src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/ConsoleHelper.cs rename to src/Ryujinx.Common/Helpers/ConsoleHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/FileAssociationHelper.cs rename to src/Ryujinx.Common/Helpers/FileAssociationHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/LinuxHelper.cs b/src/Ryujinx.Common/Helpers/LinuxHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/LinuxHelper.cs rename to src/Ryujinx.Common/Helpers/LinuxHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/ObjectiveC.cs b/src/Ryujinx.Common/Helpers/ObjectiveC.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/ObjectiveC.cs rename to src/Ryujinx.Common/Helpers/ObjectiveC.cs diff --git a/src/Ryujinx.UI.Common/Helper/OpenHelper.cs b/src/Ryujinx.Common/Helpers/OpenHelper.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/OpenHelper.cs rename to src/Ryujinx.Common/Helpers/OpenHelper.cs diff --git a/src/Ryujinx.UI.Common/Helper/ValueFormatUtils.cs b/src/Ryujinx.Common/Helpers/ValueFormatUtils.cs similarity index 100% rename from src/Ryujinx.UI.Common/Helper/ValueFormatUtils.cs rename to src/Ryujinx.Common/Helpers/ValueFormatUtils.cs diff --git a/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs b/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs deleted file mode 100644 index 644b7fe74..000000000 --- a/src/Ryujinx.UI.Common/Helper/AppletMetadata.cs +++ /dev/null @@ -1,64 +0,0 @@ -using LibHac.Common; -using LibHac.Ncm; -using LibHac.Ns; -using LibHac.Tools.FsSystem.NcaUtils; -using Ryujinx.HLE; -using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; - -namespace Ryujinx.UI.Common.Helper -{ - public readonly struct AppletMetadata - { - private readonly ContentManager _contentManager; - - public string Name { get; } - public ulong ProgramId { get; } - - public string Version { get; } - - public AppletMetadata(ContentManager contentManager, string name, ulong programId, string version = "1.0.0") - : this(name, programId, version) - { - _contentManager = contentManager; - } - - public AppletMetadata(string name, ulong programId, string version = "1.0.0") - { - Name = name; - ProgramId = programId; - Version = version; - } - - public string GetContentPath(ContentManager contentManager) - => (contentManager ?? _contentManager) - .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program); - - public bool CanStart(ContentManager contentManager, out ApplicationData appData, out BlitStruct appControl) - { - contentManager ??= _contentManager; - if (contentManager == null) - { - appData = null; - appControl = new BlitStruct(0); - return false; - } - - appData = new() - { - Name = Name, - Id = ProgramId, - Path = GetContentPath(contentManager) - }; - - if (string.IsNullOrEmpty(appData.Path)) - { - appControl = new BlitStruct(0); - return false; - } - - appControl = StructHelpers.CreateCustomNacpData(Name, Version); - return true; - } - } -} diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj index 9a487b55a..0a28fddf3 100644 --- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj +++ b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj @@ -42,8 +42,4 @@ - - - - diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index 03860da43..f3fcbf5aa 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -20,6 +20,8 @@ using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; @@ -40,7 +42,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Input; using Ryujinx.Input.HLE; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApi.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs similarity index 97% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApi.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs index 7989f0f1a..826e98d4f 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApi.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboApi.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public struct AmiiboApi : IEquatable { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiGamesSwitch.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs similarity index 90% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiGamesSwitch.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs index 40e635bf0..7d43506e4 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiGamesSwitch.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiGamesSwitch.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public class AmiiboApiGamesSwitch { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiUsage.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs similarity index 84% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiUsage.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs index 4f8d292b1..911323182 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboApiUsage.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboApiUsage.cs @@ -1,6 +1,6 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public class AmiiboApiUsage { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJson.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs similarity index 87% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJson.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs index 15083f505..39ca94bb6 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJson.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboJson.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { public struct AmiiboJson { diff --git a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJsonSerializerContext.cs b/src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs similarity index 69% rename from src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJsonSerializerContext.cs rename to src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs index bc3f1303c..e0fe11bc5 100644 --- a/src/Ryujinx.UI.Common/Models/Amiibo/AmiiboJsonSerializerContext.cs +++ b/src/Ryujinx/Common/Models/Amiibo/AmiiboJsonSerializerContext.cs @@ -1,9 +1,7 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Amiibo +namespace Ryujinx.Ava.Common.Models.Amiibo { [JsonSerializable(typeof(AmiiboJson))] - public partial class AmiiboJsonSerializerContext : JsonSerializerContext - { - } + public partial class AmiiboJsonSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx.UI.Common/Models/DownloadableContentModel.cs b/src/Ryujinx/Common/Models/DownloadableContentModel.cs similarity index 93% rename from src/Ryujinx.UI.Common/Models/DownloadableContentModel.cs rename to src/Ryujinx/Common/Models/DownloadableContentModel.cs index 95c64f078..ad9934bd2 100644 --- a/src/Ryujinx.UI.Common/Models/DownloadableContentModel.cs +++ b/src/Ryujinx/Common/Models/DownloadableContentModel.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Models +namespace Ryujinx.Ava.Common.Models { // NOTE: most consuming code relies on this model being value-comparable public record DownloadableContentModel(ulong TitleId, string ContainerPath, string FullPath) diff --git a/src/Ryujinx.UI.Common/Models/Github/GithubReleaseAssetJsonResponse.cs b/src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs similarity index 82% rename from src/Ryujinx.UI.Common/Models/Github/GithubReleaseAssetJsonResponse.cs rename to src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs index 8f528dc0b..633e16596 100644 --- a/src/Ryujinx.UI.Common/Models/Github/GithubReleaseAssetJsonResponse.cs +++ b/src/Ryujinx/Common/Models/Github/GithubReleaseAssetJsonResponse.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Models.Github +namespace Ryujinx.Ava.Common.Models.Github { public class GithubReleaseAssetJsonResponse { diff --git a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs similarity index 85% rename from src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs rename to src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs index 7bec1bcdc..dee912e1c 100644 --- a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonResponse.cs +++ b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonResponse.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -namespace Ryujinx.UI.Common.Models.Github +namespace Ryujinx.Ava.Common.Models.Github { public class GithubReleasesJsonResponse { diff --git a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonSerializerContext.cs b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs similarity index 74% rename from src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonSerializerContext.cs rename to src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs index 71864257c..a450ab22d 100644 --- a/src/Ryujinx.UI.Common/Models/Github/GithubReleasesJsonSerializerContext.cs +++ b/src/Ryujinx/Common/Models/Github/GithubReleasesJsonSerializerContext.cs @@ -1,9 +1,7 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Models.Github +namespace Ryujinx.Ava.Common.Models.Github { [JsonSerializable(typeof(GithubReleasesJsonResponse), GenerationMode = JsonSourceGenerationMode.Metadata)] - public partial class GithubReleasesJsonSerializerContext : JsonSerializerContext - { - } + public partial class GithubReleasesJsonSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx.UI.Common/Models/TitleUpdateModel.cs b/src/Ryujinx/Common/Models/TitleUpdateModel.cs similarity index 91% rename from src/Ryujinx.UI.Common/Models/TitleUpdateModel.cs rename to src/Ryujinx/Common/Models/TitleUpdateModel.cs index 5422e1303..fedecddbe 100644 --- a/src/Ryujinx.UI.Common/Models/TitleUpdateModel.cs +++ b/src/Ryujinx/Common/Models/TitleUpdateModel.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Models +namespace Ryujinx.Ava.Common.Models { // NOTE: most consuming code relies on this model being value-comparable public record TitleUpdateModel(ulong TitleId, ulong Version, string DisplayVersion, string Path) diff --git a/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs similarity index 95% rename from src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs rename to src/Ryujinx/Common/Models/XCITrimmerFileModel.cs index 95fb3985b..526bf230c 100644 --- a/src/Ryujinx.UI.Common/Models/XCITrimmerFileModel.cs +++ b/src/Ryujinx/Common/Models/XCITrimmerFileModel.cs @@ -1,8 +1,8 @@ +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; -using Ryujinx.UI.App.Common; -namespace Ryujinx.UI.Common.Models +namespace Ryujinx.Ava.Common.Models { public record XCITrimmerFileModel( string Name, diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index 92c8e2aa6..f13b34ec8 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -1,10 +1,10 @@ using DiscordRPC; using Humanizer; using Humanizer.Localisation; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.HLE; using Ryujinx.HLE.Loaders.Processes; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; using System.Text; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 98bbfa2bb..76ed0b076 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -8,6 +8,7 @@ using Projektanker.Icons.Avalonia.MaterialDesign; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Ava.Utilities.SystemInfo; using Ryujinx.Common; using Ryujinx.Common.Configuration; @@ -17,7 +18,6 @@ using Ryujinx.Common.SystemInterop; using Ryujinx.Graphics.Vulkan.MoltenVK; using Ryujinx.Headless; using Ryujinx.SDL2.Common; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 74fb41efa..4f998b040 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -10,9 +10,10 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Configuration; using Ryujinx.HLE.HOS; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Helper; using SkiaSharp; using System; diff --git a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs index 25a34b423..ee0a324eb 100644 --- a/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationGridView.axaml.cs @@ -3,7 +3,7 @@ using Avalonia.Input; using Avalonia.Interactivity; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; namespace Ryujinx.Ava.UI.Controls diff --git a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs index 5b0730d5a..a7654785f 100644 --- a/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationListView.axaml.cs @@ -5,7 +5,7 @@ using Avalonia.Interactivity; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Linq; diff --git a/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs b/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs index bc5622b54..0ceaa6c4c 100644 --- a/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs +++ b/src/Ryujinx/UI/Helpers/ApplicationOpenedEventArgs.cs @@ -1,5 +1,5 @@ using Avalonia.Interactivity; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; namespace Ryujinx.Ava.UI.Helpers { diff --git a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs index 8bd8b5f0d..4135fd4c7 100644 --- a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs @@ -1,7 +1,7 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.UI.Common.Helper; using System; using System.Globalization; diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs b/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs index 14e8e178a..ab6199c3f 100644 --- a/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs +++ b/src/Ryujinx/UI/Helpers/XCITrimmerFileSpaceSavingsConverter.cs @@ -3,7 +3,7 @@ using Avalonia.Data; using Avalonia.Data.Converters; using Gommon; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.Common.Models; +using Ryujinx.Ava.Common.Models; using System; using System.Globalization; diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs index 56a102415..c3fb1fe95 100644 --- a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs +++ b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusConverter.cs @@ -2,7 +2,7 @@ using Avalonia; using Avalonia.Data; using Avalonia.Data.Converters; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.Common.Models; +using Ryujinx.Ava.Common.Models; using System; using System.Globalization; using static Ryujinx.Common.Utilities.XCIFileTrimmer; diff --git a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs index cd4e27f01..e12d4efd9 100644 --- a/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs +++ b/src/Ryujinx/UI/Helpers/XCITrimmerFileStatusDetailConverter.cs @@ -1,7 +1,7 @@ using Avalonia; using Avalonia.Data; using Avalonia.Data.Converters; -using Ryujinx.UI.Common.Models; +using Ryujinx.Ava.Common.Models; using System; using System.Globalization; using static Ryujinx.Common.Utilities.XCIFileTrimmer; diff --git a/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs b/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs index 224f78f45..f2d27f2df 100644 --- a/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs +++ b/src/Ryujinx/UI/Models/Generic/LastPlayedSortComparer.cs @@ -1,4 +1,4 @@ -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs b/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs index f0fb035d1..d7ae51e96 100644 --- a/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs +++ b/src/Ryujinx/UI/Models/Generic/TimePlayedSortComparer.cs @@ -1,4 +1,4 @@ -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index 578538d21..8364e1966 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -3,8 +3,8 @@ using LibHac.Fs; using LibHac.Ncm; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Helper; using System; using System.IO; diff --git a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs index 468a7c269..01a5dadd3 100644 --- a/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AmiiboWindowViewModel.cs @@ -3,13 +3,13 @@ using Avalonia.Collections; using Avalonia.Media.Imaging; using Avalonia.Threading; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models.Amiibo; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; -using Ryujinx.UI.Common.Models.Amiibo; using System; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs b/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs index e80984508..9c37368de 100644 --- a/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs +++ b/src/Ryujinx/UI/ViewModels/AppListFavoriteComparable.cs @@ -1,4 +1,4 @@ -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using System; namespace Ryujinx.Ava.UI.ViewModels diff --git a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs index 3abaae3ae..4e9660a65 100644 --- a/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -5,10 +5,10 @@ using Avalonia.Threading; using DynamicData; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; -using Ryujinx.UI.Common.Models; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index c5f9f57ec..3bc100ba3 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -21,6 +21,7 @@ using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Models.Generic; using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; @@ -34,7 +35,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; using Ryujinx.HLE.UI; using Ryujinx.Input.HLE; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs index dacdc3056..a179218af 100644 --- a/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/TitleUpdateViewModel.cs @@ -4,10 +4,10 @@ using Avalonia.Platform.Storage; using Avalonia.Threading; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.App.Common; -using Ryujinx.UI.Common.Models; using System.Collections.Generic; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs index 402b182af..64965cd96 100644 --- a/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XCITrimmerViewModel.cs @@ -4,10 +4,10 @@ using Gommon; using Avalonia.Threading; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Utilities; -using Ryujinx.UI.App.Common; -using Ryujinx.UI.Common.Models; using System.Collections.Generic; using System.Linq; using System.Threading; @@ -371,6 +371,16 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public XCITrimmerFileModel NullableProcessingApplication + { + get => _processingApplication.OrDefault(); + set + { + _processingApplication = value; + OnPropertyChanged(); + } + } + public bool Processing { get => _cancellationTokenSource != null; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 181773b2e..1f8617ad7 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -7,6 +7,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; using Ryujinx.Common; using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; diff --git a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs index 9a940c938..8c76b8e2f 100644 --- a/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AmiiboWindow.axaml.cs @@ -1,7 +1,7 @@ using Avalonia.Interactivity; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models.Amiibo; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.Common.Models.Amiibo; namespace Ryujinx.Ava.UI.Windows { diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index 2fc9617fb..f5795d42c 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -2,9 +2,9 @@ using Avalonia.Collections; using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Models; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common.Configuration; using System.Globalization; using System.IO; diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml index df70f02eb..8efcfcadc 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml @@ -6,9 +6,9 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" + xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="500" Height="380" mc:Ignorable="d" diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 2afa8b529..02f420752 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -3,10 +3,10 @@ using Avalonia.Interactivity; using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.UI.Common.Helper; -using Ryujinx.UI.Common.Models; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 0e1e88b9c..f0aaf4cac 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -15,6 +15,7 @@ using Ryujinx.Ava.Input; using Ryujinx.Ava.UI.Applet; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common; using Ryujinx.Common.Logging; using Ryujinx.Common.UI; @@ -24,7 +25,6 @@ using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.Input.HLE; using Ryujinx.Input.SDL2; -using Ryujinx.UI.App.Common; using Ryujinx.UI.Common; using Ryujinx.UI.Common.Configuration; using Ryujinx.UI.Common.Helper; diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml index 6e22cfed7..0ba9bc7d8 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml @@ -6,9 +6,9 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common" xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" + xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="500" Height="300" mc:Ignorable="d" diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs index a13ad4012..421990bcd 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs @@ -3,10 +3,10 @@ using Avalonia.Interactivity; using Avalonia.Styling; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.App.Common; +using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.UI.Common.Helper; -using Ryujinx.UI.Common.Models; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml index d726f8099..2d56931b5 100644 --- a/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml +++ b/src/Ryujinx/UI/Windows/XCITrimmerWindow.axaml @@ -6,9 +6,8 @@ xmlns:ext="clr-namespace:Ryujinx.Ava.Common.Markup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:Ryujinx.Ava.UI.ViewModels" - xmlns:models="clr-namespace:Ryujinx.UI.Common.Models;assembly=Ryujinx.UI.Common" - xmlns:ui="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:helpers="clr-namespace:Ryujinx.Ava.UI.Helpers" + xmlns:models="clr-namespace:Ryujinx.Ava.Common.Models" Width="700" Height="600" x:DataType="viewModels:XCITrimmerViewModel" @@ -140,7 +139,7 @@ Padding="2.5"> ))] - internal partial class LdnGameDataSerializerContext : JsonSerializerContext - { - - } + internal partial class LdnGameDataSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx/Utilities/AppletMetadata.cs b/src/Ryujinx/Utilities/AppletMetadata.cs new file mode 100644 index 000000000..82baed7d3 --- /dev/null +++ b/src/Ryujinx/Utilities/AppletMetadata.cs @@ -0,0 +1,60 @@ +using LibHac.Common; +using LibHac.Ncm; +using LibHac.Ns; +using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.HLE; +using Ryujinx.HLE.FileSystem; + +namespace Ryujinx.Ava.Utilities +{ + public readonly struct AppletMetadata + { + private readonly ContentManager _contentManager; + + public string Name { get; } + public ulong ProgramId { get; } + + public string Version { get; } + + public AppletMetadata(ContentManager contentManager, string name, ulong programId, string version = "1.0.0") + : this(name, programId, version) + { + _contentManager = contentManager; + } + + public AppletMetadata(string name, ulong programId, string version = "1.0.0") + { + Name = name; + ProgramId = programId; + Version = version; + } + + public string GetContentPath(ContentManager contentManager) + => (contentManager ?? _contentManager) + .GetInstalledContentPath(ProgramId, StorageId.BuiltInSystem, NcaContentType.Program); + + public bool CanStart(ContentManager contentManager, out ApplicationData appData, + out BlitStruct appControl) + { + contentManager ??= _contentManager; + if (contentManager == null) + { + appData = null; + appControl = new BlitStruct(0); + return false; + } + + appData = new() { Name = Name, Id = ProgramId, Path = GetContentPath(contentManager) }; + + if (string.IsNullOrEmpty(appData.Path)) + { + appControl = new BlitStruct(0); + return false; + } + + appControl = StructHelpers.CreateCustomNacpData(Name, Version); + return true; + } + } +} diff --git a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs similarity index 98% rename from src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs rename to src/Ryujinx/Utilities/DownloadableContentsHelper.cs index 020529b55..b6d2420a3 100644 --- a/src/Ryujinx.UI.Common/Helper/DownloadableContentsHelper.cs +++ b/src/Ryujinx/Utilities/DownloadableContentsHelper.cs @@ -3,18 +3,18 @@ using LibHac.Fs; using LibHac.Fs.Fsa; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Ava.Common.Models; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Utilities; -using Ryujinx.UI.Common.Models; using System; using System.Collections.Generic; using System.IO; using Path = System.IO.Path; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class DownloadableContentsHelper { diff --git a/src/Ryujinx.UI.Common/Helper/SetupValidator.cs b/src/Ryujinx/Utilities/SetupValidator.cs similarity index 99% rename from src/Ryujinx.UI.Common/Helper/SetupValidator.cs rename to src/Ryujinx/Utilities/SetupValidator.cs index ddd9c9e30..0bd3a348d 100644 --- a/src/Ryujinx.UI.Common/Helper/SetupValidator.cs +++ b/src/Ryujinx/Utilities/SetupValidator.cs @@ -4,7 +4,7 @@ using Ryujinx.HLE.FileSystem; using System; using System.IO; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { /// /// Ensure installation validity diff --git a/src/Ryujinx.UI.Common/Helper/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs similarity index 99% rename from src/Ryujinx.UI.Common/Helper/ShortcutHelper.cs rename to src/Ryujinx/Utilities/ShortcutHelper.cs index 8c006a227..a0fb5599a 100644 --- a/src/Ryujinx.UI.Common/Helper/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -1,5 +1,6 @@ using Ryujinx.Common; using Ryujinx.Common.Configuration; +using Ryujinx.UI.Common.Helper; using ShellLink; using SkiaSharp; using System; @@ -7,7 +8,7 @@ using System.Collections.Generic; using System.IO; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class ShortcutHelper { diff --git a/src/Ryujinx.UI.Common/Helper/TitleHelper.cs b/src/Ryujinx/Utilities/TitleHelper.cs similarity index 95% rename from src/Ryujinx.UI.Common/Helper/TitleHelper.cs rename to src/Ryujinx/Utilities/TitleHelper.cs index 9d73aea75..be7a87f82 100644 --- a/src/Ryujinx.UI.Common/Helper/TitleHelper.cs +++ b/src/Ryujinx/Utilities/TitleHelper.cs @@ -1,7 +1,6 @@ using Ryujinx.HLE.Loaders.Processes; -using System; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class TitleHelper { diff --git a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs similarity index 98% rename from src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs rename to src/Ryujinx/Utilities/TitleUpdatesHelper.cs index 36de8b31a..8cffb9b25 100644 --- a/src/Ryujinx.UI.Common/Helper/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -6,6 +6,7 @@ using LibHac.Ncm; using LibHac.Ns; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; +using Ryujinx.Ava.Common.Models; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; @@ -13,7 +14,6 @@ using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.HLE.Utilities; using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Models; using System; using System.Collections.Generic; using System.IO; @@ -22,7 +22,7 @@ using Path = System.IO.Path; using SpanHelpers = LibHac.Common.SpanHelpers; using TitleUpdateMetadata = Ryujinx.Common.Configuration.TitleUpdateMetadata; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class TitleUpdatesHelper { From 4f699afe7a481828cf0ff54217117020cf262a11 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 19:13:06 -0600 Subject: [PATCH 05/24] misc: Move shortcut files into Avalonia project --- src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj | 9 --------- src/Ryujinx/Ryujinx.csproj | 9 +++++++++ src/Ryujinx/Utilities/ShortcutHelper.cs | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj index 0a28fddf3..01efe04ba 100644 --- a/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj +++ b/src/Ryujinx.UI.Common/Ryujinx.UI.Common.csproj @@ -21,15 +21,6 @@ - - - - - - - - - diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 998257dff..3ddd807e6 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -128,6 +128,15 @@ + + Assets\ShortcutFiles\shortcut-template.desktop + + + Assets\ShortcutFiles\shortcut-launch-script.sh + + + Assets\ShortcutFiles\shortcut-template.plist + diff --git a/src/Ryujinx/Utilities/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs index a0fb5599a..4923d2598 100644 --- a/src/Ryujinx/Utilities/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -32,7 +32,7 @@ namespace Ryujinx.Ava.Utilities private static void CreateShortcutLinux(string applicationFilePath, string applicationId, byte[] iconData, string iconPath, string desktopPath, string cleanedAppName) { string basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx.sh"); - var desktopFile = EmbeddedResources.ReadAllText("Ryujinx.UI.Common/shortcut-template.desktop"); + var desktopFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.desktop"); iconPath += ".png"; var image = SKBitmap.Decode(iconData); @@ -48,8 +48,8 @@ namespace Ryujinx.Ava.Utilities private static void CreateShortcutMacos(string appFilePath, string applicationId, byte[] iconData, string desktopPath, string cleanedAppName) { string basePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx"); - var plistFile = EmbeddedResources.ReadAllText("Ryujinx.UI.Common/shortcut-template.plist"); - var shortcutScript = EmbeddedResources.ReadAllText("Ryujinx.UI.Common/shortcut-launch-script.sh"); + var plistFile = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-template.plist"); + var shortcutScript = EmbeddedResources.ReadAllText("Ryujinx/Assets/ShortcutFiles/shortcut-launch-script.sh"); // Macos .App folder string contentFolderPath = Path.Combine("/Applications", cleanedAppName + ".app", "Contents"); string scriptFolderPath = Path.Combine(contentFolderPath, "MacOS"); From f5ce539de9e1f7a6f0a93767ecd4f7bd7ee0a6b5 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 19:28:27 -0600 Subject: [PATCH 06/24] misc: Move the rest of Ryujinx.UI.Common into other parts of the project. --- Ryujinx.sln | 6 ------ src/Ryujinx.Common/Helpers/ConsoleHelper.cs | 2 +- .../Helpers/FileAssociationHelper.cs | 2 +- src/Ryujinx.Common/Helpers/LinuxHelper.cs | 2 +- src/Ryujinx.Common/Helpers/ObjectiveC.cs | 2 +- src/Ryujinx.Common/Helpers/OpenHelper.cs | 2 +- .../Configuration/FileTypes.cs | 12 ------------ src/Ryujinx/AppHost.cs | 4 +--- src/Ryujinx/Common/ApplicationHelper.cs | 4 ++-- src/Ryujinx/Common/LocaleManager.cs | 2 +- src/Ryujinx/DiscordIntegrationModule.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.Init.cs | 3 +-- src/Ryujinx/Headless/HeadlessRyujinx.cs | 2 +- src/Ryujinx/Headless/Options.cs | 2 +- src/Ryujinx/Program.cs | 8 ++------ src/Ryujinx/Ryujinx.csproj | 3 ++- src/Ryujinx/RyujinxApp.axaml.cs | 4 ++-- src/Ryujinx/UI/Applet/AvaHostUIHandler.cs | 2 +- .../UI/Controls/ApplicationContextMenu.axaml.cs | 2 +- .../UI/Helpers/MultiplayerInfoConverter.cs | 1 - src/Ryujinx/UI/Helpers/UserErrorDialog.cs | 1 - src/Ryujinx/UI/Models/SaveModel.cs | 2 +- src/Ryujinx/UI/Renderer/EmbeddedWindow.cs | 4 ++-- src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs | 2 +- src/Ryujinx/UI/Renderer/RendererHost.axaml.cs | 2 +- .../UI/ViewModels/AboutWindowViewModel.cs | 2 +- .../UI/ViewModels/Input/InputViewModel.cs | 2 +- .../UI/ViewModels/MainWindowViewModel.cs | 5 ++--- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 4 ++-- .../UI/Views/Main/MainMenuBarView.axaml.cs | 5 ++--- .../UI/Views/Main/MainStatusBarView.axaml.cs | 2 +- .../Views/Settings/SettingsHacksView.axaml.cs | 1 - src/Ryujinx/UI/Windows/AboutWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/CheatWindow.axaml.cs | 2 +- .../DownloadableContentManagerWindow.axaml.cs | 2 +- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 6 +++--- .../UI/Windows/ModManagerWindow.axaml.cs | 2 +- .../UI/Windows/TitleUpdateWindow.axaml.cs | 2 +- src/Ryujinx/Updater.cs | 3 ++- .../Utilities/AppLibrary/ApplicationData.cs | 5 +---- .../Utilities/AppLibrary/ApplicationLibrary.cs | 4 ++-- .../Utilities}/CommandLineState.cs | 2 +- .../Utilities}/Configuration/AudioBackend.cs | 2 +- .../Configuration/ConfigurationFileFormat.cs | 6 +++--- .../ConfigurationFileFormatSettings.cs | 2 +- .../ConfigurationJsonSerializerContext.cs | 6 ++---- .../ConfigurationState.Migration.cs | 6 +++--- .../Configuration/ConfigurationState.Model.cs | 6 +++--- .../Configuration/ConfigurationState.cs | 6 +++--- .../Utilities/Configuration/FileTypes.cs} | 17 ++++++++++++++--- .../Utilities}/Configuration/LoggerModule.cs | 2 +- .../Utilities}/Configuration/System/Language.cs | 3 +-- .../Utilities}/Configuration/System/Region.cs | 2 +- .../Utilities}/Configuration/UI/ColumnSort.cs | 2 +- .../Utilities}/Configuration/UI/GuiColumns.cs | 2 +- .../Configuration/UI/ShownFileTypes.cs | 2 +- .../Configuration/UI/WindowStartup.cs | 2 +- src/Ryujinx/Utilities/ShortcutHelper.cs | 1 - src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs | 1 - src/Ryujinx/Utilities/TitleUpdatesHelper.cs | 2 +- .../Utilities}/ValueFormatUtils.cs | 5 +++-- 61 files changed, 90 insertions(+), 114 deletions(-) delete mode 100644 src/Ryujinx.UI.Common/Configuration/FileTypes.cs rename src/{Ryujinx.Common/Helpers => Ryujinx/Utilities}/CommandLineState.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/AudioBackend.cs (84%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationFileFormat.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationFileFormatSettings.cs (83%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationJsonSerializerContext.cs (74%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationState.Migration.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationState.Model.cs (99%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/ConfigurationState.cs (99%) rename src/{Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs => Ryujinx/Utilities/Configuration/FileTypes.cs} (73%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/LoggerModule.cs (98%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/System/Language.cs (86%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/System/Region.cs (84%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/ColumnSort.cs (73%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/GuiColumns.cs (91%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/ShownFileTypes.cs (85%) rename src/{Ryujinx.UI.Common => Ryujinx/Utilities}/Configuration/UI/WindowStartup.cs (85%) rename src/{Ryujinx.Common/Helpers => Ryujinx/Utilities}/ValueFormatUtils.cs (97%) diff --git a/Ryujinx.sln b/Ryujinx.sln index 87c1021c1..373572178 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -61,8 +61,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmp EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.Common", "src\Ryujinx.UI.Common\Ryujinx.UI.Common.csproj", "{BA161CA0-CD65-4E6E-B644-51C8D1E542DC}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" @@ -219,10 +217,6 @@ Global {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BA161CA0-CD65-4E6E-B644-51C8D1E542DC}.Release|Any CPU.Build.0 = Release|Any CPU {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.Common/Helpers/ConsoleHelper.cs b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs index 99b209c6e..105c9881e 100644 --- a/src/Ryujinx.Common/Helpers/ConsoleHelper.cs +++ b/src/Ryujinx.Common/Helpers/ConsoleHelper.cs @@ -3,7 +3,7 @@ using System; using System.Runtime.InteropServices; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { public static partial class ConsoleHelper { diff --git a/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs index b1463989d..476aee228 100644 --- a/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs +++ b/src/Ryujinx.Common/Helpers/FileAssociationHelper.cs @@ -8,7 +8,7 @@ using System.Linq; using System.Runtime.InteropServices; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { public static partial class FileAssociationHelper { diff --git a/src/Ryujinx.Common/Helpers/LinuxHelper.cs b/src/Ryujinx.Common/Helpers/LinuxHelper.cs index b57793791..2adfd20f8 100644 --- a/src/Ryujinx.Common/Helpers/LinuxHelper.cs +++ b/src/Ryujinx.Common/Helpers/LinuxHelper.cs @@ -3,7 +3,7 @@ using System.Diagnostics; using System.IO; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { [SupportedOSPlatform("linux")] public static class LinuxHelper diff --git a/src/Ryujinx.Common/Helpers/ObjectiveC.cs b/src/Ryujinx.Common/Helpers/ObjectiveC.cs index f8f972098..d8e02f54d 100644 --- a/src/Ryujinx.Common/Helpers/ObjectiveC.cs +++ b/src/Ryujinx.Common/Helpers/ObjectiveC.cs @@ -2,7 +2,7 @@ using System; using System.Runtime.InteropServices; using System.Runtime.Versioning; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { [SupportedOSPlatform("macos")] public static partial class ObjectiveC diff --git a/src/Ryujinx.Common/Helpers/OpenHelper.cs b/src/Ryujinx.Common/Helpers/OpenHelper.cs index bf398a355..6a54b69f3 100644 --- a/src/Ryujinx.Common/Helpers/OpenHelper.cs +++ b/src/Ryujinx.Common/Helpers/OpenHelper.cs @@ -5,7 +5,7 @@ using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Common.Helper { public static partial class OpenHelper { diff --git a/src/Ryujinx.UI.Common/Configuration/FileTypes.cs b/src/Ryujinx.UI.Common/Configuration/FileTypes.cs deleted file mode 100644 index 1974207b6..000000000 --- a/src/Ryujinx.UI.Common/Configuration/FileTypes.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ryujinx.UI.Common -{ - public enum FileTypes - { - NSP, - PFS0, - XCI, - NCA, - NRO, - NSO - } -} diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index f3fcbf5aa..cff6a44a5 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -22,6 +22,7 @@ using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; @@ -42,9 +43,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; using Ryujinx.Input; using Ryujinx.Input.HLE; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using Silk.NET.Vulkan; using SkiaSharp; using SPB.Graphics.Vulkan; diff --git a/src/Ryujinx/Common/ApplicationHelper.cs b/src/Ryujinx/Common/ApplicationHelper.cs index 1c6b53dee..7db933ed6 100644 --- a/src/Ryujinx/Common/ApplicationHelper.cs +++ b/src/Ryujinx/Common/ApplicationHelper.cs @@ -15,12 +15,12 @@ using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.Loaders.Processes.Extensions; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Buffers; using System.IO; diff --git a/src/Ryujinx/Common/LocaleManager.cs b/src/Ryujinx/Common/LocaleManager.cs index 70b04ec95..9422cf7fb 100644 --- a/src/Ryujinx/Common/LocaleManager.cs +++ b/src/Ryujinx/Common/LocaleManager.cs @@ -1,8 +1,8 @@ using Gommon; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Utilities; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Concurrent; using System.Collections.Generic; diff --git a/src/Ryujinx/DiscordIntegrationModule.cs b/src/Ryujinx/DiscordIntegrationModule.cs index f13b34ec8..ee00f2c0d 100644 --- a/src/Ryujinx/DiscordIntegrationModule.cs +++ b/src/Ryujinx/DiscordIntegrationModule.cs @@ -2,10 +2,10 @@ using DiscordRPC; using Humanizer; using Humanizer.Localisation; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.HLE; using Ryujinx.HLE.Loaders.Processes; -using Ryujinx.UI.Common.Configuration; using System.Text; namespace Ryujinx.Ava diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs index ba84e53a5..19d2fb94e 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.Init.cs @@ -2,6 +2,7 @@ using LibHac.Tools.FsSystem; using Ryujinx.Audio.Backends.SDL2; using Ryujinx.Ava; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; @@ -16,8 +17,6 @@ using Ryujinx.Graphics.OpenGL; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.Input; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; using Silk.NET.Vulkan; using System; using System.IO; diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index eabe72cbe..3d99fb902 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -1,6 +1,7 @@ using CommandLine; using Gommon; using Ryujinx.Ava; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -25,7 +26,6 @@ using Ryujinx.Input; using Ryujinx.Input.HLE; using Ryujinx.Input.SDL2; using Ryujinx.SDL2.Common; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.IO; diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index b0a349a2b..c0def95c1 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -1,11 +1,11 @@ using CommandLine; using Gommon; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.HLE; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.SystemState; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/Program.cs b/src/Ryujinx/Program.cs index 76ed0b076..6f0f3e12e 100644 --- a/src/Ryujinx/Program.cs +++ b/src/Ryujinx/Program.cs @@ -8,7 +8,9 @@ using Projektanker.Icons.Avalonia.MaterialDesign; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Ava.Utilities.SystemInfo; using Ryujinx.Common; using Ryujinx.Common.Configuration; @@ -18,9 +20,6 @@ using Ryujinx.Common.SystemInterop; using Ryujinx.Graphics.Vulkan.MoltenVK; using Ryujinx.Headless; using Ryujinx.SDL2.Common; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.IO; using System.Linq; @@ -117,9 +116,6 @@ namespace Ryujinx.Ava // Setup base data directory. AppDataManager.Initialize(CommandLineState.BaseDirPathArg); - // Set the delegate for localizing the word "never" in the UI - ApplicationData.LocalizedNever = () => LocaleManager.Instance[LocaleKeys.Never]; - // Initialize the configuration. ConfigurationState.Initialize(); diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 3ddd807e6..9d23b0909 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -48,6 +48,7 @@ + @@ -57,6 +58,7 @@ + @@ -77,7 +79,6 @@ - diff --git a/src/Ryujinx/RyujinxApp.axaml.cs b/src/Ryujinx/RyujinxApp.axaml.cs index bbef20aa0..d950af3a9 100644 --- a/src/Ryujinx/RyujinxApp.axaml.cs +++ b/src/Ryujinx/RyujinxApp.axaml.cs @@ -11,10 +11,10 @@ using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Diagnostics; diff --git a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs index 893ea95ac..65f4c7795 100644 --- a/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs +++ b/src/Ryujinx/UI/Applet/AvaHostUIHandler.cs @@ -5,12 +5,12 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.HLE; using Ryujinx.HLE.HOS.Applets; using Ryujinx.HLE.HOS.Applets.SoftwareKeyboard; using Ryujinx.HLE.HOS.Services.Am.AppletOE.ApplicationProxyService.ApplicationProxy.Types; using Ryujinx.HLE.UI; -using Ryujinx.UI.Common.Configuration; using System; using System.Threading; diff --git a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs index 4f998b040..354e1c7e6 100644 --- a/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs +++ b/src/Ryujinx/UI/Controls/ApplicationContextMenu.axaml.cs @@ -13,8 +13,8 @@ using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Helper; using Ryujinx.HLE.HOS; -using Ryujinx.UI.Common.Helper; using SkiaSharp; using System; using System.Collections.Generic; diff --git a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs index 4135fd4c7..09a2ad367 100644 --- a/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs +++ b/src/Ryujinx/UI/Helpers/MultiplayerInfoConverter.cs @@ -2,7 +2,6 @@ using Avalonia.Data.Converters; using Avalonia.Markup.Xaml; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.UI.Common.Helper; using System; using System.Globalization; diff --git a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs index 3864be0fa..c30fb4348 100644 --- a/src/Ryujinx/UI/Helpers/UserErrorDialog.cs +++ b/src/Ryujinx/UI/Helpers/UserErrorDialog.cs @@ -1,6 +1,5 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Common.UI; -using Ryujinx.UI.Common; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Helpers diff --git a/src/Ryujinx/UI/Models/SaveModel.cs b/src/Ryujinx/UI/Models/SaveModel.cs index 8364e1966..3dc009b2a 100644 --- a/src/Ryujinx/UI/Models/SaveModel.cs +++ b/src/Ryujinx/UI/Models/SaveModel.cs @@ -3,9 +3,9 @@ using LibHac.Fs; using LibHac.Ncm; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; using Ryujinx.HLE.FileSystem; -using Ryujinx.UI.Common.Helper; using System; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs index ea5a8dbdd..eea9be283 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindow.cs @@ -2,9 +2,9 @@ using Avalonia; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Platform; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using SPB.Graphics; using SPB.Platform; using SPB.Platform.GLX; diff --git a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs index 3842301de..4f59e2400 100644 --- a/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs +++ b/src/Ryujinx/UI/Renderer/EmbeddedWindowOpenGL.cs @@ -1,9 +1,9 @@ using OpenTK.Graphics.OpenGL; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.OpenGL; -using Ryujinx.UI.Common.Configuration; using SPB.Graphics; using SPB.Graphics.Exceptions; using SPB.Graphics.OpenGL; diff --git a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs index 71c0e1432..fa9aec0c5 100644 --- a/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs +++ b/src/Ryujinx/UI/Renderer/RendererHost.axaml.cs @@ -1,10 +1,10 @@ using Avalonia; using Avalonia.Controls; using Gommon; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Configuration; using System; using System.Runtime.InteropServices; diff --git a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs index 0f8a5a7d7..6bc1e1f03 100644 --- a/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/AboutWindowViewModel.cs @@ -3,7 +3,7 @@ using Avalonia.Styling; using Avalonia.Threading; using Ryujinx.Ava.Common; using Ryujinx.Ava.Common.Locale; -using Ryujinx.UI.Common.Configuration; +using Ryujinx.Ava.Utilities.Configuration; using System; namespace Ryujinx.Ava.UI.ViewModels diff --git a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs index 79daab701..74b8681d5 100644 --- a/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/Input/InputViewModel.cs @@ -10,6 +10,7 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -19,7 +20,6 @@ using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.Input; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index 3bc100ba3..332009149 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -22,8 +22,10 @@ using Ryujinx.Ava.UI.Models.Generic; using Ryujinx.Ava.UI.Renderer; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.UI; using Ryujinx.Common.Utilities; @@ -35,9 +37,6 @@ using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; using Ryujinx.HLE.UI; using Ryujinx.Input.HLE; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using Silk.NET.Vulkan; using SkiaSharp; using System; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index ecd2d40dd..1f239d3ce 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -10,6 +10,8 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.GraphicsDriver; @@ -18,8 +20,6 @@ using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS.Services.Time.TimeZone; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Configuration.System; using System; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs index 1f8617ad7..be444faa4 100644 --- a/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainMenuBarView.axaml.cs @@ -8,12 +8,11 @@ using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.UI.Windows; using Ryujinx.Ava.Utilities; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; +using Ryujinx.Common.Helper; using Ryujinx.Common.Utilities; using Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs index 297e86c67..b234f7859 100644 --- a/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs +++ b/src/Ryujinx/UI/Views/Main/MainStatusBarView.axaml.cs @@ -5,10 +5,10 @@ using Avalonia.Interactivity; using Avalonia.Threading; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Windows; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Configuration; using System; namespace Ryujinx.Ava.UI.Views.Main diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs index f9e0958ca..915acedeb 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml.cs @@ -1,7 +1,6 @@ using Avalonia.Controls; using Avalonia.Interactivity; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.Common.Configuration; namespace Ryujinx.Ava.UI.Views.Settings { diff --git a/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs b/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs index a901295cf..b9736b81d 100644 --- a/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/AboutWindow.axaml.cs @@ -8,7 +8,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Common; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; using Button = Avalonia.Controls.Button; diff --git a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs index f5795d42c..c770a6f45 100644 --- a/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/CheatWindow.axaml.cs @@ -3,9 +3,9 @@ using LibHac.Tools.FsSystem; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.HOS; -using Ryujinx.UI.Common.Configuration; using System.Globalization; using System.IO; using System.Linq; diff --git a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs index 02f420752..335676aef 100644 --- a/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/DownloadableContentManagerWindow.axaml.cs @@ -6,7 +6,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index f0aaf4cac..0b1c356d4 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -15,8 +15,11 @@ using Ryujinx.Ava.Input; using Ryujinx.Ava.UI.Applet; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; +using Ryujinx.Ava.Utilities; using Ryujinx.Ava.Utilities.AppLibrary; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.UI; using Ryujinx.Graphics.Gpu; @@ -25,9 +28,6 @@ using Ryujinx.HLE.HOS; using Ryujinx.HLE.HOS.Services.Account.Acc; using Ryujinx.Input.HLE; using Ryujinx.Input.SDL2; -using Ryujinx.UI.Common; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; using System.Linq; diff --git a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs index 774446cf1..449aab554 100644 --- a/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/ModManagerWindow.axaml.cs @@ -6,7 +6,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.Models; using Ryujinx.Ava.UI.ViewModels; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; using Button = Avalonia.Controls.Button; diff --git a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs index 421990bcd..b7c421c96 100644 --- a/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/TitleUpdateWindow.axaml.cs @@ -6,7 +6,7 @@ using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models; using Ryujinx.Ava.UI.ViewModels; using Ryujinx.Ava.Utilities.AppLibrary; -using Ryujinx.UI.Common.Helper; +using Ryujinx.Common.Helper; using System.Threading.Tasks; namespace Ryujinx.Ava.UI.Windows diff --git a/src/Ryujinx/Updater.cs b/src/Ryujinx/Updater.cs index 377acbbdf..3e3989c66 100644 --- a/src/Ryujinx/Updater.cs +++ b/src/Ryujinx/Updater.cs @@ -7,10 +7,11 @@ using ICSharpCode.SharpZipLib.Zip; using Ryujinx.Ava.Common.Locale; using Ryujinx.Ava.Common.Models.Github; using Ryujinx.Ava.UI.Helpers; +using Ryujinx.Ava.Utilities; using Ryujinx.Common; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; -using Ryujinx.UI.Common.Helper; using System; using System.Collections.Generic; using System.Diagnostics; diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs index de91c98a5..c87486232 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs @@ -10,7 +10,6 @@ using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Common.Logging; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; -using Ryujinx.UI.Common.Helper; using System; using System.IO; using System.Text.Json.Serialization; @@ -19,8 +18,6 @@ namespace Ryujinx.Ava.Utilities.AppLibrary { public class ApplicationData { - public static Func LocalizedNever { get; set; } = () => "Never"; - public bool Favorite { get; set; } public byte[] Icon { get; set; } public string Name { get; set; } = "Unknown"; @@ -40,7 +37,7 @@ namespace Ryujinx.Ava.Utilities.AppLibrary public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed); - public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n") ?? LocalizedNever(); + public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n"); public string FileSizeString => ValueFormatUtils.FormatFileSize(FileSize); diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index 94f2e7fc7..ef2e835ae 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -11,6 +11,8 @@ using LibHac.Tools.Fs; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Models; +using Ryujinx.Ava.Utilities.Configuration; +using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Multiplayer; @@ -21,8 +23,6 @@ using Ryujinx.HLE.HOS.SystemState; using Ryujinx.HLE.Loaders.Npdm; using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.HLE.Utilities; -using Ryujinx.UI.Common.Configuration; -using Ryujinx.UI.Common.Configuration.System; using System; using System.Collections.Generic; using System.IO; diff --git a/src/Ryujinx.Common/Helpers/CommandLineState.cs b/src/Ryujinx/Utilities/CommandLineState.cs similarity index 99% rename from src/Ryujinx.Common/Helpers/CommandLineState.cs rename to src/Ryujinx/Utilities/CommandLineState.cs index 3a96a55c8..6fb8e92d6 100644 --- a/src/Ryujinx.Common/Helpers/CommandLineState.cs +++ b/src/Ryujinx/Utilities/CommandLineState.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Logging; using System.Collections.Generic; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class CommandLineState { diff --git a/src/Ryujinx.UI.Common/Configuration/AudioBackend.cs b/src/Ryujinx/Utilities/Configuration/AudioBackend.cs similarity index 84% rename from src/Ryujinx.UI.Common/Configuration/AudioBackend.cs rename to src/Ryujinx/Utilities/Configuration/AudioBackend.cs index a952e7ac0..8394bb282 100644 --- a/src/Ryujinx.UI.Common/Configuration/AudioBackend.cs +++ b/src/Ryujinx/Utilities/Configuration/AudioBackend.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { [JsonConverter(typeof(TypedStringEnumConverter))] public enum AudioBackend diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs index 8b123be01..c964ed76d 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs @@ -1,3 +1,5 @@ +using Ryujinx.Ava.Utilities.Configuration.System; +using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; @@ -5,12 +7,10 @@ using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Configuration.UI; using System.Collections.Generic; using System.Text.Json.Nodes; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public class ConfigurationFileFormat { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormatSettings.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs similarity index 83% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormatSettings.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs index 9861ebf1f..175d4dee8 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormatSettings.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormatSettings.cs @@ -1,6 +1,6 @@ using Ryujinx.Common.Utilities; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { internal static class ConfigurationFileFormatSettings { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationJsonSerializerContext.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs similarity index 74% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationJsonSerializerContext.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs index 3c3e3f20d..a81e00f4a 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationJsonSerializerContext.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationJsonSerializerContext.cs @@ -1,10 +1,8 @@ using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(ConfigurationFileFormat))] - internal partial class ConfigurationJsonSerializerContext : JsonSerializerContext - { - } + internal partial class ConfigurationJsonSerializerContext : JsonSerializerContext; } diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 8652b4331..8cfb9d53a 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -1,3 +1,5 @@ +using Ryujinx.Ava.Utilities.Configuration.System; +using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; @@ -5,12 +7,10 @@ using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Common.Logging; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Configuration.UI; using System; using System.Collections.Generic; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 2ae56d50a..c27b3f0e3 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -1,16 +1,16 @@ using ARMeilleure; using Gommon; +using Ryujinx.Ava.Utilities.Configuration.System; using Ryujinx.Common; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Multiplayer; +using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Helper; using System.Collections.Generic; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs similarity index 99% rename from src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs rename to src/Ryujinx/Utilities/Configuration/ConfigurationState.cs index 8ae76ecc5..01534bec8 100644 --- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs @@ -1,14 +1,14 @@ +using Ryujinx.Ava.Utilities.Configuration.System; +using Ryujinx.Ava.Utilities.Configuration.UI; using Ryujinx.Common.Configuration; using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; -using Ryujinx.UI.Common.Configuration.System; -using Ryujinx.UI.Common.Configuration.UI; using System; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public partial class ConfigurationState { diff --git a/src/Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs b/src/Ryujinx/Utilities/Configuration/FileTypes.cs similarity index 73% rename from src/Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs rename to src/Ryujinx/Utilities/Configuration/FileTypes.cs index 7e71ba7a4..c4550b5a6 100644 --- a/src/Ryujinx.UI.Common/Extensions/FileTypeExtensions.cs +++ b/src/Ryujinx/Utilities/Configuration/FileTypes.cs @@ -1,8 +1,19 @@ using System; -using static Ryujinx.UI.Common.Configuration.ConfigurationState.UISection; -namespace Ryujinx.UI.Common +using static Ryujinx.Ava.Utilities.Configuration.ConfigurationState.UISection; + +namespace Ryujinx.Ava.Utilities.Configuration { + public enum FileTypes + { + NSP, + PFS0, + XCI, + NCA, + NRO, + NSO + } + public static class FileTypesExtensions { /// @@ -10,7 +21,7 @@ namespace Ryujinx.UI.Common /// /// The name of the parameter to get the value of. /// The config instance to get the value from. - /// The current value of the setting. Value is if the file type is the be shown on the games list, otherwise. + /// The current value of the setting. Value is if the file type is to be shown on the games list, otherwise. public static bool GetConfigValue(this FileTypes type, ShownFileTypeSettings config) => type switch { FileTypes.NSP => config.NSP.Value, diff --git a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs b/src/Ryujinx/Utilities/Configuration/LoggerModule.cs similarity index 98% rename from src/Ryujinx.UI.Common/Configuration/LoggerModule.cs rename to src/Ryujinx/Utilities/Configuration/LoggerModule.cs index a7913f142..663ad607f 100644 --- a/src/Ryujinx.UI.Common/Configuration/LoggerModule.cs +++ b/src/Ryujinx/Utilities/Configuration/LoggerModule.cs @@ -4,7 +4,7 @@ using Ryujinx.Common.Logging.Targets; using System; using System.IO; -namespace Ryujinx.UI.Common.Configuration +namespace Ryujinx.Ava.Utilities.Configuration { public static class LoggerModule { diff --git a/src/Ryujinx.UI.Common/Configuration/System/Language.cs b/src/Ryujinx/Utilities/Configuration/System/Language.cs similarity index 86% rename from src/Ryujinx.UI.Common/Configuration/System/Language.cs rename to src/Ryujinx/Utilities/Configuration/System/Language.cs index 8ca4e542b..81a9bd192 100644 --- a/src/Ryujinx.UI.Common/Configuration/System/Language.cs +++ b/src/Ryujinx/Utilities/Configuration/System/Language.cs @@ -1,8 +1,7 @@ using Ryujinx.Common.Utilities; -using Ryujinx.HLE.HOS.SystemState; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration.System +namespace Ryujinx.Ava.Utilities.Configuration.System { [JsonConverter(typeof(TypedStringEnumConverter))] public enum Language diff --git a/src/Ryujinx.UI.Common/Configuration/System/Region.cs b/src/Ryujinx/Utilities/Configuration/System/Region.cs similarity index 84% rename from src/Ryujinx.UI.Common/Configuration/System/Region.cs rename to src/Ryujinx/Utilities/Configuration/System/Region.cs index 6087c70e5..ff3352e6a 100644 --- a/src/Ryujinx.UI.Common/Configuration/System/Region.cs +++ b/src/Ryujinx/Utilities/Configuration/System/Region.cs @@ -1,7 +1,7 @@ using Ryujinx.Common.Utilities; using System.Text.Json.Serialization; -namespace Ryujinx.UI.Common.Configuration.System +namespace Ryujinx.Ava.Utilities.Configuration.System { [JsonConverter(typeof(TypedStringEnumConverter))] public enum Region diff --git a/src/Ryujinx.UI.Common/Configuration/UI/ColumnSort.cs b/src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs similarity index 73% rename from src/Ryujinx.UI.Common/Configuration/UI/ColumnSort.cs rename to src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs index 44e98c407..e74ca0ec5 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/ColumnSort.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/ColumnSort.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct ColumnSort { diff --git a/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs b/src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs similarity index 91% rename from src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs rename to src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs index c486492e0..0ab9885fe 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/GuiColumns.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/GuiColumns.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct GuiColumns { diff --git a/src/Ryujinx.UI.Common/Configuration/UI/ShownFileTypes.cs b/src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs similarity index 85% rename from src/Ryujinx.UI.Common/Configuration/UI/ShownFileTypes.cs rename to src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs index 6c72a6930..9541b4885 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/ShownFileTypes.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/ShownFileTypes.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct ShownFileTypes { diff --git a/src/Ryujinx.UI.Common/Configuration/UI/WindowStartup.cs b/src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs similarity index 85% rename from src/Ryujinx.UI.Common/Configuration/UI/WindowStartup.cs rename to src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs index 0df459134..6c5e36879 100644 --- a/src/Ryujinx.UI.Common/Configuration/UI/WindowStartup.cs +++ b/src/Ryujinx/Utilities/Configuration/UI/WindowStartup.cs @@ -1,4 +1,4 @@ -namespace Ryujinx.UI.Common.Configuration.UI +namespace Ryujinx.Ava.Utilities.Configuration.UI { public struct WindowStartup { diff --git a/src/Ryujinx/Utilities/ShortcutHelper.cs b/src/Ryujinx/Utilities/ShortcutHelper.cs index 4923d2598..fed6a5c46 100644 --- a/src/Ryujinx/Utilities/ShortcutHelper.cs +++ b/src/Ryujinx/Utilities/ShortcutHelper.cs @@ -1,6 +1,5 @@ using Ryujinx.Common; using Ryujinx.Common.Configuration; -using Ryujinx.UI.Common.Helper; using ShellLink; using SkiaSharp; using System; diff --git a/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs b/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs index b7e33d3b4..0d45c52f2 100644 --- a/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs +++ b/src/Ryujinx/Utilities/SystemInfo/SystemInfo.cs @@ -1,5 +1,4 @@ using Ryujinx.Common.Logging; -using Ryujinx.UI.Common.Helper; using System; using System.Runtime.InteropServices; using System.Runtime.Intrinsics.X86; diff --git a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs index 8cffb9b25..9fc9bbf6b 100644 --- a/src/Ryujinx/Utilities/TitleUpdatesHelper.cs +++ b/src/Ryujinx/Utilities/TitleUpdatesHelper.cs @@ -7,13 +7,13 @@ using LibHac.Ns; using LibHac.Tools.FsSystem; using LibHac.Tools.FsSystem.NcaUtils; using Ryujinx.Ava.Common.Models; +using Ryujinx.Ava.Utilities.Configuration; using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Common.Utilities; using Ryujinx.HLE.FileSystem; using Ryujinx.HLE.Loaders.Processes.Extensions; using Ryujinx.HLE.Utilities; -using Ryujinx.UI.Common.Configuration; using System; using System.Collections.Generic; using System.IO; diff --git a/src/Ryujinx.Common/Helpers/ValueFormatUtils.cs b/src/Ryujinx/Utilities/ValueFormatUtils.cs similarity index 97% rename from src/Ryujinx.Common/Helpers/ValueFormatUtils.cs rename to src/Ryujinx/Utilities/ValueFormatUtils.cs index c203834f5..944cfbf8a 100644 --- a/src/Ryujinx.Common/Helpers/ValueFormatUtils.cs +++ b/src/Ryujinx/Utilities/ValueFormatUtils.cs @@ -1,8 +1,9 @@ +using Ryujinx.Ava.Common.Locale; using System; using System.Globalization; using System.Linq; -namespace Ryujinx.UI.Common.Helper +namespace Ryujinx.Ava.Utilities { public static class ValueFormatUtils { @@ -75,7 +76,7 @@ namespace Ryujinx.UI.Common.Helper { culture ??= CultureInfo.CurrentCulture; - return utcDateTime?.ToLocalTime().ToString(culture); + return utcDateTime?.ToLocalTime().ToString(culture) ?? LocaleManager.Instance[LocaleKeys.Never]; } /// From f362bef43d3460fdd8eaf2fbd023588bee969cd6 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 21:17:01 -0600 Subject: [PATCH 07/24] misc: Overhaul DirtyHacks saving to support storing a value alongside an off/off flag. --- src/Ryujinx.Common/BitTricks.cs | 35 ++++++++++++++ .../Configuration/DirtyHacks.cs | 47 +++++++++++++++++-- src/Ryujinx.HLE/HLEConfiguration.cs | 6 +-- .../Services/Fs/FileSystemProxy/IStorage.cs | 2 +- src/Ryujinx.HLE/Switch.cs | 4 +- src/Ryujinx/AppHost.cs | 2 +- src/Ryujinx/Headless/HeadlessRyujinx.cs | 3 -- .../UI/ViewModels/SettingsViewModel.cs | 32 +++++++++++++ .../UI/Views/Settings/SettingsHacksView.axaml | 27 +++++++++++ .../Configuration/ConfigurationFileFormat.cs | 6 +-- .../ConfigurationState.Migration.cs | 24 +++++++++- .../Configuration/ConfigurationState.Model.cs | 26 ++++++---- .../Configuration/ConfigurationState.cs | 3 +- 13 files changed, 190 insertions(+), 27 deletions(-) create mode 100644 src/Ryujinx.Common/BitTricks.cs diff --git a/src/Ryujinx.Common/BitTricks.cs b/src/Ryujinx.Common/BitTricks.cs new file mode 100644 index 000000000..d0c689291 --- /dev/null +++ b/src/Ryujinx.Common/BitTricks.cs @@ -0,0 +1,35 @@ +namespace Ryujinx.Common +{ + public class BitTricks + { + // Never actually written bit packing logic before, so I looked it up. + // This code is from https://gist.github.com/Alan-FGR/04938e93e2bffdf5802ceb218a37c195 + + public static ulong PackBitFields(uint[] values, byte[] bitFields) + { + ulong retVal = values[0]; //we set the first value right away + for (int f = 1; f < values.Length; f++) + { + retVal <<= bitFields[f]; // we shift the previous value + retVal += values[f];// and add our current value + } + return retVal; + } + + public static uint[] UnpackBitFields(ulong packed, byte[] bitFields) + { + int fields = bitFields.Length - 1; // number of fields to unpack + uint[] retArr = new uint[fields + 1]; // init return array + int curPos = 0; // current field bit position (start) + int lastEnd; // position where last field ended + for (int f = fields; f >= 0; f--) // loop from last + { + lastEnd = curPos; // we store where the last value ended + curPos += bitFields[f]; // we get where the current value starts + int leftShift = 64 - curPos; // we figure how much left shift we gotta apply for the other numbers to overflow into oblivion + retArr[f] = (uint)((packed << leftShift) >> leftShift + lastEnd); // we do magic + } + return retArr; + } + } +} diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs index 6a6d4949c..12f6b019b 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -1,11 +1,52 @@ using System; +using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Common.Configuration { [Flags] - public enum DirtyHacks + public enum DirtyHacks : byte { - None = 0, - Xc2MenuSoftlockFix = 1 << 10 + Xc2MenuSoftlockFix = 1, + ShaderCompilationThreadSleep = 2 + } + + public record EnabledDirtyHack(DirtyHacks Hack, int Value) + { + private static readonly byte[] _packedFormat = [8, 32]; + + public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], _packedFormat); + + public static EnabledDirtyHack FromPacked(ulong packedHack) + { + var unpackedFields = BitTricks.UnpackBitFields(packedHack, _packedFormat); + if (unpackedFields is not [var hack, var value]) + throw new ArgumentException(nameof(packedHack)); + + return new EnabledDirtyHack((DirtyHacks)hack, (int)value); + } + } + + public class DirtyHackCollection : Dictionary + { + public DirtyHackCollection(EnabledDirtyHack[] hacks) + { + foreach ((DirtyHacks dirtyHacks, int value) in hacks) + { + Add(dirtyHacks, value); + } + } + + public DirtyHackCollection(ulong[] packedHacks) + { + foreach ((DirtyHacks dirtyHacks, int value) in packedHacks.Select(EnabledDirtyHack.FromPacked)) + { + Add(dirtyHacks, value); + } + } + + public new int this[DirtyHacks hack] => TryGetValue(hack, out var value) ? value : -1; + + public bool IsEnabled(DirtyHacks hack) => ContainsKey(hack); } } diff --git a/src/Ryujinx.HLE/HLEConfiguration.cs b/src/Ryujinx.HLE/HLEConfiguration.cs index b44a09b22..8ac76508f 100644 --- a/src/Ryujinx.HLE/HLEConfiguration.cs +++ b/src/Ryujinx.HLE/HLEConfiguration.cs @@ -192,7 +192,7 @@ namespace Ryujinx.HLE /// /// The desired hacky workarounds. /// - public DirtyHacks Hacks { internal get; set; } + public EnabledDirtyHack[] Hacks { internal get; set; } public HLEConfiguration(VirtualFileSystem virtualFileSystem, LibHacHorizonManager libHacHorizonManager, @@ -224,7 +224,7 @@ namespace Ryujinx.HLE string multiplayerLdnPassphrase, string multiplayerLdnServer, int customVSyncInterval, - DirtyHacks dirtyHacks = DirtyHacks.None) + EnabledDirtyHack[] dirtyHacks = null) { VirtualFileSystem = virtualFileSystem; LibHacHorizonManager = libHacHorizonManager; @@ -256,7 +256,7 @@ namespace Ryujinx.HLE MultiplayerDisableP2p = multiplayerDisableP2p; MultiplayerLdnPassphrase = multiplayerLdnPassphrase; MultiplayerLdnServer = multiplayerLdnServer; - Hacks = dirtyHacks; + Hacks = dirtyHacks ?? []; } } } diff --git a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs index 07ab8b386..ac5dc04e9 100644 --- a/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs +++ b/src/Ryujinx.HLE/HOS/Services/Fs/FileSystemProxy/IStorage.cs @@ -39,7 +39,7 @@ namespace Ryujinx.HLE.HOS.Services.Fs.FileSystemProxy using var region = context.Memory.GetWritableRegion(bufferAddress, (int)bufferLen, true); Result result = _baseStorage.Get.Read((long)offset, new OutBuffer(region.Memory.Span), (long)size); - if (context.Device.DirtyHacks.HasFlag(DirtyHacks.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) + if (context.Device.DirtyHacks.IsEnabled(DirtyHacks.Xc2MenuSoftlockFix) && TitleIDs.CurrentApplication.Value == Xc2TitleId) { // Add a load-bearing sleep to avoid XC2 softlock // https://web.archive.org/web/20240728045136/https://github.com/Ryujinx/Ryujinx/issues/2357 diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index c630c71c7..ed1cc02d3 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -40,7 +40,7 @@ namespace Ryujinx.HLE public bool IsFrameAvailable => Gpu.Window.IsFrameAvailable; - public DirtyHacks DirtyHacks { get; } + public DirtyHackCollection DirtyHacks { get; } public Switch(HLEConfiguration configuration) { @@ -77,7 +77,7 @@ namespace Ryujinx.HLE System.EnablePtc = Configuration.EnablePtc; System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; - DirtyHacks = Configuration.Hacks; + DirtyHacks = new DirtyHackCollection(Configuration.Hacks); UpdateVSyncInterval(); #pragma warning restore IDE0055 diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs index cff6a44a5..b90f8b801 100644 --- a/src/Ryujinx/AppHost.cs +++ b/src/Ryujinx/AppHost.cs @@ -952,7 +952,7 @@ namespace Ryujinx.Ava ConfigurationState.Instance.Multiplayer.LdnPassphrase, ConfigurationState.Instance.Multiplayer.LdnServer, ConfigurationState.Instance.Graphics.CustomVSyncInterval.Value, - ConfigurationState.Instance.Hacks.ShowDirtyHacks ? ConfigurationState.Instance.Hacks.EnabledHacks : DirtyHacks.None)); + ConfigurationState.Instance.Hacks.ShowDirtyHacks ? ConfigurationState.Instance.Hacks.EnabledHacks : null)); } private static IHardwareDeviceDriver InitializeAudio() diff --git a/src/Ryujinx/Headless/HeadlessRyujinx.cs b/src/Ryujinx/Headless/HeadlessRyujinx.cs index 3d99fb902..3cb0afca3 100644 --- a/src/Ryujinx/Headless/HeadlessRyujinx.cs +++ b/src/Ryujinx/Headless/HeadlessRyujinx.cs @@ -14,9 +14,6 @@ using Ryujinx.Cpu; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu; using Ryujinx.Graphics.Gpu.Shader; -using Ryujinx.Graphics.Metal; -using Ryujinx.Graphics.OpenGL; -using Ryujinx.Graphics.Vulkan; using Ryujinx.Graphics.Vulkan.MoltenVK; using Ryujinx.HLE; using Ryujinx.HLE.FileSystem; diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 1f239d3ce..0afa01fc2 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -66,6 +66,8 @@ namespace Ryujinx.Ava.UI.ViewModels private string _ldnServer; private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderCompilationThreadSleep; + private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderCompilationThreadSleepDelay; public int ResolutionScale { @@ -287,6 +289,28 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(); } } + + public bool ShaderTranslationDelayEnabled + { + get => _shaderTranslationThreadSleep; + set + { + _shaderTranslationThreadSleep = value; + + OnPropertyChanged(); + } + } + + public int ShaderTranslationDelay + { + get => _shaderTranslationSleepDelay; + set + { + _shaderTranslationSleepDelay = value; + + OnPropertyChanged(); + } + } public int Language { get; set; } public int Region { get; set; } @@ -763,6 +787,8 @@ namespace Ryujinx.Ava.UI.ViewModels // Dirty Hacks config.Hacks.Xc2MenuSoftlockFix.Value = Xc2MenuSoftlockFixEnabled; + config.Hacks.EnableShaderCompilationThreadSleep.Value = ShaderTranslationDelayEnabled; + config.Hacks.ShaderCompilationThreadSleepDelay.Value = ShaderTranslationDelay; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); @@ -809,5 +835,11 @@ namespace Ryujinx.Ava.UI.ViewModels "there is a low chance that the game will softlock, " + "the submenu won't show up, while background music is still there."); }); + + public static string ShaderTranslationDelayTooltip { get; } = Lambda.String(sb => + { + sb.Append( + "This hack applies the delay you specify every time shaders are attempted to be translated."); + }); } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b7817f064..b4e3437ff 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -42,6 +42,33 @@ VerticalAlignment="Center" Text="Xenoblade Chronicles 2 Menu Softlock Fix" /> + + + + + + + diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs index c964ed76d..540024cbd 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationFileFormat.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Ava.Utilities.Configuration /// /// The current version of the file format /// - public const int CurrentVersion = 58; + public const int CurrentVersion = 59; /// /// Version of the configuration file format @@ -436,9 +436,9 @@ namespace Ryujinx.Ava.Utilities.Configuration public bool ShowDirtyHacks { get; set; } /// - /// The packed value of the enabled dirty hacks. + /// The packed values of the enabled dirty hacks. /// - public int EnabledDirtyHacks { get; set; } + public ulong[] DirtyHacks { get; set; } /// /// Loads a configuration file from disk diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 8cfb9d53a..b0664e1b6 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -9,6 +9,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE; using System; using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -637,6 +638,18 @@ namespace Ryujinx.Ava.Utilities.Configuration configurationFileUpdated = true; } + + // 58 migration accidentally got skipped but it worked with no issues somehow lol + + if (configurationFileFormat.Version < 59) + { + Ryujinx.Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 59."); + + configurationFileFormat.ShowDirtyHacks = false; + configurationFileFormat.DirtyHacks = []; + + configurationFileUpdated = true; + } Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Graphics.ResScale.Value = configurationFileFormat.ResScale; @@ -737,7 +750,16 @@ namespace Ryujinx.Ava.Utilities.Configuration Multiplayer.LdnServer.Value = configurationFileFormat.LdnServer; Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; - Hacks.Xc2MenuSoftlockFix.Value = ((DirtyHacks)configurationFileFormat.EnabledDirtyHacks).HasFlag(DirtyHacks.Xc2MenuSoftlockFix); + + { + EnabledDirtyHack[] hacks = configurationFileFormat.DirtyHacks.Select(EnabledDirtyHack.FromPacked).ToArray(); + + Hacks.Xc2MenuSoftlockFix.Value = hacks.Any(it => it.Hack == DirtyHacks.Xc2MenuSoftlockFix); + + var shaderCompilationThreadSleep = hacks.FirstOrDefault(it => it.Hack == DirtyHacks.ShaderCompilationThreadSleep); + Hacks.EnableShaderCompilationThreadSleep.Value = shaderCompilationThreadSleep != null; + Hacks.ShaderCompilationThreadSleepDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; + } if (configurationFileUpdated) { diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index c27b3f0e3..53192618e 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -9,6 +9,7 @@ using Ryujinx.Common.Helper; using Ryujinx.Common.Logging; using Ryujinx.HLE; using System.Collections.Generic; +using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -626,36 +627,43 @@ namespace Ryujinx.Ava.Utilities.Configuration public ReactiveObject ShowDirtyHacks { get; private set; } public ReactiveObject Xc2MenuSoftlockFix { get; private set; } + + public ReactiveObject EnableShaderCompilationThreadSleep { get; private set; } + + public ReactiveObject ShaderCompilationThreadSleepDelay { get; private set; } public HacksSection() { ShowDirtyHacks = new ReactiveObject(); Xc2MenuSoftlockFix = new ReactiveObject(); Xc2MenuSoftlockFix.Event += HackChanged; + EnableShaderCompilationThreadSleep = new ReactiveObject(); + EnableShaderCompilationThreadSleep.Event += HackChanged; + ShaderCompilationThreadSleepDelay = new ReactiveObject(); } private void HackChanged(object sender, ReactiveEventArgs rxe) { - Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, $"EnabledDirtyHacks set to: {EnabledHacks}", "LogValueChange"); + Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, $"EnabledDirtyHacks set to: [{EnabledHacks.Select(x => x.Hack).JoinToString(", ")}]", "LogValueChange"); } - public DirtyHacks EnabledHacks + public EnabledDirtyHack[] EnabledHacks { get { - DirtyHacks dirtyHacks = DirtyHacks.None; + List enabledHacks = []; if (Xc2MenuSoftlockFix) Apply(DirtyHacks.Xc2MenuSoftlockFix); - return dirtyHacks; + if (EnableShaderCompilationThreadSleep) + Apply(DirtyHacks.ShaderCompilationThreadSleep, ShaderCompilationThreadSleepDelay); + + return enabledHacks.ToArray(); - void Apply(DirtyHacks hack) + void Apply(DirtyHacks hack, int value = 0) { - if (dirtyHacks is not DirtyHacks.None) - dirtyHacks |= hack; - else - dirtyHacks = hack; + enabledHacks.Add(new EnabledDirtyHack(hack, value)); } } } diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs index 01534bec8..95ec62e83 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.cs @@ -7,6 +7,7 @@ using Ryujinx.Common.Configuration.Multiplayer; using Ryujinx.Graphics.Vulkan; using Ryujinx.HLE; using System; +using System.Linq; namespace Ryujinx.Ava.Utilities.Configuration { @@ -139,7 +140,7 @@ namespace Ryujinx.Ava.Utilities.Configuration MultiplayerLdnPassphrase = Multiplayer.LdnPassphrase, LdnServer = Multiplayer.LdnServer, ShowDirtyHacks = Hacks.ShowDirtyHacks, - EnabledDirtyHacks = (int)Hacks.EnabledHacks, + DirtyHacks = Hacks.EnabledHacks.Select(it => it.Pack()).ToArray(), }; return configurationFile; From 42a739d34cefdd220e95d0046efc514fd4911c5b Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 22:21:09 -0600 Subject: [PATCH 08/24] misc: Expose DirtyHacks on GpuContext --- src/Ryujinx.Graphics.Gpu/GpuContext.cs | 8 +++++++- src/Ryujinx.HLE/Switch.cs | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Ryujinx.Graphics.Gpu/GpuContext.cs b/src/Ryujinx.Graphics.Gpu/GpuContext.cs index fb529e914..84bc0b9a9 100644 --- a/src/Ryujinx.Graphics.Gpu/GpuContext.cs +++ b/src/Ryujinx.Graphics.Gpu/GpuContext.cs @@ -1,4 +1,5 @@ using Ryujinx.Common; +using Ryujinx.Common.Configuration; using Ryujinx.Graphics.Device; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Gpu.Engine.GPFifo; @@ -90,6 +91,9 @@ namespace Ryujinx.Graphics.Gpu /// Support buffer updater. /// internal SupportBufferUpdater SupportBufferUpdater { get; } + + internal DirtyHackCollection DirtyHacks { get; } + /// /// Host hardware capabilities. @@ -113,7 +117,7 @@ namespace Ryujinx.Graphics.Gpu /// Creates a new instance of the GPU emulation context. /// /// Host renderer - public GpuContext(IRenderer renderer) + public GpuContext(IRenderer renderer, DirtyHackCollection hackCollection) { Renderer = renderer; @@ -136,6 +140,8 @@ namespace Ryujinx.Graphics.Gpu SupportBufferUpdater = new SupportBufferUpdater(renderer); + DirtyHacks = hackCollection; + _firstTimestamp = ConvertNanosecondsToTicks((ulong)PerformanceCounter.ElapsedNanoseconds); } diff --git a/src/Ryujinx.HLE/Switch.cs b/src/Ryujinx.HLE/Switch.cs index ed1cc02d3..127e532e2 100644 --- a/src/Ryujinx.HLE/Switch.cs +++ b/src/Ryujinx.HLE/Switch.cs @@ -57,9 +57,10 @@ namespace Ryujinx.HLE : MemoryAllocationFlags.Reserve | MemoryAllocationFlags.Mirrorable; #pragma warning disable IDE0055 // Disable formatting + DirtyHacks = new DirtyHackCollection(Configuration.Hacks); AudioDeviceDriver = new CompatLayerHardwareDeviceDriver(Configuration.AudioDeviceDriver); Memory = new MemoryBlock(Configuration.MemoryConfiguration.ToDramSize(), memoryAllocationFlags); - Gpu = new GpuContext(Configuration.GpuRenderer); + Gpu = new GpuContext(Configuration.GpuRenderer, DirtyHacks); System = new HOS.Horizon(this); Statistics = new PerformanceStatistics(); Hid = new Hid(this, System.HidStorage); @@ -77,7 +78,7 @@ namespace Ryujinx.HLE System.EnablePtc = Configuration.EnablePtc; System.FsIntegrityCheckLevel = Configuration.FsIntegrityCheckLevel; System.GlobalAccessLogMode = Configuration.FsGlobalAccessLogMode; - DirtyHacks = new DirtyHackCollection(Configuration.Hacks); + UpdateVSyncInterval(); #pragma warning restore IDE0055 From eec92c242cb0826de401515e540123475099fc09 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 22:55:33 -0600 Subject: [PATCH 09/24] misc: Remove shader translation delay dirty hack from UI it doesn't do anything --- src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b4e3437ff..a32fecfcb 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -42,7 +42,7 @@ VerticalAlignment="Center" Text="Xenoblade Chronicles 2 Menu Softlock Fix" /> - + From 8fd8a776c9631e81cae6c4d528fe46dc63a8add9 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Sun, 29 Dec 2024 23:39:40 -0600 Subject: [PATCH 10/24] misc: prevent crashes --- src/Ryujinx.Common/Configuration/DirtyHacks.cs | 15 ++++++++++++--- .../UI/Views/Settings/SettingsHacksView.axaml | 4 ++-- .../Configuration/ConfigurationState.Migration.cs | 2 +- .../Configuration/ConfigurationState.Model.cs | 14 +++++++++++++- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs index 12f6b019b..d874b226c 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -13,13 +13,13 @@ namespace Ryujinx.Common.Configuration public record EnabledDirtyHack(DirtyHacks Hack, int Value) { - private static readonly byte[] _packedFormat = [8, 32]; + public static readonly byte[] PackedFormat = [8, 32]; - public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], _packedFormat); + public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], PackedFormat); public static EnabledDirtyHack FromPacked(ulong packedHack) { - var unpackedFields = BitTricks.UnpackBitFields(packedHack, _packedFormat); + var unpackedFields = BitTricks.UnpackBitFields(packedHack, PackedFormat); if (unpackedFields is not [var hack, var value]) throw new ArgumentException(nameof(packedHack)); @@ -45,6 +45,15 @@ namespace Ryujinx.Common.Configuration } } + public ulong[] PackEntries() => + this + .Select(it => + BitTricks.PackBitFields([(uint)it.Key, (uint)it.Value], EnabledDirtyHack.PackedFormat)) + .ToArray(); + + public static implicit operator DirtyHackCollection(EnabledDirtyHack[] hacks) => new(hacks); + public static implicit operator DirtyHackCollection(ulong[] packedHacks) => new(packedHacks); + public new int this[DirtyHacks hack] => TryGetValue(hack, out var value) ? value : -1; public bool IsEnabled(DirtyHacks hack) => ContainsKey(hack); diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index a32fecfcb..b4e3437ff 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -42,7 +42,7 @@ VerticalAlignment="Center" Text="Xenoblade Chronicles 2 Menu Softlock Fix" /> - + diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index b0664e1b6..812092688 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -752,7 +752,7 @@ namespace Ryujinx.Ava.Utilities.Configuration Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; { - EnabledDirtyHack[] hacks = configurationFileFormat.DirtyHacks.Select(EnabledDirtyHack.FromPacked).ToArray(); + EnabledDirtyHack[] hacks = (configurationFileFormat.DirtyHacks ?? []).Select(EnabledDirtyHack.FromPacked).ToArray(); Hacks.Xc2MenuSoftlockFix.Value = hacks.Any(it => it.Hack == DirtyHacks.Xc2MenuSoftlockFix); diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index 53192618e..ef3d565da 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -10,6 +10,7 @@ using Ryujinx.Common.Logging; using Ryujinx.HLE; using System.Collections.Generic; using System.Linq; +using RyuLogger = Ryujinx.Common.Logging.Logger; namespace Ryujinx.Ava.Utilities.Configuration { @@ -644,9 +645,20 @@ namespace Ryujinx.Ava.Utilities.Configuration private void HackChanged(object sender, ReactiveEventArgs rxe) { - Ryujinx.Common.Logging.Logger.Info?.Print(LogClass.Configuration, $"EnabledDirtyHacks set to: [{EnabledHacks.Select(x => x.Hack).JoinToString(", ")}]", "LogValueChange"); + var newHacks = EnabledHacks.Select(x => x.Hack) + .JoinToString(", "); + + if (newHacks != _lastHackCollection) + { + RyuLogger.Info?.Print(LogClass.Configuration, + $"EnabledDirtyHacks set to: [{_lastHackCollection}]", "LogValueChange"); + + _lastHackCollection = newHacks; + } } + private static string _lastHackCollection; + public EnabledDirtyHack[] EnabledHacks { get From 8e4a77aba09652b0579fe5da5f1e7b3caaae7556 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 00:09:19 -0600 Subject: [PATCH 11/24] UI: Text in the shader translation slider tooltip --- src/Ryujinx/UI/ViewModels/SettingsViewModel.cs | 4 +++- src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 0afa01fc2..8126b3c7d 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -300,6 +300,8 @@ namespace Ryujinx.Ava.UI.ViewModels OnPropertyChanged(); } } + + public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; public int ShaderTranslationDelay { @@ -308,7 +310,7 @@ namespace Ryujinx.Ava.UI.ViewModels { _shaderTranslationSleepDelay = value; - OnPropertyChanged(); + OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b4e3437ff..c6a61dfad 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -56,7 +56,7 @@ Date: Mon, 30 Dec 2024 00:09:31 -0600 Subject: [PATCH 12/24] misc: chore: Cleanup DummyHardwareDeviceDriver.cs --- .../Backends/Dummy/DummyHardwareDeviceDriver.cs | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs b/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs index 3a3c1d1b1..5991b816f 100644 --- a/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs +++ b/src/Ryujinx.Audio/Backends/Dummy/DummyHardwareDeviceDriver.cs @@ -9,20 +9,12 @@ namespace Ryujinx.Audio.Backends.Dummy { public class DummyHardwareDeviceDriver : IHardwareDeviceDriver { - private readonly ManualResetEvent _updateRequiredEvent; - private readonly ManualResetEvent _pauseEvent; + private readonly ManualResetEvent _updateRequiredEvent = new(false); + private readonly ManualResetEvent _pauseEvent = new(true); public static bool IsSupported => true; - public float Volume { get; set; } - - public DummyHardwareDeviceDriver() - { - _updateRequiredEvent = new ManualResetEvent(false); - _pauseEvent = new ManualResetEvent(true); - - Volume = 1f; - } + public float Volume { get; set; } = 1f; public IHardwareDeviceSession OpenDeviceSession(Direction direction, IVirtualMemoryManager memoryManager, SampleFormat sampleFormat, uint sampleRate, uint channelCount) { @@ -60,7 +52,7 @@ namespace Ryujinx.Audio.Backends.Dummy Dispose(true); } - protected virtual void Dispose(bool disposing) + private void Dispose(bool disposing) { if (disposing) { From da8ea060742fce81d1767c595478c3700fe39f84 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 00:14:55 -0600 Subject: [PATCH 13/24] misc: Small cleanups --- src/Ryujinx.Common/Configuration/DirtyHacks.cs | 4 ++-- .../Configuration/ConfigurationState.Migration.cs | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx.Common/Configuration/DirtyHacks.cs b/src/Ryujinx.Common/Configuration/DirtyHacks.cs index d874b226c..1015e95d1 100644 --- a/src/Ryujinx.Common/Configuration/DirtyHacks.cs +++ b/src/Ryujinx.Common/Configuration/DirtyHacks.cs @@ -17,7 +17,7 @@ namespace Ryujinx.Common.Configuration public ulong Pack() => BitTricks.PackBitFields([(uint)Hack, (uint)Value], PackedFormat); - public static EnabledDirtyHack FromPacked(ulong packedHack) + public static EnabledDirtyHack Unpack(ulong packedHack) { var unpackedFields = BitTricks.UnpackBitFields(packedHack, PackedFormat); if (unpackedFields is not [var hack, var value]) @@ -39,7 +39,7 @@ namespace Ryujinx.Common.Configuration public DirtyHackCollection(ulong[] packedHacks) { - foreach ((DirtyHacks dirtyHacks, int value) in packedHacks.Select(EnabledDirtyHack.FromPacked)) + foreach ((DirtyHacks dirtyHacks, int value) in packedHacks.Select(EnabledDirtyHack.Unpack)) { Add(dirtyHacks, value); } diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs index 812092688..c16872a61 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Migration.cs @@ -752,11 +752,12 @@ namespace Ryujinx.Ava.Utilities.Configuration Hacks.ShowDirtyHacks.Value = configurationFileFormat.ShowDirtyHacks; { - EnabledDirtyHack[] hacks = (configurationFileFormat.DirtyHacks ?? []).Select(EnabledDirtyHack.FromPacked).ToArray(); + EnabledDirtyHack[] hacks = (configurationFileFormat.DirtyHacks ?? []).Select(EnabledDirtyHack.Unpack).ToArray(); Hacks.Xc2MenuSoftlockFix.Value = hacks.Any(it => it.Hack == DirtyHacks.Xc2MenuSoftlockFix); - - var shaderCompilationThreadSleep = hacks.FirstOrDefault(it => it.Hack == DirtyHacks.ShaderCompilationThreadSleep); + + var shaderCompilationThreadSleep = hacks.FirstOrDefault(it => + it.Hack == DirtyHacks.ShaderCompilationThreadSleep); Hacks.EnableShaderCompilationThreadSleep.Value = shaderCompilationThreadSleep != null; Hacks.ShaderCompilationThreadSleepDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; } From 4082ebad1a82de3a9f8a201a744d85578aead994 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 00:35:43 -0600 Subject: [PATCH 14/24] Fix PR builds --- distribution/linux/appimage/build-appimage.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/linux/appimage/build-appimage.sh b/distribution/linux/appimage/build-appimage.sh index 5c32d78a8..9b52928f8 100755 --- a/distribution/linux/appimage/build-appimage.sh +++ b/distribution/linux/appimage/build-appimage.sh @@ -13,7 +13,7 @@ mkdir -p AppDir/usr/bin cp distribution/linux/Ryujinx.desktop AppDir/Ryujinx.desktop cp distribution/linux/appimage/AppRun AppDir/AppRun -cp src/Ryujinx.UI.Common/Resources/Logo_Ryujinx.png AppDir/Ryujinx.svg +cp distribution/misc/Logo.svg AppDir/Ryujinx.svg cp -r "$BUILDDIR"/* AppDir/usr/bin/ From ec1020b165502145afca2089a44b21ec305d2108 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 01:10:40 -0600 Subject: [PATCH 15/24] UI: Dirty hacks clarification [ci skip] --- src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index c6a61dfad..b597706df 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -29,7 +29,7 @@ + Text="Game-specific hacks & tricks to alleviate performance issues or crashing. Will cause issues." /> Date: Mon, 30 Dec 2024 08:12:51 +0100 Subject: [PATCH 16/24] Shader translation delay hack (#469) A workaround to avoid a freeze when translating shaders with the Metal backend, that would happen after changing version or going from Vulkan to Metal. Adds a delay in milliseconds, configurable in the UI behind the Dirty Hacks mechanism. --------- Co-authored-by: Evan Husted --- .../Shader/DiskCache/ParallelDiskCacheLoader.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs index 74922d1e3..9aa96a76f 100644 --- a/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs +++ b/src/Ryujinx.Graphics.Gpu/Shader/DiskCache/ParallelDiskCacheLoader.cs @@ -1,3 +1,4 @@ +using Ryujinx.Common.Configuration; using Ryujinx.Common.Logging; using Ryujinx.Graphics.GAL; using Ryujinx.Graphics.Shader; @@ -366,6 +367,9 @@ namespace Ryujinx.Graphics.Gpu.Shader.DiskCache { try { + if (_context.DirtyHacks.IsEnabled(DirtyHacks.ShaderCompilationThreadSleep)) + Thread.Sleep(_context.DirtyHacks[DirtyHacks.ShaderCompilationThreadSleep]); + AsyncProgramTranslation asyncTranslation = new(guestShaders, specState, programIndex, isCompute); _asyncTranslationQueue.Add(asyncTranslation, _cancellationToken); } From 0ab5b41c4b2a3dc01ec04a5a72d8ba4374ad2581 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 01:33:07 -0600 Subject: [PATCH 17/24] misc: Move dirty hack related stuff into a separate viewmodel, only show slider when translation delay is enabled. --- .../UI/ViewModels/SettingsHacksViewModel.cs | 77 +++++++++++++++++++ .../UI/ViewModels/SettingsViewModel.cs | 75 +++--------------- .../UI/Views/Settings/SettingsHacksView.axaml | 15 ++-- .../Views/Settings/SettingsHacksView.axaml.cs | 4 - .../UI/Windows/SettingsWindow.axaml.cs | 2 +- .../ConfigurationState.Migration.cs | 4 +- .../Configuration/ConfigurationState.Model.cs | 16 ++-- 7 files changed, 108 insertions(+), 85 deletions(-) create mode 100644 src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs diff --git a/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs new file mode 100644 index 000000000..b93cdd6dc --- /dev/null +++ b/src/Ryujinx/UI/ViewModels/SettingsHacksViewModel.cs @@ -0,0 +1,77 @@ +using Gommon; +using Ryujinx.Ava.Utilities.Configuration; + +namespace Ryujinx.Ava.UI.ViewModels +{ + public class SettingsHacksViewModel : BaseModel + { + private readonly SettingsViewModel _baseViewModel; + + public SettingsHacksViewModel() {} + + public SettingsHacksViewModel(SettingsViewModel settingsVm) + { + _baseViewModel = settingsVm; + } + + private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; + private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderTranslationDelay; + private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderTranslationDelay; + + public bool Xc2MenuSoftlockFixEnabled + { + get => _xc2MenuSoftlockFix; + set + { + _xc2MenuSoftlockFix = value; + + OnPropertyChanged(); + } + } + + public bool ShaderTranslationDelayEnabled + { + get => _shaderTranslationThreadSleep; + set + { + _shaderTranslationThreadSleep = value; + + OnPropertyChanged(); + } + } + + public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; + + public int ShaderTranslationDelay + { + get => _shaderTranslationSleepDelay; + set + { + _shaderTranslationSleepDelay = value; + + OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); + } + } + + public static string Xc2MenuFixTooltip { get; } = Lambda.String(sb => + { + sb.AppendLine( + "This fix applies a 2ms delay (via 'Thread.Sleep(2)') every time the game tries to read data from the emulated Switch filesystem.") + .AppendLine(); + + sb.AppendLine("From the issue on GitHub:").AppendLine(); + sb.Append( + "When clicking very fast from game main menu to 2nd submenu, " + + "there is a low chance that the game will softlock, " + + "the submenu won't show up, while background music is still there."); + }); + + public static string ShaderTranslationDelayTooltip { get; } = Lambda.String(sb => + { + sb.AppendLine("This hack applies the delay you specify every time shaders are attempted to be translated.") + .AppendLine(); + + sb.Append("Configurable via slider, only when this option is enabled."); + }); + } +} diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index 8126b3c7d..a5bdd2f88 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -65,9 +65,7 @@ namespace Ryujinx.Ava.UI.ViewModels private string _ldnPassphrase; private string _ldnServer; - private bool _xc2MenuSoftlockFix = ConfigurationState.Instance.Hacks.Xc2MenuSoftlockFix; - private bool _shaderTranslationThreadSleep = ConfigurationState.Instance.Hacks.EnableShaderCompilationThreadSleep; - private int _shaderTranslationSleepDelay = ConfigurationState.Instance.Hacks.ShaderCompilationThreadSleepDelay; + public SettingsHacksViewModel DirtyHacks { get; } public int ResolutionScale { @@ -279,41 +277,6 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public bool Xc2MenuSoftlockFixEnabled - { - get => _xc2MenuSoftlockFix; - set - { - _xc2MenuSoftlockFix = value; - - OnPropertyChanged(); - } - } - - public bool ShaderTranslationDelayEnabled - { - get => _shaderTranslationThreadSleep; - set - { - _shaderTranslationThreadSleep = value; - - OnPropertyChanged(); - } - } - - public string ShaderTranslationDelayTooltipText => $"Current value: {ShaderTranslationDelay}"; - - public int ShaderTranslationDelay - { - get => _shaderTranslationSleepDelay; - set - { - _shaderTranslationSleepDelay = value; - - OnPropertiesChanged(nameof(ShaderTranslationDelay), nameof(ShaderTranslationDelayTooltipText)); - } - } - public int Language { get; set; } public int Region { get; set; } public int FsGlobalAccessLogMode { get; set; } @@ -426,9 +389,12 @@ namespace Ryujinx.Ava.UI.ViewModels { _virtualFileSystem = virtualFileSystem; _contentManager = contentManager; + if (Program.PreviewerDetached) { Task.Run(LoadTimeZones); + + DirtyHacks = new SettingsHacksViewModel(this); } } @@ -448,6 +414,8 @@ namespace Ryujinx.Ava.UI.ViewModels { Task.Run(LoadAvailableGpus); LoadCurrentConfiguration(); + + DirtyHacks = new SettingsHacksViewModel(this); } } @@ -662,9 +630,9 @@ namespace Ryujinx.Ava.UI.ViewModels OpenglDebugLevel = (int)config.Logger.GraphicsDebugLevel.Value; MultiplayerModeIndex = (int)config.Multiplayer.Mode.Value; - DisableP2P = config.Multiplayer.DisableP2p.Value; - LdnPassphrase = config.Multiplayer.LdnPassphrase.Value; - LdnServer = config.Multiplayer.LdnServer.Value; + DisableP2P = config.Multiplayer.DisableP2p; + LdnPassphrase = config.Multiplayer.LdnPassphrase; + LdnServer = config.Multiplayer.LdnServer; } public void SaveSettings() @@ -788,9 +756,9 @@ namespace Ryujinx.Ava.UI.ViewModels config.Multiplayer.LdnServer.Value = LdnServer; // Dirty Hacks - config.Hacks.Xc2MenuSoftlockFix.Value = Xc2MenuSoftlockFixEnabled; - config.Hacks.EnableShaderCompilationThreadSleep.Value = ShaderTranslationDelayEnabled; - config.Hacks.ShaderCompilationThreadSleepDelay.Value = ShaderTranslationDelay; + config.Hacks.Xc2MenuSoftlockFix.Value = DirtyHacks.Xc2MenuSoftlockFixEnabled; + config.Hacks.EnableShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelayEnabled; + config.Hacks.ShaderTranslationDelay.Value = DirtyHacks.ShaderTranslationDelay; config.ToFileFormat().SaveConfig(Program.ConfigurationPath); @@ -824,24 +792,5 @@ namespace Ryujinx.Ava.UI.ViewModels RevertIfNotSaved(); CloseWindow?.Invoke(); } - - public static string Xc2MenuFixTooltip { get; } = Lambda.String(sb => - { - sb.AppendLine( - "This fix applies a 2ms delay (via 'Thread.Sleep(2)') every time the game tries to read data from the emulated Switch filesystem.") - .AppendLine(); - - sb.AppendLine("From the issue on GitHub:").AppendLine(); - sb.Append( - "When clicking very fast from game main menu to 2nd submenu, " + - "there is a low chance that the game will softlock, " + - "the submenu won't show up, while background music is still there."); - }); - - public static string ShaderTranslationDelayTooltip { get; } = Lambda.String(sb => - { - sb.Append( - "This hack applies the delay you specify every time shaders are attempted to be translated."); - }); } } diff --git a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml index b597706df..087112368 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsHacksView.axaml @@ -34,10 +34,10 @@ Margin="0,10,0,0" Orientation="Horizontal" HorizontalAlignment="Center" - ToolTip.Tip="{Binding Xc2MenuFixTooltip}"> + ToolTip.Tip="{Binding DirtyHacks.Xc2MenuFixTooltip}"> + IsChecked="{Binding DirtyHacks.Xc2MenuSoftlockFixEnabled}"/> @@ -47,16 +47,17 @@ Margin="0,10,0,0" Orientation="Horizontal" HorizontalAlignment="Center" - ToolTip.Tip="{Binding ShaderTranslationDelayTooltip}"> + ToolTip.Tip="{Binding DirtyHacks.ShaderTranslationDelayTooltip}"> + IsChecked="{Binding DirtyHacks.ShaderTranslationDelayEnabled}"/> - it.Hack == DirtyHacks.ShaderCompilationThreadSleep); - Hacks.EnableShaderCompilationThreadSleep.Value = shaderCompilationThreadSleep != null; - Hacks.ShaderCompilationThreadSleepDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; + Hacks.EnableShaderTranslationDelay.Value = shaderCompilationThreadSleep != null; + Hacks.ShaderTranslationDelay.Value = shaderCompilationThreadSleep?.Value ?? 0; } if (configurationFileUpdated) diff --git a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs index ef3d565da..2a91bf65b 100644 --- a/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Utilities/Configuration/ConfigurationState.Model.cs @@ -629,18 +629,18 @@ namespace Ryujinx.Ava.Utilities.Configuration public ReactiveObject Xc2MenuSoftlockFix { get; private set; } - public ReactiveObject EnableShaderCompilationThreadSleep { get; private set; } + public ReactiveObject EnableShaderTranslationDelay { get; private set; } - public ReactiveObject ShaderCompilationThreadSleepDelay { get; private set; } + public ReactiveObject ShaderTranslationDelay { get; private set; } public HacksSection() { ShowDirtyHacks = new ReactiveObject(); Xc2MenuSoftlockFix = new ReactiveObject(); Xc2MenuSoftlockFix.Event += HackChanged; - EnableShaderCompilationThreadSleep = new ReactiveObject(); - EnableShaderCompilationThreadSleep.Event += HackChanged; - ShaderCompilationThreadSleepDelay = new ReactiveObject(); + EnableShaderTranslationDelay = new ReactiveObject(); + EnableShaderTranslationDelay.Event += HackChanged; + ShaderTranslationDelay = new ReactiveObject(); } private void HackChanged(object sender, ReactiveEventArgs rxe) @@ -651,7 +651,7 @@ namespace Ryujinx.Ava.Utilities.Configuration if (newHacks != _lastHackCollection) { RyuLogger.Info?.Print(LogClass.Configuration, - $"EnabledDirtyHacks set to: [{_lastHackCollection}]", "LogValueChange"); + $"EnabledDirtyHacks set to: [{newHacks}]", "LogValueChange"); _lastHackCollection = newHacks; } @@ -668,8 +668,8 @@ namespace Ryujinx.Ava.Utilities.Configuration if (Xc2MenuSoftlockFix) Apply(DirtyHacks.Xc2MenuSoftlockFix); - if (EnableShaderCompilationThreadSleep) - Apply(DirtyHacks.ShaderCompilationThreadSleep, ShaderCompilationThreadSleepDelay); + if (EnableShaderTranslationDelay) + Apply(DirtyHacks.ShaderCompilationThreadSleep, ShaderTranslationDelay); return enabledHacks.ToArray(); From e486b902b1ce0fcad8d76701b24784072e343160 Mon Sep 17 00:00:00 2001 From: WilliamWsyHK Date: Mon, 30 Dec 2024 15:53:06 +0800 Subject: [PATCH 18/24] Skip processing application for LDN if it does not have control holder (#460) [ci-skip] --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 0b1c356d4..e5a815b28 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -170,7 +170,7 @@ namespace Ryujinx.Ava.UI.Windows { var ldnGameDataArray = e.LdnData.ToList(); ViewModel.LdnData.Clear(); - foreach (var application in ViewModel.Applications) + foreach (var application in ViewModel.Applications.Where(it => it.HasControlHolder)) { ref var controlHolder = ref application.ControlHolder.Value; From 699e1962b1427b296b2c408211ccf31ec00a141f Mon Sep 17 00:00:00 2001 From: Marco Carvalho Date: Mon, 30 Dec 2024 04:53:43 -0300 Subject: [PATCH 19/24] Prefer 'Convert.ToHexString' over call chains based on 'BitConverter.ToString' (#428) [ci-skip] Co-authored-by: Evan Husted --- .../Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs index 03063cb53..dffcf9c3f 100644 --- a/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs +++ b/src/Ryujinx.HLE/HOS/Services/Nfc/AmiiboDecryption/AmiiboBinReader.cs @@ -114,10 +114,10 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption } } - string usedCharacterStr = BitConverter.ToString(usedCharacter).Replace("-", ""); - string variationStr = BitConverter.ToString(variation).Replace("-", ""); - string amiiboIDStr = BitConverter.ToString(amiiboID).Replace("-", ""); - string setIDStr = BitConverter.ToString(setID).Replace("-", ""); + string usedCharacterStr = Convert.ToHexString(usedCharacter); + string variationStr = Convert.ToHexString(variation); + string amiiboIDStr = Convert.ToHexString(amiiboID); + string setIDStr = Convert.ToHexString(setID); string head = usedCharacterStr + variationStr; string tail = amiiboIDStr + setIDStr + "02"; string finalID = head + tail; @@ -289,8 +289,8 @@ namespace Ryujinx.HLE.HOS.Services.Nfc.AmiiboDecryption private static void LogFinalData(byte[] titleId, byte[] appId, string head, string tail, string finalID, string nickName, DateTime initDateTime, DateTime writeDateTime, ushort settingsValue, ushort writeCounterValue, byte[] applicationAreas) { - Logger.Debug?.Print(LogClass.ServiceNfp, $"Title ID: 0x{BitConverter.ToString(titleId).Replace("-", "")}"); - Logger.Debug?.Print(LogClass.ServiceNfp, $"Application Program ID: 0x{BitConverter.ToString(appId).Replace("-", "")}"); + Logger.Debug?.Print(LogClass.ServiceNfp, $"Title ID: 0x{Convert.ToHexString(titleId)}"); + Logger.Debug?.Print(LogClass.ServiceNfp, $"Application Program ID: 0x{Convert.ToHexString(appId)}"); Logger.Debug?.Print(LogClass.ServiceNfp, $"Head: {head}"); Logger.Debug?.Print(LogClass.ServiceNfp, $"Tail: {tail}"); Logger.Debug?.Print(LogClass.ServiceNfp, $"Final ID: {finalID}"); From b2e1e553e419dc7bd2212e347a9acedaa2464595 Mon Sep 17 00:00:00 2001 From: LotP1 <68976644+LotP1@users.noreply.github.com> Date: Mon, 30 Dec 2024 08:54:25 +0100 Subject: [PATCH 20/24] Validation Project v2 (#444) Refactor of the Validation System for more ease of use in the future. The project now builds a standalone executable and executes it before the main project is built or published. Since it is now a standalone executable we are also able to use .NET Core features as we are no longer locked to netstandard. The project currently includes 1 task, LocalesValidationTask, that will check if the locales.json file has any of the following issues: The json is invalid. The json has locales with missing languages. The json has locales with langauges that are just duplicates of the en_US field. If the project is built or published locally it will also fix any missing languages or duplicate fields. --------- Co-authored-by: Evan Husted Co-authored-by: Evan Husted --- Ryujinx.sln | 5 +- .../LocaleValidationTask.cs | 73 ----- .../LocalesValidationTask.cs | 117 +++++++ src/Ryujinx.BuildValidationTasks/Program.cs | 37 +++ .../Ryujinx.BuildValidationTasks.csproj | 19 +- .../ValidationTask.cs | 7 + src/Ryujinx/Assets/locales.json | 298 +++++++++--------- src/Ryujinx/Ryujinx.csproj | 10 +- 8 files changed, 327 insertions(+), 239 deletions(-) delete mode 100644 src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs create mode 100644 src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs create mode 100644 src/Ryujinx.BuildValidationTasks/Program.cs create mode 100644 src/Ryujinx.BuildValidationTasks/ValidationTask.cs diff --git a/Ryujinx.sln b/Ryujinx.sln index 373572178..9e197e85f 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -249,13 +249,12 @@ Global {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs deleted file mode 100644 index 6dc3d8aa8..000000000 --- a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using Microsoft.Build.Utilities; -using System.Collections.Generic; -using System.Linq; -using System.IO; -using Newtonsoft.Json; -using Microsoft.Build.Framework; - -namespace Ryujinx.BuildValidationTasks -{ - public class LocaleValidationTask : Task - { - public override bool Execute() - { - string path = System.Reflection.Assembly.GetExecutingAssembly().Location; - - if (path.Split(["src"], StringSplitOptions.None).Length == 1) - { - //i assume that we are in a build directory in the solution dir - path = new FileInfo(path).Directory!.Parent!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - else - { - path = path.Split(["src"], StringSplitOptions.None)[0]; - path = new FileInfo(path).Directory!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; - } - - string data; - - using (StreamReader sr = new(path)) - { - data = sr.ReadToEnd(); - } - - LocalesJson json = JsonConvert.DeserializeObject(data); - - for (int i = 0; i < json.Locales.Count; i++) - { - LocalesEntry locale = json.Locales[i]; - - foreach (string langCode in json.Languages.Where(it => !locale.Translations.ContainsKey(it))) - { - locale.Translations.Add(langCode, string.Empty); - Log.LogMessage(MessageImportance.High, $"Added '{langCode}' to Locale '{locale.ID}'"); - } - - locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); - json.Locales[i] = locale; - } - - string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); - - using (StreamWriter sw = new(path)) - { - sw.Write(jsonString); - } - - return true; - } - - struct LocalesJson - { - public List Languages { get; set; } - public List Locales { get; set; } - } - - struct LocalesEntry - { - public string ID { get; set; } - public Dictionary Translations { get; set; } - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs new file mode 100644 index 000000000..05eaee539 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using System.Text.Json; +using System.Text.Encodings.Web; + +namespace Ryujinx.BuildValidationTasks +{ + public class LocalesValidationTask : ValidationTask + { + public LocalesValidationTask() { } + + public bool Execute(string projectPath, bool isGitRunner) + { + Console.WriteLine("Running Locale Validation Task..."); + + string path = projectPath + "src/Ryujinx/Assets/locales.json"; + string data; + + using (StreamReader sr = new(path)) + { + data = sr.ReadToEnd(); + } + + LocalesJson json; + + if (isGitRunner && data.Contains("\r\n")) + throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix..."); + + try + { + json = JsonSerializer.Deserialize(data); + + } + catch (JsonException e) + { + throw new JsonException(e.Message); //shorter and easier stacktrace + } + + + + bool encounteredIssue = false; + + for (int i = 0; i < json.Locales.Count; i++) + { + LocalesEntry locale = json.Locales[i]; + + foreach (string langCode in json.Languages.Where(lang => !locale.Translations.ContainsKey(lang))) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations.Add(langCode, string.Empty); + Console.WriteLine($"Added '{langCode}' to Locale '{locale.ID}'"); + } + else + { + Console.WriteLine($"Missing '{langCode}' in Locale '{locale.ID}'!"); + } + } + + foreach (string langCode in json.Languages.Where(lang => locale.Translations.ContainsKey(lang) && lang != "en_US" && locale.Translations[lang] == locale.Translations["en_US"])) + { + encounteredIssue = true; + + if (!isGitRunner) + { + locale.Translations[langCode] = string.Empty; + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'! Resetting it..."); + } + else + { + Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'!"); + } + } + + locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); + json.Locales[i] = locale; + } + + if (isGitRunner && encounteredIssue) + throw new JsonException("1 or more locales are invalid!"); + + JsonSerializerOptions jsonOptions = new JsonSerializerOptions() + { + WriteIndented = true, + NewLine = "\n", + Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping + }; + + string jsonString = JsonSerializer.Serialize(json, jsonOptions); + + using (StreamWriter sw = new(path)) + { + sw.Write(jsonString); + } + + Console.WriteLine("Finished Locale Validation Task!"); + + return true; + } + + struct LocalesJson + { + public List Languages { get; set; } + public List Locales { get; set; } + } + + struct LocalesEntry + { + public string ID { get; set; } + public Dictionary Translations { get; set; } + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Program.cs b/src/Ryujinx.BuildValidationTasks/Program.cs new file mode 100644 index 000000000..ed1cee490 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/Program.cs @@ -0,0 +1,37 @@ +using System; +using System.IO; +using System.Linq; + +namespace Ryujinx.BuildValidationTasks +{ + public class Program + { + static void Main(string[] args) + { + // Display the number of command line arguments. + if (args.Length == 0) + throw new ArgumentException("Error: too few arguments!"); + + string path = args[0]; + + if (string.IsNullOrEmpty(path)) + throw new ArgumentException("Error: path is null or empty!"); + + if (!Path.Exists(path)) + throw new FileLoadException($"path {{{path}}} does not exist!"); + + path = Path.GetFullPath(path); + + if (!Directory.GetDirectories(path).Contains($"{path}src")) + throw new FileLoadException($"path {{{path}}} is not a valid ryujinx project!"); + + bool isGitRunner = path.Contains("runner") || path.Contains("D:\\a\\Ryujinx\\Ryujinx"); + if (isGitRunner) + Console.WriteLine("Is Git Runner!"); + + // Run tasks + // Pass extra info needed in the task constructors + new LocalesValidationTask().Execute(path, isGitRunner); + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj index dbd9492df..d77f3f204 100644 --- a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj +++ b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj @@ -1,19 +1,16 @@ - netstandard2.0 - true + Exe - - - - + + - - - - + - + \ No newline at end of file diff --git a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs new file mode 100644 index 000000000..f11c87f3b --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs @@ -0,0 +1,7 @@ +namespace Ryujinx.BuildValidationTasks +{ + public interface ValidationTask + { + public bool Execute(string projectPath, bool isGitRunner); + } +} diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 6bede7999..31cba38dd 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1564,7 +1564,7 @@ "pl_PL": "Wersja", "pt_BR": "Versão", "ru_RU": "Версия", - "sv_SE": "Version", + "sv_SE": "", "th_TH": "เวอร์ชั่น", "tr_TR": "Sürüm", "uk_UA": "Версія", @@ -2213,8 +2213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ExeFS", - "sv_SE": "ExeFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2263,8 +2263,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RomFS", - "sv_SE": "RomFS", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2310,7 +2310,7 @@ "it_IT": "", "ja_JP": "ロゴ", "ko_KR": "로고", - "no_NO": "Logo", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Лого", @@ -3260,11 +3260,11 @@ "it_IT": "Sistema", "ja_JP": "システム", "ko_KR": "시스템", - "no_NO": "System", + "no_NO": "", "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", - "sv_SE": "System", + "sv_SE": "", "th_TH": "ระบบ", "tr_TR": "Sistem", "uk_UA": "Система", @@ -3335,11 +3335,11 @@ "it_IT": "Giappone", "ja_JP": "日本", "ko_KR": "일본", - "no_NO": "Japan", + "no_NO": "", "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", - "sv_SE": "Japan", + "sv_SE": "", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonya", "uk_UA": "Японія", @@ -3360,11 +3360,11 @@ "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", "ko_KR": "미국", - "no_NO": "USA", + "no_NO": "", "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", - "sv_SE": "USA", + "sv_SE": "", "th_TH": "สหรัฐอเมริกา", "tr_TR": "ABD", "uk_UA": "США", @@ -3410,7 +3410,7 @@ "it_IT": "", "ja_JP": "オーストラリア", "ko_KR": "호주", - "no_NO": "Australia", + "no_NO": "", "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", @@ -3460,11 +3460,11 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "Korea", + "no_NO": "", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", - "sv_SE": "Korea", + "sv_SE": "", "th_TH": "เกาหลี", "tr_TR": "Kore", "uk_UA": "Корея", @@ -3485,11 +3485,11 @@ "it_IT": "", "ja_JP": "台湾", "ko_KR": "대만", - "no_NO": "Taiwan", + "no_NO": "", "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", - "sv_SE": "Taiwan", + "sv_SE": "", "th_TH": "ไต้หวัน", "tr_TR": "Tayvan", "uk_UA": "Тайвань", @@ -3955,7 +3955,7 @@ "el_GR": "Ζώνη Ώρας Συστήματος:", "en_US": "System Time Zone:", "es_ES": "Zona horaria del sistema:", - "fr_FR": "Fuseau horaire du système :", + "fr_FR": "Fuseau horaire du système\u00A0:", "he_IL": "אזור זמן מערכת:", "it_IT": "Fuso orario del sistema:", "ja_JP": "タイムゾーン:", @@ -4135,11 +4135,11 @@ "it_IT": "", "ja_JP": "ダミー", "ko_KR": "더미", - "no_NO": "Dummy", + "no_NO": "", "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", - "sv_SE": "Dummy", + "sv_SE": "", "th_TH": "", "tr_TR": "Yapay", "uk_UA": "", @@ -4163,8 +4163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "OpenAL", - "sv_SE": "OpenAL", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4188,8 +4188,8 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "SoundIO", - "sv_SE": "SoundIO", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4213,8 +4213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "SDL2", - "sv_SE": "SDL2", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4230,12 +4230,12 @@ "el_GR": "Μικροδιορθώσεις", "en_US": "Hacks", "es_ES": "", - "fr_FR": "Hacks", + "fr_FR": "", "he_IL": "האצות", "it_IT": "Espedienti", "ja_JP": "ハック", "ko_KR": "핵", - "no_NO": "Hacks", + "no_NO": "", "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", @@ -4314,7 +4314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "4ГиБ", - "sv_SE": "4GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "4Гб", @@ -4339,7 +4339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "6ГиБ", - "sv_SE": "6GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "6Гб", @@ -4364,7 +4364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "8ГиБ", - "sv_SE": "8GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "8Гб", @@ -4389,7 +4389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "12ГиБ", - "sv_SE": "12GiB", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "12Гб", @@ -4585,11 +4585,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배", - "no_NO": "2x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x", - "sv_SE": "2x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4610,11 +4610,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4배", - "no_NO": "4x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4x", - "sv_SE": "4x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4635,11 +4635,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8배", - "no_NO": "8x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8x", - "sv_SE": "8x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4660,11 +4660,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "16배", - "no_NO": "16x", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16x", - "sv_SE": "16x", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4760,11 +4760,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배(1440p/2160p)", - "no_NO": "2x (1440p/2160p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2x (1440p/2160p)", - "sv_SE": "2x (1440p/2160p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4785,11 +4785,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "3배(2160p/3240p)", - "no_NO": "3x (2160p/3240p)", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3x (2160p/3240p)", - "sv_SE": "3x (2160p/3240p)", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4863,8 +4863,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4:3", - "sv_SE": "4:3", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4888,8 +4888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:9", - "sv_SE": "16:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4913,8 +4913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "16:10", - "sv_SE": "16:10", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4938,8 +4938,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "21:9", - "sv_SE": "21:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4960,11 +4960,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "32:9", + "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "32:9", - "sv_SE": "32:9", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -5060,7 +5060,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -5085,7 +5085,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "Logging", + "no_NO": "", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -6113,8 +6113,8 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "Pro Controller", - "sv_SE": "Pro Controller", + "ru_RU": "", + "sv_SE": "", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", "uk_UA": "Контролер Pro", @@ -8088,8 +8088,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Enter", - "sv_SE": "Enter", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8114,7 +8114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Esc", - "sv_SE": "Escape", + "sv_SE": "", "th_TH": "", "tr_TR": "Esc", "uk_UA": "", @@ -8163,8 +8163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Tab", - "sv_SE": "Tab", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8188,8 +8188,8 @@ "no_NO": "Tilbaketast", "pl_PL": "", "pt_BR": "", - "ru_RU": "Backspace", - "sv_SE": "Backspace", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "Geri tuşu", "uk_UA": "", @@ -8213,8 +8213,8 @@ "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", - "ru_RU": "Insert", - "sv_SE": "Insert", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8238,8 +8238,8 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "Delete", - "sv_SE": "Delete", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8263,8 +8263,8 @@ "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Up", - "sv_SE": "Page Up", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8288,8 +8288,8 @@ "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", - "ru_RU": "Page Down", - "sv_SE": "Page Down", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8313,8 +8313,8 @@ "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", - "ru_RU": "Home", - "sv_SE": "Home", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8338,8 +8338,8 @@ "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", - "ru_RU": "End", - "sv_SE": "End", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8363,8 +8363,8 @@ "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Caps Lock", - "sv_SE": "Caps Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8388,8 +8388,8 @@ "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Scroll Lock", - "sv_SE": "Scroll Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8413,8 +8413,8 @@ "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", - "ru_RU": "Print Screen", - "sv_SE": "Print Screen", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8438,8 +8438,8 @@ "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", - "ru_RU": "Pause", - "sv_SE": "Pause", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8463,8 +8463,8 @@ "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", - "ru_RU": "Num Lock", - "sv_SE": "Num Lock", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8514,7 +8514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 0", - "sv_SE": "Keypad 0", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8539,7 +8539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 1", - "sv_SE": "Keypad 1", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8564,7 +8564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 2", - "sv_SE": "Keypad 2", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8589,7 +8589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 3", - "sv_SE": "Keypad 3", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8614,7 +8614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 4", - "sv_SE": "Keypad 4", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8639,7 +8639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 5", - "sv_SE": "Keypad 5", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8664,7 +8664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 6", - "sv_SE": "Keypad 6", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8689,7 +8689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 7", - "sv_SE": "Keypad 7", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8714,7 +8714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 8", - "sv_SE": "Keypad 8", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8739,7 +8739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 9", - "sv_SE": "Keypad 9", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8889,7 +8889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Enter (блок цифр)", - "sv_SE": "Keypad Enter", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8913,7 +8913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "0", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8938,7 +8938,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "1", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8963,7 +8963,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "2", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8988,7 +8988,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "3", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9013,7 +9013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "4", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9038,7 +9038,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "5", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9063,7 +9063,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "6", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9088,7 +9088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "7", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9113,7 +9113,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "8", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9138,7 +9138,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "9", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9163,7 +9163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "~", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9188,7 +9188,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "`", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9213,7 +9213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9238,7 +9238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9263,7 +9263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "[", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9288,7 +9288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "]", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9313,7 +9313,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ";", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9363,7 +9363,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ",", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9388,7 +9388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": ".", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9413,7 +9413,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "/", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9738,7 +9738,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "-", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9763,7 +9763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "+", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "4", @@ -9789,7 +9789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка меню", - "sv_SE": "Guide", + "sv_SE": "", "th_TH": "", "tr_TR": "Rehber", "uk_UA": "", @@ -12438,7 +12438,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "{0}: {1}", + "ru_RU": "", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -14289,7 +14289,7 @@ "pl_PL": "Seria Amiibo", "pt_BR": "Franquia Amiibo", "ru_RU": "Серия Amiibo", - "sv_SE": "Amiibo Series", + "sv_SE": "", "th_TH": "", "tr_TR": "Amiibo Serisi", "uk_UA": "Серія Amiibo", @@ -15755,7 +15755,7 @@ "el_GR": "", "en_US": "Aspect Ratio applied to the renderer window.\n\nOnly change this if you're using an aspect ratio mod for your game, otherwise the graphics will be stretched.\n\nLeave on 16:9 if unsure.", "es_ES": "Relación de aspecto aplicada a la ventana del renderizador.\n\nSolamente modificar esto si estás utilizando un mod de relación de aspecto para su juego, en cualquier otro caso los gráficos se estirarán.\n\nDejar en 16:9 si no sabe que hacer.", - "fr_FR": "Format d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", + "fr_FR": "Format\u00A0d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format\u00A0d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Proporzioni dello schermo applicate alla finestra di renderizzazione.\n\nCambialo solo se stai usando una mod di proporzioni per il tuo gioco, altrimenti la grafica verrà allungata.\n\nLasciare il 16:9 se incerto.", "ja_JP": "レンダリングウインドウに適用するアスペクト比です.\n\nゲームにアスペクト比を変更する mod を使用している場合のみ変更してください.\n\nわからない場合は16:9のままにしておいてください.\n", @@ -17439,7 +17439,7 @@ "pl_PL": "Wersja {0}", "pt_BR": "Versão {0}", "ru_RU": "Версия {0}", - "sv_SE": "Version {0}", + "sv_SE": "", "th_TH": "เวอร์ชั่น {0}", "tr_TR": "Sürüm {0}", "uk_UA": "Версія {0}", @@ -17664,7 +17664,7 @@ "pl_PL": "", "pt_BR": "Ryujinx - Informação", "ru_RU": "Ryujinx - Информация", - "sv_SE": "Ryujinx - Info", + "sv_SE": "", "th_TH": "Ryujinx – ข้อมูล", "tr_TR": "Ryujinx - Bilgi", "uk_UA": "Ryujin x - Інформація", @@ -18813,8 +18813,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "Amiibo", - "sv_SE": "Amiibo", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19435,7 +19435,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "XCI File Trimmer", + "no_NO": "", "pl_PL": "", "pt_BR": "", "ru_RU": "Уменьшение размера XCI файлов", @@ -19639,7 +19639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "{0:n0} Мб", - "sv_SE": "{0:n0} Mb", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "{0:n0} Мб", @@ -20914,7 +20914,7 @@ "pl_PL": "Głoś", "pt_BR": "", "ru_RU": "Громкость", - "sv_SE": "Vol", + "sv_SE": "", "th_TH": "ระดับเสียง", "tr_TR": "Ses", "uk_UA": "Гуч.", @@ -21055,7 +21055,7 @@ "el_GR": "Όνομα", "en_US": "Name", "es_ES": "Nombre", - "fr_FR": "Nom ", + "fr_FR": "Nom\u00A0", "he_IL": "שם", "it_IT": "Nome", "ja_JP": "名称", @@ -21388,8 +21388,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "FSR", - "sv_SE": "FSR", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21888,8 +21888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "ldn_mitm", - "sv_SE": "ldn_mitm", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21913,8 +21913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "RyuLDN", - "sv_SE": "RyuLDN", + "ru_RU": "", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22214,7 +22214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вертикальная синхронизация:", - "sv_SE": "VSync:", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", @@ -22255,7 +22255,7 @@ "el_GR": "", "en_US": "Switch", "es_ES": "", - "fr_FR": "Switch", + "fr_FR": "", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -22264,7 +22264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Консоль", - "sv_SE": "Switch", + "sv_SE": "", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22598,4 +22598,4 @@ } } ] -} +} \ No newline at end of file diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 9d23b0909..37f23dc41 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -13,9 +13,13 @@ $(DefaultItemExcludes);._* - - - + + + + + + + From 7cbbd029737b056cc2738da32439f0aa763b2371 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:02:55 -0600 Subject: [PATCH 21/24] misc: New Solution Format (.SLNX) --- Ryujinx.sln | 269 --------------------------------------------------- Ryujinx.slnx | 52 ++++++++++ 2 files changed, 52 insertions(+), 269 deletions(-) delete mode 100644 Ryujinx.sln create mode 100644 Ryujinx.slnx diff --git a/Ryujinx.sln b/Ryujinx.sln deleted file mode 100644 index 9e197e85f..000000000 --- a/Ryujinx.sln +++ /dev/null @@ -1,269 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.1.32228.430 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE", "src\Ryujinx.HLE\Ryujinx.HLE.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.ShaderTools", "src\Ryujinx.ShaderTools\Ryujinx.ShaderTools.csproj", "{3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "src\Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARMeilleure", "src\ARMeilleure\ARMeilleure.csproj", "{ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Gpu", "src\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj", "{ADA7EA87-0D63-4D97-9433-922A2124401F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.GAL", "src\Ryujinx.Graphics.GAL\Ryujinx.Graphics.GAL.csproj", "{A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.OpenGL", "src\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj", "{9558FB96-075D-4219-8FFF-401979DC0B69}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Texture", "src\Ryujinx.Graphics.Texture\Ryujinx.Graphics.Texture.csproj", "{E1B1AD28-289D-47B7-A106-326972240207}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", "src\Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj", "{03B955CD-AD84-4B93-AAA7-BF17923BBAA5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "src\Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio", "src\Ryujinx.Audio\Ryujinx.Audio.csproj", "{806ACF6D-90B0-45D0-A1AC-5F220F3B3985}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Memory", "src\Ryujinx.Memory\Ryujinx.Memory.csproj", "{A5E6C691-9E22-4263-8F40-42F002CE66BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Memory", "src\Ryujinx.Tests.Memory\Ryujinx.Tests.Memory.csproj", "{D1CC5322-7325-4F6B-9625-194B30BE1296}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Cpu", "src\Ryujinx.Cpu\Ryujinx.Cpu.csproj", "{3DF35E3D-D844-4399-A9A1-A9E923264C17}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Device", "src\Ryujinx.Graphics.Device\Ryujinx.Graphics.Device.csproj", "{C3002C3C-7B09-4FE7-894A-372EDA22FC6E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Host1x", "src\Ryujinx.Graphics.Host1x\Ryujinx.Graphics.Host1x.csproj", "{C35F1536-7DE5-4F9D-9604-B5B4E1561947}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.Vp9", "src\Ryujinx.Graphics.Nvdec.Vp9\Ryujinx.Graphics.Nvdec.Vp9.csproj", "{B9AECA11-E248-4886-A10B-81B631CAAF29}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vic", "src\Ryujinx.Graphics.Vic\Ryujinx.Graphics.Vic.csproj", "{81BB2C11-9408-4EA3-822E-42987AF54429}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SoundIo", "src\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj", "{716364DE-B988-41A6-BAB4-327964266ECC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input", "src\Ryujinx.Input\Ryujinx.Input.csproj", "{C16F112F-38C3-40BC-9F5F-4791112063D6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input.SDL2", "src\Ryujinx.Input.SDL2\Ryujinx.Input.SDL2.csproj", "{DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\Ryujinx.SDL2.Common\Ryujinx.SDL2.Common.csproj", "{2D5D3A1D-5730-4648-B0AB-06C53CB910C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.LocaleGenerator", "src\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon", "src\Ryujinx.Horizon\Ryujinx.Horizon.csproj", "{AF34127A-3A92-43E5-8496-14960A50B1F1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" - ProjectSection(ProjectDependencies) = postProject - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - .github\workflows\build.yml = .github\workflows\build.yml - .github\workflows\canary.yml = .github\workflows\canary.yml - Directory.Packages.props = Directory.Packages.props - .github\workflows\release.yml = .github\workflows\release.yml - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.Build.0 = Release|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.Build.0 = Release|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.Build.0 = Release|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.Build.0 = Release|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.Build.0 = Release|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.Build.0 = Release|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.Build.0 = Release|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.Build.0 = Release|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.Build.0 = Release|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.Build.0 = Debug|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.ActiveCfg = Release|Any CPU - {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.Build.0 = Release|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.Build.0 = Release|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.Build.0 = Release|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.Build.0 = Release|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.Build.0 = Release|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.Build.0 = Release|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.Build.0 = Release|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.Build.0 = Release|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.Build.0 = Release|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.Build.0 = Release|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.Build.0 = Release|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.Build.0 = Release|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.Build.0 = Release|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.Build.0 = Release|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.Build.0 = Release|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.Build.0 = Release|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.Build.0 = Release|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.Build.0 = Release|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.Build.0 = Release|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.Build.0 = Release|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.Build.0 = Release|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.Build.0 = Release|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {110169B3-3328-4730-8AB0-BA05BEF75C1A} - EndGlobalSection -EndGlobal diff --git a/Ryujinx.slnx b/Ryujinx.slnx new file mode 100644 index 000000000..99d038e34 --- /dev/null +++ b/Ryujinx.slnx @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a3888ed7cf685522efa7790e727ea38540e00c69 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:05:40 -0600 Subject: [PATCH 22/24] Revert "misc: New Solution Format (.SLNX)" This reverts commit 7cbbd029737b056cc2738da32439f0aa763b2371. --- Ryujinx.sln | 269 +++++++++++++++++++++++++++++++++++++++++++++++++++ Ryujinx.slnx | 52 ---------- 2 files changed, 269 insertions(+), 52 deletions(-) create mode 100644 Ryujinx.sln delete mode 100644 Ryujinx.slnx diff --git a/Ryujinx.sln b/Ryujinx.sln new file mode 100644 index 000000000..9e197e85f --- /dev/null +++ b/Ryujinx.sln @@ -0,0 +1,269 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32228.430 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests", "src\Ryujinx.Tests\Ryujinx.Tests.csproj", "{EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Unicorn", "src\Ryujinx.Tests.Unicorn\Ryujinx.Tests.Unicorn.csproj", "{D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE", "src\Ryujinx.HLE\Ryujinx.HLE.csproj", "{CB92CFF9-1D62-4D4F-9E88-8130EF61E351}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.ShaderTools", "src\Ryujinx.ShaderTools\Ryujinx.ShaderTools.csproj", "{3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Common", "src\Ryujinx.Common\Ryujinx.Common.csproj", "{5FD4E4F6-8928-4B3C-BE07-28A675C17226}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ARMeilleure", "src\ARMeilleure\ARMeilleure.csproj", "{ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Gpu", "src\Ryujinx.Graphics.Gpu\Ryujinx.Graphics.Gpu.csproj", "{ADA7EA87-0D63-4D97-9433-922A2124401F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.GAL", "src\Ryujinx.Graphics.GAL\Ryujinx.Graphics.GAL.csproj", "{A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.OpenGL", "src\Ryujinx.Graphics.OpenGL\Ryujinx.Graphics.OpenGL.csproj", "{9558FB96-075D-4219-8FFF-401979DC0B69}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Texture", "src\Ryujinx.Graphics.Texture\Ryujinx.Graphics.Texture.csproj", "{E1B1AD28-289D-47B7-A106-326972240207}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Shader", "src\Ryujinx.Graphics.Shader\Ryujinx.Graphics.Shader.csproj", "{03B955CD-AD84-4B93-AAA7-BF17923BBAA5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec", "src\Ryujinx.Graphics.Nvdec\Ryujinx.Graphics.Nvdec.csproj", "{85A0FA56-DC01-4A42-8808-70DAC76BD66D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio", "src\Ryujinx.Audio\Ryujinx.Audio.csproj", "{806ACF6D-90B0-45D0-A1AC-5F220F3B3985}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Memory", "src\Ryujinx.Memory\Ryujinx.Memory.csproj", "{A5E6C691-9E22-4263-8F40-42F002CE66BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Tests.Memory", "src\Ryujinx.Tests.Memory\Ryujinx.Tests.Memory.csproj", "{D1CC5322-7325-4F6B-9625-194B30BE1296}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Cpu", "src\Ryujinx.Cpu\Ryujinx.Cpu.csproj", "{3DF35E3D-D844-4399-A9A1-A9E923264C17}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Device", "src\Ryujinx.Graphics.Device\Ryujinx.Graphics.Device.csproj", "{C3002C3C-7B09-4FE7-894A-372EDA22FC6E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Host1x", "src\Ryujinx.Graphics.Host1x\Ryujinx.Graphics.Host1x.csproj", "{C35F1536-7DE5-4F9D-9604-B5B4E1561947}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.Vp9", "src\Ryujinx.Graphics.Nvdec.Vp9\Ryujinx.Graphics.Nvdec.Vp9.csproj", "{B9AECA11-E248-4886-A10B-81B631CAAF29}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vic", "src\Ryujinx.Graphics.Vic\Ryujinx.Graphics.Vic.csproj", "{81BB2C11-9408-4EA3-822E-42987AF54429}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Video", "src\Ryujinx.Graphics.Video\Ryujinx.Graphics.Video.csproj", "{FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.OpenAL", "src\Ryujinx.Audio.Backends.OpenAL\Ryujinx.Audio.Backends.OpenAL.csproj", "{0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SoundIo", "src\Ryujinx.Audio.Backends.SoundIo\Ryujinx.Audio.Backends.SoundIo.csproj", "{716364DE-B988-41A6-BAB4-327964266ECC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input", "src\Ryujinx.Input\Ryujinx.Input.csproj", "{C16F112F-38C3-40BC-9F5F-4791112063D6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Input.SDL2", "src\Ryujinx.Input.SDL2\Ryujinx.Input.SDL2.csproj", "{DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.SDL2.Common", "src\Ryujinx.SDL2.Common\Ryujinx.SDL2.Common.csproj", "{2D5D3A1D-5730-4648-B0AB-06C53CB910C0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Audio.Backends.SDL2", "src\Ryujinx.Audio.Backends.SDL2\Ryujinx.Audio.Backends.SDL2.csproj", "{D99A395A-8569-4DB0-B336-900647890052}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Nvdec.FFmpeg", "src\Ryujinx.Graphics.Nvdec.FFmpeg\Ryujinx.Graphics.Nvdec.FFmpeg.csproj", "{BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx", "src\Ryujinx\Ryujinx.csproj", "{7C1B2721-13DA-4B62-B046-C626605ECCE6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Generators", "src\Ryujinx.Horizon.Generators\Ryujinx.Horizon.Generators.csproj", "{6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Graphics.Vulkan", "src\Ryujinx.Graphics.Vulkan\Ryujinx.Graphics.Vulkan.csproj", "{D4D09B08-D580-4D69-B886-C35D2853F6C8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Spv.Generator", "src\Spv.Generator\Spv.Generator.csproj", "{2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.UI.LocaleGenerator", "src\Ryujinx.UI.LocaleGenerator\Ryujinx.UI.LocaleGenerator.csproj", "{77D01AD9-2C98-478E-AE1D-8F7100738FB4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Common", "src\Ryujinx.Horizon.Common\Ryujinx.Horizon.Common.csproj", "{77F96ECE-4952-42DB-A528-DED25572A573}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon", "src\Ryujinx.Horizon\Ryujinx.Horizon.csproj", "{AF34127A-3A92-43E5-8496-14960A50B1F1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.Horizon.Kernel.Generators", "src\Ryujinx.Horizon.Kernel.Generators\Ryujinx.Horizon.Kernel.Generators.csproj", "{7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ryujinx.HLE.Generators", "src\Ryujinx.HLE.Generators\Ryujinx.HLE.Generators.csproj", "{B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal", "src\Ryujinx.Graphics.Metal\Ryujinx.Graphics.Metal.csproj", "{C08931FA-1191-417A-864F-3882D93E683B}" + ProjectSection(ProjectDependencies) = postProject + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} = {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.BuildValidationTasks", "src\Ryujinx.BuildValidationTasks\Ryujinx.BuildValidationTasks.csproj", "{4A89A234-4F19-497D-A576-DDE8CDFC5B22}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ryujinx.Graphics.Metal.SharpMetalExtensions", "src/Ryujinx.Graphics.Metal.SharpMetalExtensions\Ryujinx.Graphics.Metal.SharpMetalExtensions.csproj", "{81EA598C-DBA1-40B0-8DA4-4796B78F2037}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{36F870C1-3E5F-485F-B426-F0645AF78751}" + ProjectSection(SolutionItems) = preProject + .editorconfig = .editorconfig + .github\workflows\build.yml = .github\workflows\build.yml + .github\workflows\canary.yml = .github\workflows\canary.yml + Directory.Packages.props = Directory.Packages.props + .github\workflows\release.yml = .github\workflows\release.yml + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EBB55AEA-C7D7-4DEB-BF96-FA1789E225E9}.Release|Any CPU.Build.0 = Release|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D8F72938-78EF-4E8C-BAFE-531C9C3C8F15}.Release|Any CPU.Build.0 = Release|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB92CFF9-1D62-4D4F-9E88-8130EF61E351}.Release|Any CPU.Build.0 = Release|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3AB294D0-2230-468F-9EB3-BDFCAEAE99A5}.Release|Any CPU.Build.0 = Release|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FD4E4F6-8928-4B3C-BE07-28A675C17226}.Release|Any CPU.Build.0 = Release|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ABF09A5E-2D8B-4B6F-A51D-5CE414DDB15A}.Release|Any CPU.Build.0 = Release|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ADA7EA87-0D63-4D97-9433-922A2124401F}.Release|Any CPU.Build.0 = Release|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A602AE97-91A5-4608-8DF1-EBF4ED7A0B9E}.Release|Any CPU.Build.0 = Release|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9558FB96-075D-4219-8FFF-401979DC0B69}.Release|Any CPU.Build.0 = Release|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1B1AD28-289D-47B7-A106-326972240207}.Release|Any CPU.Build.0 = Release|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03B955CD-AD84-4B93-AAA7-BF17923BBAA5}.Release|Any CPU.Build.0 = Release|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85A0FA56-DC01-4A42-8808-70DAC76BD66D}.Release|Any CPU.Build.0 = Release|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Debug|Any CPU.Build.0 = Debug|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.ActiveCfg = Release|Any CPU + {806ACF6D-90B0-45D0-A1AC-5F220F3B3985}.Release|Any CPU.Build.0 = Release|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5E6C691-9E22-4263-8F40-42F002CE66BE}.Release|Any CPU.Build.0 = Release|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D1CC5322-7325-4F6B-9625-194B30BE1296}.Release|Any CPU.Build.0 = Release|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3DF35E3D-D844-4399-A9A1-A9E923264C17}.Release|Any CPU.Build.0 = Release|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C3002C3C-7B09-4FE7-894A-372EDA22FC6E}.Release|Any CPU.Build.0 = Release|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C35F1536-7DE5-4F9D-9604-B5B4E1561947}.Release|Any CPU.Build.0 = Release|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B9AECA11-E248-4886-A10B-81B631CAAF29}.Release|Any CPU.Build.0 = Release|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81BB2C11-9408-4EA3-822E-42987AF54429}.Release|Any CPU.Build.0 = Release|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD4A2C14-8E3D-4957-ABBE-3C38897B3E2D}.Release|Any CPU.Build.0 = Release|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0BE11899-DF2D-4BDE-B9EE-2489E8D35E7D}.Release|Any CPU.Build.0 = Release|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {716364DE-B988-41A6-BAB4-327964266ECC}.Release|Any CPU.Build.0 = Release|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C16F112F-38C3-40BC-9F5F-4791112063D6}.Release|Any CPU.Build.0 = Release|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DFAB6F2D-B9BF-4AFF-B22B-7684A328EBA3}.Release|Any CPU.Build.0 = Release|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D5D3A1D-5730-4648-B0AB-06C53CB910C0}.Release|Any CPU.Build.0 = Release|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D99A395A-8569-4DB0-B336-900647890052}.Release|Any CPU.Build.0 = Release|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BEE1C184-C9A4-410B-8DFC-FB74D5C93AEB}.Release|Any CPU.Build.0 = Release|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7C1B2721-13DA-4B62-B046-C626605ECCE6}.Release|Any CPU.Build.0 = Release|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AE2A5E8-4C5A-48B9-997B-E1455C0355C6}.Release|Any CPU.Build.0 = Release|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4D09B08-D580-4D69-B886-C35D2853F6C8}.Release|Any CPU.Build.0 = Release|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2BCB3D7A-38C0-4FE7-8FDA-374C6AD56D0E}.Release|Any CPU.Build.0 = Release|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77D01AD9-2C98-478E-AE1D-8F7100738FB4}.Release|Any CPU.Build.0 = Release|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77F96ECE-4952-42DB-A528-DED25572A573}.Release|Any CPU.Build.0 = Release|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF34127A-3A92-43E5-8496-14960A50B1F1}.Release|Any CPU.Build.0 = Release|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F55A45D-4E1D-4A36-ADD3-87F29A285AA2}.Release|Any CPU.Build.0 = Release|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {110169B3-3328-4730-8AB0-BA05BEF75C1A} + EndGlobalSection +EndGlobal diff --git a/Ryujinx.slnx b/Ryujinx.slnx deleted file mode 100644 index 99d038e34..000000000 --- a/Ryujinx.slnx +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From c88518bce27a514b0f49142266b1c128a30a09bf Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:06:24 -0600 Subject: [PATCH 23/24] Revert "Validation Project v2" (#470) Reverts Ryubing/Ryujinx#444 --- Ryujinx.sln | 5 +- .../LocaleValidationTask.cs | 73 +++++ .../LocalesValidationTask.cs | 117 ------- src/Ryujinx.BuildValidationTasks/Program.cs | 37 --- .../Ryujinx.BuildValidationTasks.csproj | 19 +- .../ValidationTask.cs | 7 - src/Ryujinx/Assets/locales.json | 298 +++++++++--------- src/Ryujinx/Ryujinx.csproj | 10 +- 8 files changed, 239 insertions(+), 327 deletions(-) create mode 100644 src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs delete mode 100644 src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs delete mode 100644 src/Ryujinx.BuildValidationTasks/Program.cs delete mode 100644 src/Ryujinx.BuildValidationTasks/ValidationTask.cs diff --git a/Ryujinx.sln b/Ryujinx.sln index 9e197e85f..373572178 100644 --- a/Ryujinx.sln +++ b/Ryujinx.sln @@ -249,12 +249,13 @@ Global {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Debug|Any CPU.Build.0 = Debug|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.ActiveCfg = Release|Any CPU {B575BCDE-2FD8-4A5D-8756-31CDD7FE81F0}.Release|Any CPU.Build.0 = Release|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Debug|Any CPU.Build.0 = Debug|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.ActiveCfg = Release|Any CPU {C08931FA-1191-417A-864F-3882D93E683B}.Release|Any CPU.Build.0 = Release|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A89A234-4F19-497D-A576-DDE8CDFC5B22}.Release|Any CPU.ActiveCfg = Release|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Debug|Any CPU.Build.0 = Debug|Any CPU {81EA598C-DBA1-40B0-8DA4-4796B78F2037}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs new file mode 100644 index 000000000..6dc3d8aa8 --- /dev/null +++ b/src/Ryujinx.BuildValidationTasks/LocaleValidationTask.cs @@ -0,0 +1,73 @@ +using System; +using Microsoft.Build.Utilities; +using System.Collections.Generic; +using System.Linq; +using System.IO; +using Newtonsoft.Json; +using Microsoft.Build.Framework; + +namespace Ryujinx.BuildValidationTasks +{ + public class LocaleValidationTask : Task + { + public override bool Execute() + { + string path = System.Reflection.Assembly.GetExecutingAssembly().Location; + + if (path.Split(["src"], StringSplitOptions.None).Length == 1) + { + //i assume that we are in a build directory in the solution dir + path = new FileInfo(path).Directory!.Parent!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; + } + else + { + path = path.Split(["src"], StringSplitOptions.None)[0]; + path = new FileInfo(path).Directory!.GetDirectories("src")[0].GetDirectories("Ryujinx")[0].GetDirectories("Assets")[0].GetFiles("locales.json")[0].FullName; + } + + string data; + + using (StreamReader sr = new(path)) + { + data = sr.ReadToEnd(); + } + + LocalesJson json = JsonConvert.DeserializeObject(data); + + for (int i = 0; i < json.Locales.Count; i++) + { + LocalesEntry locale = json.Locales[i]; + + foreach (string langCode in json.Languages.Where(it => !locale.Translations.ContainsKey(it))) + { + locale.Translations.Add(langCode, string.Empty); + Log.LogMessage(MessageImportance.High, $"Added '{langCode}' to Locale '{locale.ID}'"); + } + + locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); + json.Locales[i] = locale; + } + + string jsonString = JsonConvert.SerializeObject(json, Formatting.Indented); + + using (StreamWriter sw = new(path)) + { + sw.Write(jsonString); + } + + return true; + } + + struct LocalesJson + { + public List Languages { get; set; } + public List Locales { get; set; } + } + + struct LocalesEntry + { + public string ID { get; set; } + public Dictionary Translations { get; set; } + } + } +} diff --git a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs b/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs deleted file mode 100644 index 05eaee539..000000000 --- a/src/Ryujinx.BuildValidationTasks/LocalesValidationTask.cs +++ /dev/null @@ -1,117 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.IO; -using System.Text.Json; -using System.Text.Encodings.Web; - -namespace Ryujinx.BuildValidationTasks -{ - public class LocalesValidationTask : ValidationTask - { - public LocalesValidationTask() { } - - public bool Execute(string projectPath, bool isGitRunner) - { - Console.WriteLine("Running Locale Validation Task..."); - - string path = projectPath + "src/Ryujinx/Assets/locales.json"; - string data; - - using (StreamReader sr = new(path)) - { - data = sr.ReadToEnd(); - } - - LocalesJson json; - - if (isGitRunner && data.Contains("\r\n")) - throw new FormatException("locales.json is using CRLF line endings! It should be using LF line endings, build locally to fix..."); - - try - { - json = JsonSerializer.Deserialize(data); - - } - catch (JsonException e) - { - throw new JsonException(e.Message); //shorter and easier stacktrace - } - - - - bool encounteredIssue = false; - - for (int i = 0; i < json.Locales.Count; i++) - { - LocalesEntry locale = json.Locales[i]; - - foreach (string langCode in json.Languages.Where(lang => !locale.Translations.ContainsKey(lang))) - { - encounteredIssue = true; - - if (!isGitRunner) - { - locale.Translations.Add(langCode, string.Empty); - Console.WriteLine($"Added '{langCode}' to Locale '{locale.ID}'"); - } - else - { - Console.WriteLine($"Missing '{langCode}' in Locale '{locale.ID}'!"); - } - } - - foreach (string langCode in json.Languages.Where(lang => locale.Translations.ContainsKey(lang) && lang != "en_US" && locale.Translations[lang] == locale.Translations["en_US"])) - { - encounteredIssue = true; - - if (!isGitRunner) - { - locale.Translations[langCode] = string.Empty; - Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'! Resetting it..."); - } - else - { - Console.WriteLine($"Lanugage '{langCode}' is a duplicate of en_US in Locale '{locale.ID}'!"); - } - } - - locale.Translations = locale.Translations.OrderBy(pair => pair.Key).ToDictionary(pair => pair.Key, pair => pair.Value); - json.Locales[i] = locale; - } - - if (isGitRunner && encounteredIssue) - throw new JsonException("1 or more locales are invalid!"); - - JsonSerializerOptions jsonOptions = new JsonSerializerOptions() - { - WriteIndented = true, - NewLine = "\n", - Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping - }; - - string jsonString = JsonSerializer.Serialize(json, jsonOptions); - - using (StreamWriter sw = new(path)) - { - sw.Write(jsonString); - } - - Console.WriteLine("Finished Locale Validation Task!"); - - return true; - } - - struct LocalesJson - { - public List Languages { get; set; } - public List Locales { get; set; } - } - - struct LocalesEntry - { - public string ID { get; set; } - public Dictionary Translations { get; set; } - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/Program.cs b/src/Ryujinx.BuildValidationTasks/Program.cs deleted file mode 100644 index ed1cee490..000000000 --- a/src/Ryujinx.BuildValidationTasks/Program.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.IO; -using System.Linq; - -namespace Ryujinx.BuildValidationTasks -{ - public class Program - { - static void Main(string[] args) - { - // Display the number of command line arguments. - if (args.Length == 0) - throw new ArgumentException("Error: too few arguments!"); - - string path = args[0]; - - if (string.IsNullOrEmpty(path)) - throw new ArgumentException("Error: path is null or empty!"); - - if (!Path.Exists(path)) - throw new FileLoadException($"path {{{path}}} does not exist!"); - - path = Path.GetFullPath(path); - - if (!Directory.GetDirectories(path).Contains($"{path}src")) - throw new FileLoadException($"path {{{path}}} is not a valid ryujinx project!"); - - bool isGitRunner = path.Contains("runner") || path.Contains("D:\\a\\Ryujinx\\Ryujinx"); - if (isGitRunner) - Console.WriteLine("Is Git Runner!"); - - // Run tasks - // Pass extra info needed in the task constructors - new LocalesValidationTask().Execute(path, isGitRunner); - } - } -} diff --git a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj index d77f3f204..dbd9492df 100644 --- a/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj +++ b/src/Ryujinx.BuildValidationTasks/Ryujinx.BuildValidationTasks.csproj @@ -1,16 +1,19 @@ - Exe + netstandard2.0 + true - - + + + + - + + + + - \ No newline at end of file + diff --git a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs b/src/Ryujinx.BuildValidationTasks/ValidationTask.cs deleted file mode 100644 index f11c87f3b..000000000 --- a/src/Ryujinx.BuildValidationTasks/ValidationTask.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Ryujinx.BuildValidationTasks -{ - public interface ValidationTask - { - public bool Execute(string projectPath, bool isGitRunner); - } -} diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 31cba38dd..6bede7999 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -1564,7 +1564,7 @@ "pl_PL": "Wersja", "pt_BR": "Versão", "ru_RU": "Версия", - "sv_SE": "", + "sv_SE": "Version", "th_TH": "เวอร์ชั่น", "tr_TR": "Sürüm", "uk_UA": "Версія", @@ -2213,8 +2213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "ExeFS", + "sv_SE": "ExeFS", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2263,8 +2263,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "RomFS", + "sv_SE": "RomFS", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -2310,7 +2310,7 @@ "it_IT": "", "ja_JP": "ロゴ", "ko_KR": "로고", - "no_NO": "", + "no_NO": "Logo", "pl_PL": "", "pt_BR": "", "ru_RU": "Лого", @@ -3260,11 +3260,11 @@ "it_IT": "Sistema", "ja_JP": "システム", "ko_KR": "시스템", - "no_NO": "", + "no_NO": "System", "pl_PL": "", "pt_BR": "Sistema", "ru_RU": "Система", - "sv_SE": "", + "sv_SE": "System", "th_TH": "ระบบ", "tr_TR": "Sistem", "uk_UA": "Система", @@ -3335,11 +3335,11 @@ "it_IT": "Giappone", "ja_JP": "日本", "ko_KR": "일본", - "no_NO": "", + "no_NO": "Japan", "pl_PL": "Japonia", "pt_BR": "Japão", "ru_RU": "Япония", - "sv_SE": "", + "sv_SE": "Japan", "th_TH": "ญี่ปุ่น", "tr_TR": "Japonya", "uk_UA": "Японія", @@ -3360,11 +3360,11 @@ "it_IT": "Stati Uniti d'America", "ja_JP": "アメリカ", "ko_KR": "미국", - "no_NO": "", + "no_NO": "USA", "pl_PL": "Stany Zjednoczone", "pt_BR": "EUA", "ru_RU": "США", - "sv_SE": "", + "sv_SE": "USA", "th_TH": "สหรัฐอเมริกา", "tr_TR": "ABD", "uk_UA": "США", @@ -3410,7 +3410,7 @@ "it_IT": "", "ja_JP": "オーストラリア", "ko_KR": "호주", - "no_NO": "", + "no_NO": "Australia", "pl_PL": "", "pt_BR": "Austrália", "ru_RU": "Австралия", @@ -3460,11 +3460,11 @@ "it_IT": "Corea", "ja_JP": "韓国", "ko_KR": "한국", - "no_NO": "", + "no_NO": "Korea", "pl_PL": "", "pt_BR": "Coreia", "ru_RU": "Корея", - "sv_SE": "", + "sv_SE": "Korea", "th_TH": "เกาหลี", "tr_TR": "Kore", "uk_UA": "Корея", @@ -3485,11 +3485,11 @@ "it_IT": "", "ja_JP": "台湾", "ko_KR": "대만", - "no_NO": "", + "no_NO": "Taiwan", "pl_PL": "Tajwan", "pt_BR": "", "ru_RU": "Тайвань", - "sv_SE": "", + "sv_SE": "Taiwan", "th_TH": "ไต้หวัน", "tr_TR": "Tayvan", "uk_UA": "Тайвань", @@ -3955,7 +3955,7 @@ "el_GR": "Ζώνη Ώρας Συστήματος:", "en_US": "System Time Zone:", "es_ES": "Zona horaria del sistema:", - "fr_FR": "Fuseau horaire du système\u00A0:", + "fr_FR": "Fuseau horaire du système :", "he_IL": "אזור זמן מערכת:", "it_IT": "Fuso orario del sistema:", "ja_JP": "タイムゾーン:", @@ -4135,11 +4135,11 @@ "it_IT": "", "ja_JP": "ダミー", "ko_KR": "더미", - "no_NO": "", + "no_NO": "Dummy", "pl_PL": "Atrapa", "pt_BR": "Nenhuma", "ru_RU": "Без звука", - "sv_SE": "", + "sv_SE": "Dummy", "th_TH": "", "tr_TR": "Yapay", "uk_UA": "", @@ -4163,8 +4163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "OpenAL", + "sv_SE": "OpenAL", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4188,8 +4188,8 @@ "no_NO": "Lyd Inn/Ut", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "SoundIO", + "sv_SE": "SoundIO", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4213,8 +4213,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "SDL2", + "sv_SE": "SDL2", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4230,12 +4230,12 @@ "el_GR": "Μικροδιορθώσεις", "en_US": "Hacks", "es_ES": "", - "fr_FR": "", + "fr_FR": "Hacks", "he_IL": "האצות", "it_IT": "Espedienti", "ja_JP": "ハック", "ko_KR": "핵", - "no_NO": "", + "no_NO": "Hacks", "pl_PL": "Hacki", "pt_BR": "", "ru_RU": "Хаки", @@ -4314,7 +4314,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "4ГиБ", - "sv_SE": "", + "sv_SE": "4GiB", "th_TH": "", "tr_TR": "", "uk_UA": "4Гб", @@ -4339,7 +4339,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "6ГиБ", - "sv_SE": "", + "sv_SE": "6GiB", "th_TH": "", "tr_TR": "", "uk_UA": "6Гб", @@ -4364,7 +4364,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "8ГиБ", - "sv_SE": "", + "sv_SE": "8GiB", "th_TH": "", "tr_TR": "", "uk_UA": "8Гб", @@ -4389,7 +4389,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "12ГиБ", - "sv_SE": "", + "sv_SE": "12GiB", "th_TH": "", "tr_TR": "", "uk_UA": "12Гб", @@ -4585,11 +4585,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배", - "no_NO": "", + "no_NO": "2x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "2x", + "sv_SE": "2x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4610,11 +4610,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "4배", - "no_NO": "", + "no_NO": "4x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "4x", + "sv_SE": "4x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4635,11 +4635,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "8배", - "no_NO": "", + "no_NO": "8x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "8x", + "sv_SE": "8x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4660,11 +4660,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "16배", - "no_NO": "", + "no_NO": "16x", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "16x", + "sv_SE": "16x", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4760,11 +4760,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "2배(1440p/2160p)", - "no_NO": "", + "no_NO": "2x (1440p/2160p)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "2x (1440p/2160p)", + "sv_SE": "2x (1440p/2160p)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4785,11 +4785,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "3배(2160p/3240p)", - "no_NO": "", + "no_NO": "3x (2160p/3240p)", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "3x (2160p/3240p)", + "sv_SE": "3x (2160p/3240p)", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4863,8 +4863,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "4:3", + "sv_SE": "4:3", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4888,8 +4888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "16:9", + "sv_SE": "16:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4913,8 +4913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "16:10", + "sv_SE": "16:10", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4938,8 +4938,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "21:9", + "sv_SE": "21:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -4960,11 +4960,11 @@ "it_IT": "", "ja_JP": "", "ko_KR": "", - "no_NO": "", + "no_NO": "32:9", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "32:9", + "sv_SE": "32:9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -5060,7 +5060,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "", + "no_NO": "Logging", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -5085,7 +5085,7 @@ "it_IT": "Log", "ja_JP": "ロギング", "ko_KR": "로그 기록", - "no_NO": "", + "no_NO": "Logging", "pl_PL": "Dziennik zdarzeń", "pt_BR": "Log", "ru_RU": "Журналирование", @@ -6113,8 +6113,8 @@ "no_NO": "", "pl_PL": "Pro Kontroler", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Pro Controller", + "sv_SE": "Pro Controller", "th_TH": "โปรคอนโทรลเลอร์", "tr_TR": "Profesyonel Kumanda", "uk_UA": "Контролер Pro", @@ -8088,8 +8088,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Enter", + "sv_SE": "Enter", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8114,7 +8114,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Esc", - "sv_SE": "", + "sv_SE": "Escape", "th_TH": "", "tr_TR": "Esc", "uk_UA": "", @@ -8163,8 +8163,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Tab", + "sv_SE": "Tab", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8188,8 +8188,8 @@ "no_NO": "Tilbaketast", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Backspace", + "sv_SE": "Backspace", "th_TH": "", "tr_TR": "Geri tuşu", "uk_UA": "", @@ -8213,8 +8213,8 @@ "no_NO": "Sett inn", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Insert", + "sv_SE": "Insert", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8238,8 +8238,8 @@ "no_NO": "Slett", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Delete", + "sv_SE": "Delete", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8263,8 +8263,8 @@ "no_NO": "Side opp", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Page Up", + "sv_SE": "Page Up", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8288,8 +8288,8 @@ "no_NO": "Side ned", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Page Down", + "sv_SE": "Page Down", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8313,8 +8313,8 @@ "no_NO": "Hjem", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Home", + "sv_SE": "Home", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8338,8 +8338,8 @@ "no_NO": "Avslutt", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "End", + "sv_SE": "End", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8363,8 +8363,8 @@ "no_NO": "Skiftelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Caps Lock", + "sv_SE": "Caps Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8388,8 +8388,8 @@ "no_NO": "Rullelås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Scroll Lock", + "sv_SE": "Scroll Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8413,8 +8413,8 @@ "no_NO": "Skjermbilde", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Print Screen", + "sv_SE": "Print Screen", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8438,8 +8438,8 @@ "no_NO": "Stans midlertidig", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Pause", + "sv_SE": "Pause", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8463,8 +8463,8 @@ "no_NO": "Numerisk Lås", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Num Lock", + "sv_SE": "Num Lock", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8514,7 +8514,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 0", - "sv_SE": "", + "sv_SE": "Keypad 0", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8539,7 +8539,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 1", - "sv_SE": "", + "sv_SE": "Keypad 1", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8564,7 +8564,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 2", - "sv_SE": "", + "sv_SE": "Keypad 2", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8589,7 +8589,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 3", - "sv_SE": "", + "sv_SE": "Keypad 3", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8614,7 +8614,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 4", - "sv_SE": "", + "sv_SE": "Keypad 4", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8639,7 +8639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 5", - "sv_SE": "", + "sv_SE": "Keypad 5", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8664,7 +8664,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 6", - "sv_SE": "", + "sv_SE": "Keypad 6", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8689,7 +8689,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 7", - "sv_SE": "", + "sv_SE": "Keypad 7", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8714,7 +8714,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 8", - "sv_SE": "", + "sv_SE": "Keypad 8", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8739,7 +8739,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Блок цифр 9", - "sv_SE": "", + "sv_SE": "Keypad 9", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8889,7 +8889,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Enter (блок цифр)", - "sv_SE": "", + "sv_SE": "Keypad Enter", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -8913,7 +8913,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "0", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8938,7 +8938,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "1", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8963,7 +8963,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "2", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -8988,7 +8988,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "3", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9013,7 +9013,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "4", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9038,7 +9038,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "5", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9063,7 +9063,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "6", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9088,7 +9088,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "7", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9113,7 +9113,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "8", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9138,7 +9138,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "9", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9163,7 +9163,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "~", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9188,7 +9188,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "`", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9213,7 +9213,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "-", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9238,7 +9238,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "+", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9263,7 +9263,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "[", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9288,7 +9288,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "]", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9313,7 +9313,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ";", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9363,7 +9363,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ",", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9388,7 +9388,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": ".", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9413,7 +9413,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "/", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9738,7 +9738,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "-", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -9763,7 +9763,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "+", "sv_SE": "", "th_TH": "", "tr_TR": "4", @@ -9789,7 +9789,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Кнопка меню", - "sv_SE": "", + "sv_SE": "Guide", "th_TH": "", "tr_TR": "Rehber", "uk_UA": "", @@ -12438,7 +12438,7 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", + "ru_RU": "{0}: {1}", "sv_SE": "", "th_TH": "", "tr_TR": "", @@ -14289,7 +14289,7 @@ "pl_PL": "Seria Amiibo", "pt_BR": "Franquia Amiibo", "ru_RU": "Серия Amiibo", - "sv_SE": "", + "sv_SE": "Amiibo Series", "th_TH": "", "tr_TR": "Amiibo Serisi", "uk_UA": "Серія Amiibo", @@ -15755,7 +15755,7 @@ "el_GR": "", "en_US": "Aspect Ratio applied to the renderer window.\n\nOnly change this if you're using an aspect ratio mod for your game, otherwise the graphics will be stretched.\n\nLeave on 16:9 if unsure.", "es_ES": "Relación de aspecto aplicada a la ventana del renderizador.\n\nSolamente modificar esto si estás utilizando un mod de relación de aspecto para su juego, en cualquier otro caso los gráficos se estirarán.\n\nDejar en 16:9 si no sabe que hacer.", - "fr_FR": "Format\u00A0d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format\u00A0d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", + "fr_FR": "Format d'affichage appliqué à la fenêtre du moteur de rendu.\n\nChangez cela uniquement si vous utilisez un mod changeant le format d'affichage pour votre jeu, sinon les graphismes seront étirés.\n\nLaissez sur 16:9 si vous n'êtes pas sûr.", "he_IL": "", "it_IT": "Proporzioni dello schermo applicate alla finestra di renderizzazione.\n\nCambialo solo se stai usando una mod di proporzioni per il tuo gioco, altrimenti la grafica verrà allungata.\n\nLasciare il 16:9 se incerto.", "ja_JP": "レンダリングウインドウに適用するアスペクト比です.\n\nゲームにアスペクト比を変更する mod を使用している場合のみ変更してください.\n\nわからない場合は16:9のままにしておいてください.\n", @@ -17439,7 +17439,7 @@ "pl_PL": "Wersja {0}", "pt_BR": "Versão {0}", "ru_RU": "Версия {0}", - "sv_SE": "", + "sv_SE": "Version {0}", "th_TH": "เวอร์ชั่น {0}", "tr_TR": "Sürüm {0}", "uk_UA": "Версія {0}", @@ -17664,7 +17664,7 @@ "pl_PL": "", "pt_BR": "Ryujinx - Informação", "ru_RU": "Ryujinx - Информация", - "sv_SE": "", + "sv_SE": "Ryujinx - Info", "th_TH": "Ryujinx – ข้อมูล", "tr_TR": "Ryujinx - Bilgi", "uk_UA": "Ryujin x - Інформація", @@ -18813,8 +18813,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "Amiibo", + "sv_SE": "Amiibo", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -19435,7 +19435,7 @@ "it_IT": "", "ja_JP": "", "ko_KR": "XCI 파일 트리머", - "no_NO": "", + "no_NO": "XCI File Trimmer", "pl_PL": "", "pt_BR": "", "ru_RU": "Уменьшение размера XCI файлов", @@ -19639,7 +19639,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "{0:n0} Мб", - "sv_SE": "", + "sv_SE": "{0:n0} Mb", "th_TH": "", "tr_TR": "", "uk_UA": "{0:n0} Мб", @@ -20914,7 +20914,7 @@ "pl_PL": "Głoś", "pt_BR": "", "ru_RU": "Громкость", - "sv_SE": "", + "sv_SE": "Vol", "th_TH": "ระดับเสียง", "tr_TR": "Ses", "uk_UA": "Гуч.", @@ -21055,7 +21055,7 @@ "el_GR": "Όνομα", "en_US": "Name", "es_ES": "Nombre", - "fr_FR": "Nom\u00A0", + "fr_FR": "Nom ", "he_IL": "שם", "it_IT": "Nome", "ja_JP": "名称", @@ -21388,8 +21388,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "FSR", + "sv_SE": "FSR", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21888,8 +21888,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "ldn_mitm", + "sv_SE": "ldn_mitm", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -21913,8 +21913,8 @@ "no_NO": "", "pl_PL": "", "pt_BR": "", - "ru_RU": "", - "sv_SE": "", + "ru_RU": "RyuLDN", + "sv_SE": "RyuLDN", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22214,7 +22214,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Вертикальная синхронизация:", - "sv_SE": "", + "sv_SE": "VSync:", "th_TH": "", "tr_TR": "", "uk_UA": "Вертикальна синхронізація (VSync):", @@ -22255,7 +22255,7 @@ "el_GR": "", "en_US": "Switch", "es_ES": "", - "fr_FR": "", + "fr_FR": "Switch", "he_IL": "", "it_IT": "", "ja_JP": "", @@ -22264,7 +22264,7 @@ "pl_PL": "", "pt_BR": "", "ru_RU": "Консоль", - "sv_SE": "", + "sv_SE": "Switch", "th_TH": "", "tr_TR": "", "uk_UA": "", @@ -22598,4 +22598,4 @@ } } ] -} \ No newline at end of file +} diff --git a/src/Ryujinx/Ryujinx.csproj b/src/Ryujinx/Ryujinx.csproj index 37f23dc41..9d23b0909 100644 --- a/src/Ryujinx/Ryujinx.csproj +++ b/src/Ryujinx/Ryujinx.csproj @@ -13,13 +13,9 @@ $(DefaultItemExcludes);._* - - - - - - - + + + From 9ae1c4380d7c5b3961787392545ade2800ddd5f0 Mon Sep 17 00:00:00 2001 From: Evan Husted Date: Mon, 30 Dec 2024 02:32:32 -0600 Subject: [PATCH 24/24] UI: Fix crashing when opening an Applet or application with no existing icon --- src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs index ef2e835ae..28b4262f1 100644 --- a/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs +++ b/src/Ryujinx/Utilities/AppLibrary/ApplicationLibrary.cs @@ -75,11 +75,11 @@ namespace Ryujinx.Ava.Utilities.AppLibrary TitleUpdates = _titleUpdates.AsObservableCache(); DownloadableContents = _downloadableContents.AsObservableCache(); - _nspIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NSP.png"); - _xciIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_XCI.png"); - _ncaIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NCA.png"); - _nroIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NRO.png"); - _nsoIcon = EmbeddedResources.Read("Ryujinx.Assets.UIImages.Icon_NSO.png"); + _nspIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NSP.png"); + _xciIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_XCI.png"); + _ncaIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NCA.png"); + _nroIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NRO.png"); + _nsoIcon = EmbeddedResources.Read("Ryujinx/Assets.UIImages.Icon_NSO.png"); } /// The npdm file doesn't contain valid data.