diff options
| author | Luke <luke.pulverenti@gmail.com> | 2016-03-25 13:52:15 -0400 |
|---|---|---|
| committer | Luke <luke.pulverenti@gmail.com> | 2016-03-25 13:52:15 -0400 |
| commit | 72fe76ab1008f0bd38157cc37cde45797b5f6417 (patch) | |
| tree | 875b6bee7d0a634d7ef019cfb7c434823b223001 /MediaBrowser.Server.Implementations/Library/LibraryManager.cs | |
| parent | 736e63241011cb9ae798bf4091cd37e097045c21 (diff) | |
| parent | f6c18200bacae6e768225a8c073418a170d349bd (diff) | |
Merge pull request #1593 from MediaBrowser/beta
Beta
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Library/LibraryManager.cs | 111 |
1 files changed, 74 insertions, 37 deletions
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs index 721603efe..0e61f2969 100644 --- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs +++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs @@ -40,8 +40,10 @@ using CommonIO; using MediaBrowser.Model.Extensions; using MediaBrowser.Model.Library; using MediaBrowser.Model.Net; +using MediaBrowser.Server.Implementations.Library.Resolvers; using MoreLinq; using SortOrder = MediaBrowser.Model.Entities.SortOrder; +using VideoResolver = MediaBrowser.Naming.Video.VideoResolver; namespace MediaBrowser.Server.Implementations.Library { @@ -347,11 +349,7 @@ namespace MediaBrowser.Server.Implementations.Library private void RegisterItem(Guid id, BaseItem item) { - if (item is LiveTvProgram) - { - return; - } - if (item is IChannelItem) + if (item.SourceType != SourceType.Library) { return; } @@ -371,9 +369,14 @@ namespace MediaBrowser.Server.Implementations.Library public async Task DeleteItem(BaseItem item, DeleteOptions options) { + if (item == null) + { + throw new ArgumentNullException("item"); + } + _logger.Debug("Deleting item, Type: {0}, Name: {1}, Path: {2}, Id: {3}", item.GetType().Name, - item.Name, + item.Name ?? "Unknown name", item.Path ?? string.Empty, item.Id); @@ -427,7 +430,7 @@ namespace MediaBrowser.Server.Implementations.Library } else if (parent != null) { - await parent.RemoveChild(item, CancellationToken.None).ConfigureAwait(false); + parent.RemoveChild(item); } await ItemRepository.DeleteItem(item.Id, CancellationToken.None).ConfigureAwait(false); @@ -458,10 +461,11 @@ namespace MediaBrowser.Server.Implementations.Library /// Resolves the item. /// </summary> /// <param name="args">The args.</param> + /// <param name="resolvers">The resolvers.</param> /// <returns>BaseItem.</returns> - private BaseItem ResolveItem(ItemResolveArgs args) + private BaseItem ResolveItem(ItemResolveArgs args, IItemResolver[] resolvers) { - var item = EntityResolvers.Select(r => Resolve(args, r)) + var item = (resolvers ?? EntityResolvers).Select(r => Resolve(args, r)) .FirstOrDefault(i => i != null); if (item != null) @@ -504,7 +508,12 @@ namespace MediaBrowser.Server.Implementations.Library .Replace("/", "\\"); } - key = type.FullName + key.ToLower(); + if (!ConfigurationManager.Configuration.EnableCaseSensitiveItemIds) + { + key = key.ToLower(); + } + + key = type.FullName + key; return key.GetMD5(); } @@ -560,10 +569,10 @@ namespace MediaBrowser.Server.Implementations.Library public BaseItem ResolvePath(FileSystemMetadata fileInfo, Folder parent = null) { - return ResolvePath(fileInfo, new DirectoryService(_logger, _fileSystem), parent); + return ResolvePath(fileInfo, new DirectoryService(_logger, _fileSystem), null, parent); } - private BaseItem ResolvePath(FileSystemMetadata fileInfo, IDirectoryService directoryService, Folder parent = null, string collectionType = null) + private BaseItem ResolvePath(FileSystemMetadata fileInfo, IDirectoryService directoryService, IItemResolver[] resolvers, Folder parent = null, string collectionType = null) { if (fileInfo == null) { @@ -619,7 +628,7 @@ namespace MediaBrowser.Server.Implementations.Library return null; } - return ResolveItem(args); + return ResolveItem(args, resolvers); } public bool IgnoreFile(FileSystemMetadata file, BaseItem parent) @@ -662,11 +671,18 @@ namespace MediaBrowser.Server.Implementations.Library public IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemMetadata> files, IDirectoryService directoryService, Folder parent, string collectionType) { + return ResolvePaths(files, directoryService, parent, collectionType, EntityResolvers); + } + + public IEnumerable<BaseItem> ResolvePaths(IEnumerable<FileSystemMetadata> files, IDirectoryService directoryService, Folder parent, string collectionType, IItemResolver[] resolvers) + { var fileList = files.Where(i => !IgnoreFile(i, parent)).ToList(); if (parent != null) { - foreach (var resolver in MultiItemResolvers) + var multiItemResolvers = resolvers == null ? MultiItemResolvers : resolvers.OfType<IMultiItemResolver>().ToArray(); + + foreach (var resolver in multiItemResolvers) { var result = resolver.ResolveMultiple(parent, fileList, collectionType, directoryService); @@ -679,22 +695,22 @@ namespace MediaBrowser.Server.Implementations.Library { ResolverHelper.SetInitialItemValues(item, parent, _fileSystem, this, directoryService); } - items.AddRange(ResolveFileList(result.ExtraFiles, directoryService, parent, collectionType)); + items.AddRange(ResolveFileList(result.ExtraFiles, directoryService, parent, collectionType, resolvers)); return items; } } } - return ResolveFileList(fileList, directoryService, parent, collectionType); + return ResolveFileList(fileList, directoryService, parent, collectionType, resolvers); } - private IEnumerable<BaseItem> ResolveFileList(IEnumerable<FileSystemMetadata> fileList, IDirectoryService directoryService, Folder parent, string collectionType) + private IEnumerable<BaseItem> ResolveFileList(IEnumerable<FileSystemMetadata> fileList, IDirectoryService directoryService, Folder parent, string collectionType, IItemResolver[] resolvers) { return fileList.Select(f => { try { - return ResolvePath(f, directoryService, parent, collectionType); + return ResolvePath(f, directoryService, resolvers, parent, collectionType); } catch (Exception ex) { @@ -807,7 +823,7 @@ namespace MediaBrowser.Server.Implementations.Library { return null; } - + return RootFolder.FindByPath(path); } @@ -1044,11 +1060,6 @@ namespace MediaBrowser.Server.Implementations.Library return names; } - private void SetPropertiesFromSongs(MusicArtist artist, IEnumerable<IHasMetadata> items) - { - - } - /// <summary> /// Validate and refresh the People sub-set of the IBN. /// The items are stored in the db but not loaded into memory until actually requested by an operation. @@ -1304,7 +1315,7 @@ namespace MediaBrowser.Server.Implementations.Library return item; } - public QueryResult<BaseItem> GetItems(InternalItemsQuery query) + public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query) { if (query.User != null) { @@ -1313,12 +1324,7 @@ namespace MediaBrowser.Server.Implementations.Library var result = ItemRepository.GetItemIdsList(query); - var items = result.Select(GetItemById).Where(i => i != null).ToArray(); - - return new QueryResult<BaseItem> - { - Items = items - }; + return result.Select(GetItemById).Where(i => i != null); } public QueryResult<BaseItem> QueryItems(InternalItemsQuery query) @@ -1341,7 +1347,7 @@ namespace MediaBrowser.Server.Implementations.Library return ItemRepository.GetItemIdsList(query); } - public IEnumerable<BaseItem> GetItems(InternalItemsQuery query, IEnumerable<string> parentIds) + public IEnumerable<BaseItem> GetItemList(InternalItemsQuery query, IEnumerable<string> parentIds) { var parents = parentIds.Select(i => GetItemById(new Guid(i))).Where(i => i != null).ToList(); @@ -1350,13 +1356,39 @@ namespace MediaBrowser.Server.Implementations.Library return GetItemIds(query).Select(GetItemById).Where(i => i != null); } + public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query) + { + if (query.Recursive && query.ParentId.HasValue) + { + var parent = GetItemById(query.ParentId.Value); + if (parent != null) + { + SetTopParentIdsOrAncestors(query, new List<BaseItem> { parent }); + query.ParentId = null; + } + } + + if (query.User != null) + { + AddUserToQuery(query, query.User); + } + + var initialResult = ItemRepository.GetItemIds(query); + + return new QueryResult<BaseItem> + { + TotalRecordCount = initialResult.TotalRecordCount, + Items = initialResult.Items.Select(GetItemById).Where(i => i != null).ToArray() + }; + } + public QueryResult<BaseItem> GetItemsResult(InternalItemsQuery query, IEnumerable<string> parentIds) { var parents = parentIds.Select(i => GetItemById(new Guid(i))).Where(i => i != null).ToList(); SetTopParentIdsOrAncestors(query, parents); - return GetItems(query); + return GetItemsResult(query); } private void SetTopParentIdsOrAncestors(InternalItemsQuery query, List<BaseItem> parents) @@ -2315,12 +2347,17 @@ namespace MediaBrowser.Server.Implementations.Library files.AddRange(currentVideo.Extras.Where(i => string.Equals(i.ExtraType, "trailer", StringComparison.OrdinalIgnoreCase)).Select(i => _fileSystem.GetFileInfo(i.Path))); } - return ResolvePaths(files, directoryService, null, null) - .OfType<Video>() + var resolvers = new IItemResolver[] + { + new GenericVideoResolver<Trailer>(this) + }; + + return ResolvePaths(files, directoryService, null, null, resolvers) + .OfType<Trailer>() .Select(video => { // Try to retrieve it from the db. If we don't find it, use the resolved version - var dbItem = GetItemById(video.Id) as Video; + var dbItem = GetItemById(video.Id) as Trailer; if (dbItem != null) { @@ -2539,7 +2576,7 @@ namespace MediaBrowser.Server.Implementations.Library // Remove this image to prevent it from retrying over and over item.RemoveImage(image); await item.UpdateToRepository(ItemUpdateType.ImageUpdate, CancellationToken.None).ConfigureAwait(false); - + throw new InvalidOperationException(); } } |
