aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Server.Implementations/Updates/InstallationManager.cs22
1 files changed, 20 insertions, 2 deletions
diff --git a/Emby.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs
index b0a1750bd..325955e20 100644
--- a/Emby.Server.Implementations/Updates/InstallationManager.cs
+++ b/Emby.Server.Implementations/Updates/InstallationManager.cs
@@ -8,6 +8,7 @@ using System.Linq;
using System.Net.Http;
using System.Net.Http.Json;
using System.Security.Cryptography;
+using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
@@ -105,8 +106,20 @@ namespace Emby.Server.Implementations.Updates
{
try
{
- var packages = await _httpClientFactory.CreateClient(NamedClient.Default)
- .GetFromJsonAsync<List<PackageInfo>>(new Uri(manifest), _jsonSerializerOptions, cancellationToken).ConfigureAwait(false);
+ List<PackageInfo>? packages;
+ var uri = new Uri(manifest);
+ if (uri.Scheme.StartsWith("http", StringComparison.OrdinalIgnoreCase))
+ {
+ packages = await _httpClientFactory.CreateClient(NamedClient.Default)
+ .GetFromJsonAsync<List<PackageInfo>>(uri, _jsonSerializerOptions, cancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ // Local Packages
+ var data = File.ReadAllText(manifest, Encoding.UTF8);
+ packages = JsonSerializer.Deserialize<List<PackageInfo>>(data, _jsonSerializerOptions);
+ }
+
if (packages == null)
{
return Array.Empty<PackageInfo>();
@@ -150,6 +163,11 @@ namespace Emby.Server.Implementations.Updates
return packages;
}
+ catch (IOException ex)
+ {
+ _logger.LogError(ex, "Cannot locate the plugin manifest {Manifest}", manifest);
+ return Array.Empty<PackageInfo>();
+ }
catch (JsonException ex)
{
_logger.LogError(ex, "Failed to deserialize the plugin manifest retrieved from {Manifest}", manifest);