Explorar el Código

add PluginUpdateTask back into source

dkanada hace 6 años
padre
commit
548270772c
Se han modificado 1 ficheros con 142 adiciones y 0 borrados
  1. 142 0
      Emby.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs

+ 142 - 0
Emby.Server.Implementations/ScheduledTasks/PluginUpdateTask.cs

@@ -0,0 +1,142 @@
+using MediaBrowser.Common;
+using MediaBrowser.Common.Updates;
+using MediaBrowser.Model.Logging;
+using MediaBrowser.Model.Net;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using MediaBrowser.Common.Progress;
+using MediaBrowser.Model.Tasks;
+
+namespace Emby.Server.Implementations.ScheduledTasks
+{
+    /// <summary>
+    /// Plugin Update Task
+    /// </summary>
+    public class PluginUpdateTask : IScheduledTask, IConfigurableScheduledTask
+    {
+        /// <summary>
+        /// The _logger
+        /// </summary>
+        private readonly ILogger _logger;
+
+        private readonly IInstallationManager _installationManager;
+
+        private readonly IApplicationHost _appHost;
+
+        public PluginUpdateTask(ILogger logger, IInstallationManager installationManager, IApplicationHost appHost)
+        {
+            _logger = logger;
+            _installationManager = installationManager;
+            _appHost = appHost;
+        }
+
+        /// <summary>
+        /// Creates the triggers that define when the task will run
+        /// </summary>
+        /// <returns>IEnumerable{BaseTaskTrigger}.</returns>
+        public IEnumerable<TaskTriggerInfo> GetDefaultTriggers()
+        {
+            return new[] { 
+            
+                // At startup
+                new TaskTriggerInfo {Type = TaskTriggerInfo.TriggerStartup},
+
+                // Every so often
+                new TaskTriggerInfo { Type = TaskTriggerInfo.TriggerInterval, IntervalTicks = TimeSpan.FromHours(24).Ticks}
+            };
+        }
+
+        public string Key
+        {
+            get { return "PluginUpdates"; }
+        }
+
+        /// <summary>
+        /// Update installed plugins
+        /// </summary>
+        /// <param name="cancellationToken">The cancellation token.</param>
+        /// <param name="progress">The progress.</param>
+        /// <returns>Task.</returns>
+        public async Task Execute(CancellationToken cancellationToken, IProgress<double> progress)
+        {
+            progress.Report(0);
+
+            var packagesToInstall = (await _installationManager.GetAvailablePluginUpdates(_appHost.ApplicationVersion, true, cancellationToken).ConfigureAwait(false)).ToList();
+
+            progress.Report(10);
+
+            var numComplete = 0;
+
+            foreach (var package in packagesToInstall)
+            {
+                cancellationToken.ThrowIfCancellationRequested();
+
+                try
+                {
+                    await _installationManager.InstallPackage(package, true, new SimpleProgress<double>(), cancellationToken).ConfigureAwait(false);
+                }
+                catch (OperationCanceledException)
+                {
+                    // InstallPackage has it's own inner cancellation token, so only throw this if it's ours
+                    if (cancellationToken.IsCancellationRequested)
+                    {
+                        throw;
+                    }
+                }
+                catch (HttpException ex)
+                {
+                    _logger.ErrorException("Error downloading {0}", ex, package.name);
+                }
+                catch (IOException ex)
+                {
+                    _logger.ErrorException("Error updating {0}", ex, package.name);
+                }
+
+                // Update progress
+                lock (progress)
+                {
+                    numComplete++;
+                    double percent = numComplete;
+                    percent /= packagesToInstall.Count;
+
+                    progress.Report(90 * percent + 10);
+                }
+            }
+
+            progress.Report(100);
+        }
+
+        /// <summary>
+        /// Gets the name of the task
+        /// </summary>
+        /// <value>The name.</value>
+        public string Name
+        {
+            get { return "Check for plugin updates"; }
+        }
+
+        /// <summary>
+        /// Gets the description.
+        /// </summary>
+        /// <value>The description.</value>
+        public string Description
+        {
+            get { return "Downloads and installs updates for plugins that are configured to update automatically."; }
+        }
+
+        public string Category
+        {
+            get { return "Application"; }
+        }
+
+        public bool IsHidden => true;
+
+        public bool IsEnabled => true;
+
+        public bool IsLogged => true;
+    }
+}