mirror of
https://github.com/XorTroll/uLaunch
synced 2024-11-22 20:03:08 +00:00
126 lines
4.7 KiB
C#
126 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Windows.Forms;
|
|
|
|
namespace uViewer.RetroPlugin
|
|
{
|
|
public class RetroPlugin : Plugins.PluginContext
|
|
{
|
|
public override string GetPluginName() => "RetroArch plugin";
|
|
|
|
public override string GetPluginDescription() => "RetroArch forwarder creator plugin";
|
|
|
|
private string sd_root = null;
|
|
private string selected_rom = null;
|
|
|
|
public override string CanLoadPlugin(string sd_path)
|
|
{
|
|
sd_root = sd_path;
|
|
|
|
if(!Directory.Exists(Path.Combine(sd_path, "retroarch"))) return "RetroArch doesn't seem to be installed in this SD card.";
|
|
if(!Directory.Exists(Path.Combine(sd_path, "retroarch", "cores"))) return "No available cores were found.";
|
|
var cores = Directory.GetFiles(Path.Combine(sd_path, "retroarch", "cores")).Where((file) => file.EndsWith("_libretro_libnx.nro"));
|
|
if(!cores.Any()) return "No available cores were found.";
|
|
return null;
|
|
}
|
|
|
|
public override string GetNroPathNotSetError() => "A RetroArch core needs to be specified.";
|
|
|
|
public override string GetEntryMenuInformationLabel() => "Create forwarders for ROMs in the SD card";
|
|
|
|
// Name
|
|
|
|
public override string GetEntryMenuNameFieldLabel() => "ROM name";
|
|
|
|
// Author
|
|
|
|
public override string GetEntryMenuAuthorFieldLabel() => "Producer";
|
|
|
|
// Version
|
|
|
|
public override string GetEntryMenuVersionFieldLabel() => "Platform";
|
|
|
|
// Nro
|
|
|
|
public override string GetEntryMenuNroFieldLabel() => "RetroArch core (emulator)";
|
|
|
|
public override Control GetEntryMenuNroControl()
|
|
{
|
|
ComboBox box = new ComboBox
|
|
{
|
|
Width = 300
|
|
};
|
|
|
|
var cores = Directory.GetFiles(Path.Combine(sd_root, "retroarch", "cores")).Where((file) => file.EndsWith("_libretro_libnx.nro"));
|
|
foreach(var core in cores)
|
|
{
|
|
box.Items.Add(Path.GetFileNameWithoutExtension(core));
|
|
}
|
|
|
|
return box;
|
|
}
|
|
|
|
public override string GetEntryMenuNroControlSelectedValue(Control control)
|
|
{
|
|
if(((ComboBox)control).SelectedIndex < 0) return null;
|
|
|
|
return Path.Combine(sd_root, "retroarch", "cores", ((ComboBox)control).SelectedItem as string + ".nro").Replace(sd_root, "sdmc:/").Replace('\\', '/');
|
|
}
|
|
|
|
// Argv
|
|
|
|
public override string GetEntryMenuArgvFieldLabel() => "ROM path";
|
|
|
|
public override Control GetEntryMenuArgvControl()
|
|
{
|
|
Button b = new Button()
|
|
{
|
|
Text = "Browse ROM file"
|
|
};
|
|
|
|
b.Width = 250;
|
|
|
|
b.Click += new EventHandler((sender, e) =>
|
|
{
|
|
OpenFileDialog ofd = new OpenFileDialog
|
|
{
|
|
Title = "Select ROM file",
|
|
InitialDirectory = sd_root,
|
|
Multiselect = false
|
|
};
|
|
|
|
if(ofd.ShowDialog() == DialogResult.OK)
|
|
{
|
|
var tmpfile = ofd.FileName;
|
|
if(!tmpfile.StartsWith(sd_root))
|
|
{
|
|
var rc = MessageBox.Show("The ROM will be copied to the SD card with a random name (ulaunch/uviewer_meta/retro/). Continue?", "uViewer (retro) - Selecting non-SD ROM file", MessageBoxButtons.YesNo);
|
|
if(rc != DialogResult.Yes) return;
|
|
|
|
Random r = new Random();
|
|
Directory.CreateDirectory(Path.Combine(sd_root, "ulaunch", "uviewer_meta", "retro"));
|
|
var newfile = Path.Combine(sd_root, "ulaunch", "uviewer_meta", "retro", r.Next().ToString() + Path.GetExtension(tmpfile));
|
|
File.Copy(tmpfile, newfile);
|
|
selected_rom = newfile.Replace(sd_root, "sdmc:/").Replace('\\', '/');
|
|
MessageBox.Show("Copied ROM: \"" + selected_rom + "\"");
|
|
}
|
|
else
|
|
{
|
|
selected_rom = tmpfile.Replace(sd_root, "sdmc:/").Replace('\\', '/');
|
|
MessageBox.Show("Selected ROM: \"" + selected_rom + "\"");
|
|
}
|
|
}
|
|
});
|
|
|
|
return b;
|
|
}
|
|
|
|
public override string GetEntryMenuArgvControlSelectedValue(Control control)
|
|
{
|
|
if(string.IsNullOrEmpty(selected_rom)) return null;
|
|
return "\"" + selected_rom.Replace(sd_root, "sdmc:/").Replace('\\', '/') + "\"";
|
|
}
|
|
}
|
|
}
|