deb99d2cae
* avalonia part 1 * remove vulkan ui backend * move ui common files to ui common project * get name for oading screen from device * rebase. * review 1 * review 1.1 * review * cleanup * addressed review * use cancellation token * review * review * rebased * cancel library loading when closing window * remove star image, use fonticon instead * delete render control frame buffer when game ends. change position of fav star * addressed @Thog review * ensure the right ui is downloaded in updates * fix crash when showing not supported dialog during controller request * add prefix to artifact names * Auto-format Avalonia project * Fix input * Fix build, simplify app disposal * remove nv stutter thread * addressed review * add missing change * maintain window size if new size is zero length * add game, handheld, docked to local * reverse scale main window * Update de_DE.json * Update de_DE.json * Update de_DE.json * Update italian json * Update it_IT.json * let render timer poll with no wait * remove unused code * more unused code * enabled tiered compilation and trimming * check if window event is not closed before signaling * fix atmospher case * locale fix * locale fix * remove explicit tiered compilation declarations * Remove ) it_IT.json * Remove ) de_DE.json * Update it_IT.json * Update pt_BR locale with latest strings * Remove ')' * add more strings to locale * update locale * remove extra slash * remove extra slash * set firmware version to 0 if key's not found * fix * revert timer changes * lock on object instead * Update it_IT.json * remove unused method * add load screen text to locale * drop swap event * Update de_DE.json * Update de_DE.json * do null check when stopping emulator * Update de_DE.json * Create tr_TR.json * Add tr_TR * Add tr_TR + Turkish * Update it_IT.json * Update Ryujinx.Ava/Input/AvaloniaMappingHelper.cs Co-authored-by: Ac_K <Acoustik666@gmail.com> * Apply suggestions from code review Co-authored-by: Ac_K <Acoustik666@gmail.com> * Apply suggestions from code review Co-authored-by: Ac_K <Acoustik666@gmail.com> * addressed review * Update Ryujinx.Ava/Ui/Backend/OpenGl/OpenGlRenderTarget.cs Co-authored-by: gdkchan <gab.dark.100@gmail.com> * use avalonia's inbuilt renderer on linux * removed whitespace * workaround for queue render crash with vsync off * drop custom backend * format files * fix not closing issue * remove warnings * rebase * update avalonia library * Reposition the Text and Button on About Page * Assign build version * Remove appveyor text Co-authored-by: gdk <gab.dark.100@gmail.com> Co-authored-by: Niwu34 <67392333+Niwu34@users.noreply.github.com> Co-authored-by: Antonio Brugnolo <36473846+AntoSkate@users.noreply.github.com> Co-authored-by: aegiff <99728970+aegiff@users.noreply.github.com> Co-authored-by: Ac_K <Acoustik666@gmail.com> Co-authored-by: MostlyWhat <78652091+MostlyWhat@users.noreply.github.com>
120 lines
3.9 KiB
C#
120 lines
3.9 KiB
C#
using Ryujinx.Common.Logging;
|
|
using Ryujinx.HLE.FileSystem;
|
|
using Ryujinx.Ui.Common;
|
|
using System;
|
|
using System.IO;
|
|
|
|
namespace Ryujinx.Ui.Common.Helper
|
|
{
|
|
/// <summary>
|
|
/// Ensure installation validity
|
|
/// </summary>
|
|
public static class SetupValidator
|
|
{
|
|
public static bool IsFirmwareValid(ContentManager contentManager, out UserError error)
|
|
{
|
|
bool hasFirmware = contentManager.GetCurrentFirmwareVersion() != null;
|
|
|
|
if (hasFirmware)
|
|
{
|
|
error = UserError.Success;
|
|
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
error = UserError.NoFirmware;
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static bool CanFixStartApplication(ContentManager contentManager, string baseApplicationPath, UserError error, out SystemVersion firmwareVersion)
|
|
{
|
|
try
|
|
{
|
|
firmwareVersion = contentManager.VerifyFirmwarePackage(baseApplicationPath);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
firmwareVersion = null;
|
|
}
|
|
|
|
return error == UserError.NoFirmware && Path.GetExtension(baseApplicationPath).ToLowerInvariant() == ".xci" && firmwareVersion != null;
|
|
}
|
|
|
|
public static bool TryFixStartApplication(ContentManager contentManager, string baseApplicationPath, UserError error, out UserError outError)
|
|
{
|
|
if (error == UserError.NoFirmware)
|
|
{
|
|
string baseApplicationExtension = Path.GetExtension(baseApplicationPath).ToLowerInvariant();
|
|
|
|
// If the target app to start is a XCI, try to install firmware from it
|
|
if (baseApplicationExtension == ".xci")
|
|
{
|
|
SystemVersion firmwareVersion;
|
|
|
|
try
|
|
{
|
|
firmwareVersion = contentManager.VerifyFirmwarePackage(baseApplicationPath);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
firmwareVersion = null;
|
|
}
|
|
|
|
// The XCI is a valid firmware package, try to install the firmware from it!
|
|
if (firmwareVersion != null)
|
|
{
|
|
try
|
|
{
|
|
Logger.Info?.Print(LogClass.Application, $"Installing firmware {firmwareVersion.VersionString}");
|
|
|
|
contentManager.InstallFirmware(baseApplicationPath);
|
|
|
|
Logger.Info?.Print(LogClass.Application, $"System version {firmwareVersion.VersionString} successfully installed.");
|
|
|
|
outError = UserError.Success;
|
|
|
|
return true;
|
|
}
|
|
catch (Exception) { }
|
|
}
|
|
|
|
outError = error;
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
outError = error;
|
|
|
|
return false;
|
|
}
|
|
|
|
public static bool CanStartApplication(ContentManager contentManager, string baseApplicationPath, out UserError error)
|
|
{
|
|
if (Directory.Exists(baseApplicationPath) || File.Exists(baseApplicationPath))
|
|
{
|
|
string baseApplicationExtension = Path.GetExtension(baseApplicationPath).ToLowerInvariant();
|
|
|
|
// NOTE: We don't force homebrew developers to install a system firmware.
|
|
if (baseApplicationExtension == ".nro" || baseApplicationExtension == ".nso")
|
|
{
|
|
error = UserError.Success;
|
|
|
|
return true;
|
|
}
|
|
|
|
return IsFirmwareValid(contentManager, out error);
|
|
}
|
|
else
|
|
{
|
|
error = UserError.ApplicationNotFound;
|
|
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|