initial implementation for custom plugin repositories

This commit is contained in:
dkanada
2020-06-04 23:57:57 +09:00
parent 836741f2aa
commit b7f4b8e2b5
9 changed files with 106 additions and 34 deletions

View File

@@ -31,11 +31,6 @@ namespace Emby.Server.Implementations.Updates
/// </summary>
public class InstallationManager : IInstallationManager
{
/// <summary>
/// The key for a setting that specifies a URL for the plugin repository JSON manifest.
/// </summary>
public const string PluginManifestUrlKey = "InstallationManager:PluginManifestUrl";
/// <summary>
/// The logger.
/// </summary>
@@ -122,16 +117,14 @@ namespace Emby.Server.Implementations.Updates
public IEnumerable<InstallationInfo> CompletedInstallations => _completedInstallationsInternal;
/// <inheritdoc />
public async Task<IReadOnlyList<PackageInfo>> GetAvailablePackages(CancellationToken cancellationToken = default)
public async Task<IEnumerable<PackageInfo>> GetPackages(string manifest, CancellationToken cancellationToken = default)
{
var manifestUrl = _appConfig.GetValue<string>(PluginManifestUrlKey);
try
{
using (var response = await _httpClient.SendAsync(
new HttpRequestOptions
{
Url = manifestUrl,
Url = manifest,
CancellationToken = cancellationToken,
CacheMode = CacheMode.Unconditional,
CacheLength = TimeSpan.FromMinutes(3)
@@ -145,25 +138,35 @@ namespace Emby.Server.Implementations.Updates
}
catch (SerializationException ex)
{
const string LogTemplate =
"Failed to deserialize the plugin manifest retrieved from {PluginManifestUrl}. If you " +
"have specified a custom plugin repository manifest URL with --plugin-manifest-url or " +
PluginManifestUrlKey + ", please ensure that it is correct.";
_logger.LogError(ex, LogTemplate, manifestUrl);
_logger.LogError(ex, "Failed to deserialize the plugin manifest retrieved from {Manifest}", manifest);
throw;
}
}
}
catch (UriFormatException ex)
{
const string LogTemplate =
"The URL configured for the plugin repository manifest URL is not valid: {PluginManifestUrl}. " +
"Please check the URL configured by --plugin-manifest-url or " + PluginManifestUrlKey;
_logger.LogError(ex, LogTemplate, manifestUrl);
_logger.LogError(ex, "The URL configured for the plugin repository manifest URL is not valid: {Manifest}", manifest);
throw;
}
}
/// <inheritdoc />
public async Task<IReadOnlyList<PackageInfo>> GetAvailablePackages(CancellationToken cancellationToken = default)
{
var result = new List<PackageInfo>();
foreach (RepositoryInfo repository in _config.Configuration.PluginRepositories)
{
if (!repository.Enabled)
{
continue;
}
result.AddRange(await GetPackages(repository.Url, cancellationToken).ConfigureAwait(true));
}
return result.ToList().AsReadOnly();
}
/// <inheritdoc />
public IEnumerable<PackageInfo> FilterPackages(
IEnumerable<PackageInfo> availablePackages,