aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.Common/MediaBrowser.Common.csproj1
-rw-r--r--MediaBrowser.Common/Updates/IInstallationManager.cs119
-rw-r--r--MediaBrowser.Controller/Kernel.cs3
-rw-r--r--MediaBrowser.Controller/Updates/InstallationManager.cs11
4 files changed, 129 insertions, 5 deletions
diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj
index b136eb43c..a10f36da0 100644
--- a/MediaBrowser.Common/MediaBrowser.Common.csproj
+++ b/MediaBrowser.Common/MediaBrowser.Common.csproj
@@ -135,6 +135,7 @@
<Compile Include="ScheduledTasks\DailyTrigger.cs" />
<Compile Include="ScheduledTasks\IntervalTrigger.cs" />
<Compile Include="ScheduledTasks\WeeklyTrigger.cs" />
+ <Compile Include="Updates\IInstallationManager.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
diff --git a/MediaBrowser.Common/Updates/IInstallationManager.cs b/MediaBrowser.Common/Updates/IInstallationManager.cs
new file mode 100644
index 000000000..23c147748
--- /dev/null
+++ b/MediaBrowser.Common/Updates/IInstallationManager.cs
@@ -0,0 +1,119 @@
+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.Controller/Kernel.cs b/MediaBrowser.Controller/Kernel.cs
index 7cb838e44..a4af76805 100644
--- a/MediaBrowser.Controller/Kernel.cs
+++ b/MediaBrowser.Controller/Kernel.cs
@@ -1,6 +1,7 @@
using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.ScheduledTasks;
+using MediaBrowser.Common.Updates;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
@@ -70,7 +71,7 @@ namespace MediaBrowser.Controller
/// Gets the installation manager.
/// </summary>
/// <value>The installation manager.</value>
- public InstallationManager InstallationManager { get; private set; }
+ public IInstallationManager 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 efef87f86..64b72ae63 100644
--- a/MediaBrowser.Controller/Updates/InstallationManager.cs
+++ b/MediaBrowser.Controller/Updates/InstallationManager.cs
@@ -3,6 +3,7 @@ using MediaBrowser.Common.Kernel;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.Progress;
+using MediaBrowser.Common.Updates;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.Serialization;
@@ -21,18 +22,18 @@ namespace MediaBrowser.Controller.Updates
/// <summary>
/// Manages all install, uninstall and update operations (both plugins and system)
/// </summary>
- public class InstallationManager : BaseManager<Kernel>
+ public class InstallationManager : BaseManager<Kernel>, IInstallationManager
{
/// <summary>
/// The current installations
/// </summary>
- public readonly List<Tuple<InstallationInfo, CancellationTokenSource>> CurrentInstallations =
- new List<Tuple<InstallationInfo, CancellationTokenSource>>();
+ public List<Tuple<InstallationInfo, CancellationTokenSource>> CurrentInstallations { get; set; }
+
/// <summary>
/// The completed installations
/// </summary>
- public readonly ConcurrentBag<InstallationInfo> CompletedInstallations = new ConcurrentBag<InstallationInfo>();
+ public ConcurrentBag<InstallationInfo> CompletedInstallations { get; set; }
#region PluginUninstalled Event
/// <summary>
@@ -161,6 +162,8 @@ namespace MediaBrowser.Controller.Updates
throw new ArgumentNullException("httpClient");
}
+ CurrentInstallations = new List<Tuple<InstallationInfo, CancellationTokenSource>>();
+ CompletedInstallations = new ConcurrentBag<InstallationInfo>();
JsonSerializer = jsonSerializer;
HttpClient = httpClient;
ApplicationHost = appHost;