aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Library/LibraryManager.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Library/LibraryManager.cs111
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();
}
}