remove and/or delay unnecessary startup work

This commit is contained in:
Luke Pulverenti
2013-04-08 11:55:53 -04:00
parent 59cfad03e8
commit 804115bf8d
18 changed files with 341 additions and 215 deletions

View File

@@ -668,7 +668,7 @@ namespace MediaBrowser.Controller.Entities
return LibraryManager.ResolvePaths<Video>(files, null).Select(video =>
{
// Try to retrieve it from the db. If we don't find it, use the resolved version
var dbItem = Kernel.Instance.ItemRepository.RetrieveItem(video.Id) as Video;
var dbItem = LibraryManager.RetrieveItem(video.Id) as Video;
if (dbItem != null)
{
@@ -721,7 +721,7 @@ namespace MediaBrowser.Controller.Entities
{
cancellationToken.ThrowIfCancellationRequested();
await Kernel.Instance.ItemRepository.SaveItem(this, cancellationToken).ConfigureAwait(false);
await LibraryManager.SaveItem(this, cancellationToken).ConfigureAwait(false);
}
return changed;
@@ -868,7 +868,7 @@ namespace MediaBrowser.Controller.Entities
}
//not found - load from repo
return Kernel.Instance.ItemRepository.RetrieveItem(id);
return LibraryManager.RetrieveItem(id);
}
/// <summary>

View File

@@ -602,14 +602,14 @@ namespace MediaBrowser.Controller.Entities
_children.Add(item);
}
saveTasks.Add(Kernel.Instance.ItemRepository.SaveItem(item, CancellationToken.None));
saveTasks.Add(LibraryManager.SaveItem(item, CancellationToken.None));
}
await Task.WhenAll(saveTasks).ConfigureAwait(false);
//and save children in repo...
Logger.Debug("*** Saving " + newChildren.Count + " children for " + Name);
await Kernel.Instance.ItemRepository.SaveChildren(Id, newChildren, CancellationToken.None).ConfigureAwait(false);
await LibraryManager.SaveChildren(Id, newChildren, CancellationToken.None).ConfigureAwait(false);
}
if (changedArgs.HasChange)
@@ -726,7 +726,7 @@ namespace MediaBrowser.Controller.Entities
/// <returns>IEnumerable{BaseItem}.</returns>
protected virtual IEnumerable<BaseItem> GetCachedChildren()
{
return Kernel.Instance.ItemRepository.RetrieveChildren(this).Select(i => i is IByReferenceItem ? LibraryManager.GetOrAddByReferenceItem(i) : i);
return LibraryManager.RetrieveChildren(this).Select(i => i is IByReferenceItem ? LibraryManager.GetOrAddByReferenceItem(i) : i);
}
/// <summary>

View File

@@ -161,7 +161,7 @@ namespace MediaBrowser.Controller.Entities.Movies
return LibraryManager.ResolvePaths<Video>(files, null).Select(video =>
{
// Try to retrieve it from the db. If we don't find it, use the resolved version
var dbItem = Kernel.Instance.ItemRepository.RetrieveItem(video.Id) as Video;
var dbItem = LibraryManager.RetrieveItem(video.Id) as Video;
if (dbItem != null)
{

View File

@@ -2,13 +2,9 @@
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Localization;
using MediaBrowser.Controller.MediaInfo;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Controller.Weather;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace MediaBrowser.Controller
{
@@ -76,42 +72,6 @@ namespace MediaBrowser.Controller
/// <value>The image enhancers.</value>
public IEnumerable<IImageEnhancer> ImageEnhancers { get; set; }
/// <summary>
/// Gets the list of available user repositories
/// </summary>
/// <value>The user repositories.</value>
public IEnumerable<IUserRepository> UserRepositories { get; set; }
/// <summary>
/// Gets the active user repository
/// </summary>
/// <value>The user repository.</value>
public IUserRepository UserRepository { get; set; }
/// <summary>
/// Gets the list of available item repositories
/// </summary>
/// <value>The item repositories.</value>
public IEnumerable<IItemRepository> ItemRepositories { get; set; }
/// <summary>
/// Gets the active item repository
/// </summary>
/// <value>The item repository.</value>
public IItemRepository ItemRepository { get; set; }
/// <summary>
/// Gets the list of available item repositories
/// </summary>
/// <value>The user data repositories.</value>
public IEnumerable<IUserDataRepository> UserDataRepositories { get; set; }
/// <summary>
/// Gets the active user data repository
/// </summary>
/// <value>The user data repository.</value>
public IUserDataRepository UserDataRepository { get; set; }
private readonly IServerConfigurationManager _configurationManager;
/// <summary>
@@ -124,42 +84,5 @@ namespace MediaBrowser.Controller
_configurationManager = configurationManager;
}
/// <summary>
/// Called when [composable parts loaded].
/// </summary>
/// <returns>Task.</returns>
public Task LoadRepositories(IServerConfigurationManager configurationManager)
{
// Get the current item repository
ItemRepository = GetRepository(ItemRepositories, configurationManager.Configuration.ItemRepository);
var itemRepoTask = ItemRepository.Initialize();
// Get the current user repository
UserRepository = GetRepository(UserRepositories, configurationManager.Configuration.UserRepository);
var userRepoTask = UserRepository.Initialize();
// Get the current item repository
UserDataRepository = GetRepository(UserDataRepositories, configurationManager.Configuration.UserDataRepository);
var userDataRepoTask = UserDataRepository.Initialize();
return Task.WhenAll(itemRepoTask, userRepoTask, userDataRepoTask);
}
/// <summary>
/// Gets a repository by name from a list, and returns the default if not found
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="repositories">The repositories.</param>
/// <param name="name">The name.</param>
/// <returns>``0.</returns>
private T GetRepository<T>(IEnumerable<T> repositories, string name)
where T : class, IRepository
{
var enumerable = repositories as T[] ?? repositories.ToArray();
return enumerable.FirstOrDefault(r => string.Equals(r.Name, name, StringComparison.OrdinalIgnoreCase)) ??
enumerable.FirstOrDefault();
}
}
}

View File

@@ -1,5 +1,6 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Resolvers;
using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Entities;
@@ -143,8 +144,11 @@ namespace MediaBrowser.Controller.Library
/// <param name="resolvers">The resolvers.</param>
/// <param name="introProviders">The intro providers.</param>
/// <param name="itemComparers">The item comparers.</param>
void AddParts(IEnumerable<IResolverIgnoreRule> rules, IEnumerable<IVirtualFolderCreator> pluginFolders,
IEnumerable<IItemResolver> resolvers, IEnumerable<IIntroProvider> introProviders, IEnumerable<IBaseItemComparer> itemComparers);
void AddParts(IEnumerable<IResolverIgnoreRule> rules,
IEnumerable<IVirtualFolderCreator> pluginFolders,
IEnumerable<IItemResolver> resolvers,
IEnumerable<IIntroProvider> introProviders,
IEnumerable<IBaseItemComparer> itemComparers);
/// <summary>
/// Sorts the specified items.
@@ -170,5 +174,36 @@ namespace MediaBrowser.Controller.Library
/// <param name="userRootPath">The user root path.</param>
/// <returns>UserRootFolder.</returns>
UserRootFolder GetUserRootFolder(string userRootPath);
/// <summary>
/// Saves the item.
/// </summary>
/// <param name="item">The item.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
Task SaveItem(BaseItem item, CancellationToken cancellationToken);
/// <summary>
/// Retrieves the item.
/// </summary>
/// <param name="id">The id.</param>
/// <returns>Task{BaseItem}.</returns>
BaseItem RetrieveItem(Guid id);
/// <summary>
/// Saves the children.
/// </summary>
/// <param name="id">The id.</param>
/// <param name="children">The children.</param>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>Task.</returns>
Task SaveChildren(Guid id, IEnumerable<BaseItem> children, CancellationToken cancellationToken);
/// <summary>
/// Retrieves the children.
/// </summary>
/// <param name="parent">The parent.</param>
/// <returns>IEnumerable{BaseItem}.</returns>
IEnumerable<BaseItem> RetrieveChildren(Folder parent);
}
}

View File

@@ -58,7 +58,6 @@
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Data" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net" />
<Reference Include="System.Runtime.Serialization" />

View File

@@ -1,6 +1,7 @@
using MediaBrowser.Common.IO;
using MediaBrowser.Common.MediaInfo;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Providers.MediaInfo;
using MediaBrowser.Model.Entities;
using System;
@@ -34,31 +35,23 @@ namespace MediaBrowser.Controller.MediaInfo
/// <value>The subtitle cache.</value>
internal FileSystemRepository SubtitleCache { get; set; }
/// <summary>
/// The _logger
/// </summary>
private readonly Kernel _kernel;
private readonly ILibraryManager _libraryManager;
private readonly IServerApplicationPaths _appPaths;
private readonly IMediaEncoder _encoder;
/// <summary>
/// Initializes a new instance of the <see cref="FFMpegManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="appPaths">The app paths.</param>
/// <param name="encoder">The encoder.</param>
/// <param name="libraryManager">The library manager.</param>
/// <exception cref="System.ArgumentNullException">zipClient</exception>
public FFMpegManager(Kernel kernel, IServerApplicationPaths appPaths, IMediaEncoder encoder)
public FFMpegManager(IServerApplicationPaths appPaths, IMediaEncoder encoder, ILibraryManager libraryManager)
{
if (kernel == null)
{
throw new ArgumentNullException("kernel");
}
_kernel = kernel;
_appPaths = appPaths;
_encoder = encoder;
_libraryManager = libraryManager;
VideoImageCache = new FileSystemRepository(VideoImagesDataPath);
AudioImageCache = new FileSystemRepository(AudioImagesDataPath);
@@ -216,7 +209,7 @@ namespace MediaBrowser.Controller.MediaInfo
if (saveItem && changesMade)
{
await _kernel.ItemRepository.SaveItem(video, CancellationToken.None).ConfigureAwait(false);
await _libraryManager.SaveItem(video, CancellationToken.None).ConfigureAwait(false);
}
}