jellyfin/MediaBrowser.Model/Dlna/StreamInfoSorter.cs

61 lines
1.7 KiB
C#
Raw Normal View History

2017-03-31 19:04:50 +00:00
using System;
using MediaBrowser.Model.MediaInfo;
2015-03-26 20:31:57 +00:00
using MediaBrowser.Model.Session;
using System.Collections.Generic;
using System.Linq;
namespace MediaBrowser.Model.Dlna
{
public class StreamInfoSorter
{
2017-08-19 19:43:35 +00:00
public static StreamInfo[] SortMediaSources(List<StreamInfo> streams, long? maxBitrate)
2015-03-26 20:31:57 +00:00
{
return streams.OrderBy(i =>
2015-03-26 23:10:34 +00:00
{
// Nothing beats direct playing a file
if (i.PlayMethod == PlayMethod.DirectPlay && i.MediaSource.Protocol == MediaProtocol.File)
{
return 0;
}
return 1;
}).ThenBy(i =>
2015-03-26 20:31:57 +00:00
{
switch (i.PlayMethod)
{
2015-03-26 23:10:34 +00:00
// Let's assume direct streaming a file is just as desirable as direct playing a remote url
case PlayMethod.DirectStream:
2015-03-26 20:31:57 +00:00
case PlayMethod.DirectPlay:
return 0;
default:
2015-03-27 20:55:31 +00:00
return 1;
2015-03-26 20:31:57 +00:00
}
}).ThenBy(i =>
{
switch (i.MediaSource.Protocol)
{
case MediaProtocol.File:
return 0;
default:
return 1;
}
2016-04-14 19:12:00 +00:00
}).ThenBy(i =>
{
if (maxBitrate.HasValue)
{
if (i.MediaSource.Bitrate.HasValue)
{
2017-03-31 19:04:50 +00:00
return Math.Abs(i.MediaSource.Bitrate.Value - maxBitrate.Value);
2016-04-14 19:12:00 +00:00
}
}
2017-03-31 19:04:50 +00:00
return 0;
2016-04-14 19:12:00 +00:00
2017-08-19 19:43:35 +00:00
}).ToArray();
2015-03-26 20:31:57 +00:00
}
}
}