From 4117c13377b51b83ff87b1d00393be1a5ab5bfff Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Mon, 29 Jan 2024 18:45:40 -0300
Subject: Migrate friends service to new IPC (#6174)

* Migrate friends service to new IPC

* Add a note that the pointer buffer size and domain counts are wrong

* Wrong length

* Format whitespace

* PR feedback

* Fill in structs from PR feedback

* Missed that one

* Somehow forgot to save that one

* Fill in enums from PR review

* Language enum, NotificationTime

* Format whitespace

* Fix the warning
---
 src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs | 63 ++++++++++++++++++++++++
 1 file changed, 63 insertions(+)
 create mode 100644 src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs

(limited to 'src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs')

diff --git a/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs b/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs
new file mode 100644
index 00000000..dc971269
--- /dev/null
+++ b/src/Ryujinx.Horizon/Sdk/Settings/LanguageCode.cs
@@ -0,0 +1,63 @@
+using Ryujinx.Common.Memory;
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+
+namespace Ryujinx.Horizon.Sdk.Settings
+{
+    [StructLayout(LayoutKind.Sequential, Size = 0x8, Pack = 0x1)]
+    struct LanguageCode
+    {
+        private static readonly string[] _languageCodes = new string[]
+        {
+            "ja",
+            "en-US",
+            "fr",
+            "de",
+            "it",
+            "es",
+            "zh-CN",
+            "ko",
+            "nl",
+            "pt",
+            "ru",
+            "zh-TW",
+            "en-GB",
+            "fr-CA",
+            "es-419",
+            "zh-Hans",
+            "zh-Hant",
+            "pt-BR"
+        };
+
+        public Array8<byte> Value;
+
+        public bool IsValid()
+        {
+            int length = Value.AsSpan().IndexOf((byte)0);
+            if (length < 0)
+            {
+                return false;
+            }
+
+            string str = Encoding.ASCII.GetString(Value.AsSpan()[..length]);
+
+            return _languageCodes.AsSpan().Contains(str);
+        }
+
+        public LanguageCode(Language language)
+        {
+            if ((uint)language >= _languageCodes.Length)
+            {
+                throw new ArgumentOutOfRangeException(nameof(language));
+            }
+
+            Value = new LanguageCode(_languageCodes[(int)language]).Value;
+        }
+
+        public LanguageCode(string strCode)
+        {
+            Encoding.ASCII.GetBytes(strCode, Value.AsSpan());
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2