diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-05-12 18:30:32 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-05-12 18:30:32 -0400 |
| commit | d4d10f6e433cc472c5aafe6af53a101bba36bf79 (patch) | |
| tree | 9426472a3ae99e09813f264fc0a464d9c11ce895 /MediaBrowser.Model/MediaInfo | |
| parent | bf0e9d36a909856506f522ba4e3cbf97248f0f1a (diff) | |
add new subtitle preferences
Diffstat (limited to 'MediaBrowser.Model/MediaInfo')
| -rw-r--r-- | MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs | 102 |
1 files changed, 0 insertions, 102 deletions
diff --git a/MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs b/MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs deleted file mode 100644 index e710b1d79d..0000000000 --- a/MediaBrowser.Model/MediaInfo/MediaStreamSelector.cs +++ /dev/null @@ -1,102 +0,0 @@ -using MediaBrowser.Model.Configuration; -using MediaBrowser.Model.Entities; -using System; -using System.Collections.Generic; -using System.Linq; - -namespace MediaBrowser.Model.MediaInfo -{ - public static class MediaStreamSelector - { - public static int? GetDefaultAudioStreamIndex(List<MediaStream> streams, IEnumerable<string> preferredLanguages, bool preferDefaultTrack) - { - streams = GetSortedStreams(streams, MediaStreamType.Audio, preferredLanguages.ToList()) - .ToList(); - - if (preferDefaultTrack) - { - var defaultStream = streams.FirstOrDefault(i => i.IsDefault); - - if (defaultStream != null) - { - return defaultStream.Index; - } - } - - var stream = streams.FirstOrDefault(); - - if (stream != null) - { - return stream.Index; - } - - return null; - } - - public static int? GetDefaultSubtitleStreamIndex(List<MediaStream> streams, - IEnumerable<string> preferredLanguages, - SubtitlePlaybackMode mode, - string audioTrackLanguage) - { - var languages = preferredLanguages as List<string> ?? preferredLanguages.ToList(); - streams = GetSortedStreams(streams, MediaStreamType.Subtitle, languages).ToList(); - - var full = streams.Where(s => !s.IsForced); - var forced = streams.Where(s => s.IsForced && string.Equals(s.Language, audioTrackLanguage, StringComparison.OrdinalIgnoreCase)); - - MediaStream stream = null; - - if (mode == SubtitlePlaybackMode.None) - { - return null; - } - - if (mode == SubtitlePlaybackMode.Default) - { - // if the audio language is not understood by the user, load their preferred subs, if there are any - if (!ContainsOrdinal(languages, audioTrackLanguage)) - { - stream = full.FirstOrDefault(s => ContainsOrdinal(languages, s.Language)); - } - } - else if (mode == SubtitlePlaybackMode.Always) - { - // always load the most suitable full subtitles - stream = full.FirstOrDefault(); - } - - // load forced subs if we have found no suitable full subtitles - stream = stream ?? forced.FirstOrDefault(); - - if (stream != null) - { - return stream.Index; - } - - return null; - } - - private static bool ContainsOrdinal(IEnumerable<string> list, string item) - { - return list.Any(i => string.Equals(i, item, StringComparison.OrdinalIgnoreCase)); - } - - private static IEnumerable<MediaStream> GetSortedStreams(IEnumerable<MediaStream> streams, MediaStreamType type, List<string> languagePreferences) - { - var orderStreams = streams - .Where(i => i.Type == type); - - if (languagePreferences.Count == 0) - { - return orderStreams.OrderBy(i => i.IsDefault) - .ThenBy(i => i.Index) - .ToList(); - } - - return orderStreams.OrderBy(i => languagePreferences.FindIndex(l => string.Equals(i.Language, l, StringComparison.OrdinalIgnoreCase))) - .ThenBy(i => i.IsDefault) - .ThenBy(i => i.Index) - .ToList(); - } - } -} |
