diff options
| -rw-r--r-- | MediaBrowser.Common/MediaBrowser.Common.csproj | 1 | ||||
| -rw-r--r-- | MediaBrowser.Common/Updates/IInstallationManager.cs | 119 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Kernel.cs | 3 | ||||
| -rw-r--r-- | MediaBrowser.Controller/Updates/InstallationManager.cs | 11 |
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; |
