| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 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    {        /// <summary>        /// Gets the identifier.        /// </summary>        /// <value>The identifier.</value>        Guid Id { get; }        /// <summary>        /// Gets the media sources.        /// </summary>        /// <param name="enablePathSubstitution">if set to <c>true</c> [enable path substitution].</param>        /// <returns>Task{IEnumerable{MediaSourceInfo}}.</returns>        IEnumerable<MediaSourceInfo> GetMediaSources(bool enablePathSubstitution);    }    public static class HasMediaSourceExtensions    {        public static IEnumerable<MediaSourceInfo> 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;        }    }}
 |