using MediaBrowser.Controller.MediaEncoding; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.Linq; namespace MediaBrowser.Controller.Entities { public interface IHasMediaSources { /// /// Gets the identifier. /// /// The identifier. Guid Id { get; } /// /// Gets the media sources. /// /// if set to true [enable path substitution]. /// Task{IEnumerable{MediaSourceInfo}}. IEnumerable GetMediaSources(bool enablePathSubstitution); } public static class HasMediaSourceExtensions { public static IEnumerable GetMediaSources(this IHasMediaSources item, bool enablePathSubstitution, User user) { if (item == null) { throw new ArgumentNullException("item"); } if (!(item is Video)) { return item.GetMediaSources(enablePathSubstitution); } if (user == null) { throw new ArgumentNullException("user"); } var sources = item.GetMediaSources(enablePathSubstitution).ToList(); var preferredAudio = string.IsNullOrEmpty(user.Configuration.AudioLanguagePreference) ? new string[] { } : new[] { user.Configuration.AudioLanguagePreference }; var preferredSubs = string.IsNullOrEmpty(user.Configuration.SubtitleLanguagePreference) ? new string[] { } : new[] { user.Configuration.SubtitleLanguagePreference }; foreach (var source in sources) { source.DefaultAudioStreamIndex = MediaStreamSelector.GetDefaultAudioStreamIndex( source.MediaStreams, preferredAudio, user.Configuration.PlayDefaultAudioTrack); var defaultAudioIndex = source.DefaultAudioStreamIndex; var audioLangage = defaultAudioIndex == null ? null : source.MediaStreams.Where(i => i.Type == MediaStreamType.Audio && i.Index == defaultAudioIndex).Select(i => i.Language).FirstOrDefault(); source.DefaultSubtitleStreamIndex = MediaStreamSelector.GetDefaultSubtitleStreamIndex(source.MediaStreams, preferredSubs, user.Configuration.SubtitleMode, audioLangage); } return sources; } } }