audio podcast

This commit is contained in:
Luke Pulverenti
2016-03-19 15:32:37 -04:00
parent 1d2b6329bf
commit db1bf5b1b5
19 changed files with 523 additions and 107 deletions

View File

@@ -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
{
@@ -454,10 +456,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)
@@ -556,10 +559,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)
{
@@ -615,7 +618,7 @@ namespace MediaBrowser.Server.Implementations.Library
return null;
}
return ResolveItem(args);
return ResolveItem(args, resolvers);
}
public bool IgnoreFile(FileSystemMetadata file, BaseItem parent)
@@ -657,12 +660,19 @@ 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);
@@ -675,22 +685,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)
{
@@ -2306,12 +2316,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)
{

View File

@@ -31,7 +31,10 @@ namespace MediaBrowser.Server.Implementations.Library
var trailerResult = _libraryManager.GetItems(new InternalItemsQuery
{
IncludeItemTypes = new[] { typeof(Trailer).Name },
//IsLocalTrailer = false
ExcludeTrailerTypes = new[]
{
TrailerType.LocalTrailer
}
});
var trailers = trailerResult.Items;

View File

@@ -34,4 +34,12 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers
get { return ResolverPriority.Last; }
}
}
public class GenericVideoResolver<T> : BaseVideoResolver<T>
where T : Video, new ()
{
public GenericVideoResolver(ILibraryManager libraryManager) : base(libraryManager)
{
}
}
}