diff options
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 7 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs | 56 |
2 files changed, 57 insertions, 6 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index 05a7b7896..414488853 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1087,12 +1087,7 @@ namespace MediaBrowser.Controller.Entities return 1; }).ThenBy(i => i.Video3DFormat.HasValue ? 1 : 0) - .ThenByDescending(i => - { - var stream = i.VideoStream; - - return stream is null || stream.Width is null ? 0 : stream.Width.Value; - }) + .ThenByDescending(i => i, new MediaSourceWidthComparator()) .ToList(); } diff --git a/MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs b/MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs new file mode 100644 index 000000000..0224577a4 --- /dev/null +++ b/MediaBrowser.Controller/Entities/MediaSourceWidthComparator.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using System.Runtime.Intrinsics.X86; +using MediaBrowser.Model.Dto; + +namespace MediaBrowser.Controller.Entities; + +/// <summary> +/// Compare MediaSource of the same file by Video width <see cref="IComparer{T}" />. +/// </summary> +public class MediaSourceWidthComparator : IComparer<MediaSourceInfo> +{ + /// <inheritdoc /> + public int Compare(MediaSourceInfo? x, MediaSourceInfo? y) + { + if (x is null && y is null) + { + return 0; + } + + if (x is null) + { + return -1; + } + + if (y is null) + { + return 1; + } + + if (string.Equals(x.Path, y.Path, StringComparison.OrdinalIgnoreCase)) + { + if (x.VideoStream is null && y.VideoStream is null) + { + return 0; + } + + if (x.VideoStream is null) + { + return -1; + } + + if (y.VideoStream is null) + { + return 1; + } + + var xWidth = x.VideoStream.Width ?? 0; + var yWidth = y.VideoStream.Width ?? 0; + + return xWidth - yWidth; + } + + return 0; + } +} |
