diff --git a/Ryujinx.Ava/Program.cs b/Ryujinx.Ava/Program.cs index 142d7820b..ea39079d6 100644 --- a/Ryujinx.Ava/Program.cs +++ b/Ryujinx.Ava/Program.cs @@ -14,8 +14,10 @@ using Ryujinx.Ui.Common; using Ryujinx.Ui.Common.Configuration; using Ryujinx.Ui.Common.Helper; using System; +using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Threading.Tasks; namespace Ryujinx.Ava @@ -33,10 +35,31 @@ namespace Ryujinx.Ava private const uint MB_ICONWARNING = 0x30; + [SupportedOSPlatform("linux")] + static void RegisterMimeTypes() + { + if (!File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local", "share", "mime", "packages", "Ryujinx.xml"))) + { + string mimeTypesFile = Path.Combine(ReleaseInformations.GetBaseApplicationDirectory(), "mime", "Ryujinx.xml"); + using Process mimeProcess = new(); + + mimeProcess.StartInfo.FileName = "xdg-mime"; + mimeProcess.StartInfo.Arguments = $"install --mode user {mimeTypesFile}"; + + mimeProcess.Start(); + mimeProcess.WaitForExit(); + } + } + public static void Main(string[] args) { Version = ReleaseInformations.GetVersion(); + if (OperatingSystem.IsLinux()) + { + RegisterMimeTypes(); + } + if (OperatingSystem.IsWindows() && !OperatingSystem.IsWindowsVersionAtLeast(10, 0, 17134)) { _ = MessageBoxA(IntPtr.Zero, "You are running an outdated version of Windows.\n\nStarting on June 1st 2022, Ryujinx will only support Windows 10 1803 and newer.\n", $"Ryujinx {Version}", MB_ICONWARNING); @@ -225,4 +248,4 @@ namespace Ryujinx.Ava Logger.Shutdown(); } } -} +} \ No newline at end of file diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs index b1d898317..e174ac63a 100644 --- a/Ryujinx/Program.cs +++ b/Ryujinx/Program.cs @@ -19,6 +19,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; +using System.Runtime.Versioning; using System.Threading.Tasks; namespace Ryujinx @@ -73,6 +74,22 @@ namespace Ryujinx } } + [SupportedOSPlatform("linux")] + static void RegisterMimeTypes() + { + if (!File.Exists(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".local", "share", "mime", "packages", "Ryujinx.xml"))) + { + string mimeTypesFile = Path.Combine(ReleaseInformations.GetBaseApplicationDirectory(), "mime", "Ryujinx.xml"); + using Process mimeProcess = new(); + + mimeProcess.StartInfo.FileName = "xdg-mime"; + mimeProcess.StartInfo.Arguments = $"install --mode user {mimeTypesFile}"; + + mimeProcess.Start(); + mimeProcess.WaitForExit(); + } + } + static void Main(string[] args) { Version = ReleaseInformations.GetVersion(); @@ -101,6 +118,8 @@ namespace Ryujinx // This ends up causing race condition and abort of XCB when a context is created by SPB (even if SPB do call XInitThreads). if (OperatingSystem.IsLinux()) { + RegisterMimeTypes(); + XInitThreads(); Environment.SetEnvironmentVariable("GDK_BACKEND", "x11"); setenv("GDK_BACKEND", "x11", 1); diff --git a/distribution/linux/ryujinx-mime.xml b/distribution/linux/mime/Ryujinx.xml similarity index 62% rename from distribution/linux/ryujinx-mime.xml rename to distribution/linux/mime/Ryujinx.xml index 6ec35c848..bd9df0edf 100644 --- a/distribution/linux/ryujinx-mime.xml +++ b/distribution/linux/mime/Ryujinx.xml @@ -2,22 +2,32 @@ Nintendo Content Archive + NCA + Nintendo Relocatable Object + NRO + Nintendo Shared Object + NSO + Nintendo Submission Package + NSP + Nintendo Switch Cartridge + XCI +