Skip to content

Commit

Permalink
[CastIt.Server] Only use the StrCmpLogicalW on windows
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Mar 17, 2024
1 parent 6addbb3 commit a954ecb
Showing 1 changed file with 27 additions and 8 deletions.
35 changes: 27 additions & 8 deletions CastIt.Server/Common/Comparers/WindowsExplorerComparer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@ public class WindowsExplorerComparer : IComparer<string>

public int Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
if (OperatingSystem.IsWindows())
{
return StrCmpLogicalW(x, y);
}

return string.Compare(x, y, StringComparison.Ordinal);
}
}

Expand All @@ -31,16 +36,30 @@ public WindowsExplorerComparerForServerFileItem(SortModeType mode)

public int Compare(ServerFileItem x, ServerFileItem y)
{
if (x == null || y == null)
{
throw new ArgumentNullException();
}

bool isWindows = OperatingSystem.IsWindows();
return _mode switch
{
SortModeType.AlphabeticalPathAsc => StrCmpLogicalW(x!.Path, y!.Path),
SortModeType.AlphabeticalPathDesc => StrCmpLogicalW(y!.Path, x!.Path),
SortModeType.AlphabeticalNameAsc => StrCmpLogicalW(x!.Filename, y!.Filename),
SortModeType.AlphabeticalNameDesc => StrCmpLogicalW(y!.Filename, x!.Filename),
SortModeType.DurationAsc => x!.TotalSeconds.CompareTo(y!.TotalSeconds),
SortModeType.DurationDesc => y!.TotalSeconds.CompareTo(x!.TotalSeconds),
SortModeType.AlphabeticalPathAsc => isWindows
? StrCmpLogicalW(x.Path, y.Path)
: string.Compare(x.Path, y.Path, StringComparison.Ordinal),
SortModeType.AlphabeticalPathDesc => isWindows
? StrCmpLogicalW(y.Path, x.Path)
: string.Compare(y.Path, x.Path, StringComparison.Ordinal),
SortModeType.AlphabeticalNameAsc => isWindows
? StrCmpLogicalW(x.Filename, y.Filename)
: string.Compare(x.Filename, y.Filename, StringComparison.Ordinal),
SortModeType.AlphabeticalNameDesc => isWindows
? StrCmpLogicalW(y.Filename, x.Filename)
: string.Compare(y.Filename, x.Filename, StringComparison.Ordinal),
SortModeType.DurationAsc => x.TotalSeconds.CompareTo(y.TotalSeconds),
SortModeType.DurationDesc => y.TotalSeconds.CompareTo(x.TotalSeconds),
_ => throw new ArgumentOutOfRangeException(nameof(_mode), _mode, "Invalid sort mode")
};
}
}
}
}

0 comments on commit a954ecb

Please sign in to comment.