mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-19 15:04:19 +01:00
refactor: improve null-safety and error handling
This commit is contained in:
@@ -64,7 +64,8 @@ namespace BTCPayServer.Plugins
|
|||||||
var plugins = versions
|
var plugins = versions
|
||||||
.Select(MapToAvailablePlugin)
|
.Select(MapToAvailablePlugin)
|
||||||
.Where(p => p is not null)
|
.Where(p => p is not null)
|
||||||
.ToList()!;
|
.Select(p => p!)
|
||||||
|
.ToList();
|
||||||
|
|
||||||
var listedIds = new HashSet<string>(
|
var listedIds = new HashSet<string>(
|
||||||
plugins.Select(p => p.Identifier),
|
plugins.Select(p => p.Identifier),
|
||||||
@@ -83,14 +84,38 @@ namespace BTCPayServer.Plugins
|
|||||||
loadedToCheck);
|
loadedToCheck);
|
||||||
|
|
||||||
if (updates is { Length: > 0 })
|
if (updates is { Length: > 0 })
|
||||||
plugins.AddRange(updates.Select(MapToAvailablePlugin).Where(p => p is not null));
|
{
|
||||||
|
plugins.AddRange(
|
||||||
|
updates.Select(MapToAvailablePlugin)
|
||||||
|
.Where(p => p is not null)
|
||||||
|
.Select(p => p!)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return plugins.ToArray();
|
return plugins.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private AvailablePlugin MapToAvailablePlugin(PublishedVersion publishedVersion)
|
#nullable enable
|
||||||
|
private AvailablePlugin? MapToAvailablePlugin(PublishedVersion publishedVersion)
|
||||||
{
|
{
|
||||||
var availablePlugin = publishedVersion.ManifestInfo.ToObject<AvailablePlugin>();
|
if (publishedVersion.ManifestInfo is null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("ManifestInfo missing for published version {Version}", publishedVersion.ToString());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
AvailablePlugin? availablePlugin;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
availablePlugin = publishedVersion.ManifestInfo.ToObject<AvailablePlugin>();
|
||||||
|
}
|
||||||
|
catch (JsonException ex)
|
||||||
|
{
|
||||||
|
_logger.LogWarning(ex, "Failed to parse manifest for published version {Version}", publishedVersion.ToString());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
if (availablePlugin is null)
|
if (availablePlugin is null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("ManifestInfo missing for published version {Version}", publishedVersion.ToString());
|
_logger.LogWarning("ManifestInfo missing for published version {Version}", publishedVersion.ToString());
|
||||||
@@ -98,16 +123,18 @@ namespace BTCPayServer.Plugins
|
|||||||
}
|
}
|
||||||
|
|
||||||
availablePlugin.Documentation = publishedVersion.Documentation;
|
availablePlugin.Documentation = publishedVersion.Documentation;
|
||||||
var github = publishedVersion.BuildInfo?.GetGithubRepository();
|
var buildInfo = publishedVersion.BuildInfo;
|
||||||
if (github != null)
|
var github = buildInfo?.GetGithubRepository();
|
||||||
|
if (buildInfo is not null && github is not null)
|
||||||
{
|
{
|
||||||
availablePlugin.Source = github.GetSourceUrl(publishedVersion.BuildInfo.gitCommit, publishedVersion.BuildInfo.pluginDir);
|
availablePlugin.Source = github.GetSourceUrl(buildInfo.gitCommit, buildInfo.pluginDir);
|
||||||
availablePlugin.Author = github.Owner;
|
availablePlugin.Author = github.Owner;
|
||||||
availablePlugin.AuthorLink = $"https://github.com/{github.Owner}";
|
availablePlugin.AuthorLink = $"https://github.com/{github.Owner}";
|
||||||
}
|
}
|
||||||
availablePlugin.SystemPlugin = false;
|
availablePlugin.SystemPlugin = false;
|
||||||
return availablePlugin;
|
return availablePlugin;
|
||||||
}
|
}
|
||||||
|
#nullable restore
|
||||||
|
|
||||||
public async Task<AvailablePlugin> DownloadRemotePlugin(string pluginIdentifier, string version, VersionCondition condition = null)
|
public async Task<AvailablePlugin> DownloadRemotePlugin(string pluginIdentifier, string version, VersionCondition condition = null)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user