mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-22 10:04:44 +01:00
remove and/or delay unnecessary startup work
This commit is contained in:
@@ -49,12 +49,6 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
/// </summary>
|
||||
private readonly List<IRestfulService> _restServices = new List<IRestfulService>();
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the application host.
|
||||
/// </summary>
|
||||
/// <value>The application host.</value>
|
||||
private IApplicationHost ApplicationHost { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// This subscribes to HttpListener requests and finds the appropriate BaseHandler to process it
|
||||
/// </summary>
|
||||
@@ -78,6 +72,8 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
/// <value>The name of the server.</value>
|
||||
private string ServerName { get; set; }
|
||||
|
||||
private ContainerAdapter _containerAdapter;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="HttpServer" /> class.
|
||||
/// </summary>
|
||||
@@ -109,10 +105,11 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
ServerName = serverName;
|
||||
DefaultRedirectPath = defaultRedirectpath;
|
||||
_logger = logger;
|
||||
ApplicationHost = applicationHost;
|
||||
|
||||
EndpointHostConfig.Instance.ServiceStackHandlerFactoryPath = null;
|
||||
EndpointHostConfig.Instance.MetadataRedirectPath = "metadata";
|
||||
|
||||
_containerAdapter = new ContainerAdapter(applicationHost);
|
||||
}
|
||||
|
||||
protected static readonly CultureInfo UsCulture = new CultureInfo("en-US");
|
||||
@@ -135,7 +132,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
WriteErrorsToResponse = false
|
||||
});
|
||||
|
||||
container.Adapter = new ContainerAdapter(ApplicationHost);
|
||||
container.Adapter = _containerAdapter;
|
||||
|
||||
Plugins.Add(new SwaggerFeature());
|
||||
Plugins.Add(new CorsFeature());
|
||||
@@ -214,6 +211,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
|
||||
if (Listener == null)
|
||||
{
|
||||
_logger.Info("Creating HttpListner");
|
||||
Listener = new HttpListener();
|
||||
}
|
||||
|
||||
@@ -221,11 +219,14 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
|
||||
UrlPrefix = urlBase;
|
||||
|
||||
_logger.Info("Adding HttpListener Prefixes");
|
||||
Listener.Prefixes.Add(urlBase);
|
||||
|
||||
IsStarted = true;
|
||||
_logger.Info("Starting HttpListner");
|
||||
Listener.Start();
|
||||
|
||||
_logger.Info("Creating HttpListner observable stream");
|
||||
HttpListener = CreateObservableStream().Subscribe(ProcessHttpRequestAsync);
|
||||
}
|
||||
|
||||
@@ -548,6 +549,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer
|
||||
_restServices.AddRange(services);
|
||||
|
||||
_logger.Info("Calling EndpointHost.ConfigureHost");
|
||||
|
||||
EndpointHost.ConfigureHost(this, ServerName, CreateServiceManager());
|
||||
|
||||
_logger.Info("Calling ServiceStack AppHost.Init");
|
||||
|
||||
@@ -7,6 +7,7 @@ using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Entities.Movies;
|
||||
using MediaBrowser.Controller.IO;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Controller.Resolvers;
|
||||
using MediaBrowser.Controller.Sorting;
|
||||
using MediaBrowser.Model.Configuration;
|
||||
@@ -61,6 +62,12 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <value>The comparers.</value>
|
||||
private IEnumerable<IBaseItemComparer> Comparers { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the active item repository
|
||||
/// </summary>
|
||||
/// <value>The item repository.</value>
|
||||
public IItemRepository ItemRepository { get; set; }
|
||||
|
||||
#region LibraryChanged Event
|
||||
/// <summary>
|
||||
/// Fires whenever any validation routine adds or removes items. The added and removed items are properties of the args.
|
||||
@@ -95,12 +102,6 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// </summary>
|
||||
private readonly IUserManager _userManager;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the kernel.
|
||||
/// </summary>
|
||||
/// <value>The kernel.</value>
|
||||
private Kernel Kernel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the configuration manager.
|
||||
/// </summary>
|
||||
@@ -126,27 +127,25 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
}
|
||||
}
|
||||
|
||||
private ConcurrentDictionary<string, UserRootFolder> _userRootFolders =
|
||||
private readonly ConcurrentDictionary<string, UserRootFolder> _userRootFolders =
|
||||
new ConcurrentDictionary<string, UserRootFolder>();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="LibraryManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="taskManager">The task manager.</param>
|
||||
/// <param name="userManager">The user manager.</param>
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
public LibraryManager(Kernel kernel, ILogger logger, ITaskManager taskManager, IUserManager userManager, IServerConfigurationManager configurationManager)
|
||||
public LibraryManager(ILogger logger, ITaskManager taskManager, IUserManager userManager, IServerConfigurationManager configurationManager)
|
||||
{
|
||||
Kernel = kernel;
|
||||
_logger = logger;
|
||||
_taskManager = taskManager;
|
||||
_userManager = userManager;
|
||||
ConfigurationManager = configurationManager;
|
||||
ByReferenceItems = new ConcurrentDictionary<Guid, BaseItem>();
|
||||
|
||||
ConfigurationManager.ConfigurationUpdated += kernel_ConfigurationUpdated;
|
||||
ConfigurationManager.ConfigurationUpdated += ConfigurationUpdated;
|
||||
|
||||
RecordConfigurationValues(configurationManager.Configuration);
|
||||
}
|
||||
@@ -159,7 +158,11 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <param name="resolvers">The resolvers.</param>
|
||||
/// <param name="introProviders">The intro providers.</param>
|
||||
/// <param name="itemComparers">The item comparers.</param>
|
||||
public void AddParts(IEnumerable<IResolverIgnoreRule> rules, IEnumerable<IVirtualFolderCreator> pluginFolders, IEnumerable<IItemResolver> resolvers, IEnumerable<IIntroProvider> introProviders, IEnumerable<IBaseItemComparer> itemComparers)
|
||||
public void AddParts(IEnumerable<IResolverIgnoreRule> rules,
|
||||
IEnumerable<IVirtualFolderCreator> pluginFolders,
|
||||
IEnumerable<IItemResolver> resolvers,
|
||||
IEnumerable<IIntroProvider> introProviders,
|
||||
IEnumerable<IBaseItemComparer> itemComparers)
|
||||
{
|
||||
EntityResolutionIgnoreRules = rules;
|
||||
PluginFolderCreators = pluginFolders;
|
||||
@@ -212,11 +215,11 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the ConfigurationUpdated event of the kernel control.
|
||||
/// Configurations the updated.
|
||||
/// </summary>
|
||||
/// <param name="sender">The source of the event.</param>
|
||||
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
||||
void kernel_ConfigurationUpdated(object sender, EventArgs e)
|
||||
/// <param name="sender">The sender.</param>
|
||||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||||
void ConfigurationUpdated(object sender, EventArgs e)
|
||||
{
|
||||
var config = ConfigurationManager.Configuration;
|
||||
|
||||
@@ -476,7 +479,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
public AggregateFolder CreateRootFolder()
|
||||
{
|
||||
var rootFolderPath = ConfigurationManager.ApplicationPaths.RootFolderPath;
|
||||
var rootFolder = Kernel.ItemRepository.RetrieveItem(rootFolderPath.GetMBId(typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(rootFolderPath);
|
||||
var rootFolder = RetrieveItem(rootFolderPath.GetMBId(typeof(AggregateFolder))) as AggregateFolder ?? (AggregateFolder)ResolvePath(rootFolderPath);
|
||||
|
||||
// Add in the plug-in folders
|
||||
foreach (var child in PluginFolderCreators)
|
||||
@@ -494,7 +497,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <returns>UserRootFolder.</returns>
|
||||
public UserRootFolder GetUserRootFolder(string userRootPath)
|
||||
{
|
||||
return _userRootFolders.GetOrAdd(userRootPath, key => Kernel.ItemRepository.RetrieveItem(userRootPath.GetMBId(typeof(UserRootFolder))) as UserRootFolder ?? (UserRootFolder)ResolvePath(userRootPath));
|
||||
return _userRootFolders.GetOrAdd(userRootPath, key => RetrieveItem(userRootPath.GetMBId(typeof(UserRootFolder))) as UserRootFolder ?? (UserRootFolder)ResolvePath(userRootPath));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -639,7 +642,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
var id = path.GetMBId(typeof(T));
|
||||
|
||||
var item = Kernel.ItemRepository.RetrieveItem(id) as T;
|
||||
var item = RetrieveItem(id) as T;
|
||||
if (item == null)
|
||||
{
|
||||
item = new T
|
||||
@@ -899,5 +902,48 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
return comparer;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Saves the item.
|
||||
/// </summary>
|
||||
/// <param name="item">The item.</param>
|
||||
/// <param name="cancellationToken">The cancellation token.</param>
|
||||
/// <returns>Task.</returns>
|
||||
public Task SaveItem(BaseItem item, CancellationToken cancellationToken)
|
||||
{
|
||||
return ItemRepository.SaveItem(item, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the item.
|
||||
/// </summary>
|
||||
/// <param name="id">The id.</param>
|
||||
/// <returns>Task{BaseItem}.</returns>
|
||||
public BaseItem RetrieveItem(Guid id)
|
||||
{
|
||||
return ItemRepository.RetrieveItem(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>
|
||||
public Task SaveChildren(Guid id, IEnumerable<BaseItem> children, CancellationToken cancellationToken)
|
||||
{
|
||||
return ItemRepository.SaveChildren(id, children, cancellationToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the children.
|
||||
/// </summary>
|
||||
/// <param name="parent">The parent.</param>
|
||||
/// <returns>IEnumerable{BaseItem}.</returns>
|
||||
public IEnumerable<BaseItem> RetrieveChildren(Folder parent)
|
||||
{
|
||||
return ItemRepository.RetrieveChildren(parent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ using MediaBrowser.Controller;
|
||||
using MediaBrowser.Controller.Configuration;
|
||||
using MediaBrowser.Controller.Entities;
|
||||
using MediaBrowser.Controller.Library;
|
||||
using MediaBrowser.Controller.Persistence;
|
||||
using MediaBrowser.Model.Connectivity;
|
||||
using MediaBrowser.Model.Logging;
|
||||
using System;
|
||||
@@ -86,12 +87,6 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// </summary>
|
||||
private readonly ILogger _logger;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the kernel.
|
||||
/// </summary>
|
||||
/// <value>The kernel.</value>
|
||||
private Kernel Kernel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets the configuration manager.
|
||||
/// </summary>
|
||||
@@ -99,17 +94,27 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
private IServerConfigurationManager ConfigurationManager { get; set; }
|
||||
|
||||
private readonly ConcurrentDictionary<string, Task<UserItemData>> _userData = new ConcurrentDictionary<string, Task<UserItemData>>();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Gets the active user data repository
|
||||
/// </summary>
|
||||
/// <value>The user data repository.</value>
|
||||
public IUserDataRepository UserDataRepository { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the active user repository
|
||||
/// </summary>
|
||||
/// <value>The user repository.</value>
|
||||
public IUserRepository UserRepository { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="UserManager" /> class.
|
||||
/// </summary>
|
||||
/// <param name="kernel">The kernel.</param>
|
||||
/// <param name="logger">The logger.</param>
|
||||
/// <param name="configurationManager">The configuration manager.</param>
|
||||
public UserManager(Kernel kernel, ILogger logger, IServerConfigurationManager configurationManager)
|
||||
public UserManager(ILogger logger, IServerConfigurationManager configurationManager)
|
||||
{
|
||||
_logger = logger;
|
||||
Kernel = kernel;
|
||||
ConfigurationManager = configurationManager;
|
||||
}
|
||||
|
||||
@@ -250,7 +255,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
}
|
||||
|
||||
// Save this directly. No need to fire off all the events for this.
|
||||
return Kernel.UserRepository.SaveUser(user, CancellationToken.None);
|
||||
return UserRepository.SaveUser(user, CancellationToken.None);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -334,7 +339,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <returns>IEnumerable{User}.</returns>
|
||||
private IEnumerable<User> LoadUsers()
|
||||
{
|
||||
var users = Kernel.UserRepository.RetrieveAllUsers().ToList();
|
||||
var users = UserRepository.RetrieveAllUsers().ToList();
|
||||
|
||||
// There always has to be at least one user.
|
||||
if (users.Count == 0)
|
||||
@@ -343,7 +348,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
var user = InstantiateNewUser(name);
|
||||
|
||||
var task = Kernel.UserRepository.SaveUser(user, CancellationToken.None);
|
||||
var task = UserRepository.SaveUser(user, CancellationToken.None);
|
||||
|
||||
// Hate having to block threads
|
||||
Task.WaitAll(task);
|
||||
@@ -422,7 +427,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
|
||||
user.DateModified = DateTime.UtcNow;
|
||||
|
||||
await Kernel.UserRepository.SaveUser(user, CancellationToken.None).ConfigureAwait(false);
|
||||
await UserRepository.SaveUser(user, CancellationToken.None).ConfigureAwait(false);
|
||||
|
||||
OnUserUpdated(user);
|
||||
}
|
||||
@@ -452,7 +457,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
list.Add(user);
|
||||
Users = list;
|
||||
|
||||
await Kernel.UserRepository.SaveUser(user, CancellationToken.None).ConfigureAwait(false);
|
||||
await UserRepository.SaveUser(user, CancellationToken.None).ConfigureAwait(false);
|
||||
|
||||
return user;
|
||||
}
|
||||
@@ -481,7 +486,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
throw new ArgumentException(string.Format("The user '{0}' be deleted because there must be at least one user in the system.", user.Name));
|
||||
}
|
||||
|
||||
await Kernel.UserRepository.DeleteUser(user, CancellationToken.None).ConfigureAwait(false);
|
||||
await UserRepository.DeleteUser(user, CancellationToken.None).ConfigureAwait(false);
|
||||
|
||||
OnUserDeleted(user);
|
||||
|
||||
@@ -713,7 +718,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
var key = userId + userDataId.ToString();
|
||||
try
|
||||
{
|
||||
await Kernel.Instance.UserDataRepository.SaveUserData(userId, userDataId, userData, cancellationToken).ConfigureAwait(false);
|
||||
await UserDataRepository.SaveUserData(userId, userDataId, userData, cancellationToken).ConfigureAwait(false);
|
||||
|
||||
var newValue = Task.FromResult(userData);
|
||||
|
||||
@@ -749,7 +754,7 @@ namespace MediaBrowser.Server.Implementations.Library
|
||||
/// <returns>Task{UserItemData}.</returns>
|
||||
private async Task<UserItemData> RetrieveUserData(Guid userId, Guid userDataId)
|
||||
{
|
||||
var userdata = await Kernel.Instance.UserDataRepository.GetUserData(userId, userDataId).ConfigureAwait(false);
|
||||
var userdata = await UserDataRepository.GetUserData(userId, userDataId).ConfigureAwait(false);
|
||||
|
||||
return userdata ?? new UserItemData();
|
||||
}
|
||||
|
||||
@@ -109,8 +109,6 @@
|
||||
<HintPath>..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
|
||||
Reference in New Issue
Block a user