aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Applets/Error
diff options
context:
space:
mode:
authorTSR Berry <20988865+TSRBerry@users.noreply.github.com>2023-04-08 01:22:00 +0200
committerMary <thog@protonmail.com>2023-04-27 23:51:14 +0200
commitcee712105850ac3385cd0091a923438167433f9f (patch)
tree4a5274b21d8b7f938c0d0ce18736d3f2993b11b1 /Ryujinx.HLE/HOS/Applets/Error
parentcd124bda587ef09668a971fa1cac1c3f0cfc9f21 (diff)
Move solution and projects to src
Diffstat (limited to 'Ryujinx.HLE/HOS/Applets/Error')
-rw-r--r--Ryujinx.HLE/HOS/Applets/Error/ApplicationErrorArg.cs14
-rw-r--r--Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs216
-rw-r--r--Ryujinx.HLE/HOS/Applets/Error/ErrorCommonArg.cs12
-rw-r--r--Ryujinx.HLE/HOS/Applets/Error/ErrorCommonHeader.cs17
-rw-r--r--Ryujinx.HLE/HOS/Applets/Error/ErrorType.cs13
5 files changed, 0 insertions, 272 deletions
diff --git a/Ryujinx.HLE/HOS/Applets/Error/ApplicationErrorArg.cs b/Ryujinx.HLE/HOS/Applets/Error/ApplicationErrorArg.cs
deleted file mode 100644
index f40d5411..00000000
--- a/Ryujinx.HLE/HOS/Applets/Error/ApplicationErrorArg.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using Ryujinx.Common.Memory;
-using System.Runtime.InteropServices;
-
-namespace Ryujinx.HLE.HOS.Applets.Error
-{
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct ApplicationErrorArg
- {
- public uint ErrorNumber;
- public ulong LanguageCode;
- public ByteArray2048 MessageText;
- public ByteArray2048 DetailsText;
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs b/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs
deleted file mode 100644
index c5c6e8e9..00000000
--- a/Ryujinx.HLE/HOS/Applets/Error/ErrorApplet.cs
+++ /dev/null
@@ -1,216 +0,0 @@
-using LibHac.Common;
-using LibHac.Fs;
-using LibHac.Fs.Fsa;
-using LibHac.FsSystem;
-using LibHac.Ncm;
-using LibHac.Tools.FsSystem;
-using LibHac.Tools.FsSystem.NcaUtils;
-using Ryujinx.Common.Logging;
-using Ryujinx.HLE.HOS.Services.Am.AppletAE;
-using Ryujinx.HLE.HOS.SystemState;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Text.RegularExpressions;
-
-namespace Ryujinx.HLE.HOS.Applets.Error
-{
- internal partial class ErrorApplet : IApplet
- {
- private const long ErrorMessageBinaryTitleId = 0x0100000000000801;
-
- private Horizon _horizon;
- private AppletSession _normalSession;
- private CommonArguments _commonArguments;
- private ErrorCommonHeader _errorCommonHeader;
- private byte[] _errorStorage;
-
- public event EventHandler AppletStateChanged;
-
- [GeneratedRegex(@"[^\u0000\u0009\u000A\u000D\u0020-\uFFFF]..")]
- private static partial Regex CleanTextRegex();
-
- public ErrorApplet(Horizon horizon)
- {
- _horizon = horizon;
- }
-
- public ResultCode Start(AppletSession normalSession, AppletSession interactiveSession)
- {
- _normalSession = normalSession;
- _commonArguments = IApplet.ReadStruct<CommonArguments>(_normalSession.Pop());
-
- Logger.Info?.PrintMsg(LogClass.ServiceAm, $"ErrorApplet version: 0x{_commonArguments.AppletVersion:x8}");
-
- _errorStorage = _normalSession.Pop();
- _errorCommonHeader = IApplet.ReadStruct<ErrorCommonHeader>(_errorStorage);
- _errorStorage = _errorStorage.Skip(Marshal.SizeOf<ErrorCommonHeader>()).ToArray();
-
- switch (_errorCommonHeader.Type)
- {
- case ErrorType.ErrorCommonArg:
- {
- ParseErrorCommonArg();
-
- break;
- }
- case ErrorType.ApplicationErrorArg:
- {
- ParseApplicationErrorArg();
-
- break;
- }
- default: throw new NotImplementedException($"ErrorApplet type {_errorCommonHeader.Type} is not implemented.");
- }
-
- AppletStateChanged?.Invoke(this, null);
-
- return ResultCode.Success;
- }
-
- private (uint module, uint description) HexToResultCode(uint resultCode)
- {
- return ((resultCode & 0x1FF) + 2000, (resultCode >> 9) & 0x3FFF);
- }
-
- private string SystemLanguageToLanguageKey(SystemLanguage systemLanguage)
- {
- return systemLanguage switch
- {
- SystemLanguage.Japanese => "ja",
- SystemLanguage.AmericanEnglish => "en-US",
- SystemLanguage.French => "fr",
- SystemLanguage.German => "de",
- SystemLanguage.Italian => "it",
- SystemLanguage.Spanish => "es",
- SystemLanguage.Chinese => "zh-Hans",
- SystemLanguage.Korean => "ko",
- SystemLanguage.Dutch => "nl",
- SystemLanguage.Portuguese => "pt",
- SystemLanguage.Russian => "ru",
- SystemLanguage.Taiwanese => "zh-HansT",
- SystemLanguage.BritishEnglish => "en-GB",
- SystemLanguage.CanadianFrench => "fr-CA",
- SystemLanguage.LatinAmericanSpanish => "es-419",
- SystemLanguage.SimplifiedChinese => "zh-Hans",
- SystemLanguage.TraditionalChinese => "zh-Hant",
- SystemLanguage.BrazilianPortuguese => "pt-BR",
- _ => "en-US"
- };
- }
-
- private static string CleanText(string value)
- {
- return CleanTextRegex().Replace(value, "").Replace("\0", "");
- }
-
- private string GetMessageText(uint module, uint description, string key)
- {
- string binaryTitleContentPath = _horizon.ContentManager.GetInstalledContentPath(ErrorMessageBinaryTitleId, StorageId.BuiltInSystem, NcaContentType.Data);
-
- using (LibHac.Fs.IStorage ncaFileStream = new LocalStorage(_horizon.Device.FileSystem.SwitchPathToSystemPath(binaryTitleContentPath), FileAccess.Read, FileMode.Open))
- {
- Nca nca = new Nca(_horizon.Device.FileSystem.KeySet, ncaFileStream);
- IFileSystem romfs = nca.OpenFileSystem(NcaSectionType.Data, _horizon.FsIntegrityCheckLevel);
- string languageCode = SystemLanguageToLanguageKey(_horizon.State.DesiredSystemLanguage);
- string filePath = $"/{module}/{description:0000}/{languageCode}_{key}";
-
- if (romfs.FileExists(filePath))
- {
- using var binaryFile = new UniqueRef<IFile>();
-
- romfs.OpenFile(ref binaryFile.Ref, filePath.ToU8Span(), OpenMode.Read).ThrowIfFailure();
- StreamReader reader = new StreamReader(binaryFile.Get.AsStream(), Encoding.Unicode);
-
- return CleanText(reader.ReadToEnd());
- }
- else
- {
- return "";
- }
- }
- }
-
- private string[] GetButtonsText(uint module, uint description, string key)
- {
- string buttonsText = GetMessageText(module, description, key);
-
- return (buttonsText == "") ? null : buttonsText.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);
- }
-
- private void ParseErrorCommonArg()
- {
- ErrorCommonArg errorCommonArg = IApplet.ReadStruct<ErrorCommonArg>(_errorStorage);
-
- uint module = errorCommonArg.Module;
- uint description = errorCommonArg.Description;
-
- if (_errorCommonHeader.MessageFlag == 0)
- {
- (module, description) = HexToResultCode(errorCommonArg.ResultCode);
- }
-
- string message = GetMessageText(module, description, "DlgMsg");
-
- if (message == "")
- {
- message = "An error has occured.\n\n"
- + "Please try again later.\n\n"
- + "If the problem persists, please refer to the Ryujinx website.\n"
- + "www.ryujinx.org";
- }
-
- string[] buttons = GetButtonsText(module, description, "DlgBtn");
-
- bool showDetails = _horizon.Device.UiHandler.DisplayErrorAppletDialog($"Error Code: {module}-{description:0000}", "\n" + message, buttons);
- if (showDetails)
- {
- message = GetMessageText(module, description, "FlvMsg");
- buttons = GetButtonsText(module, description, "FlvBtn");
-
- _horizon.Device.UiHandler.DisplayErrorAppletDialog($"Details: {module}-{description:0000}", "\n" + message, buttons);
- }
- }
-
- private void ParseApplicationErrorArg()
- {
- ApplicationErrorArg applicationErrorArg = IApplet.ReadStruct<ApplicationErrorArg>(_errorStorage);
-
- byte[] messageTextBuffer = new byte[0x800];
- byte[] detailsTextBuffer = new byte[0x800];
-
- applicationErrorArg.MessageText.AsSpan().CopyTo(messageTextBuffer);
- applicationErrorArg.DetailsText.AsSpan().CopyTo(detailsTextBuffer);
-
- string messageText = Encoding.ASCII.GetString(messageTextBuffer.TakeWhile(b => !b.Equals(0)).ToArray());
- string detailsText = Encoding.ASCII.GetString(detailsTextBuffer.TakeWhile(b => !b.Equals(0)).ToArray());
-
- List<string> buttons = new List<string>();
-
- // TODO: Handle the LanguageCode to return the translated "OK" and "Details".
-
- if (detailsText.Trim() != "")
- {
- buttons.Add("Details");
- }
-
- buttons.Add("OK");
-
- bool showDetails = _horizon.Device.UiHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber}", "\n" + messageText, buttons.ToArray());
- if (showDetails)
- {
- buttons.RemoveAt(0);
-
- _horizon.Device.UiHandler.DisplayErrorAppletDialog($"Error Number: {applicationErrorArg.ErrorNumber} (Details)", "\n" + detailsText, buttons.ToArray());
- }
- }
-
- public ResultCode GetResult()
- {
- return ResultCode.Success;
- }
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Applets/Error/ErrorCommonArg.cs b/Ryujinx.HLE/HOS/Applets/Error/ErrorCommonArg.cs
deleted file mode 100644
index 530a2ad8..00000000
--- a/Ryujinx.HLE/HOS/Applets/Error/ErrorCommonArg.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace Ryujinx.HLE.HOS.Applets.Error
-{
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct ErrorCommonArg
- {
- public uint Module;
- public uint Description;
- public uint ResultCode;
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Applets/Error/ErrorCommonHeader.cs b/Ryujinx.HLE/HOS/Applets/Error/ErrorCommonHeader.cs
deleted file mode 100644
index b93cdd4f..00000000
--- a/Ryujinx.HLE/HOS/Applets/Error/ErrorCommonHeader.cs
+++ /dev/null
@@ -1,17 +0,0 @@
-using System.Runtime.InteropServices;
-
-namespace Ryujinx.HLE.HOS.Applets.Error
-{
- [StructLayout(LayoutKind.Sequential, Pack = 1)]
- struct ErrorCommonHeader
- {
- public ErrorType Type;
- public byte JumpFlag;
- public byte ReservedFlag1;
- public byte ReservedFlag2;
- public byte ReservedFlag3;
- public byte ContextFlag;
- public byte MessageFlag;
- public byte ContextFlag2;
- }
-} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Applets/Error/ErrorType.cs b/Ryujinx.HLE/HOS/Applets/Error/ErrorType.cs
deleted file mode 100644
index f06af1d3..00000000
--- a/Ryujinx.HLE/HOS/Applets/Error/ErrorType.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-namespace Ryujinx.HLE.HOS.Applets.Error
-{
- enum ErrorType : byte
- {
- ErrorCommonArg,
- SystemErrorArg,
- ApplicationErrorArg,
- ErrorEulaArg,
- ErrorPctlArg,
- ErrorRecordArg,
- SystemUpdateEulaArg = 8
- }
-} \ No newline at end of file