diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities/Audio/Audio.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Audio/Audio.cs | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/MediaBrowser.Controller/Entities/Audio/Audio.cs b/MediaBrowser.Controller/Entities/Audio/Audio.cs index dca645a75..43de1f5b0 100644 --- a/MediaBrowser.Controller/Entities/Audio/Audio.cs +++ b/MediaBrowser.Controller/Entities/Audio/Audio.cs @@ -1,16 +1,27 @@ -using MediaBrowser.Controller.Providers; +using MediaBrowser.Controller.Persistence; +using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.Dto; +using MediaBrowser.Model.Entities; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; +using System.Threading; namespace MediaBrowser.Controller.Entities.Audio { /// <summary> /// Class Audio /// </summary> - public class Audio : BaseItem, IHasMediaStreams, IHasAlbumArtist, IHasArtist, IHasMusicGenres, IHasLookupInfo<SongInfo>, IHasTags + public class Audio : BaseItem, + IHasMediaStreams, + IHasAlbumArtist, + IHasArtist, + IHasMusicGenres, + IHasLookupInfo<SongInfo>, + IHasTags, + IHasMediaSources { public string FormatName { get; set; } public long? Size { get; set; } @@ -164,5 +175,53 @@ namespace MediaBrowser.Controller.Entities.Audio return info; } + + public virtual IEnumerable<MediaSourceInfo> GetMediaSources(bool enablePathSubstitution) + { + var result = new List<MediaSourceInfo> + { + GetVersionInfo(this, enablePathSubstitution) + }; + + return result; + } + + private static MediaSourceInfo GetVersionInfo(Audio i, bool enablePathSubstituion) + { + var locationType = i.LocationType; + + var info = new MediaSourceInfo + { + Id = i.Id.ToString("N"), + LocationType = locationType, + MediaStreams = ItemRepository.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(), + Name = i.Name, + Path = enablePathSubstituion ? GetMappedPath(i.Path, locationType) : i.Path, + RunTimeTicks = i.RunTimeTicks, + Container = i.Container, + Size = i.Size, + Formats = (i.FormatName ?? string.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList() + }; + + if (string.IsNullOrEmpty(info.Container)) + { + if (!string.IsNullOrWhiteSpace(i.Path) && locationType != LocationType.Remote && locationType != LocationType.Virtual) + { + info.Container = System.IO.Path.GetExtension(i.Path).TrimStart('.'); + } + } + + var bitrate = i.TotalBitrate ?? + info.MediaStreams.Where(m => m.Type == MediaStreamType.Audio) + .Select(m => m.BitRate ?? 0) + .Sum(); + + if (bitrate > 0) + { + info.Bitrate = bitrate; + } + + return info; + } } } |
