using MediaBrowser.ApiInteraction; using MediaBrowser.Common.Kernel; using MediaBrowser.Model.Configuration; using MediaBrowser.Model.DTO; using MediaBrowser.Model.Progress; using MediaBrowser.UI.Configuration; using System; using System.Threading.Tasks; namespace MediaBrowser.UI.Controller { /// /// This controls application logic as well as server interaction within the UI. /// public class UIKernel : BaseKernel { public static UIKernel Instance { get; private set; } public ApiClient ApiClient { get; private set; } public DtoUser CurrentUser { get; set; } public ServerConfiguration ServerConfiguration { get; set; } public UIKernel() : base() { Instance = this; } public override KernelContext KernelContext { get { return KernelContext.Ui; } } /// /// Give the UI a different url prefix so that they can share the same port, in case they are installed on the same machine. /// protected override string HttpServerUrlPrefix { get { return "http://+:" + Configuration.HttpServerPortNumber + "/mediabrowser/ui/"; } } /// /// Performs initializations that can be reloaded at anytime /// protected override async Task ReloadInternal(IProgress progress) { ReloadApiClient(); await new PluginUpdater().UpdatePlugins().ConfigureAwait(false); await base.ReloadInternal(progress).ConfigureAwait(false); } /// /// Updates and installs new plugin assemblies and configurations from the server /// protected async Task UpdatePlugins() { return await new PluginUpdater().UpdatePlugins().ConfigureAwait(false); } /// /// Disposes the current ApiClient and creates a new one /// private void ReloadApiClient() { DisposeApiClient(); ApiClient = new ApiClient { ServerHostName = Configuration.ServerHostName, ServerApiPort = Configuration.ServerApiPort }; } /// /// Disposes the current ApiClient /// private void DisposeApiClient() { if (ApiClient != null) { ApiClient.Dispose(); } } public override void Dispose() { base.Dispose(); DisposeApiClient(); } } }