diff options
| author | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-08 00:08:27 -0500 |
|---|---|---|
| committer | LukePulverenti <luke.pulverenti@gmail.com> | 2013-03-08 00:08:27 -0500 |
| commit | 9911df11e8a96d5d7fffcd8618b63a6adb27701f (patch) | |
| tree | b7e446296c6b0f61804430cd59beda68aa549065 /MediaBrowser.ServerApplication | |
| parent | 211d24e66e717f6294840b4f91806a24c1fb2e78 (diff) | |
extracted provider manager. took more off the kernel
Diffstat (limited to 'MediaBrowser.ServerApplication')
| -rw-r--r-- | MediaBrowser.ServerApplication/App.xaml.cs | 8 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/ApplicationHost.cs | 143 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/EntryPoints/NewItemNotifier.cs (renamed from MediaBrowser.ServerApplication/NewItemNotifier.cs) | 2 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/EntryPoints/RefreshUsersMetadata.cs | 41 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs (renamed from MediaBrowser.ServerApplication/StartupWizard.cs) | 2 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs (renamed from MediaBrowser.ServerApplication/WebSocketEvents.cs) | 2 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/MainWindow.xaml.cs | 19 | ||||
| -rw-r--r-- | MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj | 15 |
8 files changed, 193 insertions, 39 deletions
diff --git a/MediaBrowser.ServerApplication/App.xaml.cs b/MediaBrowser.ServerApplication/App.xaml.cs index a3e273438..0155d0c90 100644 --- a/MediaBrowser.ServerApplication/App.xaml.cs +++ b/MediaBrowser.ServerApplication/App.xaml.cs @@ -156,13 +156,13 @@ namespace MediaBrowser.ServerApplication { CompositionRoot = new ApplicationHost(); - var win = new MainWindow(CompositionRoot.LogManager, CompositionRoot, CompositionRoot.ServerConfigurationManager); - Logger = CompositionRoot.LogManager.GetLogger("App"); - win.Show(); - await CompositionRoot.Init(); + + var win = new MainWindow(CompositionRoot.LogManager, CompositionRoot, CompositionRoot.ServerConfigurationManager, CompositionRoot.UserManager, CompositionRoot.LibraryManager, CompositionRoot.JsonSerializer); + + win.Show(); } catch (Exception ex) { 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); } + /// <summary> + /// Gets or sets the installation manager. + /// </summary> + /// <value>The installation manager.</value> private IInstallationManager InstallationManager { get; set; } + /// <summary> + /// Gets or sets the server manager. + /// </summary> + /// <value>The server manager.</value> private IServerManager ServerManager { get; set; } - + /// <summary> + /// Gets or sets the user manager. + /// </summary> + /// <value>The user manager.</value> + public IUserManager UserManager { get; set; } + /// <summary> + /// Gets or sets the library manager. + /// </summary> + /// <value>The library manager.</value> + internal ILibraryManager LibraryManager { get; set; } + /// <summary> + /// Gets or sets the directory watchers. + /// </summary> + /// <value>The directory watchers.</value> + private IDirectoryWatchers DirectoryWatchers { get; set; } + /// <summary> + /// Gets or sets the provider manager. + /// </summary> + /// <value>The provider manager.</value> + private IProviderManager ProviderManager { get; set; } + /// <summary> + /// Gets or sets the zip client. + /// </summary> + /// <value>The zip client.</value> + private IZipClient ZipClient { get; set; } + /// <summary> + /// Gets or sets the HTTP server. + /// </summary> + /// <value>The HTTP server.</value> + private IHttpServer HttpServer { get; set; } + + /// <summary> + /// Inits this instance. + /// </summary> + /// <returns>Task.</returns> 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<IServerEntryPoint>(), entryPoint => entryPoint.Run()); + }); } /// <summary> /// Registers resources that classes will depend on /// </summary> + /// <returns>Task.</returns> protected override async Task RegisterResources() { - ServerKernel = new Kernel(this, XmlSerializer, LogManager, ServerConfigurationManager); - + ServerKernel = new Kernel(ServerConfigurationManager); + await base.RegisterResources().ConfigureAwait(false); RegisterSingleInstance<IServerApplicationHost>(this); @@ -108,20 +166,66 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance<IIsoManager>(new PismoIsoManager(Logger)); RegisterSingleInstance<IBlurayExaminer>(new BdInfoExaminer()); - RegisterSingleInstance<IZipClient>(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<IUserManager>(userManager); - - RegisterSingleInstance<ILibraryManager>(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(); + } + + /// <summary> + /// Sets the kernel properties. + /// </summary> + 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<IUserDataRepository>(); + ServerKernel.UserRepositories = GetExports<IUserRepository>(); + ServerKernel.DisplayPreferencesRepositories = GetExports<IDisplayPreferencesRepository>(); + ServerKernel.ItemRepositories = GetExports<IItemRepository>(); + ServerKernel.WeatherProviders = GetExports<IWeatherProvider>(); + ServerKernel.ImageEnhancers = GetExports<IImageEnhancer>().OrderBy(e => e.Priority).ToArray(); + ServerKernel.StringFiles = GetExports<LocalizedStringData>(); + } + + /// <summary> + /// Dirty hacks + /// </summary> + 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; } /// <summary> @@ -131,12 +235,14 @@ namespace MediaBrowser.ServerApplication { base.FindParts(); - Resolve<IHttpServer>().Init(GetExports<IRestfulService>(false)); - Resolve<IServerManager>().AddWebSocketListeners(GetExports<IWebSocketListener>(false)); + HttpServer.Init(GetExports<IRestfulService>(false)); + + ServerManager.AddWebSocketListeners(GetExports<IWebSocketListener>(false)); + ServerManager.Start(); - Resolve<IServerManager>().Start(); + LibraryManager.AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>()); - Resolve<ILibraryManager>().AddParts(GetExports<IResolverIgnoreRule>(), GetExports<IVirtualFolderCreator>(), GetExports<IItemResolver>(), GetExports<IIntroProvider>()); + ProviderManager.AddMetadataProviders(GetExports<BaseMetadataProvider>().OrderBy(e => e.Priority).ToArray()); } /// <summary> @@ -164,9 +270,8 @@ namespace MediaBrowser.ServerApplication /// <returns>Task{CheckForUpdateResult}.</returns> public async override Task<CheckForUpdateResult> CheckForApplicationUpdate(CancellationToken cancellationToken, IProgress<double> progress) { - var pkgManager = Resolve<IPackageManager>(); - var availablePackages = await pkgManager.GetAvailablePackages(CancellationToken.None).ConfigureAwait(false); - var version = Resolve<IInstallationManager>().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 }; diff --git a/MediaBrowser.ServerApplication/NewItemNotifier.cs b/MediaBrowser.ServerApplication/EntryPoints/NewItemNotifier.cs index 4864cef62..4a1f0ac74 100644 --- a/MediaBrowser.ServerApplication/NewItemNotifier.cs +++ b/MediaBrowser.ServerApplication/EntryPoints/NewItemNotifier.cs @@ -9,7 +9,7 @@ using System.Linq; using System.Threading; using System.Windows.Controls.Primitives; -namespace MediaBrowser.ServerApplication +namespace MediaBrowser.ServerApplication.EntryPoints { /// <summary> /// Class NewItemNotifier diff --git a/MediaBrowser.ServerApplication/EntryPoints/RefreshUsersMetadata.cs b/MediaBrowser.ServerApplication/EntryPoints/RefreshUsersMetadata.cs new file mode 100644 index 000000000..735a1f655 --- /dev/null +++ b/MediaBrowser.ServerApplication/EntryPoints/RefreshUsersMetadata.cs @@ -0,0 +1,41 @@ +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Plugins; +using System.Threading; + +namespace MediaBrowser.ServerApplication.EntryPoints +{ + /// <summary> + /// Class RefreshUsersMetadata + /// </summary> + public class RefreshUsersMetadata : IServerEntryPoint + { + /// <summary> + /// The _user manager + /// </summary> + private readonly IUserManager _userManager; + + /// <summary> + /// Initializes a new instance of the <see cref="RefreshUsersMetadata" /> class. + /// </summary> + /// <param name="userManager">The user manager.</param> + public RefreshUsersMetadata(IUserManager userManager) + { + _userManager = userManager; + } + + /// <summary> + /// Runs this instance. + /// </summary> + public async void Run() + { + await _userManager.RefreshUsersMetadata(CancellationToken.None).ConfigureAwait(false); + } + + /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// </summary> + public void Dispose() + { + } + } +} diff --git a/MediaBrowser.ServerApplication/StartupWizard.cs b/MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs index f7946c711..43d9018a1 100644 --- a/MediaBrowser.ServerApplication/StartupWizard.cs +++ b/MediaBrowser.ServerApplication/EntryPoints/StartupWizard.cs @@ -4,7 +4,7 @@ using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Plugins; using System.Linq; -namespace MediaBrowser.ServerApplication +namespace MediaBrowser.ServerApplication.EntryPoints { /// <summary> /// Class StartupWizard diff --git a/MediaBrowser.ServerApplication/WebSocketEvents.cs b/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs index 43972bafc..13359fced 100644 --- a/MediaBrowser.ServerApplication/WebSocketEvents.cs +++ b/MediaBrowser.ServerApplication/EntryPoints/WebSocketEvents.cs @@ -12,7 +12,7 @@ using MediaBrowser.Model.Tasks; using MediaBrowser.Model.Updates; using System; -namespace MediaBrowser.ServerApplication +namespace MediaBrowser.ServerApplication.EntryPoints { /// <summary> /// Class WebSocketEvents diff --git a/MediaBrowser.ServerApplication/MainWindow.xaml.cs b/MediaBrowser.ServerApplication/MainWindow.xaml.cs index 80f959b8b..364dd9da6 100644 --- a/MediaBrowser.ServerApplication/MainWindow.xaml.cs +++ b/MediaBrowser.ServerApplication/MainWindow.xaml.cs @@ -4,6 +4,7 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Library; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Serialization; using MediaBrowser.ServerApplication.Logging; using System; using System.ComponentModel; @@ -38,7 +39,11 @@ namespace MediaBrowser.ServerApplication /// The _configuration manager /// </summary> private readonly IServerConfigurationManager _configurationManager; - + + private readonly IUserManager _userManager; + private readonly ILibraryManager _libraryManager; + private readonly IJsonSerializer _jsonSerializer; + /// <summary> /// Initializes a new instance of the <see cref="MainWindow" /> class. /// </summary> @@ -46,7 +51,7 @@ namespace MediaBrowser.ServerApplication /// <param name="logger">The logger.</param> /// <param name="appHost">The app host.</param> /// <exception cref="System.ArgumentNullException">logger</exception> - public MainWindow(ILogManager logManager, IApplicationHost appHost, IServerConfigurationManager configurationManager) + public MainWindow(ILogManager logManager, IApplicationHost appHost, IServerConfigurationManager configurationManager, IUserManager userManager, ILibraryManager libraryManager, IJsonSerializer jsonSerializer) { if (logManager == null) { @@ -65,6 +70,9 @@ namespace MediaBrowser.ServerApplication _appHost = appHost; _logManager = logManager; _configurationManager = configurationManager; + _userManager = userManager; + _libraryManager = libraryManager; + _jsonSerializer = jsonSerializer; InitializeComponent(); @@ -209,8 +217,7 @@ namespace MediaBrowser.ServerApplication /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param> private void cmOpenExplorer_click(object sender, RoutedEventArgs e) { - var explorer = (LibraryExplorer)_appHost.CreateInstance(typeof(LibraryExplorer)); - explorer.Show(); + new LibraryExplorer(_jsonSerializer, _logger, _appHost, _userManager, _libraryManager).Show(); } /// <summary> @@ -220,7 +227,7 @@ namespace MediaBrowser.ServerApplication /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param> private void cmOpenDashboard_click(object sender, RoutedEventArgs e) { - var user = _appHost.Resolve<IUserManager>().Users.FirstOrDefault(u => u.Configuration.IsAdministrator); + var user = _userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator); OpenDashboard(user); } @@ -249,7 +256,7 @@ namespace MediaBrowser.ServerApplication /// <param name="e">The <see cref="RoutedEventArgs" /> instance containing the event data.</param> private void cmdBrowseLibrary_click(object sender, RoutedEventArgs e) { - var user = _appHost.Resolve<IUserManager>().Users.FirstOrDefault(u => u.Configuration.IsAdministrator); + var user = _userManager.Users.FirstOrDefault(u => u.Configuration.IsAdministrator); App.OpenDashboardPage("index.html", user, _configurationManager); } diff --git a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj index deec2d67f..a67d61bfd 100644 --- a/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj +++ b/MediaBrowser.ServerApplication/MediaBrowser.ServerApplication.csproj @@ -158,9 +158,10 @@ <Reference Include="PresentationFramework" /> </ItemGroup> <ItemGroup> - <Compile Include="NewItemNotifier.cs" /> - <Compile Include="StartupWizard.cs" /> - <Compile Include="WebSocketEvents.cs" /> + <Compile Include="EntryPoints\NewItemNotifier.cs" /> + <Compile Include="EntryPoints\RefreshUsersMetadata.cs" /> + <Compile Include="EntryPoints\StartupWizard.cs" /> + <Compile Include="EntryPoints\WebSocketEvents.cs" /> <Page Include="App.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> @@ -403,9 +404,9 @@ del "$(SolutionDir)..\Deploy\MBServer.zip" </Target> --> <Target Name="AfterBuild"> - <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> - <Output TaskParameter="Assemblies" ItemName="CurrentAssembly" /> - </GetAssemblyIdentity> - <Exec Command="copy $(SolutionDir)..\Deploy\MBServer.zip $(SolutionDir)..\Deploy\MBServer_%(CurrentAssembly.Version).zip /y" Condition="'$(ConfigurationName)' == 'Release'"/> + <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> + <Output TaskParameter="Assemblies" ItemName="CurrentAssembly" /> + </GetAssemblyIdentity> + <Exec Command="copy $(SolutionDir)..\Deploy\MBServer.zip $(SolutionDir)..\Deploy\MBServer_%(CurrentAssembly.Version).zip /y" Condition="'$(ConfigurationName)' == 'Release'" /> </Target> </Project>
\ No newline at end of file |
