浏览代码

Merge pull request #3899 from crobibero/plugin-install

Install specific plugin version if requested
Anthony Lavado 4 年之前
父节点
当前提交
cc6b03296a

+ 9 - 4
Emby.Server.Implementations/Updates/InstallationManager.cs

@@ -183,7 +183,8 @@ namespace Emby.Server.Implementations.Updates
             IEnumerable<PackageInfo> availablePackages,
             string name = null,
             Guid guid = default,
-            Version minVersion = null)
+            Version minVersion = null,
+            Version specificVersion = null)
         {
             var package = FilterPackages(availablePackages, name, guid).FirstOrDefault();
 
@@ -197,7 +198,11 @@ namespace Emby.Server.Implementations.Updates
             var availableVersions = package.versions
                 .Where(x => Version.Parse(x.targetAbi) <= appVer);
 
-            if (minVersion != null)
+            if (specificVersion != null)
+            {
+                availableVersions = availableVersions.Where(x => new Version(x.version) == specificVersion);
+            }
+            else if (minVersion != null)
             {
                 availableVersions = availableVersions.Where(x => new Version(x.version) >= minVersion);
             }
@@ -227,8 +232,8 @@ namespace Emby.Server.Implementations.Updates
         {
             foreach (var plugin in _applicationHost.Plugins)
             {
-                var compatibleversions = GetCompatibleVersions(pluginCatalog, plugin.Name, plugin.Id, plugin.Version);
-                var version = compatibleversions.FirstOrDefault(y => y.Version > plugin.Version);
+                var compatibleVersions = GetCompatibleVersions(pluginCatalog, plugin.Name, plugin.Id, minVersion: plugin.Version);
+                var version = compatibleVersions.FirstOrDefault(y => y.Version > plugin.Version);
                 if (version != null && CompletedInstallations.All(x => x.Guid != version.Guid))
                 {
                     yield return version;

+ 6 - 4
Jellyfin.Api/Controllers/PackageController.cs

@@ -49,9 +49,10 @@ namespace Jellyfin.Api.Controllers
         {
             var packages = await _installationManager.GetAvailablePackages().ConfigureAwait(false);
             var result = _installationManager.FilterPackages(
-                packages,
-                name,
-                string.IsNullOrEmpty(assemblyGuid) ? default : Guid.Parse(assemblyGuid)).FirstOrDefault();
+                    packages,
+                    name,
+                    string.IsNullOrEmpty(assemblyGuid) ? default : Guid.Parse(assemblyGuid))
+                .FirstOrDefault();
 
             return result;
         }
@@ -93,7 +94,8 @@ namespace Jellyfin.Api.Controllers
                     packages,
                     name,
                     string.IsNullOrEmpty(assemblyGuid) ? Guid.Empty : Guid.Parse(assemblyGuid),
-                    string.IsNullOrEmpty(version) ? null : Version.Parse(version)).FirstOrDefault();
+                    specificVersion: string.IsNullOrEmpty(version) ? null : Version.Parse(version))
+                .FirstOrDefault();
 
             if (package == null)
             {

+ 3 - 1
MediaBrowser.Common/Updates/IInstallationManager.cs

@@ -73,12 +73,14 @@ namespace MediaBrowser.Common.Updates
         /// <param name="name">The name.</param>
         /// <param name="guid">The guid of the plugin.</param>
         /// <param name="minVersion">The minimum required version of the plugin.</param>
+        /// <param name="specificVersion">The specific version of the plugin to install.</param>
         /// <returns>All compatible versions ordered from newest to oldest.</returns>
         IEnumerable<InstallationInfo> GetCompatibleVersions(
             IEnumerable<PackageInfo> availablePackages,
             string name = null,
             Guid guid = default,
-            Version minVersion = null);
+            Version minVersion = null,
+            Version specificVersion = null);
 
         /// <summary>
         /// Returns the available plugin updates.