using MediaBrowser.Model.Entities; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization; namespace MediaBrowser.Controller.Entities { /// /// Class Video /// public class Video : BaseItem, IHasMediaStreams { public Video() { MediaStreams = new List(); Chapters = new List(); PlayableStreamFileNames = new List(); } /// /// Gets or sets the type of the video. /// /// The type of the video. public VideoType VideoType { get; set; } /// /// Gets or sets the type of the iso. /// /// The type of the iso. public IsoType? IsoType { get; set; } /// /// Gets or sets the format of the video. /// /// The format of the video. public VideoFormat VideoFormat { get; set; } /// /// Gets or sets the media streams. /// /// The media streams. public List MediaStreams { get; set; } /// /// Gets or sets the chapters. /// /// The chapters. public List Chapters { get; set; } /// /// If the video is a folder-rip, this will hold the file list for the largest playlist /// public List PlayableStreamFileNames { get; set; } /// /// Gets the playable stream files. /// /// List{System.String}. public List GetPlayableStreamFiles() { return GetPlayableStreamFiles(Path); } /// /// Gets the playable stream files. /// /// The root path. /// List{System.String}. public List GetPlayableStreamFiles(string rootPath) { if (PlayableStreamFileNames == null) { return null; } var allFiles = Directory.EnumerateFiles(rootPath, "*", SearchOption.AllDirectories).ToList(); return PlayableStreamFileNames.Select(name => allFiles.FirstOrDefault(f => string.Equals(System.IO.Path.GetFileName(f), name, System.StringComparison.OrdinalIgnoreCase))) .Where(f => !string.IsNullOrEmpty(f)) .ToList(); } /// /// The default video stream for this video. Use this to determine media info for this item. /// /// The default video stream. [IgnoreDataMember] public MediaStream DefaultVideoStream { get { return MediaStreams != null ? MediaStreams.FirstOrDefault(s => s.Type == MediaStreamType.Video) : null; } } /// /// Gets a value indicating whether [is3 D]. /// /// true if [is3 D]; otherwise, false. [IgnoreDataMember] public bool Is3D { get { return VideoFormat > 0; } } /// /// Gets the type of the media. /// /// The type of the media. public override string MediaType { get { return Model.Entities.MediaType.Video; } } } }