diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/LibraryManager.cs | 134 |
1 files changed, 108 insertions, 26 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 032f8dbb7..883864156 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -33,6 +33,7 @@ using System.Net; using System.Threading; using System.Threading.Tasks; using CommonIO; +using MediaBrowser.Model.Dto; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Library; using MediaBrowser.Model.Net; @@ -362,6 +363,10 @@ namespace MediaBrowser.Server.Implementations.Library return; } } + if (item is Photo) + { + return; + } //if (!(item is Folder)) //{ // return; @@ -939,9 +944,7 @@ namespace MediaBrowser.Server.Implementations.Library private T CreateItemByName<T>(string path, string name) where T : BaseItem, new() { - var isArtist = typeof(T) == typeof(MusicArtist); - - if (isArtist) + if (typeof(T) == typeof(MusicArtist)) { var existing = GetItemList(new InternalItemsQuery { @@ -1272,50 +1275,135 @@ namespace MediaBrowser.Server.Implementations.Library return item; } - public BaseItem GetMemoryItemById(Guid id) + public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query) { - if (id == Guid.Empty) + if (query.User != null) { - throw new ArgumentNullException("id"); + AddUserToQuery(query, query.User); } - BaseItem item; + return ItemRepository.GetItemList(query); + } - LibraryItemsCache.TryGetValue(id, out item); + public QueryResult<BaseItem> QueryItems(InternalItemsQuery query) + { + if (query.User != null) + { + AddUserToQuery(query, query.User); + } - return item; + if (query.EnableTotalRecordCount) + { + return ItemRepository.GetItems(query); + } + + return new QueryResult<BaseItem> + { + Items = ItemRepository.GetItemList(query).ToArray() + }; } - public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query) + public List<Guid> GetItemIds(InternalItemsQuery query) { if (query.User != null) { AddUserToQuery(query, query.User); } - var result = ItemRepository.GetItemIdsList(query); + return ItemRepository.GetItemIdsList(query); + } + + public QueryResult<Tuple<BaseItem, ItemCounts>> GetStudios(InternalItemsQuery query) + { + if (query.User != null) + { + AddUserToQuery(query, query.User); + } - return result.Select(GetItemById).Where(i => i != null); + SetTopParentOrAncestorIds(query); + return ItemRepository.GetStudios(query); } - public QueryResult<BaseItem> QueryItems(InternalItemsQuery query) + public QueryResult<Tuple<BaseItem, ItemCounts>> GetGenres(InternalItemsQuery query) { if (query.User != null) { AddUserToQuery(query, query.User); } - return ItemRepository.GetItems(query); + SetTopParentOrAncestorIds(query); + return ItemRepository.GetGenres(query); } - public List<Guid> GetItemIds(InternalItemsQuery query) + public QueryResult<Tuple<BaseItem, ItemCounts>> GetGameGenres(InternalItemsQuery query) { if (query.User != null) { AddUserToQuery(query, query.User); } - return ItemRepository.GetItemIdsList(query); + SetTopParentOrAncestorIds(query); + return ItemRepository.GetGameGenres(query); + } + + public QueryResult<Tuple<BaseItem, ItemCounts>> GetMusicGenres(InternalItemsQuery query) + { + if (query.User != null) + { + AddUserToQuery(query, query.User); + } + + SetTopParentOrAncestorIds(query); + return ItemRepository.GetMusicGenres(query); + } + + public QueryResult<Tuple<BaseItem, ItemCounts>> GetArtists(InternalItemsQuery query) + { + if (query.User != null) + { + AddUserToQuery(query, query.User); + } + + SetTopParentOrAncestorIds(query); + return ItemRepository.GetArtists(query); + } + + private void SetTopParentOrAncestorIds(InternalItemsQuery query) + { + if (query.AncestorIds.Length == 0) + { + return; + } + + var parents = query.AncestorIds.Select(i => GetItemById(new Guid(i))).ToList(); + + if (parents.All(i => + { + if (i is ICollectionFolder || i is UserView) + { + return true; + } + + //_logger.Debug("Query requires ancestor query due to type: " + i.GetType().Name); + return false; + + })) + { + // Optimize by querying against top level views + query.TopParentIds = parents.SelectMany(i => GetTopParentsForQuery(i, query.User)).Select(i => i.Id.ToString("N")).ToArray(); + query.AncestorIds = new string[] { }; + } + } + + public QueryResult<Tuple<BaseItem, ItemCounts>> GetAlbumArtists(InternalItemsQuery query) + { + if (query.User != null) + { + AddUserToQuery(query, query.User); + } + + SetTopParentOrAncestorIds(query); + return ItemRepository.GetAlbumArtists(query); } public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, IEnumerable<string> parentIds) @@ -1324,7 +1412,7 @@ namespace MediaBrowser.Server.Implementations.Library SetTopParentIdsOrAncestors(query, parents); - return GetItemIds(query).Select(GetItemById).Where(i => i != null); + return ItemRepository.GetItemList(query); } public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query) @@ -1346,18 +1434,12 @@ namespace MediaBrowser.Server.Implementations.Library if (query.EnableTotalRecordCount) { - var initialResult = ItemRepository.GetItemIds(query); - - return new QueryResult<BaseItem> - { - TotalRecordCount = initialResult.TotalRecordCount, - Items = initialResult.Items.Select(GetItemById).Where(i => i != null).ToArray() - }; + return ItemRepository.GetItems(query); } return new QueryResult<BaseItem> { - Items = ItemRepository.GetItemIdsList(query).Select(GetItemById).Where(i => i != null).ToArray() + Items = ItemRepository.GetItemList(query).ToArray() }; } @@ -1379,7 +1461,7 @@ namespace MediaBrowser.Server.Implementations.Library return true; } - _logger.Debug("Query requires ancestor query due to type: " + i.GetType().Name); + //_logger.Debug("Query requires ancestor query due to type: " + i.GetType().Name); return false; })) |
