| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | using MediaBrowser.Controller.Entities;using MediaBrowser.Controller.Providers;using MediaBrowser.Model.Channels;using MediaBrowser.Model.Configuration;using MediaBrowser.Model.Dto;using MediaBrowser.Model.Entities;using MediaBrowser.Model.Users;using System.Collections.Generic;using System.Globalization;using System.Linq;using System.Runtime.Serialization;using System.Threading;namespace MediaBrowser.Controller.Channels{    public class ChannelVideoItem : Video, IChannelMediaItem, IHasLookupInfo<ChannelItemLookupInfo>    {        public ChannelMediaContentType ContentType { get; set; }        public List<ChannelMediaInfo> ChannelMediaSources { get; set; }        protected override string CreateUserDataKey()        {            if (ContentType == ChannelMediaContentType.MovieExtra)            {                var key = this.GetProviderId(MetadataProviders.Imdb) ?? this.GetProviderId(MetadataProviders.Tmdb);                if (!string.IsNullOrWhiteSpace(key))                {                    key = key + "-" + ExtraType.ToString().ToLower();                    // Make sure different trailers have their own data.                    if (RunTimeTicks.HasValue)                    {                        key += "-" + RunTimeTicks.Value.ToString(CultureInfo.InvariantCulture);                    }                    return key;                }            }            return ExternalId;        }        protected override bool GetBlockUnratedValue(UserPolicy config)        {            return config.BlockUnratedItems.Contains(UnratedItem.ChannelContent);        }        [IgnoreDataMember]        public override bool SupportsLocalMetadata        {            get            {                return false;            }        }        public override bool IsSaveLocalMetadataEnabled()        {            return false;        }        public ChannelVideoItem()        {            ChannelMediaSources = new List<ChannelMediaInfo>();        }        [IgnoreDataMember]        public override LocationType LocationType        {            get            {                if (string.IsNullOrEmpty(Path))                {                    return LocationType.Remote;                }                return base.LocationType;            }        }        public override IEnumerable<MediaSourceInfo> GetMediaSources(bool enablePathSubstitution)        {            var sources = ChannelManager.GetStaticMediaSources(this, false, CancellationToken.None)                       .Result.ToList();            if (sources.Count > 0)            {                return sources;            }            var list = base.GetMediaSources(enablePathSubstitution).ToList();            foreach (var mediaSource in list)            {                if (string.IsNullOrWhiteSpace(mediaSource.Path))                {                    mediaSource.Type = MediaSourceType.Placeholder;                }            }            return list;        }        public ChannelItemLookupInfo GetLookupInfo()        {            var info = GetItemLookupInfo<ChannelItemLookupInfo>();            info.ContentType = ContentType;            if (ExtraType.HasValue)            {                info.ExtraType = ExtraType.Value;            }            return info;        }        protected override string GetInternalMetadataPath(string basePath)        {            return System.IO.Path.Combine(basePath, "channels", ChannelId, Id.ToString("N"));        }        public override bool CanDelete()        {            return false;        }        public override bool IsVisibleStandalone(User user)        {            return IsVisibleStandaloneInternal(user, false) && IsChannelVisible(this, user);        }        internal static bool IsChannelVisible(IChannelItem item, User user)        {            var channel = ChannelManager.GetChannel(item.ChannelId);            return channel.IsVisible(user);        }    }}
 |