diff options
Diffstat (limited to 'Emby.Server.Implementations/Library')
8 files changed, 84 insertions, 65 deletions
diff --git a/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs index d782f5b88..64f025d93 100644 --- a/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs +++ b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs @@ -79,7 +79,7 @@ namespace Emby.Server.Implementations.Library { if (parent == null) { - var parentFolderName = Path.GetFileName(Path.GetDirectoryName(path)); + var parentFolderName = Path.GetFileName(_fileSystem.GetDirectoryName(path)); if (string.Equals(parentFolderName, BaseItem.ThemeSongsFolderName, StringComparison.OrdinalIgnoreCase)) { diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 16a73f392..685c794b7 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -1962,8 +1962,34 @@ namespace Emby.Server.Implementations.Library return new List<Folder>(); } - return GetUserRootFolder().Children - .OfType<Folder>() + return GetCollectionFoldersInternal(item, GetUserRootFolder().Children.OfType<Folder>().ToList()); + } + + public List<Folder> GetCollectionFolders(BaseItem item, List<Folder> allUserRootChildren) + { + while (item != null) + { + var parent = item.GetParent(); + + if (parent == null || parent is AggregateFolder) + { + break; + } + + item = parent; + } + + if (item == null) + { + return new List<Folder>(); + } + + return GetCollectionFoldersInternal(item, allUserRootChildren); + } + + private List<Folder> GetCollectionFoldersInternal(BaseItem item, List<Folder> allUserRootChildren) + { + return allUserRootChildren .Where(i => string.Equals(i.Path, item.Path, StringComparison.OrdinalIgnoreCase) || i.PhysicalLocations.Contains(item.Path, StringComparer.OrdinalIgnoreCase)) .ToList(); } @@ -2126,7 +2152,8 @@ namespace Emby.Server.Implementations.Library // Not sure why this is necessary but need to figure it out // View images are not getting utilized without this ForceSave = true - }); + + }, RefreshPriority.Normal); } return item; @@ -2188,7 +2215,8 @@ namespace Emby.Server.Implementations.Library { // Need to force save to increment DateLastSaved ForceSave = true - }); + + }, RefreshPriority.Normal); } return item; @@ -2252,7 +2280,8 @@ namespace Emby.Server.Implementations.Library { // Need to force save to increment DateLastSaved ForceSave = true - }); + + }, RefreshPriority.Normal); } return item; @@ -2328,7 +2357,7 @@ namespace Emby.Server.Implementations.Library { // Need to force save to increment DateLastSaved ForceSave = true - }); + }, RefreshPriority.Normal); } return item; diff --git a/Emby.Server.Implementations/Library/MusicManager.cs b/Emby.Server.Implementations/Library/MusicManager.cs index 9d07837c6..b15c01125 100644 --- a/Emby.Server.Implementations/Library/MusicManager.cs +++ b/Emby.Server.Implementations/Library/MusicManager.cs @@ -5,6 +5,7 @@ using MediaBrowser.Controller.Playlists; using System; using System.Collections.Generic; using System.Linq; +using MediaBrowser.Model.Querying; namespace Emby.Server.Implementations.Library { @@ -27,35 +28,14 @@ namespace Emby.Server.Implementations.Library return list.Concat(GetInstantMixFromGenres(item.Genres, user)); } - public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist artist, User user) + public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist item, User user) { - var genres = user.RootFolder - .GetRecursiveChildren(user, new InternalItemsQuery(user) - { - IncludeItemTypes = new[] { typeof(Audio).Name } - }) - .Cast<Audio>() - .Where(i => i.HasAnyArtist(artist.Name)) - .SelectMany(i => i.Genres) - .Concat(artist.Genres) - .Distinct(StringComparer.OrdinalIgnoreCase); - - return GetInstantMixFromGenres(genres, user); + return GetInstantMixFromGenres(item.Genres, user); } public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user) { - var genres = item - .GetRecursiveChildren(user, new InternalItemsQuery(user) - { - IncludeItemTypes = new[] { typeof(Audio).Name } - }) - .Cast<Audio>() - .SelectMany(i => i.Genres) - .Concat(item.Genres) - .DistinctNames(); - - return GetInstantMixFromGenres(genres, user); + return GetInstantMixFromGenres(item.Genres, user); } public IEnumerable<Audio> GetInstantMixFromFolder(Folder item, User user) @@ -63,7 +43,7 @@ namespace Emby.Server.Implementations.Library var genres = item .GetRecursiveChildren(user, new InternalItemsQuery(user) { - IncludeItemTypes = new[] {typeof(Audio).Name} + IncludeItemTypes = new[] { typeof(Audio).Name } }) .Cast<Audio>() .SelectMany(i => i.Genres) @@ -75,41 +55,40 @@ namespace Emby.Server.Implementations.Library public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user) { - var genres = item - .GetRecursiveChildren(user, new InternalItemsQuery(user) - { - IncludeItemTypes = new[] { typeof(Audio).Name } - }) - .Cast<Audio>() - .SelectMany(i => i.Genres) - .Concat(item.Genres) - .DistinctNames(); - - return GetInstantMixFromGenres(genres, user); + return GetInstantMixFromGenres(item.Genres, user); } public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user) { - var genreList = genres.ToList(); + var genreIds = genres.DistinctNames().Select(i => + { + try + { + return _libraryManager.GetMusicGenre(i).Id.ToString("N"); + } + catch + { + return null; + } + + }).Where(i => i != null); - var inputItems = _libraryManager.GetItemList(new InternalItemsQuery(user) + return GetInstantMixFromGenreIds(genreIds, user); + } + + public IEnumerable<Audio> GetInstantMixFromGenreIds(IEnumerable<string> genreIds, User user) + { + return _libraryManager.GetItemList(new InternalItemsQuery(user) { IncludeItemTypes = new[] { typeof(Audio).Name }, - Genres = genreList.ToArray() + GenreIds = genreIds.ToArray(), - }); + Limit = 200, - var genresDictionary = genreList.ToDictionary(i => i, StringComparer.OrdinalIgnoreCase); + SortBy = new[] { ItemSortBy.Random } - return inputItems - .Cast<Audio>() - .Select(i => new Tuple<Audio, int>(i, i.Genres.Count(genresDictionary.ContainsKey))) - .OrderByDescending(i => i.Item2) - .ThenBy(i => Guid.NewGuid()) - .Select(i => i.Item1) - .Take(200) - .OrderBy(i => Guid.NewGuid()); + }).Cast<Audio>(); } public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user) @@ -117,7 +96,7 @@ namespace Emby.Server.Implementations.Library var genre = item as MusicGenre; if (genre != null) { - return GetInstantMixFromGenres(new[] { item.Name }, user); + return GetInstantMixFromGenreIds(new[] { item.Id.ToString("N") }, user); } var playlist = item as Playlist; diff --git a/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs index 0968e8ea2..8bbda3b62 100644 --- a/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/PhotoResolver.cs @@ -6,6 +6,7 @@ using System; using System.IO; using System.Linq; using MediaBrowser.Model.Configuration; +using MediaBrowser.Model.IO; namespace Emby.Server.Implementations.Library.Resolvers { @@ -13,11 +14,13 @@ namespace Emby.Server.Implementations.Library.Resolvers { private readonly IImageProcessor _imageProcessor; private readonly ILibraryManager _libraryManager; + private readonly IFileSystem _fileSystem; - public PhotoResolver(IImageProcessor imageProcessor, ILibraryManager libraryManager) + public PhotoResolver(IImageProcessor imageProcessor, ILibraryManager libraryManager, IFileSystem fileSystem) { _imageProcessor = imageProcessor; _libraryManager = libraryManager; + _fileSystem = fileSystem; } /// <summary> @@ -41,7 +44,7 @@ namespace Emby.Server.Implementations.Library.Resolvers var filename = Path.GetFileNameWithoutExtension(args.Path); // Make sure the image doesn't belong to a video file - if (args.DirectoryService.GetFilePaths(Path.GetDirectoryName(args.Path)).Any(i => IsOwnedByMedia(args.GetLibraryOptions(), i, filename))) + if (args.DirectoryService.GetFilePaths(_fileSystem.GetDirectoryName(args.Path)).Any(i => IsOwnedByMedia(args.GetLibraryOptions(), i, filename))) { return null; } diff --git a/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs index cf37366fb..bdab8552a 100644 --- a/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/EpisodeResolver.cs @@ -57,7 +57,6 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV { episode.SeriesId = series.Id; episode.SeriesName = series.Name; - episode.SeriesSortName = series.SortName; } if (season != null) { diff --git a/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs index c065feda1..84ceac65e 100644 --- a/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/SeasonResolver.cs @@ -44,7 +44,6 @@ namespace Emby.Server.Implementations.Library.Resolvers.TV { IndexNumber = new SeasonPathParser(namingOptions, new RegexProvider()).Parse(args.Path, true, true).SeasonNumber, SeriesId = series.Id, - SeriesSortName = series.SortName, SeriesName = series.Name }; diff --git a/Emby.Server.Implementations/Library/SearchEngine.cs b/Emby.Server.Implementations/Library/SearchEngine.cs index a47a3322e..f640ae2b1 100644 --- a/Emby.Server.Implementations/Library/SearchEngine.cs +++ b/Emby.Server.Implementations/Library/SearchEngine.cs @@ -165,7 +165,16 @@ namespace Emby.Server.Implementations.Library ExcludeItemTypes = excludeItemTypes.ToArray(), IncludeItemTypes = includeItemTypes.ToArray(), Limit = query.Limit, - IncludeItemsByName = true + IncludeItemsByName = string.IsNullOrWhiteSpace(query.ParentId), + ParentId = string.IsNullOrWhiteSpace(query.ParentId) ? (Guid?)null : new Guid(query.ParentId), + SortBy = new[] { ItemSortBy.SortName }, + Recursive = true, + + IsKids = query.IsKids, + IsMovie = query.IsMovie, + IsNews = query.IsNews, + IsSeries = query.IsSeries, + IsSports = query.IsSports }); // Add search hints based on item name diff --git a/Emby.Server.Implementations/Library/UserManager.cs b/Emby.Server.Implementations/Library/UserManager.cs index 89b7198ca..0b9027291 100644 --- a/Emby.Server.Implementations/Library/UserManager.cs +++ b/Emby.Server.Implementations/Library/UserManager.cs @@ -942,7 +942,8 @@ namespace Emby.Server.Implementations.Library { return new UserPolicy { - EnableSync = true + EnableContentDownloading = true, + EnableSyncTranscoding = true }; } @@ -964,7 +965,7 @@ namespace Emby.Server.Implementations.Library var path = GetPolifyFilePath(user); - _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); lock (_policySyncLock) { @@ -1051,7 +1052,7 @@ namespace Emby.Server.Implementations.Library config = _jsonSerializer.DeserializeFromString<UserConfiguration>(json); } - _fileSystem.CreateDirectory(Path.GetDirectoryName(path)); + _fileSystem.CreateDirectory(_fileSystem.GetDirectoryName(path)); lock (_configSyncLock) { |
