aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller/Updates/InstallationManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Controller/Updates/InstallationManager.cs')
-rw-r--r--MediaBrowser.Controller/Updates/InstallationManager.cs46
1 files changed, 29 insertions, 17 deletions
diff --git a/MediaBrowser.Controller/Updates/InstallationManager.cs b/MediaBrowser.Controller/Updates/InstallationManager.cs
index bef5a6472..af544dd51 100644
--- a/MediaBrowser.Controller/Updates/InstallationManager.cs
+++ b/MediaBrowser.Controller/Updates/InstallationManager.cs
@@ -1,18 +1,17 @@
-using System.Security.Cryptography;
-using MediaBrowser.Common.Events;
-using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.Events;
using MediaBrowser.Common.Net;
using MediaBrowser.Common.Plugins;
using MediaBrowser.Common.Progress;
-using MediaBrowser.Common.Serialization;
using MediaBrowser.Model.IO;
using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Updates;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Security.Cryptography;
using System.Threading;
using System.Threading.Tasks;
@@ -32,8 +31,8 @@ namespace MediaBrowser.Controller.Updates
/// <summary>
/// The completed installations
/// </summary>
- public readonly ConcurrentBag<InstallationInfo> CompletedInstallations = new ConcurrentBag<InstallationInfo>();
-
+ public readonly ConcurrentBag<InstallationInfo> CompletedInstallations = new ConcurrentBag<InstallationInfo>();
+
#region PluginUninstalled Event
/// <summary>
/// Occurs when [plugin uninstalled].
@@ -68,7 +67,7 @@ namespace MediaBrowser.Controller.Updates
_logger.Info("Plugin updated: {0} {1} {2}", newVersion.name, newVersion.version, newVersion.classification);
EventHelper.QueueEventIfNotNull(PluginUpdated, this, new GenericEventArgs<Tuple<IPlugin, PackageVersionInfo>> { Argument = new Tuple<IPlugin, PackageVersionInfo>(plugin, newVersion) }, _logger);
-
+
Kernel.NotifyPendingRestart();
}
#endregion
@@ -109,14 +108,21 @@ namespace MediaBrowser.Controller.Updates
private readonly INetworkManager _networkManager;
/// <summary>
+ /// Gets the json serializer.
+ /// </summary>
+ /// <value>The json serializer.</value>
+ protected IJsonSerializer JsonSerializer { get; private set; }
+
+ /// <summary>
/// Initializes a new instance of the <see cref="InstallationManager" /> class.
/// </summary>
/// <param name="kernel">The kernel.</param>
/// <param name="zipClient">The zip client.</param>
/// <param name="networkManager">The network manager.</param>
+ /// <param name="jsonSerializer"></param>
/// <param name="logger">The logger.</param>
/// <exception cref="System.ArgumentNullException">zipClient</exception>
- public InstallationManager(Kernel kernel, IZipClient zipClient, INetworkManager networkManager, ILogger logger)
+ public InstallationManager(Kernel kernel, IZipClient zipClient, INetworkManager networkManager, IJsonSerializer jsonSerializer, ILogger logger)
: base(kernel)
{
if (zipClient == null)
@@ -131,6 +137,12 @@ namespace MediaBrowser.Controller.Updates
{
throw new ArgumentNullException("logger");
}
+ if (jsonSerializer == null)
+ {
+ throw new ArgumentNullException("jsonSerializer");
+ }
+
+ JsonSerializer = jsonSerializer;
_networkManager = networkManager;
_logger = logger;
@@ -161,7 +173,7 @@ namespace MediaBrowser.Controller.Updates
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();
@@ -178,7 +190,7 @@ namespace MediaBrowser.Controller.Updates
// Remove packages with no versions
packages = packages.Where(p => p.versions.Any()).ToList();
-
+
return packages;
}
}
@@ -320,7 +332,7 @@ namespace MediaBrowser.Controller.Updates
var innerCancellationTokenSource = new CancellationTokenSource();
var tuple = new Tuple<InstallationInfo, CancellationTokenSource>(installationInfo, innerCancellationTokenSource);
-
+
// Add it to the in-progress list
lock (CurrentInstallations)
{
@@ -364,7 +376,7 @@ namespace MediaBrowser.Controller.Updates
_logger.Info("Package installation cancelled: {0} {1}", package.name, package.versionStr);
Kernel.TcpManager.SendWebSocketMessage("PackageInstallationCancelled", installationInfo);
-
+
throw;
}
catch
@@ -373,7 +385,7 @@ namespace MediaBrowser.Controller.Updates
{
CurrentInstallations.Remove(tuple);
}
-
+
Kernel.TcpManager.SendWebSocketMessage("PackageInstallationFailed", installationInfo);
throw;
@@ -421,7 +433,7 @@ namespace MediaBrowser.Controller.Updates
}
cancellationToken.ThrowIfCancellationRequested();
-
+
// Success - move it to the real target based on type
if (isArchive)
{
@@ -435,7 +447,7 @@ namespace MediaBrowser.Controller.Updates
throw;
}
- }
+ }
else
{
try
@@ -448,8 +460,8 @@ namespace MediaBrowser.Controller.Updates
_logger.ErrorException("Error attempting to move file from {0} to {1}", e, tempFile, target);
throw;
}
- }
-
+ }
+
// Set last update time if we were installed before
var plugin = Kernel.Plugins.FirstOrDefault(p => p.Name.Equals(package.name, StringComparison.OrdinalIgnoreCase));