diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-05-01 18:11:24 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2016-05-01 18:11:24 -0400 |
| commit | 4ddde2cdc2ad3a951120853825df9f3588bc36e4 (patch) | |
| tree | 330e5da94920399e5b20006cf0c76b10c892fb36 /MediaBrowser.Controller | |
| parent | a4d1c9e6e48f63121cc51abda61ed46d7f6a72cf (diff) | |
introduce presentation unique key
Diffstat (limited to 'MediaBrowser.Controller')
| -rw-r--r-- | MediaBrowser.Controller/Entities/BaseItem.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/TV/Series.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Entities/Video.cs | 76 |
3 files changed, 66 insertions, 22 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs index f91b6b31e..6bf55e108 100644 --- a/MediaBrowser.Controller/Entities/BaseItem.cs +++ b/MediaBrowser.Controller/Entities/BaseItem.cs @@ -1149,6 +1149,12 @@ namespace MediaBrowser.Controller.Entities get { return null; } } + [IgnoreDataMember] + public virtual string PresentationUniqueKey + { + get { return Id.ToString("N"); } + } + private string _userDataKey; /// <summary> /// Gets the user data key. diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs index c03eed6c9..c062b5fba 100644 --- a/MediaBrowser.Controller/Entities/TV/Series.cs +++ b/MediaBrowser.Controller/Entities/TV/Series.cs @@ -91,6 +91,12 @@ namespace MediaBrowser.Controller.Entities.TV } } + [IgnoreDataMember] + public override string PresentationUniqueKey + { + get { return GetUserDataKey(); } + } + /// <summary> /// Gets the user data key. /// </summary> diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index cdabaa84e..67b710534 100644 --- a/MediaBrowser.Controller/Entities/Video.cs +++ b/MediaBrowser.Controller/Entities/Video.cs @@ -44,6 +44,20 @@ namespace MediaBrowser.Controller.Entities } } + [IgnoreDataMember] + public override string PresentationUniqueKey + { + get + { + if (PrimaryVersionId.HasValue) + { + return PrimaryVersionId.Value.ToString("N"); + } + + return base.PresentationUniqueKey; + } + } + public long? Size { get; set; } public string Container { get; set; } public int? TotalBitrate { get; set; } @@ -90,6 +104,14 @@ namespace MediaBrowser.Controller.Entities { get { + if (PrimaryVersionId.HasValue) + { + var item = LibraryManager.GetItemById(PrimaryVersionId.Value) as Video; + if (item != null) + { + return item.MediaSourceCount; + } + } return LinkedAlternateVersions.Count + LocalAlternateVersions.Count + 1; } } @@ -192,21 +214,6 @@ namespace MediaBrowser.Controller.Entities return key; } - /// <summary> - /// Gets the linked children. - /// </summary> - /// <returns>IEnumerable{BaseItem}.</returns> - public IEnumerable<Video> GetAlternateVersions() - { - var filesWithinSameDirectory = GetLocalAlternateVersionIds() - .Select(i => LibraryManager.GetItemById(i)) - .Where(i => i != null) - .OfType<Video>(); - - return filesWithinSameDirectory.Concat(GetLinkedAlternateVersions()) - .OrderBy(i => i.SortName); - } - public IEnumerable<Video> GetLinkedAlternateVersions() { var linkedVersions = LinkedAlternateVersions @@ -506,6 +513,36 @@ namespace MediaBrowser.Controller.Entities }).FirstOrDefault(); } + private List<Tuple<Video, MediaSourceType>> GetAllVideosForMediaSources() + { + var list = new List<Tuple<Video, MediaSourceType>>(); + + list.Add(new Tuple<Video, MediaSourceType>(this, MediaSourceType.Default)); + list.AddRange(GetLinkedAlternateVersions().Select(i => new Tuple<Video, MediaSourceType>(i, MediaSourceType.Grouping))); + + if (PrimaryVersionId.HasValue) + { + var primary = LibraryManager.GetItemById(PrimaryVersionId.Value) as Video; + if (primary != null) + { + var existingIds = list.Select(i => i.Item1.Id).ToList(); + list.Add(new Tuple<Video, MediaSourceType>(primary, MediaSourceType.Grouping)); + list.AddRange(primary.GetLinkedAlternateVersions().Where(i => !existingIds.Contains(i.Id)).Select(i => new Tuple<Video, MediaSourceType>(i, MediaSourceType.Grouping))); + } + } + + var localAlternates = list + .SelectMany(i => i.Item1.GetLocalAlternateVersionIds()) + .Select(LibraryManager.GetItemById) + .Where(i => i != null) + .OfType<Video>() + .ToList(); + + list.AddRange(localAlternates.Select(i => new Tuple<Video, MediaSourceType>(i, MediaSourceType.Default))); + + return list; + } + public virtual IEnumerable<MediaSourceInfo> GetMediaSources(bool enablePathSubstitution) { if (SourceType == SourceType.Channel) @@ -524,13 +561,8 @@ namespace MediaBrowser.Controller.Entities }; } - var item = this; - - var result = item.GetAlternateVersions() - .Select(i => GetVersionInfo(enablePathSubstitution, i, MediaSourceType.Grouping)) - .ToList(); - - result.Add(GetVersionInfo(enablePathSubstitution, item, MediaSourceType.Default)); + var list = GetAllVideosForMediaSources(); + var result = list.Select(i => GetVersionInfo(enablePathSubstitution, i.Item1, i.Item2)).ToList(); return result.OrderBy(i => { |
