diff --git a/MediaBrowser.Api/VideosService.cs b/MediaBrowser.Api/VideosService.cs index 7d7baa5761..476ea405c7 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 acfaaed28c..2b32dc1d83 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 c956dad002..baf1fc4514 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/MediaVersionInfo.cs similarity index 94% rename from MediaBrowser.Model/Dto/AlternateVersionInfo.cs rename to MediaBrowser.Model/Dto/MediaVersionInfo.cs index 0cc41d6e44..809a1e3d9b 100644 --- a/MediaBrowser.Model/Dto/AlternateVersionInfo.cs +++ b/MediaBrowser.Model/Dto/MediaVersionInfo.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace MediaBrowser.Model.Dto { - public class AlternateVersionInfo + public class MediaVersionInfo { public string Id { get; set; } diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index 47db8f7f27..12a4625897 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 aaafd35a91..f48a4430f5 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 a8eda801b4..6c40b549b6 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