diff options
Diffstat (limited to 'Emby.Server.Implementations/Library')
14 files changed, 115 insertions, 110 deletions
diff --git a/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs index 64f025d93..54f9ca392 100644 --- a/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs +++ b/Emby.Server.Implementations/Library/CoreResolutionIgnoreRule.cs @@ -6,7 +6,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 3c94f9784..42eda00b7 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -40,7 +40,8 @@ using MediaBrowser.Model.Net; using SortOrder = MediaBrowser.Model.Entities.SortOrder; using VideoResolver = MediaBrowser.Naming.Video.VideoResolver; using MediaBrowser.Common.Configuration; -using MediaBrowser.Common.IO; + +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.LiveTv; using MediaBrowser.Model.Tasks; @@ -313,7 +314,8 @@ namespace Emby.Server.Implementations.Library { IncludeItemTypes = new[] { typeof(Season).Name }, Recursive = true, - IndexNumber = 0 + IndexNumber = 0, + DtoOptions = new DtoOptions(true) }).Cast<Season>() .Where(i => !string.Equals(i.Name, newName, StringComparison.Ordinal)) @@ -342,7 +344,7 @@ namespace Emby.Server.Implementations.Library } if (item is IItemByName) { - if (!(item is MusicArtist) && !(item is Studio)) + if (!(item is MusicArtist)) { return; } @@ -862,13 +864,19 @@ namespace Emby.Server.Implementations.Library // If this returns multiple items it could be tricky figuring out which one is correct. // In most cases, the newest one will be and the others obsolete but not yet cleaned up + if (string.IsNullOrWhiteSpace(path)) + { + throw new ArgumentNullException("path"); + } + var query = new InternalItemsQuery { Path = path, IsFolder = isFolder, SortBy = new[] { ItemSortBy.DateCreated }, SortOrder = SortOrder.Descending, - Limit = 1 + Limit = 1, + DtoOptions = new DtoOptions(true) }; return GetItemList(query) @@ -882,7 +890,7 @@ namespace Emby.Server.Implementations.Library /// <returns>Task{Person}.</returns> public Person GetPerson(string name) { - return CreateItemByName<Person>(Person.GetPath, name); + return CreateItemByName<Person>(Person.GetPath, name, new DtoOptions(true)); } /// <summary> @@ -892,7 +900,27 @@ namespace Emby.Server.Implementations.Library /// <returns>Task{Studio}.</returns> public Studio GetStudio(string name) { - return CreateItemByName<Studio>(Studio.GetPath, name); + return CreateItemByName<Studio>(Studio.GetPath, name, new DtoOptions(true)); + } + + public Guid GetStudioId(string name) + { + return GetItemByNameId<Studio>(Studio.GetPath, name); + } + + public Guid GetGenreId(string name) + { + return GetItemByNameId<Genre>(Genre.GetPath, name); + } + + public Guid GetMusicGenreId(string name) + { + return GetItemByNameId<MusicGenre>(MusicGenre.GetPath, name); + } + + public Guid GetGameGenreId(string name) + { + return GetItemByNameId<GameGenre>(GameGenre.GetPath, name); } /// <summary> @@ -902,7 +930,7 @@ namespace Emby.Server.Implementations.Library /// <returns>Task{Genre}.</returns> public Genre GetGenre(string name) { - return CreateItemByName<Genre>(Genre.GetPath, name); + return CreateItemByName<Genre>(Genre.GetPath, name, new DtoOptions(true)); } /// <summary> @@ -912,7 +940,7 @@ namespace Emby.Server.Implementations.Library /// <returns>Task{MusicGenre}.</returns> public MusicGenre GetMusicGenre(string name) { - return CreateItemByName<MusicGenre>(MusicGenre.GetPath, name); + return CreateItemByName<MusicGenre>(MusicGenre.GetPath, name, new DtoOptions(true)); } /// <summary> @@ -922,7 +950,7 @@ namespace Emby.Server.Implementations.Library /// <returns>Task{GameGenre}.</returns> public GameGenre GetGameGenre(string name) { - return CreateItemByName<GameGenre>(GameGenre.GetPath, name); + return CreateItemByName<GameGenre>(GameGenre.GetPath, name, new DtoOptions(true)); } /// <summary> @@ -940,7 +968,7 @@ namespace Emby.Server.Implementations.Library var name = value.ToString(CultureInfo.InvariantCulture); - return CreateItemByName<Year>(Year.GetPath, name); + return CreateItemByName<Year>(Year.GetPath, name, new DtoOptions(true)); } /// <summary> @@ -950,10 +978,15 @@ namespace Emby.Server.Implementations.Library /// <returns>Task{Genre}.</returns> public MusicArtist GetArtist(string name) { - return CreateItemByName<MusicArtist>(MusicArtist.GetPath, name); + return GetArtist(name, new DtoOptions(true)); + } + + public MusicArtist GetArtist(string name, DtoOptions options) + { + return CreateItemByName<MusicArtist>(MusicArtist.GetPath, name, options); } - private T CreateItemByName<T>(Func<string, string> getPathFn, string name) + private T CreateItemByName<T>(Func<string, string> getPathFn, string name, DtoOptions options) where T : BaseItem, new() { if (typeof(T) == typeof(MusicArtist)) @@ -961,7 +994,8 @@ namespace Emby.Server.Implementations.Library var existing = GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(T).Name }, - Name = name + Name = name, + DtoOptions = options }).Cast<MusicArtist>() .OrderBy(i => i.IsAccessedByName ? 1 : 0) @@ -974,14 +1008,13 @@ namespace Emby.Server.Implementations.Library } } - var path = getPathFn(name); - var forceCaseInsensitiveId = ConfigurationManager.Configuration.EnableNormalizedItemByNameIds; - var id = GetNewItemIdInternal(path, typeof(T), forceCaseInsensitiveId); + var id = GetItemByNameId<T>(getPathFn, name); var item = GetItemById(id) as T; if (item == null) { + var path = getPathFn(name); item = new T { Name = name, @@ -998,52 +1031,12 @@ namespace Emby.Server.Implementations.Library return item; } - public IEnumerable<MusicArtist> GetAlbumArtists(IEnumerable<IHasAlbumArtist> items) - { - var names = items - .SelectMany(i => i.AlbumArtists) - .DistinctNames() - .Select(i => - { - try - { - var artist = GetArtist(i); - - return artist; - } - catch - { - // Already logged at lower levels - return null; - } - }) - .Where(i => i != null); - - return names; - } - - public IEnumerable<MusicArtist> GetArtists(IEnumerable<IHasArtist> items) + private Guid GetItemByNameId<T>(Func<string, string> getPathFn, string name) + where T : BaseItem, new() { - var names = items - .SelectMany(i => i.AllArtists) - .DistinctNames() - .Select(i => - { - try - { - var artist = GetArtist(i); - - return artist; - } - catch - { - // Already logged at lower levels - return null; - } - }) - .Where(i => i != null); - - return names; + var path = getPathFn(name); + var forceCaseInsensitiveId = ConfigurationManager.Configuration.EnableNormalizedItemByNameIds; + return GetNewItemIdInternal(path, typeof(T), forceCaseInsensitiveId); } /// <summary> @@ -1098,12 +1091,6 @@ namespace Emby.Server.Implementations.Library try { await PerformLibraryValidation(progress, cancellationToken).ConfigureAwait(false); - - if (!ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey) - { - ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey = true; - ConfigurationManager.SaveConfiguration(); - } } finally { @@ -1558,7 +1545,7 @@ namespace Emby.Server.Implementations.Library } } - query.ParentId = null; + query.Parent = null; } private void AddUserToQuery(InternalItemsQuery query, User user) diff --git a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs index 7424ed5e5..e64980dff 100644 --- a/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs +++ b/Emby.Server.Implementations/Library/LocalTrailerPostScanTask.cs @@ -6,6 +6,7 @@ using System; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities.Movies; using MediaBrowser.Controller.Entities.TV; @@ -27,7 +28,8 @@ namespace Emby.Server.Implementations.Library var items = _libraryManager.GetItemList(new InternalItemsQuery { IncludeItemTypes = new[] { typeof(BoxSet).Name, typeof(Game).Name, typeof(Movie).Name, typeof(Series).Name }, - Recursive = true + Recursive = true, + DtoOptions = new DtoOptions(true) }).OfType<IHasTrailers>().ToList(); @@ -40,7 +42,8 @@ namespace Emby.Server.Implementations.Library { IncludeItemTypes = new[] { typeof(Trailer).Name }, TrailerTypes = trailerTypes, - Recursive = true + Recursive = true, + DtoOptions = new DtoOptions(false) }).ToArray(); diff --git a/Emby.Server.Implementations/Library/MusicManager.cs b/Emby.Server.Implementations/Library/MusicManager.cs index b15c01125..f0d07cc3c 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.Controller.Dto; using MediaBrowser.Model.Querying; namespace Emby.Server.Implementations.Library @@ -18,47 +19,48 @@ namespace Emby.Server.Implementations.Library _libraryManager = libraryManager; } - public IEnumerable<Audio> GetInstantMixFromSong(Audio item, User user) + public IEnumerable<Audio> GetInstantMixFromSong(Audio item, User user, DtoOptions dtoOptions) { var list = new List<Audio> { item }; - return list.Concat(GetInstantMixFromGenres(item.Genres, user)); + return list.Concat(GetInstantMixFromGenres(item.Genres, user, dtoOptions)); } - public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist item, User user) + public IEnumerable<Audio> GetInstantMixFromArtist(MusicArtist item, User user, DtoOptions dtoOptions) { - return GetInstantMixFromGenres(item.Genres, user); + return GetInstantMixFromGenres(item.Genres, user, dtoOptions); } - public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user) + public IEnumerable<Audio> GetInstantMixFromAlbum(MusicAlbum item, User user, DtoOptions dtoOptions) { - return GetInstantMixFromGenres(item.Genres, user); + return GetInstantMixFromGenres(item.Genres, user, dtoOptions); } - public IEnumerable<Audio> GetInstantMixFromFolder(Folder item, User user) + public IEnumerable<Audio> GetInstantMixFromFolder(Folder item, User user, DtoOptions dtoOptions) { var genres = item .GetRecursiveChildren(user, new InternalItemsQuery(user) { - IncludeItemTypes = new[] { typeof(Audio).Name } + IncludeItemTypes = new[] { typeof(Audio).Name }, + DtoOptions = dtoOptions }) .Cast<Audio>() .SelectMany(i => i.Genres) .Concat(item.Genres) .DistinctNames(); - return GetInstantMixFromGenres(genres, user); + return GetInstantMixFromGenres(genres, user, dtoOptions); } - public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user) + public IEnumerable<Audio> GetInstantMixFromPlaylist(Playlist item, User user, DtoOptions dtoOptions) { - return GetInstantMixFromGenres(item.Genres, user); + return GetInstantMixFromGenres(item.Genres, user, dtoOptions); } - public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user) + public IEnumerable<Audio> GetInstantMixFromGenres(IEnumerable<string> genres, User user, DtoOptions dtoOptions) { var genreIds = genres.DistinctNames().Select(i => { @@ -73,10 +75,10 @@ namespace Emby.Server.Implementations.Library }).Where(i => i != null); - return GetInstantMixFromGenreIds(genreIds, user); + return GetInstantMixFromGenreIds(genreIds, user, dtoOptions); } - public IEnumerable<Audio> GetInstantMixFromGenreIds(IEnumerable<string> genreIds, User user) + public IEnumerable<Audio> GetInstantMixFromGenreIds(IEnumerable<string> genreIds, User user, DtoOptions dtoOptions) { return _libraryManager.GetItemList(new InternalItemsQuery(user) { @@ -86,47 +88,49 @@ namespace Emby.Server.Implementations.Library Limit = 200, - SortBy = new[] { ItemSortBy.Random } + SortBy = new[] { ItemSortBy.Random }, + + DtoOptions = dtoOptions }).Cast<Audio>(); } - public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user) + public IEnumerable<Audio> GetInstantMixFromItem(BaseItem item, User user, DtoOptions dtoOptions) { var genre = item as MusicGenre; if (genre != null) { - return GetInstantMixFromGenreIds(new[] { item.Id.ToString("N") }, user); + return GetInstantMixFromGenreIds(new[] { item.Id.ToString("N") }, user, dtoOptions); } var playlist = item as Playlist; if (playlist != null) { - return GetInstantMixFromPlaylist(playlist, user); + return GetInstantMixFromPlaylist(playlist, user, dtoOptions); } var album = item as MusicAlbum; if (album != null) { - return GetInstantMixFromAlbum(album, user); + return GetInstantMixFromAlbum(album, user, dtoOptions); } var artist = item as MusicArtist; if (artist != null) { - return GetInstantMixFromArtist(artist, user); + return GetInstantMixFromArtist(artist, user, dtoOptions); } var song = item as Audio; if (song != null) { - return GetInstantMixFromSong(song, user); + return GetInstantMixFromSong(song, user, dtoOptions); } var folder = item as Folder; if (folder != null) { - return GetInstantMixFromFolder(folder, user); + return GetInstantMixFromFolder(folder, user, dtoOptions); } return new Audio[] { }; diff --git a/Emby.Server.Implementations/Library/ResolverHelper.cs b/Emby.Server.Implementations/Library/ResolverHelper.cs index 1d3cacc1d..24dc1104a 100644 --- a/Emby.Server.Implementations/Library/ResolverHelper.cs +++ b/Emby.Server.Implementations/Library/ResolverHelper.cs @@ -5,8 +5,6 @@ using System; using System.IO; using System.Linq; using System.Text.RegularExpressions; -using MediaBrowser.Common.IO; -using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; namespace Emby.Server.Implementations.Library diff --git a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs index b3d6d4ad7..806e20f00 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicAlbumResolver.cs @@ -8,7 +8,7 @@ using MediaBrowser.Naming.Audio; using System; using System.Collections.Generic; using System.IO; -using MediaBrowser.Common.IO; + using MediaBrowser.Model.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; diff --git a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs index 2971405b9..2ad839673 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Audio/MusicArtistResolver.cs @@ -6,7 +6,7 @@ using MediaBrowser.Model.Logging; using System; using System.IO; using System.Linq; -using MediaBrowser.Common.IO; + using MediaBrowser.Model.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; diff --git a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index 3550a83b9..69563e5a0 100644 --- a/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -11,7 +11,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; using MediaBrowser.Model.Logging; diff --git a/Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs b/Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs index 1bec1073d..6c7c1f052 100644 --- a/Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/SpecialFolderResolver.cs @@ -5,7 +5,7 @@ using MediaBrowser.Controller.Resolvers; using System; using System.IO; using System.Linq; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; diff --git a/Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs b/Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs index e5cad9f91..60260e98a 100644 --- a/Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs +++ b/Emby.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs @@ -10,7 +10,7 @@ using System; using System.Collections.Generic; using System.IO; using System.Linq; -using MediaBrowser.Common.IO; + using MediaBrowser.Model.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.IO; diff --git a/Emby.Server.Implementations/Library/SearchEngine.cs b/Emby.Server.Implementations/Library/SearchEngine.cs index 5f88a6c66..6f63322c8 100644 --- a/Emby.Server.Implementations/Library/SearchEngine.cs +++ b/Emby.Server.Implementations/Library/SearchEngine.cs @@ -8,6 +8,7 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Extensions; namespace Emby.Server.Implementations.Library @@ -175,7 +176,17 @@ namespace Emby.Server.Implementations.Library IsNews = query.IsNews, IsSeries = query.IsSeries, IsSports = query.IsSports, - MediaTypes = query.MediaTypes + MediaTypes = query.MediaTypes, + + DtoOptions = new DtoOptions + { + Fields = new List<ItemFields> + { + ItemFields.AirTime, + ItemFields.DateCreated, + ItemFields.ChannelInfo + } + } }); // Add search hints based on item name diff --git a/Emby.Server.Implementations/Library/UserDataManager.cs b/Emby.Server.Implementations/Library/UserDataManager.cs index 5a14edf13..e066ab61b 100644 --- a/Emby.Server.Implementations/Library/UserDataManager.cs +++ b/Emby.Server.Implementations/Library/UserDataManager.cs @@ -182,21 +182,21 @@ namespace Emby.Server.Implementations.Library return GetUserData(userId, item.Id, item.GetUserDataKeys()); } - public async Task<UserItemDataDto> GetUserDataDto(IHasUserData item, User user) + public UserItemDataDto GetUserDataDto(IHasUserData item, User user) { var userData = GetUserData(user.Id, item); var dto = GetUserItemDataDto(userData); - await item.FillUserDataDtoValues(dto, userData, null, user, new List<ItemFields>()).ConfigureAwait(false); + item.FillUserDataDtoValues(dto, userData, null, user, new List<ItemFields>()); return dto; } - public async Task<UserItemDataDto> GetUserDataDto(IHasUserData item, BaseItemDto itemDto, User user, List<ItemFields> fields) + public UserItemDataDto GetUserDataDto(IHasUserData item, BaseItemDto itemDto, User user, List<ItemFields> fields) { var userData = GetUserData(user.Id, item); var dto = GetUserItemDataDto(userData); - await item.FillUserDataDtoValues(dto, userData, itemDto, user, fields).ConfigureAwait(false); + item.FillUserDataDtoValues(dto, userData, itemDto, user, fields); return dto; } diff --git a/Emby.Server.Implementations/Library/UserViewManager.cs b/Emby.Server.Implementations/Library/UserViewManager.cs index 9e1291847..f403ca266 100644 --- a/Emby.Server.Implementations/Library/UserViewManager.cs +++ b/Emby.Server.Implementations/Library/UserViewManager.cs @@ -12,6 +12,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities.Audio; using MediaBrowser.Model.Globalization; @@ -190,11 +191,11 @@ namespace Emby.Server.Implementations.Library return _libraryManager.GetShadowView(parent, viewType, sortName, cancellationToken); } - public List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request) + public List<Tuple<BaseItem, List<BaseItem>>> GetLatestItems(LatestItemsQuery request, DtoOptions options) { var user = _userManager.GetUserById(request.UserId); - var libraryItems = GetItemsForLatestItems(user, request); + var libraryItems = GetItemsForLatestItems(user, request, options); var list = new List<Tuple<BaseItem, List<BaseItem>>>(); @@ -230,7 +231,7 @@ namespace Emby.Server.Implementations.Library return list; } - private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request) + private IEnumerable<BaseItem> GetItemsForLatestItems(User user, LatestItemsQuery request, DtoOptions options) { var parentId = request.ParentId; @@ -289,7 +290,8 @@ namespace Emby.Server.Implementations.Library IsVirtualItem = false, Limit = limit * 5, SourceTypes = parents.Count == 0 ? new[] { SourceType.Library } : new SourceType[] { }, - IsPlayed = isPlayed + IsPlayed = isPlayed, + DtoOptions = options }, parents); } diff --git a/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs b/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs index 7ebfd71c0..ef3b86abf 100644 --- a/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs +++ b/Emby.Server.Implementations/Library/Validators/PeopleValidator.cs @@ -11,7 +11,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; -using MediaBrowser.Common.IO; + using MediaBrowser.Controller.IO; using MediaBrowser.Model.IO; |
