aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx/Program.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx/Program.cs')
-rw-r--r--Ryujinx/Program.cs176
1 files changed, 13 insertions, 163 deletions
diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs
index d0518441..5663a5d5 100644
--- a/Ryujinx/Program.cs
+++ b/Ryujinx/Program.cs
@@ -1,169 +1,41 @@
-using DiscordRPC;
-using Ryujinx.Audio;
+using Gtk;
using Ryujinx.Common.Logging;
-using Ryujinx.Graphics.Gal;
-using Ryujinx.Graphics.Gal.OpenGL;
-using Ryujinx.HLE;
using Ryujinx.Profiler;
+using Ryujinx.UI;
using System;
using System.IO;
-using System.Linq;
namespace Ryujinx
{
class Program
{
- public static DiscordRpcClient DiscordClient;
-
- public static RichPresence DiscordPresence;
-
- public static string ApplicationDirectory => AppDomain.CurrentDomain.BaseDirectory;
-
static void Main(string[] args)
{
Console.Title = "Ryujinx Console";
- IGalRenderer renderer = new OglRenderer();
-
- IAalOutput audioOut = InitializeAudioEngine();
-
- Switch device = new Switch(renderer, audioOut);
-
- Configuration.Load(Path.Combine(ApplicationDirectory, "Config.jsonc"));
- Configuration.Configure(device);
-
- Profile.Initialize();
+ string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine);
+ Environment.SetEnvironmentVariable("Path", $"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")};{systemPath}");
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
- if (device.System.State.DiscordIntegrationEnabled)
- {
- DiscordClient = new DiscordRpcClient("568815339807309834");
- DiscordPresence = new RichPresence
- {
- Assets = new Assets
- {
- LargeImageKey = "ryujinx",
- LargeImageText = "Ryujinx is an emulator for the Nintendo Switch"
- }
- };
-
- DiscordClient.Initialize();
- DiscordClient.SetPresence(DiscordPresence);
- }
-
- if (args.Length == 1)
- {
- if (Directory.Exists(args[0]))
- {
- string[] romFsFiles = Directory.GetFiles(args[0], "*.istorage");
-
- if (romFsFiles.Length == 0)
- {
- romFsFiles = Directory.GetFiles(args[0], "*.romfs");
- }
-
- if (romFsFiles.Length > 0)
- {
- Logger.PrintInfo(LogClass.Application, "Loading as cart with RomFS.");
- device.LoadCart(args[0], romFsFiles[0]);
- }
- else
- {
- Logger.PrintInfo(LogClass.Application, "Loading as cart WITHOUT RomFS.");
- device.LoadCart(args[0]);
- }
- }
- else if (File.Exists(args[0]))
- {
- switch (Path.GetExtension(args[0]).ToLowerInvariant())
- {
- case ".xci":
- Logger.PrintInfo(LogClass.Application, "Loading as XCI.");
- device.LoadXci(args[0]);
- break;
- case ".nca":
- Logger.PrintInfo(LogClass.Application, "Loading as NCA.");
- device.LoadNca(args[0]);
- break;
- case ".nsp":
- case ".pfs0":
- Logger.PrintInfo(LogClass.Application, "Loading as NSP.");
- device.LoadNsp(args[0]);
- break;
- default:
- Logger.PrintInfo(LogClass.Application, "Loading as homebrew.");
- device.LoadProgram(args[0]);
- break;
- }
- }
- else
- {
- Logger.PrintWarning(LogClass.Application, "Please specify a valid XCI/NCA/NSP/PFS0/NRO file");
- }
- }
- else
- {
- Logger.PrintWarning(LogClass.Application, "Please specify the folder with the NSOs/IStorage or a NSO/NRO.");
- }
-
- if (device.System.State.DiscordIntegrationEnabled)
- {
- if (File.ReadAllLines(Path.Combine(ApplicationDirectory, "RPsupported.dat")).Contains(device.System.TitleID))
- {
- DiscordPresence.Assets.LargeImageKey = device.System.TitleID;
- }
-
- string state = device.System.TitleID;
-
- if (state == null)
- {
- state = "Ryujinx";
- }
- else
- {
- state = state.ToUpper();
- }
-
- string details = "Idling";
-
- if (device.System.TitleName != null)
- {
- details = $"Playing {device.System.TitleName}";
- }
-
- DiscordPresence.Details = details;
- DiscordPresence.State = state;
- DiscordPresence.Assets.LargeImageText = device.System.TitleName;
- DiscordPresence.Assets.SmallImageKey = "ryujinx";
- DiscordPresence.Assets.SmallImageText = "Ryujinx is an emulator for the Nintendo Switch";
- DiscordPresence.Timestamps = new Timestamps(DateTime.UtcNow);
-
- DiscordClient.SetPresence(DiscordPresence);
- }
-
- using (GlScreen screen = new GlScreen(device, renderer))
- {
- screen.MainLoop();
+ Profile.Initialize();
- Profile.FinishProfiling();
+ Application.Init();
- device.Dispose();
- }
+ Application gtkApplication = new Application("Ryujinx.Ryujinx", GLib.ApplicationFlags.None);
+ MainWindow mainWindow = new MainWindow(args, gtkApplication);
- audioOut.Dispose();
-
- Logger.Shutdown();
+ gtkApplication.Register(GLib.Cancellable.Current);
+ gtkApplication.AddWindow(mainWindow);
+ mainWindow.Show();
- DiscordClient.Dispose();
+ Application.Run();
}
private static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
Logger.Shutdown();
-
- DiscordClient.Dispose();
}
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
@@ -175,29 +47,7 @@ namespace Ryujinx
if (e.IsTerminating)
{
Logger.Shutdown();
-
- DiscordClient.Dispose();
- }
- }
-
- /// <summary>
- /// Picks an <see cref="IAalOutput"/> audio output renderer supported on this machine
- /// </summary>
- /// <returns>An <see cref="IAalOutput"/> supported by this machine</returns>
- private static IAalOutput InitializeAudioEngine()
- {
- if (SoundIoAudioOut.IsSupported)
- {
- return new SoundIoAudioOut();
- }
- else if (OpenALAudioOut.IsSupported)
- {
- return new OpenALAudioOut();
- }
- else
- {
- return new DummyAudioOut();
}
}
}
-}
+} \ No newline at end of file