using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Dto; using MediaBrowser.Model.Entities; using MediaBrowser.Model.LiveTv; using MediaBrowser.Model.MediaInfo; using System.Collections.Generic; using System.Globalization; using MediaBrowser.Model.Serialization; namespace MediaBrowser.Controller.LiveTv { public class LiveTvChannel : BaseItem, IHasMediaSources, IHasProgramAttributes { public override List GetUserDataKeys() { var list = base.GetUserDataKeys(); if (!ConfigurationManager.Configuration.DisableLiveTvChannelUserDataName) { list.Insert(0, GetClientTypeName() + "-" + Name); } return list; } public override UnratedItem GetBlockUnratedType() { return UnratedItem.LiveTvChannel; } /// /// Gets a value indicating whether this instance is owned item. /// /// true if this instance is owned item; otherwise, false. [IgnoreDataMember] public override bool IsOwnedItem { get { return false; } } [IgnoreDataMember] public override bool SupportsPositionTicksResume { get { return false; } } [IgnoreDataMember] public override SourceType SourceType { get { return SourceType.LiveTV; } set { } } [IgnoreDataMember] public override bool EnableRememberingTrackSelections { get { return false; } } /// /// Gets or sets the number. /// /// The number. public string Number { get; set; } /// /// Gets or sets the type of the channel. /// /// The type of the channel. public ChannelType ChannelType { get; set; } [IgnoreDataMember] public override LocationType LocationType { get { // TODO: This should be removed return LocationType.Remote; } } protected override string CreateSortNameInternal() { if (!string.IsNullOrEmpty(Number)) { double number = 0; if (double.TryParse(Number, NumberStyles.Any, CultureInfo.InvariantCulture, out number)) { return string.Format("{0:00000.0}", number) + "-" + (Name ?? string.Empty); } } return (Number ?? string.Empty) + "-" + (Name ?? string.Empty); } [IgnoreDataMember] public override string MediaType { get { return ChannelType == ChannelType.Radio ? Model.Entities.MediaType.Audio : Model.Entities.MediaType.Video; } } public override string GetClientTypeName() { return "TvChannel"; } public IEnumerable GetTaggedItems(IEnumerable inputItems) { return new List(); } public IEnumerable GetMediaSources(bool enablePathSubstitution) { var list = new List(); var locationType = LocationType; var info = new MediaSourceInfo { Id = Id.ToString("N"), Protocol = locationType == LocationType.Remote ? MediaProtocol.Http : MediaProtocol.File, MediaStreams = new List(), Name = Name, Path = Path, RunTimeTicks = RunTimeTicks, Type = MediaSourceType.Placeholder }; list.Add(info); return list; } protected override string GetInternalMetadataPath(string basePath) { return System.IO.Path.Combine(basePath, "livetv", Id.ToString("N"), "metadata"); } public override bool CanDelete() { return false; } [IgnoreDataMember] public bool IsMovie { get; set; } /// /// Gets or sets a value indicating whether this instance is sports. /// /// true if this instance is sports; otherwise, false. [IgnoreDataMember] public bool IsSports { get; set; } /// /// Gets or sets a value indicating whether this instance is series. /// /// true if this instance is series; otherwise, false. [IgnoreDataMember] public bool IsSeries { get; set; } /// /// Gets or sets a value indicating whether this instance is live. /// /// true if this instance is live; otherwise, false. [IgnoreDataMember] public bool IsLive { get; set; } /// /// Gets or sets a value indicating whether this instance is news. /// /// true if this instance is news; otherwise, false. [IgnoreDataMember] public bool IsNews { get; set; } /// /// Gets or sets a value indicating whether this instance is kids. /// /// true if this instance is kids; otherwise, false. [IgnoreDataMember] public bool IsKids { get; set; } [IgnoreDataMember] public bool IsPremiere { get; set; } [IgnoreDataMember] public bool IsRepeat { get; set; } /// /// Gets or sets the episode title. /// /// The episode title. [IgnoreDataMember] public string EpisodeTitle { get; set; } } }