Skip to content

Commit afd372d

Browse files
authored
Merge pull request #7 from nebel/fix-early-exit
2 parents 8629cf6 + 94df234 commit afd372d

1 file changed

Lines changed: 44 additions & 40 deletions

File tree

PrefPro/StringHandler.cs

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public sealed unsafe class StringHandler : IDisposable
2121
private readonly LoginState _loginState;
2222
private readonly Configuration _configuration;
2323

24-
private HandlerConfig _handlerConfig = HandlerConfig.None;
24+
private NameHandlerConfig _nameHandlerConfig = NameHandlerConfig.None;
2525

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

77-
var data = _handlerConfig;
78-
if (!data.Apply)
79-
goto originalFormatString;
80-
8177
var seString = input.AsReadOnlySeStringSpan();
8278
if (seString.IsEmpty || seString.IsTextOnly())
8379
goto originalFormatString;
@@ -100,43 +96,51 @@ private bool FormatStringDetour(TextModule* thisPtr, CStringPointer input, StdDe
10096
var oldGender = genderParam.IntValue;
10197
genderParam.IntValue = _configuration.GetGender();
10298

103-
var sb = SeStringBuilder.SharedPool.Get();
104-
105-
try
99+
var nameConfig = _nameHandlerConfig;
100+
if (_nameHandlerConfig.Apply)
106101
{
107-
foreach (var payload in seString)
102+
var sb = SeStringBuilder.SharedPool.Get();
103+
try
108104
{
109-
if (data.ApplyFull && ShouldHandleStringPayload(payload))
110-
{
111-
sb.Append(data.NameFull);
112-
}
113-
else if (data.ApplyFirst && ShouldHandleSplitPayload(payload, 1))
114-
{
115-
sb.Append(data.NameFirst);
116-
}
117-
else if (data.ApplyLast && ShouldHandleSplitPayload(payload, 2))
118-
{
119-
sb.Append(data.NameLast);
120-
}
121-
else
105+
foreach (var payload in seString)
122106
{
123-
sb.Append(payload);
107+
if (nameConfig.ApplyFull && ShouldHandleStringPayload(payload))
108+
{
109+
sb.Append(nameConfig.NameFull);
110+
}
111+
else if (nameConfig.ApplyFirst && ShouldHandleSplitPayload(payload, 1))
112+
{
113+
sb.Append(nameConfig.NameFirst);
114+
}
115+
else if (nameConfig.ApplyLast && ShouldHandleSplitPayload(payload, 2))
116+
{
117+
sb.Append(nameConfig.NameLast);
118+
}
119+
else
120+
{
121+
sb.Append(payload);
122+
}
124123
}
124+
fixed (byte* newInput = sb.GetViewAsSpan())
125+
return _formatStringHook.Original(thisPtr, newInput, localParameters, output);
126+
}
127+
catch (Exception ex)
128+
{
129+
DalamudApi.PluginLog.Error(ex, "PrefPro Exception");
130+
}
131+
finally
132+
{
133+
SeStringBuilder.SharedPool.Return(sb);
134+
raceParam.IntValue = oldRace;
135+
genderParam.IntValue = oldGender;
125136
}
126-
127-
fixed (byte* newInput = sb.GetViewAsSpan())
128-
return _formatStringHook.Original(thisPtr, newInput, localParameters, output);
129-
}
130-
catch (Exception ex)
131-
{
132-
DalamudApi.PluginLog.Error(ex, "PrefPro Exception");
133137
}
134-
finally
138+
else
135139
{
136-
SeStringBuilder.SharedPool.Return(sb);
137-
140+
var result = _formatStringHook.Original(thisPtr, input, localParameters, output);
138141
raceParam.IntValue = oldRace;
139142
genderParam.IntValue = oldGender;
143+
return result;
140144
}
141145

142146
originalFormatString:
@@ -147,21 +151,21 @@ public void RefreshConfig()
147151
{
148152
if (!_loginState.LoggedIn || string.IsNullOrEmpty(_configuration.Name))
149153
{
150-
_handlerConfig = HandlerConfig.None;
154+
_nameHandlerConfig = NameHandlerConfig.None;
151155
}
152156
else
153157
{
154-
_handlerConfig = CreateConfig(_configuration, _loginState.PlayerName);
158+
_nameHandlerConfig = CreateConfig(_configuration, _loginState.PlayerName);
155159
}
156160
}
157161

158-
private static HandlerConfig CreateConfig(Configuration config, string playerName)
162+
private static NameHandlerConfig CreateConfig(Configuration config, string playerName)
159163
{
160-
var data = new HandlerConfig();
164+
var data = new NameHandlerConfig();
161165

162166
if (string.IsNullOrEmpty(config.Name))
163167
{
164-
return HandlerConfig.None;
168+
return NameHandlerConfig.None;
165169
}
166170

167171
if (config.Name != playerName)
@@ -251,7 +255,7 @@ private static bool ShouldHandleSplitPayload(ReadOnlySePayloadSpan payload, int
251255
return false;
252256
}
253257

254-
public class HandlerConfig
258+
public class NameHandlerConfig
255259
{
256260
public bool Apply;
257261
public bool ApplyFull;
@@ -261,7 +265,7 @@ public class HandlerConfig
261265
public ReadOnlySePayload? NameFirst;
262266
public ReadOnlySePayload? NameLast;
263267

264-
public static readonly HandlerConfig None = new()
268+
public static readonly NameHandlerConfig None = new()
265269
{
266270
Apply = false
267271
};

0 commit comments

Comments
 (0)