diff options
Diffstat (limited to 'MediaBrowser.Controller/Entities/Video.cs')
| -rw-r--r-- | MediaBrowser.Controller/Entities/Video.cs | 126 |
1 files changed, 98 insertions, 28 deletions
diff --git a/MediaBrowser.Controller/Entities/Video.cs b/MediaBrowser.Controller/Entities/Video.cs index d81e6f0ff..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; } } @@ -131,42 +153,65 @@ namespace MediaBrowser.Controller.Entities return LocalAlternateVersions.Select(i => LibraryManager.GetNewItemId(i, typeof(Video))); } - protected override string CreateUserDataKey() + [IgnoreDataMember] + protected virtual bool EnableDefaultVideoUserDataKeys { - if (ExtraType.HasValue) + get { - var key = this.GetProviderId(MetadataProviders.Imdb) ?? this.GetProviderId(MetadataProviders.Tmdb); + return true; + } + } - if (!string.IsNullOrWhiteSpace(key)) + public override List<string> GetUserDataKeys() + { + var list = base.GetUserDataKeys(); + + if (EnableDefaultVideoUserDataKeys) + { + if (ExtraType.HasValue) { - key = key + "-" + ExtraType.ToString().ToLower(); + var key = this.GetProviderId(MetadataProviders.Tmdb); + if (!string.IsNullOrWhiteSpace(key)) + { + list.Insert(0, GetUserDataKey(key)); + } - // Make sure different trailers have their own data. - if (RunTimeTicks.HasValue) + key = this.GetProviderId(MetadataProviders.Imdb); + if (!string.IsNullOrWhiteSpace(key)) { - key += "-" + RunTimeTicks.Value.ToString(CultureInfo.InvariantCulture); + list.Insert(0, GetUserDataKey(key)); + } + } + else + { + var key = this.GetProviderId(MetadataProviders.Imdb); + if (!string.IsNullOrWhiteSpace(key)) + { + list.Insert(0, key); } - return key; + key = this.GetProviderId(MetadataProviders.Tmdb); + if (!string.IsNullOrWhiteSpace(key)) + { + list.Insert(0, key); + } } } - return base.CreateUserDataKey(); + return list; } - /// <summary> - /// Gets the linked children. - /// </summary> - /// <returns>IEnumerable{BaseItem}.</returns> - public IEnumerable<Video> GetAlternateVersions() + private string GetUserDataKey(string providerId) { - var filesWithinSameDirectory = GetLocalAlternateVersionIds() - .Select(i => LibraryManager.GetItemById(i)) - .Where(i => i != null) - .OfType<Video>(); + var key = providerId + "-" + ExtraType.ToString().ToLower(); - return filesWithinSameDirectory.Concat(GetLinkedAlternateVersions()) - .OrderBy(i => i.SortName); + // Make sure different trailers have their own data. + if (RunTimeTicks.HasValue) + { + key += "-" + RunTimeTicks.Value.ToString(CultureInfo.InvariantCulture); + } + + return key; } public IEnumerable<Video> GetLinkedAlternateVersions() @@ -468,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) @@ -486,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 => { |
