using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.LiveTv; using System; using System.Threading; using System.Threading.Tasks; using System.Linq; namespace MediaBrowser.Controller.LiveTv { public class LiveTvProgram : BaseItem { /// /// Gets the user data key. /// /// System.String. public override string GetUserDataKey() { return GetClientTypeName() + "-" + Name; } /// /// Id of the program. /// public string ExternalId { get; set; } /// /// Gets or sets the channel identifier. /// /// The channel identifier. public string ExternalChannelId { get; set; } /// /// Gets or sets the type of the channel. /// /// The type of the channel. public ChannelType ChannelType { get; set; } /// /// The start date of the program, in UTC. /// public DateTime StartDate { get; set; } /// /// Gets or sets a value indicating whether this instance is hd. /// /// true if this instance is hd; otherwise, false. public bool? IsHD { get; set; } /// /// Gets or sets the audio. /// /// The audio. public ProgramAudio? Audio { get; set; } /// /// Gets or sets a value indicating whether this instance is repeat. /// /// true if this instance is repeat; otherwise, false. public bool IsRepeat { get; set; } /// /// Gets or sets the episode title. /// /// The episode title. public string EpisodeTitle { get; set; } /// /// Gets or sets the name of the service. /// /// The name of the service. public string ServiceName { get; set; } /// /// Supply the image path if it can be accessed directly from the file system /// /// The image path. public string ProviderImagePath { get; set; } /// /// Supply the image url if it can be downloaded /// /// The image URL. public string ProviderImageUrl { get; set; } /// /// Gets or sets a value indicating whether this instance has image. /// /// null if [has image] contains no value, true if [has image]; otherwise, false. public bool? HasProviderImage { get; set; } /// /// Gets or sets a value indicating whether this instance is movie. /// /// true if this instance is movie; otherwise, false. public bool IsMovie { get; set; } /// /// Gets or sets a value indicating whether this instance is sports. /// /// true if this instance is sports; otherwise, false. public bool IsSports { get; set; } /// /// Gets or sets a value indicating whether this instance is series. /// /// true if this instance is series; otherwise, false. public bool IsSeries { get; set; } /// /// Gets or sets a value indicating whether this instance is live. /// /// true if this instance is live; otherwise, false. public bool IsLive { get; set; } /// /// Gets or sets a value indicating whether this instance is news. /// /// true if this instance is news; otherwise, false. public bool IsNews { get; set; } /// /// Gets or sets a value indicating whether this instance is kids. /// /// true if this instance is kids; otherwise, false. public bool IsKids { get; set; } /// /// Gets or sets a value indicating whether this instance is premiere. /// /// true if this instance is premiere; otherwise, false. public bool IsPremiere { get; set; } /// /// Returns the folder containing the item. /// If the item is a folder, it returns the folder itself /// /// The containing folder path. public override string ContainingFolderPath { get { return Path; } } /// /// Gets a value indicating whether this instance is owned item. /// /// true if this instance is owned item; otherwise, false. public override bool IsOwnedItem { get { return false; } } public override string MediaType { get { return ChannelType == ChannelType.TV ? Model.Entities.MediaType.Video : Model.Entities.MediaType.Audio; } } public bool IsAiring { get { var now = DateTime.UtcNow; return now >= StartDate && now < EndDate; } } public bool HasAired { get { var now = DateTime.UtcNow; return now >= EndDate; } } public override string GetClientTypeName() { return "Program"; } public override Task UpdateToRepository(ItemUpdateType updateReason, CancellationToken cancellationToken) { DateLastSaved = DateTime.UtcNow; // Avoid library manager and keep out of in-memory cache // Not great that this class has to know about that, but we'll improve that later. return ItemRepository.SaveItem(this, cancellationToken); } protected override bool GetBlockUnratedValue(UserConfiguration config) { return config.BlockUnratedItems.Contains(UnratedItem.LiveTvProgram); } } }