@@ -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