linux: Register mime types on launch

This commit is contained in:
TSR Berry 2022-12-28 17:33:20 +01:00
parent 75963bb394
commit e79cc35e30
No known key found for this signature in database
GPG key ID: 52353C0A4CCA15E2
3 changed files with 53 additions and 1 deletions

View file

@ -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();
}
}
}
}

View file

@ -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);

View file

@ -2,22 +2,32 @@
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
<mime-type type="application/x-nx-nca">
<comment>Nintendo Content Archive</comment>
<acronym>NCA</acronym>
<glob pattern="*.nca"/>
<magic><match value="NCA" type="string" offset="512"/></magic>
</mime-type>
<mime-type type="application/x-nx-nro">
<comment>Nintendo Relocatable Object</comment>
<acronym>NRO</acronym>
<glob pattern="*.nro"/>
<magic><match value="NRO0" type="string" offset="16"/></magic>
</mime-type>
<mime-type type="application/x-nx-nso">
<comment>Nintendo Shared Object</comment>
<acronym>NSO</acronym>
<glob pattern="*.nso"/>
<magic><match value="NSO0" type="string" offset="0"/></magic>
</mime-type>
<mime-type type="application/x-nx-nsp">
<comment>Nintendo Submission Package</comment>
<acronym>NSP</acronym>
<glob pattern="*.nsp"/>
<magic><match value="PFS0" type="string" offset="0"/></magic>
</mime-type>
<mime-type type="application/x-nx-xci">
<comment>Nintendo Switch Cartridge</comment>
<acronym>XCI</acronym>
<glob pattern="*.xci"/>
<magic><match value="HEAD" type="string" offset="4352"/></magic>
</mime-type>
</mime-info>