diff --git a/Emby.Server.Implementations/Updates/InstallationManager.cs b/Emby.Server.Implementations/Updates/InstallationManager.cs index b0a1750bdd..325955e207 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>(new Uri(manifest), _jsonSerializerOptions, cancellationToken).ConfigureAwait(false); + List? packages; + var uri = new Uri(manifest); + if (uri.Scheme.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + { + packages = await _httpClientFactory.CreateClient(NamedClient.Default) + .GetFromJsonAsync>(uri, _jsonSerializerOptions, cancellationToken).ConfigureAwait(false); + } + else + { + // Local Packages + var data = File.ReadAllText(manifest, Encoding.UTF8); + packages = JsonSerializer.Deserialize>(data, _jsonSerializerOptions); + } + if (packages == null) { return Array.Empty(); @@ -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(); + } catch (JsonException ex) { _logger.LogError(ex, "Failed to deserialize the plugin manifest retrieved from {Manifest}", manifest);