diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/CommercialPackages.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/CommercialPackages.cs new file mode 100644 index 0000000000..3e343b7002 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/CommercialPackages.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Abp.Cli.NuGet +{ + internal static class CommercialPackages + { + private static readonly HashSet _packages = new() + { + "volo.abp.suite" + //other PRO packages can be added to this list... + }; + + public static bool IsCommercial(string packageId) + { + return _packages.Contains(packageId.ToLowerInvariant()); + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs index ef85131ff8..e854951c4b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs @@ -43,7 +43,7 @@ namespace Volo.Abp.Cli.NuGet public async Task PackageExistAsync(string packageId, string version = null) { - var versionList = await GetPackageVersionListAsync(packageId, false, true); + var versionList = await GetPackageVersionListAsync(packageId, false); if (versionList == null) { @@ -60,7 +60,7 @@ namespace Volo.Abp.Cli.NuGet public async Task GetLatestVersionOrNullAsync(string packageId, bool includeNightly = false, bool includeReleaseCandidates = false) { - var versionList = await GetPackageVersionListAsync(packageId, includeNightly, includeReleaseCandidates); + var versionList = await GetPackageVersionListAsync(packageId, includeNightly); if (versionList == null) { @@ -95,19 +95,45 @@ namespace Volo.Abp.Cli.NuGet } - public async Task> GetPackageVersionListAsync(string packageId, bool includeNightly = false, - bool includeReleaseCandidates = false) + public async Task> GetPackageVersionListAsync(string packageId, bool includeNightly = false) { if (includeNightly) { - var includeNightlyUrl = $"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json"; - return await GetPackageVersionListFromUrlAsync(includeNightlyUrl); + return await GetPackageVersionsFromMyGet(packageId); } - var nugetUrl = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json"; - var commercialUrl = await GetNuGetUrlForCommercialPackage(packageId); + if (CommercialPackages.IsCommercial(packageId)) + { + return await GetPackageVersionsFromAbpCommercialNuGetAsync(packageId); + } + else + { + var packagesFromNugetOrg = await GetPackageVersionsFromNuGetOrgAsync(packageId); + if (packagesFromNugetOrg != null) + { + return packagesFromNugetOrg; + } + } - return (await GetPackageVersionListFromUrlAsync(nugetUrl)) ?? (await GetPackageVersionListFromUrlAsync(commercialUrl)); + return await GetPackageVersionsFromAbpCommercialNuGetAsync(packageId); + } + + private async Task> GetPackageVersionsFromAbpCommercialNuGetAsync(string packageId) + { + var url = await GetNuGetUrlForCommercialPackage(packageId); + return await GetPackageVersionListFromUrlAsync(url); + } + + private async Task> GetPackageVersionsFromNuGetOrgAsync(string packageId) + { + var url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json"; + return await GetPackageVersionListFromUrlAsync(url); + } + + private async Task> GetPackageVersionsFromMyGet(string packageId) + { + var url = $"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json"; + return await GetPackageVersionListFromUrlAsync(url); } private async Task> GetPackageVersionListFromUrlAsync(string url) @@ -122,7 +148,16 @@ namespace Volo.Abp.Cli.NuGet logger: Logger )) { - await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + if (responseMessage.StatusCode == System.Net.HttpStatusCode.NotFound) + { + //the package doesn't exist... + return null; + } + else + { + await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); + } + var responseContent = await responseMessage.Content.ReadAsStringAsync(); return JsonSerializer.Deserialize(responseContent).Versions; }