Skip to content

Commit 6f32d56

Browse files
committed
better sorter
1 parent 4e1f4f1 commit 6f32d56

File tree

1 file changed

+39
-2
lines changed

1 file changed

+39
-2
lines changed

SomethingNeedDoing/Gui/ChangelogWindow.cs

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public ChangelogWindow() : base($"{P.Name} - Changelog###{P.Name}_{nameof(Change
4545
.ToList()!;
4646
_versionedGroups[versionGroup.Key] = classGroups;
4747
}
48-
_sortedVersions = [.. _versionedGroups.Keys.OrderByDescending(v => v)];
48+
_sortedVersions = [.. _versionedGroups.Keys.OrderByDescending(v => v, new VersionComparer())];
4949

5050
AddGeneralChangelogs();
5151
var currentVersion = Svc.PluginInterface.Manifest.AssemblyVersion.ToString(2);
@@ -57,6 +57,7 @@ private void AddGeneralChangelogs()
5757
{
5858
Add("12.8", "Fixed recursive spawning of temporary macros caused by function-level trigger events");
5959
Add("12.9", "Added pause/resume/stop all commands");
60+
Add("12.10", "Fixed native macro execution where waits weren't being applied properly");
6061
}
6162

6263
private void Add(string version, string description)
@@ -85,7 +86,7 @@ private void Add(string version, string description)
8586
if (!_sortedVersions.Contains(version))
8687
{
8788
_sortedVersions.Add(version);
88-
_sortedVersions.Sort((a, b) => string.Compare(b, a, StringComparison.Ordinal));
89+
_sortedVersions.Sort((a, b) => new VersionComparer().Compare(b, a));
8990
}
9091
}
9192

@@ -202,4 +203,40 @@ private class ChangelogEntry(ChangelogAttribute attr, string parentClass, Type d
202203
public Type? DeclaringType = declaringType;
203204
public MemberInfo? MemberInfo = memberInfo;
204205
}
206+
207+
private class VersionComparer : IComparer<string>
208+
{
209+
public int Compare(string? x, string? y)
210+
{
211+
if (x == null && y == null) return 0;
212+
if (x == null) return -1;
213+
if (y == null) return 1;
214+
215+
var xParts = x.Split('.');
216+
var yParts = y.Split('.');
217+
218+
var maxLength = Math.Max(xParts.Length, yParts.Length);
219+
220+
for (var i = 0; i < maxLength; i++)
221+
{
222+
var xPart = i < xParts.Length ? xParts[i] : "0";
223+
var yPart = i < yParts.Length ? yParts[i] : "0";
224+
225+
if (int.TryParse(xPart, out var xNum) && int.TryParse(yPart, out var yNum))
226+
{
227+
if (xNum != yNum)
228+
return xNum.CompareTo(yNum);
229+
}
230+
else
231+
{
232+
// If parsing fails, fall back to string comparison
233+
var stringCompare = string.Compare(xPart, yPart, StringComparison.Ordinal);
234+
if (stringCompare != 0)
235+
return stringCompare;
236+
}
237+
}
238+
239+
return 0;
240+
}
241+
}
205242
}

0 commit comments

Comments
 (0)