diff options
9 files changed, 140 insertions, 161 deletions
diff --git a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj index 70d92edb5..a8dfe33cf 100644 --- a/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj +++ b/MediaBrowser.Common.Implementations/MediaBrowser.Common.Implementations.csproj @@ -129,6 +129,7 @@ <Compile Include="ServerManager\ServerManager.cs" /> <Compile Include="ServerManager\WebSocketConnection.cs" /> <Compile Include="Udp\UdpServer.cs" /> + <Compile Include="Updates\PackageManager.cs" /> <Compile Include="WebSocket\AlchemyServer.cs" /> <Compile Include="WebSocket\AlchemyWebSocket.cs" /> </ItemGroup> @@ -163,9 +164,7 @@ <Content Include="swagger-ui\swagger-ui.js" /> <Content Include="swagger-ui\swagger-ui.min.js" /> </ItemGroup> - <ItemGroup> - <Folder Include="Updates\" /> - </ItemGroup> + <ItemGroup /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\nuget.targets" /> <PropertyGroup> diff --git a/MediaBrowser.Common.Implementations/Updates/PackageManager.cs b/MediaBrowser.Common.Implementations/Updates/PackageManager.cs new file mode 100644 index 000000000..3f09615e7 --- /dev/null +++ b/MediaBrowser.Common.Implementations/Updates/PackageManager.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; +using MediaBrowser.Common.Security; +using MediaBrowser.Common.Updates; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Updates; + +namespace MediaBrowser.Common.Implementations.Updates +{ + public class PackageManager : IPackageManager + { + public async Task<IEnumerable<PackageInfo>> GetAvailablePackages(IHttpClient client, + INetworkManager networkManager, + ISecurityManager securityManager, + ResourcePool resourcePool, + IJsonSerializer serializer, + CancellationToken cancellationToken) + { + var data = new Dictionary<string, string> { { "key", securityManager.SupporterKey }, { "mac", networkManager.GetMacAddress() } }; + + using (var json = await client.Post(Constants.Constants.MBAdminUrl + "service/package/retrieveall", data, resourcePool.Mb, cancellationToken).ConfigureAwait(false)) + { + cancellationToken.ThrowIfCancellationRequested(); + + var packages = serializer.DeserializeFromStream<List<PackageInfo>>(json).ToList(); + foreach (var package in packages) + { + package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) + .OrderByDescending(v => v.version).ToList(); + } + + return packages; + } + + } + + public Task InstallPackage(PackageVersionInfo package, CancellationToken cancellationToken) + { + throw new NotImplementedException(); + } + } +} diff --git a/MediaBrowser.Common/Constants/Constants.cs b/MediaBrowser.Common/Constants/Constants.cs new file mode 100644 index 000000000..e8a347829 --- /dev/null +++ b/MediaBrowser.Common/Constants/Constants.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace MediaBrowser.Common.Constants +{ + public static class Constants + { + public const string MBAdminUrl = "http://mb3admin.com/admin/"; + } +} diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 50ca0e5bc..1b63f936f 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -47,6 +47,7 @@ <Compile Include="..\SharedVersion.cs"> <Link>Properties\SharedVersion.cs</Link> </Compile> + <Compile Include="Constants\Constants.cs" /> <Compile Include="Events\EventHelper.cs" /> <Compile Include="Extensions\BaseExtensions.cs" /> <Compile Include="Events\GenericEventArgs.cs" /> @@ -104,7 +105,7 @@ <Compile Include="ScheduledTasks\IntervalTrigger.cs" /> <Compile Include="ScheduledTasks\WeeklyTrigger.cs" /> <Compile Include="Security\ISecurityManager.cs" /> - <Compile Include="Updates\IInstallationManager.cs" /> + <Compile Include="Updates\IPackageManager.cs" /> </ItemGroup> <ItemGroup> <None Include="app.config" /> diff --git a/MediaBrowser.Common/Updates/IInstallationManager.cs b/MediaBrowser.Common/Updates/IInstallationManager.cs deleted file mode 100644 index 23c147748..000000000 --- a/MediaBrowser.Common/Updates/IInstallationManager.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; -using MediaBrowser.Common.Events; -using MediaBrowser.Common.Plugins; -using MediaBrowser.Model.Updates; - -namespace MediaBrowser.Common.Updates -{ - public interface IInstallationManager - { - /// <summary> - /// The current installations - /// </summary> - List<Tuple<InstallationInfo, CancellationTokenSource>> CurrentInstallations { get; set; } - - /// <summary> - /// The completed installations - /// </summary> - ConcurrentBag<InstallationInfo> CompletedInstallations { get; set; } - - /// <summary> - /// Occurs when [plugin uninstalled]. - /// </summary> - event EventHandler<GenericEventArgs<IPlugin>> PluginUninstalled; - - /// <summary> - /// Occurs when [plugin updated]. - /// </summary> - event EventHandler<GenericEventArgs<Tuple<IPlugin, PackageVersionInfo>>> PluginUpdated; - - /// <summary> - /// Called when [plugin updated]. - /// </summary> - /// <param name="plugin">The plugin.</param> - /// <param name="newVersion">The new version.</param> - void OnPluginUpdated(IPlugin plugin, PackageVersionInfo newVersion); - - /// <summary> - /// Occurs when [plugin updated]. - /// </summary> - event EventHandler<GenericEventArgs<PackageVersionInfo>> PluginInstalled; - - /// <summary> - /// Called when [plugin installed]. - /// </summary> - /// <param name="package">The package.</param> - void OnPluginInstalled(PackageVersionInfo package); - - /// <summary> - /// Gets all available packages. - /// </summary> - /// <param name="cancellationToken">The cancellation token.</param> - /// <param name="packageType">Type of the package.</param> - /// <param name="applicationVersion">The application version.</param> - /// <returns>Task{List{PackageInfo}}.</returns> - Task<IEnumerable<PackageInfo>> GetAvailablePackages(CancellationToken cancellationToken, - PackageType? packageType = null, - Version applicationVersion = null); - - /// <summary> - /// Gets the package. - /// </summary> - /// <param name="name">The name.</param> - /// <param name="classification">The classification.</param> - /// <param name="version">The version.</param> - /// <returns>Task{PackageVersionInfo}.</returns> - Task<PackageVersionInfo> GetPackage(string name, PackageVersionClass classification, Version version); - - /// <summary> - /// Gets the latest compatible version. - /// </summary> - /// <param name="name">The name.</param> - /// <param name="classification">The classification.</param> - /// <returns>Task{PackageVersionInfo}.</returns> - Task<PackageVersionInfo> GetLatestCompatibleVersion(string name, PackageVersionClass classification = PackageVersionClass.Release); - - /// <summary> - /// Gets the latest compatible version. - /// </summary> - /// <param name="availablePackages">The available packages.</param> - /// <param name="name">The name.</param> - /// <param name="classification">The classification.</param> - /// <returns>PackageVersionInfo.</returns> - PackageVersionInfo GetLatestCompatibleVersion(IEnumerable<PackageInfo> availablePackages, string name, PackageVersionClass classification = PackageVersionClass.Release); - - /// <summary> - /// Gets the available plugin updates. - /// </summary> - /// <param name="withAutoUpdateEnabled">if set to <c>true</c> [with auto update enabled].</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task{IEnumerable{PackageVersionInfo}}.</returns> - Task<IEnumerable<PackageVersionInfo>> GetAvailablePluginUpdates(bool withAutoUpdateEnabled, CancellationToken cancellationToken); - - /// <summary> - /// Installs the package. - /// </summary> - /// <param name="package">The package.</param> - /// <param name="progress">The progress.</param> - /// <param name="cancellationToken">The cancellation token.</param> - /// <returns>Task.</returns> - /// <exception cref="System.ArgumentNullException">package</exception> - Task InstallPackage(PackageVersionInfo package, IProgress<double> progress, CancellationToken cancellationToken); - - /// <summary> - /// Uninstalls a plugin - /// </summary> - /// <param name="plugin">The plugin.</param> - /// <exception cref="System.ArgumentException"></exception> - void UninstallPlugin(IPlugin plugin); - - /// <summary> - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// </summary> - void Dispose(); - } -}
\ No newline at end of file diff --git a/MediaBrowser.Common/Updates/IPackageManager.cs b/MediaBrowser.Common/Updates/IPackageManager.cs new file mode 100644 index 000000000..d5a8a59b1 --- /dev/null +++ b/MediaBrowser.Common/Updates/IPackageManager.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MediaBrowser.Common.Kernel; +using MediaBrowser.Common.Net; +using MediaBrowser.Common.Security; +using MediaBrowser.Model.Serialization; +using MediaBrowser.Model.Updates; + +namespace MediaBrowser.Common.Updates +{ + public interface IPackageManager + { + /// <summary> + /// Gets all available packages. + /// </summary> + /// <param name="client"></param> + /// <param name="networkManager"></param> + /// <param name="securityManager"></param> + /// <param name="resourcePool"></param> + /// <param name="serializer"></param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task{List{PackageInfo}}.</returns> + Task<IEnumerable<PackageInfo>> GetAvailablePackages(IHttpClient client, + INetworkManager networkManager, + ISecurityManager securityManager, + ResourcePool resourcePool, + IJsonSerializer serializer, + CancellationToken cancellationToken); + + /// <summary> + /// Installs a package. + /// </summary> + /// <param name="package">The package.</param> + /// <param name="cancellationToken">The cancellation token.</param> + /// <returns>Task.</returns> + Task InstallPackage(PackageVersionInfo package, CancellationToken cancellationToken); + } +} diff --git a/MediaBrowser.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs index 6faa20012..6703012be 100644 --- a/MediaBrowser.Controller/Kernel.cs +++ b/MediaBrowser.Controller/Kernel.cs @@ -34,11 +34,6 @@ namespace MediaBrowser.Controller public class Kernel : BaseKernel<ServerConfiguration, IServerApplicationPaths> { /// <summary> - /// The MB admin URL - /// </summary> - public const string MBAdminUrl = "http://mb3admin.com/admin/"; - - /// <summary> /// Gets the instance. /// </summary> /// <value>The instance.</value> @@ -72,7 +67,7 @@ namespace MediaBrowser.Controller /// Gets the installation manager. /// </summary> /// <value>The installation manager.</value> - public IInstallationManager InstallationManager { get; private set; } + public InstallationManager InstallationManager { get; private set; } /// <summary> /// Gets or sets the file system manager. diff --git a/MediaBrowser.Controller/Updates/InstallationManager.cs b/MediaBrowser.Controller/Updates/InstallationManager.cs index 633cc6bc3..ebd644a82 100644 --- a/MediaBrowser.Controller/Updates/InstallationManager.cs +++ b/MediaBrowser.Controller/Updates/InstallationManager.cs @@ -22,7 +22,7 @@ namespace MediaBrowser.Controller.Updates /// <summary> /// Manages all install, uninstall and update operations (both plugins and system) /// </summary> - public class InstallationManager : BaseManager<Kernel>, IInstallationManager + public class InstallationManager : BaseManager<Kernel> { /// <summary> /// The current installations @@ -110,6 +110,11 @@ namespace MediaBrowser.Controller.Updates private readonly INetworkManager _networkManager; /// <summary> + /// The package manager + /// </summary> + private readonly IPackageManager _packageManager; + + /// <summary> /// Gets the json serializer. /// </summary> /// <value>The json serializer.</value> @@ -134,11 +139,12 @@ namespace MediaBrowser.Controller.Updates /// <param name="httpClient">The HTTP client.</param> /// <param name="zipClient">The zip client.</param> /// <param name="networkManager">The network manager.</param> + /// <param name="packageManager">The package manager.</param> /// <param name="jsonSerializer">The json serializer.</param> /// <param name="logger">The logger.</param> /// <param name="appHost">The app host.</param> /// <exception cref="System.ArgumentNullException">zipClient</exception> - public InstallationManager(Kernel kernel, IHttpClient httpClient, IZipClient zipClient, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) + public InstallationManager(Kernel kernel, IHttpClient httpClient, IZipClient zipClient, INetworkManager networkManager, IPackageManager packageManager, IJsonSerializer jsonSerializer, ILogger logger, IApplicationHost appHost) : base(kernel) { if (zipClient == null) @@ -149,6 +155,10 @@ namespace MediaBrowser.Controller.Updates { throw new ArgumentNullException("networkManager"); } + if (packageManager == null) + { + throw new ArgumentNullException("packageManager"); + } if (logger == null) { throw new ArgumentNullException("logger"); @@ -168,6 +178,7 @@ namespace MediaBrowser.Controller.Updates HttpClient = httpClient; ApplicationHost = appHost; _networkManager = networkManager; + _packageManager = packageManager; _logger = logger; ZipClient = zipClient; } @@ -183,39 +194,26 @@ namespace MediaBrowser.Controller.Updates PackageType? packageType = null, Version applicationVersion = null) { - var data = new Dictionary<string, string> { { "key", Kernel.SecurityManager.SupporterKey }, { "mac", _networkManager.GetMacAddress() } }; + var packages = (await _packageManager.GetAvailablePackages(HttpClient, _networkManager, Kernel.SecurityManager, Kernel.ResourcePools, JsonSerializer, cancellationToken).ConfigureAwait(false)).ToList(); - using (var json = await HttpClient.Post(Controller.Kernel.MBAdminUrl + "service/package/retrieveall", data, Kernel.ResourcePools.Mb, cancellationToken).ConfigureAwait(false)) + if (packageType.HasValue) { - cancellationToken.ThrowIfCancellationRequested(); - - var packages = JsonSerializer.DeserializeFromStream<List<PackageInfo>>(json).ToList(); + packages = packages.Where(p => p.type == packageType.Value).ToList(); + } + // If an app version was supplied, filter the versions for each package to only include supported versions + if (applicationVersion != null) + { foreach (var package in packages) { - package.versions = package.versions.Where(v => !string.IsNullOrWhiteSpace(v.sourceUrl)) - .OrderByDescending(v => v.version).ToList(); - } - - if (packageType.HasValue) - { - packages = packages.Where(p => p.type == packageType.Value).ToList(); - } - - // If an app version was supplied, filter the versions for each package to only include supported versions - if (applicationVersion != null) - { - foreach (var package in packages) - { - package.versions = package.versions.Where(v => IsPackageVersionUpToDate(v, applicationVersion)).ToList(); - } + package.versions = package.versions.Where(v => IsPackageVersionUpToDate(v, applicationVersion)).ToList(); } + } - // Remove packages with no versions - packages = packages.Where(p => p.versions.Any()).ToList(); + // Remove packages with no versions + packages = packages.Where(p => p.versions.Any()).ToList(); - return packages; - } + return packages; } /// <summary> diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs index a252d92a6..2aa24dabf 100644 --- a/MediaBrowser.ServerApplication/ApplicationHost.cs +++ b/MediaBrowser.ServerApplication/ApplicationHost.cs @@ -7,13 +7,15 @@ using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Common.Implementations.NetworkManagement; using MediaBrowser.Common.Implementations.ScheduledTasks; using MediaBrowser.Common.Implementations.Serialization; +using MediaBrowser.Common.IO; using MediaBrowser.Common.Implementations.ServerManager; using MediaBrowser.Common.Implementations.Udp; +using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Common.Implementations.WebSocket; -using MediaBrowser.Common.IO; using MediaBrowser.Common.Kernel; using MediaBrowser.Common.Net; using MediaBrowser.Common.ScheduledTasks; +using MediaBrowser.Common.Updates; using MediaBrowser.Controller; using MediaBrowser.IsoMounter; using MediaBrowser.Model.IO; @@ -72,7 +74,6 @@ namespace MediaBrowser.ServerApplication public ApplicationHost() : base() { - Logger.Info("ApplicationHost!!!!!!!!!!!!!!!!!!!!"); Kernel = new Kernel(this, ServerApplicationPaths, _xmlSerializer, Logger); var networkManager = new NetworkManager(); @@ -81,13 +82,15 @@ namespace MediaBrowser.ServerApplication var taskManager = new TaskManager(ApplicationPaths, _jsonSerializer, Logger, serverManager); + var packageManager = new PackageManager(); + LogManager.ReloadLogger(Kernel.Configuration.EnableDebugLevelLogging ? LogSeverity.Debug : LogSeverity.Info); Logger.Info("Version {0} initializing", ApplicationVersion); var httpServer = ServerFactory.CreateServer(this, ProtobufSerializer, Logger, "Media Browser", "index.html"); - RegisterResources(taskManager, httpServer, networkManager, serverManager); + RegisterResources(taskManager, httpServer, networkManager, serverManager, packageManager); FindParts(taskManager, httpServer); } @@ -113,7 +116,7 @@ namespace MediaBrowser.ServerApplication /// <summary> /// Registers resources that classes will depend on /// </summary> - private void RegisterResources(ITaskManager taskManager, IHttpServer httpServer, INetworkManager networkManager, IServerManager serverManager) + private void RegisterResources(ITaskManager taskManager, IHttpServer httpServer, INetworkManager networkManager, IServerManager serverManager, IPackageManager packageManager) { RegisterSingleInstance<IKernel>(Kernel); RegisterSingleInstance(Kernel); @@ -137,8 +140,8 @@ namespace MediaBrowser.ServerApplication RegisterSingleInstance(httpServer, false); RegisterSingleInstance(networkManager); - RegisterSingleInstance(serverManager); + RegisterSingleInstance(packageManager); } /// <summary> |
