aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/LiveTv/LiveTvChannel.cs')
-rw-r--r--MediaBrowser.Controller/LiveTv/LiveTvChannel.cs197
1 files changed, 197 insertions, 0 deletions
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
new file mode 100644
index 000000000..9e2d29eb6
--- /dev/null
+++ b/MediaBrowser.Controller/LiveTv/LiveTvChannel.cs
@@ -0,0 +1,197 @@
+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;
+using System;
+using System.Linq;
+
+namespace MediaBrowser.Controller.LiveTv
+{
+ public class LiveTvChannel : BaseItem, IHasMediaSources, IHasProgramAttributes
+ {
+ public override List<string> GetUserDataKeys()
+ {
+ var list = base.GetUserDataKeys();
+
+ if (!ConfigurationManager.Configuration.DisableLiveTvChannelUserDataName)
+ {
+ list.Insert(0, GetClientTypeName() + "-" + Name);
+ }
+
+ return list;
+ }
+
+ public override UnratedItem GetBlockUnratedType()
+ {
+ return UnratedItem.LiveTvChannel;
+ }
+
+ [IgnoreDataMember]
+ public override bool SupportsPositionTicksResume
+ {
+ get
+ {
+ return false;
+ }
+ }
+
+ [IgnoreDataMember]
+ public override SourceType SourceType
+ {
+ get { return SourceType.LiveTV; }
+ }
+
+ [IgnoreDataMember]
+ public override bool EnableRememberingTrackSelections
+ {
+ get
+ {
+ return false;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets the number.
+ /// </summary>
+ /// <value>The number.</value>
+ public string Number { get; set; }
+
+ /// <summary>
+ /// Gets or sets the type of the channel.
+ /// </summary>
+ /// <value>The type of the channel.</value>
+ public ChannelType ChannelType { get; set; }
+
+ [IgnoreDataMember]
+ public override LocationType LocationType
+ {
+ get
+ {
+ // TODO: This should be removed
+ return LocationType.Remote;
+ }
+ }
+
+ protected override string CreateSortName()
+ {
+ 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<BaseItem> GetTaggedItems(IEnumerable<BaseItem> inputItems)
+ {
+ return new List<BaseItem>();
+ }
+
+ public override List<MediaSourceInfo> GetMediaSources(bool enablePathSubstitution)
+ {
+ var list = new List<MediaSourceInfo>();
+
+ var info = new MediaSourceInfo
+ {
+ Id = Id.ToString("N"),
+ Protocol = PathProtocol ?? MediaProtocol.File,
+ MediaStreams = new List<MediaStream>(),
+ Name = Name,
+ Path = Path,
+ RunTimeTicks = RunTimeTicks,
+ Type = MediaSourceType.Placeholder,
+ IsInfiniteStream = RunTimeTicks == null
+ };
+
+ list.Add(info);
+
+ return list;
+ }
+
+ public override List<MediaStream> GetMediaStreams()
+ {
+ return new List<MediaStream>();
+ }
+
+ 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; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is sports.
+ /// </summary>
+ /// <value><c>true</c> if this instance is sports; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
+ public bool IsSports { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is series.
+ /// </summary>
+ /// <value><c>true</c> if this instance is series; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
+ public bool IsSeries { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is news.
+ /// </summary>
+ /// <value><c>true</c> if this instance is news; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
+ public bool IsNews { get; set; }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether this instance is kids.
+ /// </summary>
+ /// <value><c>true</c> if this instance is kids; otherwise, <c>false</c>.</value>
+ [IgnoreDataMember]
+ public bool IsKids
+ {
+ get
+ {
+ return Tags.Contains("Kids", StringComparer.OrdinalIgnoreCase);
+ }
+ }
+
+ [IgnoreDataMember]
+ public bool IsRepeat { get; set; }
+
+ /// <summary>
+ /// Gets or sets the episode title.
+ /// </summary>
+ /// <value>The episode title.</value>
+ [IgnoreDataMember]
+ public string EpisodeTitle { get; set; }
+ }
+}