From 9911df11e8a96d5d7fffcd8618b63a6adb27701f Mon Sep 17 00:00:00 2001 From: LukePulverenti Date: Fri, 8 Mar 2013 00:08:27 -0500 Subject: extracted provider manager. took more off the kernel --- MediaBrowser.ServerApplication/ApplicationHost.cs | 143 +++++++++++++++++++--- 1 file changed, 124 insertions(+), 19 deletions(-) (limited to 'MediaBrowser.ServerApplication/ApplicationHost.cs') diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index df3765818..2eccee066 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -2,18 +2,24 @@ using MediaBrowser.Common; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Constants; -using MediaBrowser.Common.Events; using MediaBrowser.Common.Implementations; using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.IO; using MediaBrowser.Common.Net; -using MediaBrowser.Common.Updates; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.IO; using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Localization; +using MediaBrowser.Controller.MediaInfo; +using MediaBrowser.Controller.Persistence; +using MediaBrowser.Controller.Plugins; +using MediaBrowser.Controller.Providers; using MediaBrowser.Controller.Resolvers; using MediaBrowser.Controller.Updates; +using MediaBrowser.Controller.Weather; using MediaBrowser.IsoMounter; using MediaBrowser.Model.IO; using MediaBrowser.Model.MediaInfo; @@ -23,7 +29,9 @@ using MediaBrowser.Server.Implementations; using MediaBrowser.Server.Implementations.BdInfo; using MediaBrowser.Server.Implementations.Configuration; using MediaBrowser.Server.Implementations.HttpServer; +using MediaBrowser.Server.Implementations.IO; using MediaBrowser.Server.Implementations.Library; +using MediaBrowser.Server.Implementations.Providers; using MediaBrowser.Server.Implementations.ServerManager; using MediaBrowser.Server.Implementations.Udp; using MediaBrowser.Server.Implementations.Updates; @@ -78,23 +86,73 @@ namespace MediaBrowser.ServerApplication return new ServerConfigurationManager(ApplicationPaths, LogManager, XmlSerializer); } + /// + /// Gets or sets the installation manager. + /// + /// The installation manager. private IInstallationManager InstallationManager { get; set; } + /// + /// Gets or sets the server manager. + /// + /// The server manager. private IServerManager ServerManager { get; set; } - + /// + /// Gets or sets the user manager. + /// + /// The user manager. + public IUserManager UserManager { get; set; } + /// + /// Gets or sets the library manager. + /// + /// The library manager. + internal ILibraryManager LibraryManager { get; set; } + /// + /// Gets or sets the directory watchers. + /// + /// The directory watchers. + private IDirectoryWatchers DirectoryWatchers { get; set; } + /// + /// Gets or sets the provider manager. + /// + /// The provider manager. + private IProviderManager ProviderManager { get; set; } + /// + /// Gets or sets the zip client. + /// + /// The zip client. + private IZipClient ZipClient { get; set; } + /// + /// Gets or sets the HTTP server. + /// + /// The HTTP server. + private IHttpServer HttpServer { get; set; } + + /// + /// Inits this instance. + /// + /// Task. public override async Task Init() { await base.Init().ConfigureAwait(false); - await ServerKernel.Init().ConfigureAwait(false); + Task.Run(async () => + { + await ServerKernel.LoadRepositories(ServerConfigurationManager).ConfigureAwait(false); + + DirectoryWatchers.Start(); + + Parallel.ForEach(GetExports(), entryPoint => entryPoint.Run()); + }); } /// /// Registers resources that classes will depend on /// + /// Task. protected override async Task RegisterResources() { - ServerKernel = new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager); - + ServerKernel = new Kernel(ServerConfigurationManager); + await base.RegisterResources().ConfigureAwait(false); RegisterSingleInstance(this); @@ -108,20 +166,66 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance(new PismoIsoManager(Logger)); RegisterSingleInstance(new BdInfoExaminer()); - RegisterSingleInstance(new DotNetZipClient()); - RegisterSingleInstance(ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html"), false); + + ZipClient = new DotNetZipClient(); + RegisterSingleInstance(ZipClient); + + HttpServer = ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html"); + RegisterSingleInstance(HttpServer, false); ServerManager = new ServerManager(this, NetworkManager, JsonSerializer, Logger, ServerConfigurationManager, ServerKernel); RegisterSingleInstance(ServerManager); - var userManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager); + UserManager = new UserManager(ServerKernel, Logger, ServerConfigurationManager); + RegisterSingleInstance(UserManager); - RegisterSingleInstance(userManager); - - RegisterSingleInstance(new LibraryManager(ServerKernel, Logger, TaskManager, userManager, ServerConfigurationManager)); + LibraryManager = new LibraryManager(ServerKernel, Logger, TaskManager, UserManager, ServerConfigurationManager); + RegisterSingleInstance(LibraryManager); InstallationManager = new InstallationManager(HttpClient, PackageManager, JsonSerializer, Logger, this); RegisterSingleInstance(InstallationManager); + + DirectoryWatchers = new DirectoryWatchers(LogManager, TaskManager, LibraryManager, ServerConfigurationManager); + RegisterSingleInstance(DirectoryWatchers); + + ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, DirectoryWatchers, LogManager); + RegisterSingleInstance(ProviderManager); + + SetKernelProperties(); + SetStaticProperties(); + } + + /// + /// Sets the kernel properties. + /// + private void SetKernelProperties() + { + ServerKernel.FFMpegManager = new FFMpegManager(ServerKernel, ZipClient, JsonSerializer, ProtobufSerializer, LogManager, ApplicationPaths); + ServerKernel.ImageManager = new ImageManager(ServerKernel, ProtobufSerializer, LogManager.GetLogger("ImageManager"), ApplicationPaths); + + ServerKernel.UserDataRepositories = GetExports(); + ServerKernel.UserRepositories = GetExports(); + ServerKernel.DisplayPreferencesRepositories = GetExports(); + ServerKernel.ItemRepositories = GetExports(); + ServerKernel.WeatherProviders = GetExports(); + ServerKernel.ImageEnhancers = GetExports().OrderBy(e => e.Priority).ToArray(); + ServerKernel.StringFiles = GetExports(); + } + + /// + /// Dirty hacks + /// + private void SetStaticProperties() + { + // For now there's no real way to inject these properly + BaseItem.Logger = LogManager.GetLogger("BaseItem"); + BaseItem.ConfigurationManager = ServerConfigurationManager; + BaseItem.LibraryManager = LibraryManager; + BaseItem.ProviderManager = ProviderManager; + User.XmlSerializer = XmlSerializer; + User.UserManager = UserManager; + Ratings.ConfigurationManager = ServerConfigurationManager; + LocalizedStrings.ApplicationPaths = ApplicationPaths; } /// @@ -131,12 +235,14 @@ namespace MediaBrowser.ServerApplication { base.FindParts(); - Resolve().Init(GetExports(false)); - Resolve().AddWebSocketListeners(GetExports(false)); + HttpServer.Init(GetExports(false)); + + ServerManager.AddWebSocketListeners(GetExports(false)); + ServerManager.Start(); - Resolve().Start(); + LibraryManager.AddParts(GetExports(), GetExports(), GetExports(), GetExports()); - Resolve().AddParts(GetExports(), GetExports(), GetExports(), GetExports()); + ProviderManager.AddMetadataProviders(GetExports().OrderBy(e => e.Priority).ToArray()); } /// @@ -164,9 +270,8 @@ namespace MediaBrowser.ServerApplication /// Task{CheckForUpdateResult}. public async override Task CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress progress) { - var pkgManager = Resolve(); - var availablePackages = await pkgManager.GetAvailablePackages(CancellationToken.None).ConfigureAwait(false); - var version = Resolve().GetLatestCompatibleVersion(availablePackages, Constants.MBServerPkgName, ConfigurationManager.CommonConfiguration.SystemUpdateLevel); + var availablePackages = await PackageManager.GetAvailablePackages(CancellationToken.None).ConfigureAwait(false); + var version = InstallationManager.GetLatestCompatibleVersion(availablePackages, Constants.MBServerPkgName, ConfigurationManager.CommonConfiguration.SystemUpdateLevel); return version != null ? new CheckForUpdateResult { AvailableVersion = version.version, IsUpdateAvailable = version.version > ApplicationVersion, Package = version } : new CheckForUpdateResult { AvailableVersion = ApplicationVersion, IsUpdateAvailable = false }; -- cgit v1.2.3