From 683d8455c6ce75bcefc8749fe5a5d15d90a28625 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 19 Mar 2014 00:59:45 -0400 Subject: #712 - Group multiple versions --- .../Library/LibraryManager.cs | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'MediaBrowser.Server.Implementations/Library') diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 0b1947d4c..91abb6b4f 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -26,6 +26,7 @@ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MoreLinq; using SortOrder = MediaBrowser.Model.Entities.SortOrder; namespace MediaBrowser.Server.Implementations.Library @@ -540,6 +541,29 @@ namespace MediaBrowser.Server.Implementations.Library return item; } + public IEnumerable ReplaceVideosWithPrimaryVersions(IEnumerable items) + { + return items.Select(i => + { + var video = i as Video; + + if (video != null) + { + if (video.PrimaryVersionId.HasValue) + { + var primary = GetItemById(video.PrimaryVersionId.Value) as Video; + + if (primary != null) + { + return primary; + } + } + } + + return i; + + }).DistinctBy(i => i.Id); + } /// /// Ensure supplied item has only one instance throughout -- cgit v1.2.3 From b762d98fc45f875775e0c60c63a3b157776becdd Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Wed, 19 Mar 2014 13:44:55 -0400 Subject: #712 - group multiple versions --- MediaBrowser.Api/VideosService.cs | 44 ++++++++++++++++------ .../MediaBrowser.Model.Portable.csproj | 6 +-- .../MediaBrowser.Model.net35.csproj | 6 +-- MediaBrowser.Model/Dto/AlternateVersionInfo.cs | 30 --------------- MediaBrowser.Model/Dto/MediaVersionInfo.cs | 30 +++++++++++++++ MediaBrowser.Model/MediaBrowser.Model.csproj | 2 +- .../Library/SearchEngine.cs | 2 + MediaBrowser.ServerApplication/LibraryViewer.cs | 4 +- 8 files changed, 73 insertions(+), 51 deletions(-) delete mode 100644 MediaBrowser.Model/Dto/AlternateVersionInfo.cs create mode 100644 MediaBrowser.Model/Dto/MediaVersionInfo.cs (limited to 'MediaBrowser.Server.Implementations/Library') diff --git a/MediaBrowser.Api/VideosService.cs b/MediaBrowser.Api/VideosService.cs index 7d7baa576..476ea405c 100644 --- a/MediaBrowser.Api/VideosService.cs +++ b/MediaBrowser.Api/VideosService.cs @@ -31,9 +31,9 @@ namespace MediaBrowser.Api public string Id { get; set; } } - [Route("/Videos/{Id}/AlternateVersions", "GET")] - [Api(Description = "Gets alternate versions of a video.")] - public class GetAlternateVersions : IReturn> + [Route("/Videos/{Id}/Versions", "GET")] + [Api(Description = "Gets all versions of a video.")] + public class GetMediaVersions : IReturn> { /// /// Gets or sets the id. @@ -113,32 +113,54 @@ namespace MediaBrowser.Api return ToOptimizedSerializedResultUsingCache(result); } - public object Get(GetAlternateVersions request) + public object Get(GetMediaVersions request) { var item = _libraryManager.GetItemById(new Guid(request.Id)); var video = (Video)item; - var items = video.GetAlternateVersions(); + var result = video.GetAlternateVersions().Select(GetVersionInfo).ToList(); - var result = items.Select(i => new AlternateVersionInfo + result.Add(GetVersionInfo(video)); + + result = result.OrderBy(i => + { + if (video.VideoType == VideoType.VideoFile) + { + return 0; + } + + return 1; + + }).ThenBy(i => i.Video3DFormat.HasValue ? 1 : 0) + .ThenByDescending(i => + { + var stream = i.MediaStreams.FirstOrDefault(m => m.Type == MediaStreamType.Video); + + return stream == null || stream.Width == null ? 0 : stream.Width.Value; + }) + .ToList(); + + return ToOptimizedSerializedResultUsingCache(result); + } + + private MediaVersionInfo GetVersionInfo(Video i) + { + return new MediaVersionInfo { Chapters = _itemRepo.GetChapters(i.Id).Select(c => _dtoService.GetChapterInfoDto(c, i)).ToList(), Id = i.Id.ToString("N"), IsoType = i.IsoType, LocationType = i.LocationType, - MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery { ItemId = i.Id }).ToList(), + MediaStreams = _itemRepo.GetMediaStreams(new MediaStreamQuery {ItemId = i.Id}).ToList(), Name = GetAlternateVersionName(i), Path = GetMappedPath(i), RunTimeTicks = i.RunTimeTicks, Video3DFormat = i.Video3DFormat, VideoType = i.VideoType, IsHD = i.IsHD - - }).ToList(); - - return ToOptimizedSerializedResultUsingCache(result); + }; } private string GetMappedPath(Video video) diff --git a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj index acfaaed28..2b32dc1d8 100644 --- a/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj +++ b/MediaBrowser.Model.Portable/MediaBrowser.Model.Portable.csproj @@ -107,9 +107,6 @@ Drawing\ImageOutputFormat.cs - - Dto\AlternateVersionInfo.cs - Dto\BaseItemDto.cs @@ -140,6 +137,9 @@ Dto\ItemIndex.cs + + Dto\MediaVersionInfo.cs + Dto\RecommendationDto.cs diff --git a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj index c956dad00..baf1fc451 100644 --- a/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj +++ b/MediaBrowser.Model.net35/MediaBrowser.Model.net35.csproj @@ -94,9 +94,6 @@ Drawing\ImageOutputFormat.cs - - Dto\AlternateVersionInfo.cs - Dto\BaseItemDto.cs @@ -127,6 +124,9 @@ Dto\ItemIndex.cs + + Dto\MediaVersionInfo.cs + Dto\RecommendationDto.cs diff --git a/MediaBrowser.Model/Dto/AlternateVersionInfo.cs b/MediaBrowser.Model/Dto/AlternateVersionInfo.cs deleted file mode 100644 index 0cc41d6e4..000000000 --- a/MediaBrowser.Model/Dto/AlternateVersionInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using MediaBrowser.Model.Entities; -using System.Collections.Generic; - -namespace MediaBrowser.Model.Dto -{ - public class AlternateVersionInfo - { - public string Id { get; set; } - - public string Path { get; set; } - - public LocationType LocationType { get; set; } - - public string Name { get; set; } - - public long? RunTimeTicks { get; set; } - - public VideoType? VideoType { get; set; } - - public IsoType? IsoType { get; set; } - - public Video3DFormat? Video3DFormat { get; set; } - - public List MediaStreams { get; set; } - - public List Chapters { get; set; } - - public bool? IsHD { get; set; } - } -} diff --git a/MediaBrowser.Model/Dto/MediaVersionInfo.cs b/MediaBrowser.Model/Dto/MediaVersionInfo.cs new file mode 100644 index 000000000..809a1e3d9 --- /dev/null +++ b/MediaBrowser.Model/Dto/MediaVersionInfo.cs @@ -0,0 +1,30 @@ +using MediaBrowser.Model.Entities; +using System.Collections.Generic; + +namespace MediaBrowser.Model.Dto +{ + public class MediaVersionInfo + { + public string Id { get; set; } + + public string Path { get; set; } + + public LocationType LocationType { get; set; } + + public string Name { get; set; } + + public long? RunTimeTicks { get; set; } + + public VideoType? VideoType { get; set; } + + public IsoType? IsoType { get; set; } + + public Video3DFormat? Video3DFormat { get; set; } + + public List MediaStreams { get; set; } + + public List Chapters { get; set; } + + public bool? IsHD { get; set; } + } +} diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 47db8f7f2..12a462589 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -76,7 +76,7 @@ - + diff --git a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs index aaafd35a9..f48a4430f 100644 --- a/MediaBrowser.Server.Implementations/Library/SearchEngine.cs +++ b/MediaBrowser.Server.Implementations/Library/SearchEngine.cs @@ -35,6 +35,8 @@ namespace MediaBrowser.Server.Implementations.Library var inputItems = user.RootFolder.GetRecursiveChildren(user, null).Where(i => !(i is ICollectionFolder)); + inputItems = _libraryManager.ReplaceVideosWithPrimaryVersions(inputItems); + var results = await GetSearchHints(inputItems, query).ConfigureAwait(false); // Include item types diff --git a/MediaBrowser.ServerApplication/LibraryViewer.cs b/MediaBrowser.ServerApplication/LibraryViewer.cs index a8eda801b..6c40b549b 100644 --- a/MediaBrowser.ServerApplication/LibraryViewer.cs +++ b/MediaBrowser.ServerApplication/LibraryViewer.cs @@ -119,11 +119,9 @@ namespace MediaBrowser.ServerApplication var subFolder = item as Folder; if (subFolder != null) { - var prefs = _displayPreferencesManager.GetDisplayPreferences(subFolder.DisplayPreferencesId, user.Id, "LibraryExplorer"); - var subChildren = isPhysical ? subFolder.Children : subFolder.GetChildren(_currentUser, true); - AddChildren(node, OrderBy(subChildren, user, prefs.SortBy), user, isPhysical); + AddChildren(node, OrderBy(subChildren, user, ItemSortBy.SortName), user, isPhysical); node.Text = item.Name + " (" + node.Nodes.Count + ")"; } else -- cgit v1.2.3