Ver código fonte

add suggested changes

dkanada 4 anos atrás
pai
commit
64cc5889f2

+ 38 - 7
Emby.Server.Implementations/Plugins/PluginManager.cs

@@ -4,14 +4,16 @@ using System;
 using System.Collections.Generic;
 using System.IO;
 using System.Linq;
-using System.Net;
+using System.Net.Http;
 using System.Reflection;
 using System.Text;
 using System.Text.Json;
+using System.Threading.Tasks;
 using MediaBrowser.Common;
 using MediaBrowser.Common.Extensions;
 using MediaBrowser.Common.Json;
 using MediaBrowser.Common.Json.Converters;
+using MediaBrowser.Common.Net;
 using MediaBrowser.Common.Plugins;
 using MediaBrowser.Model.Configuration;
 using MediaBrowser.Model.Plugins;
@@ -35,6 +37,21 @@ namespace Emby.Server.Implementations.Plugins
         private readonly IList<LocalPlugin> _plugins;
         private readonly Version _minimumVersion;
 
+        private IHttpClientFactory? _httpClientFactory;
+
+        private IHttpClientFactory HttpClientFactory
+        {
+            get
+            {
+                if (_httpClientFactory == null)
+                {
+                    _httpClientFactory = _appHost.Resolve<IHttpClientFactory>();
+                }
+
+                return _httpClientFactory;
+            }
+        }
+
         /// <summary>
         /// Initializes a new instance of the <see cref="PluginManager"/> class.
         /// </summary>
@@ -351,15 +368,29 @@ namespace Emby.Server.Implementations.Plugins
         }
 
         /// <inheritdoc/>
-        public bool GenerateManifest(PackageInfo packageInfo, Version version, string path)
+        public async Task<bool> GenerateManifest(PackageInfo packageInfo, Version version, string path)
         {
+            if (packageInfo == null)
+            {
+                return false;
+            }
+
             var versionInfo = packageInfo.Versions.First(v => v.Version == version.ToString());
-            var url = packageInfo.ImageUrl ?? string.Empty;
-            var imageFilename = url.Substring(url.LastIndexOf('/') + 1, url.Length);
+            var imagePath = string.Empty;
 
-            using (var client = new WebClient())
+            if (!string.IsNullOrEmpty(packageInfo.ImageUrl))
             {
-                client.DownloadFile(url, Path.Join(path, imageFilename));
+                var url = new Uri(packageInfo.ImageUrl);
+                imagePath = Path.Join(path, url.Segments.Last());
+
+                await using var fileStream = File.OpenWrite(imagePath);
+                var downloadStream = await HttpClientFactory
+                    .CreateClient(NamedClient.Default)
+                    .GetStreamAsync(url)
+                    .ConfigureAwait(false);
+
+                await downloadStream.CopyToAsync(fileStream).ConfigureAwait(false);
+                await fileStream.DisposeAsync();
             }
 
             var manifest = new PluginManifest
@@ -376,7 +407,7 @@ namespace Emby.Server.Implementations.Plugins
                 Version = versionInfo.Version,
                 Status = PluginStatus.Active,
                 AutoUpdate = true,
-                ImagePath = Path.Join(path, imageFilename)
+                ImagePath = imagePath
             };
 
             return SaveManifest(manifest, path);

+ 2 - 2
Emby.Server.Implementations/Updates/InstallationManager.cs

@@ -194,7 +194,7 @@ namespace Emby.Server.Implementations.Updates
                             var plugin = _pluginManager.GetPlugin(packageGuid, version.VersionNumber);
                             if (plugin != null)
                             {
-                                _pluginManager.GenerateManifest(package, version.VersionNumber, plugin.Path);
+                                await _pluginManager.GenerateManifest(package, version.VersionNumber, plugin.Path);
                             }
 
                             // Remove versions with a target ABI greater then the current application version.
@@ -567,7 +567,7 @@ namespace Emby.Server.Implementations.Updates
 
             stream.Position = 0;
             _zipClient.ExtractAllFromZip(stream, targetDir, true);
-            _pluginManager.GenerateManifest(package.PackageInfo, package.Version, targetDir);
+            await _pluginManager.GenerateManifest(package.PackageInfo, package.Version, targetDir);
             _pluginManager.ImportPluginFrom(targetDir);
         }
 

+ 1 - 1
MediaBrowser.Common/Plugins/IPluginManager.cs

@@ -52,7 +52,7 @@ namespace MediaBrowser.Common.Plugins
         /// <param name="version">Version to be installed.</param>
         /// <param name="path">The path where to save the manifest.</param>
         /// <returns>True if successful.</returns>
-        bool GenerateManifest(PackageInfo packageInfo, Version version, string path);
+        Task<bool> GenerateManifest(PackageInfo packageInfo, Version version, string path);
 
         /// <summary>
         /// Imports plugin details from a folder.