mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-02-21 23:37:44 +01:00
ChatGui: fix for new message sounds and interactable links (#1568)
* Change PrintMessage parameters type to byte * Use Utf8String.AsSpan * Fix InteractableLinkClickedDetour using the wrong variable
This commit is contained in:
parent
0bfcc55774
commit
8f243762cc
1 changed files with 7 additions and 6 deletions
|
|
@ -22,6 +22,7 @@ namespace Dalamud.Game.Gui;
|
||||||
// TODO(api10): Update IChatGui, ChatGui and XivChatEntry to use correct types and names:
|
// TODO(api10): Update IChatGui, ChatGui and XivChatEntry to use correct types and names:
|
||||||
// "uint SenderId" should be "int Timestamp".
|
// "uint SenderId" should be "int Timestamp".
|
||||||
// "IntPtr Parameters" should be something like "bool Silent". It suppresses new message sounds in certain channels.
|
// "IntPtr Parameters" should be something like "bool Silent". It suppresses new message sounds in certain channels.
|
||||||
|
// This has to be a 1 byte boolean, so only change it to bool if marshalling is disabled.
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This class handles interacting with the native chat UI.
|
/// This class handles interacting with the native chat UI.
|
||||||
|
|
@ -62,7 +63,7 @@ internal sealed unsafe class ChatGui : IDisposable, IServiceType, IChatGui
|
||||||
}
|
}
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
|
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
|
||||||
private delegate uint PrintMessageDelegate(RaptureLogModule* manager, XivChatType chatType, Utf8String* sender, Utf8String* message, int timestamp, bool silent);
|
private delegate uint PrintMessageDelegate(RaptureLogModule* manager, XivChatType chatType, Utf8String* sender, Utf8String* message, int timestamp, byte silent);
|
||||||
|
|
||||||
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
|
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
|
||||||
private delegate void PopulateItemLinkDelegate(IntPtr linkObjectPtr, IntPtr itemInfoPtr);
|
private delegate void PopulateItemLinkDelegate(IntPtr linkObjectPtr, IntPtr itemInfoPtr);
|
||||||
|
|
@ -157,7 +158,7 @@ internal sealed unsafe class ChatGui : IDisposable, IServiceType, IChatGui
|
||||||
var sender = Utf8String.FromSequence(chat.Name.Encode());
|
var sender = Utf8String.FromSequence(chat.Name.Encode());
|
||||||
var message = Utf8String.FromSequence(chat.Message.Encode());
|
var message = Utf8String.FromSequence(chat.Message.Encode());
|
||||||
|
|
||||||
this.HandlePrintMessageDetour(RaptureLogModule.Instance(), chat.Type, sender, message, (int)chat.SenderId, chat.Parameters != 0);
|
this.HandlePrintMessageDetour(RaptureLogModule.Instance(), chat.Type, sender, message, (int)chat.SenderId, (byte)(chat.Parameters != 0 ? 1 : 0));
|
||||||
|
|
||||||
sender->Dtor(true);
|
sender->Dtor(true);
|
||||||
message->Dtor(true);
|
message->Dtor(true);
|
||||||
|
|
@ -278,14 +279,14 @@ internal sealed unsafe class ChatGui : IDisposable, IServiceType, IChatGui
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private uint HandlePrintMessageDetour(RaptureLogModule* manager, XivChatType chatType, Utf8String* sender, Utf8String* message, int timestamp, bool silent)
|
private uint HandlePrintMessageDetour(RaptureLogModule* manager, XivChatType chatType, Utf8String* sender, Utf8String* message, int timestamp, byte silent)
|
||||||
{
|
{
|
||||||
var messageId = 0u;
|
var messageId = 0u;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var originalSenderData = sender->Span.ToArray();
|
var originalSenderData = sender->AsSpan().ToArray();
|
||||||
var originalMessageData = message->Span.ToArray();
|
var originalMessageData = message->AsSpan().ToArray();
|
||||||
|
|
||||||
var parsedSender = SeString.Parse(originalSenderData);
|
var parsedSender = SeString.Parse(originalSenderData);
|
||||||
var parsedMessage = SeString.Parse(originalMessageData);
|
var parsedMessage = SeString.Parse(originalMessageData);
|
||||||
|
|
@ -374,7 +375,7 @@ internal sealed unsafe class ChatGui : IDisposable, IServiceType, IChatGui
|
||||||
Log.Verbose($"InteractableLinkClicked: {Payload.EmbeddedInfoType.DalamudLink}");
|
Log.Verbose($"InteractableLinkClicked: {Payload.EmbeddedInfoType.DalamudLink}");
|
||||||
|
|
||||||
var payloadPtr = Marshal.ReadIntPtr(messagePtr, 0x10);
|
var payloadPtr = Marshal.ReadIntPtr(messagePtr, 0x10);
|
||||||
var seStr = MemoryHelper.ReadSeStringNullTerminated(messagePtr);
|
var seStr = MemoryHelper.ReadSeStringNullTerminated(payloadPtr);
|
||||||
var terminatorIndex = seStr.Payloads.IndexOf(RawPayload.LinkTerminator);
|
var terminatorIndex = seStr.Payloads.IndexOf(RawPayload.LinkTerminator);
|
||||||
var payloads = terminatorIndex >= 0 ? seStr.Payloads.Take(terminatorIndex + 1).ToList() : seStr.Payloads;
|
var payloads = terminatorIndex >= 0 ? seStr.Payloads.Take(terminatorIndex + 1).ToList() : seStr.Payloads;
|
||||||
if (payloads.Count == 0) return;
|
if (payloads.Count == 0) return;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue