Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 44 additions & 40 deletions PrefPro/StringHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public sealed unsafe class StringHandler : IDisposable
private readonly LoginState _loginState;
private readonly Configuration _configuration;

private HandlerConfig _handlerConfig = HandlerConfig.None;
private NameHandlerConfig _nameHandlerConfig = NameHandlerConfig.None;

public StringHandler(LoginState loginState, Configuration configuration)
{
Expand Down Expand Up @@ -74,10 +74,6 @@ private bool FormatStringDetour(TextModule* thisPtr, CStringPointer input, StdDe
if (!_configuration.Enabled)
goto originalFormatString;

var data = _handlerConfig;
if (!data.Apply)
goto originalFormatString;

var seString = input.AsReadOnlySeStringSpan();
if (seString.IsEmpty || seString.IsTextOnly())
goto originalFormatString;
Expand All @@ -100,43 +96,51 @@ private bool FormatStringDetour(TextModule* thisPtr, CStringPointer input, StdDe
var oldGender = genderParam.IntValue;
genderParam.IntValue = _configuration.GetGender();

var sb = SeStringBuilder.SharedPool.Get();

try
var nameConfig = _nameHandlerConfig;
if (_nameHandlerConfig.Apply)
{
foreach (var payload in seString)
var sb = SeStringBuilder.SharedPool.Get();
try
{
if (data.ApplyFull && ShouldHandleStringPayload(payload))
{
sb.Append(data.NameFull);
}
else if (data.ApplyFirst && ShouldHandleSplitPayload(payload, 1))
{
sb.Append(data.NameFirst);
}
else if (data.ApplyLast && ShouldHandleSplitPayload(payload, 2))
{
sb.Append(data.NameLast);
}
else
foreach (var payload in seString)
{
sb.Append(payload);
if (nameConfig.ApplyFull && ShouldHandleStringPayload(payload))
{
sb.Append(nameConfig.NameFull);
}
else if (nameConfig.ApplyFirst && ShouldHandleSplitPayload(payload, 1))
{
sb.Append(nameConfig.NameFirst);
}
else if (nameConfig.ApplyLast && ShouldHandleSplitPayload(payload, 2))
{
sb.Append(nameConfig.NameLast);
}
else
{
sb.Append(payload);
}
}
fixed (byte* newInput = sb.GetViewAsSpan())
return _formatStringHook.Original(thisPtr, newInput, localParameters, output);
}
catch (Exception ex)
{
DalamudApi.PluginLog.Error(ex, "PrefPro Exception");
}
finally
{
SeStringBuilder.SharedPool.Return(sb);
raceParam.IntValue = oldRace;
genderParam.IntValue = oldGender;
}

fixed (byte* newInput = sb.GetViewAsSpan())
return _formatStringHook.Original(thisPtr, newInput, localParameters, output);
}
catch (Exception ex)
{
DalamudApi.PluginLog.Error(ex, "PrefPro Exception");
}
finally
else
{
SeStringBuilder.SharedPool.Return(sb);

var result = _formatStringHook.Original(thisPtr, input, localParameters, output);
raceParam.IntValue = oldRace;
genderParam.IntValue = oldGender;
return result;
}

originalFormatString:
Expand All @@ -147,21 +151,21 @@ public void RefreshConfig()
{
if (!_loginState.LoggedIn || string.IsNullOrEmpty(_configuration.Name))
{
_handlerConfig = HandlerConfig.None;
_nameHandlerConfig = NameHandlerConfig.None;
}
else
{
_handlerConfig = CreateConfig(_configuration, _loginState.PlayerName);
_nameHandlerConfig = CreateConfig(_configuration, _loginState.PlayerName);
}
}

private static HandlerConfig CreateConfig(Configuration config, string playerName)
private static NameHandlerConfig CreateConfig(Configuration config, string playerName)
{
var data = new HandlerConfig();
var data = new NameHandlerConfig();

if (string.IsNullOrEmpty(config.Name))
{
return HandlerConfig.None;
return NameHandlerConfig.None;
}

if (config.Name != playerName)
Expand Down Expand Up @@ -251,7 +255,7 @@ private static bool ShouldHandleSplitPayload(ReadOnlySePayloadSpan payload, int
return false;
}

public class HandlerConfig
public class NameHandlerConfig
{
public bool Apply;
public bool ApplyFull;
Expand All @@ -261,7 +265,7 @@ public class HandlerConfig
public ReadOnlySePayload? NameFirst;
public ReadOnlySePayload? NameLast;

public static readonly HandlerConfig None = new()
public static readonly NameHandlerConfig None = new()
{
Apply = false
};
Expand Down
Loading