Remove reflection from InputPreview

This commit is contained in:
Infi
2024-05-25 09:30:45 +02:00
parent 624bcd3610
commit 8aaaa684a2
2 changed files with 34 additions and 12 deletions
+6 -11
View File
@@ -1,5 +1,4 @@
using System.Numerics;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using ChatTwo.Code;
@@ -177,17 +176,13 @@ public partial class InputPreview : Window
if (icon.Icon != BitmapFontIcon.AutoTranslateBegin)
return;
try
{
NextChunkIsAutoTranslate = true;
var key = (uint)typeof(AutoTranslatePayload).GetField("key", BindingFlags.NonPublic | BindingFlags.Instance)!.GetValue(chunk.Link)!;
var group = (uint)typeof(AutoTranslatePayload).GetField("group", BindingFlags.NonPublic | BindingFlags.Instance)!.GetValue(chunk.Link)!;
CursorPosition += $"<at:{key},{group}>".Length;
}
catch
{
// Ignore
}
// Skipping: StartByte, PayloadType, PayloadLength
using var reader = new BinaryReader(new MemoryStream(chunk.Link!.Encode().Skip(3).ToArray()));
var group = (uint) reader.ReadByte();
var key = PayloadExt.GetInteger(reader);
CursorPosition += $"<at:{group},{key}>".Length;
return;
}
+27
View File
@@ -2,6 +2,33 @@ using Dalamud.Game.Text.SeStringHandling;
namespace ChatTwo.Util;
internal static class PayloadExt
{
// TODO: Remove after Key and Group in AutoTranslatePayload became public
// From: https://github.com/goatcorp/Dalamud/blob/master/Dalamud/Game/Text/SeStringHandling/Payload.cs#L366
/// <summary>
/// Retrieve the packed integer from SE's native data format.
/// </summary>
/// <param name="input">The BinaryReader instance.</param>
/// <returns>An integer.</returns>
internal static uint GetInteger(BinaryReader input)
{
uint marker = input.ReadByte();
if (marker < 0xD0)
return marker - 1;
marker = (marker + 1) & 0b1111;
var ret = new byte[4];
for (var i = 3; i >= 0; i--)
{
ret[i] = (marker & (1 << i)) == 0 ? (byte)0 : input.ReadByte();
}
return BitConverter.ToUInt32(ret, 0);
}
}
internal class PartyFinderPayload : Payload {
public override PayloadType Type => (PayloadType) 0x50;