plugin ui
All checks were successful
Build / Compute Version (push) Successful in 17s
Build / Build Nuget package (CringeBootstrap.Abstractions) (push) Successful in 3m5s
Build / Build Nuget package (NuGet) (push) Successful in 2m34s
Build / Build Nuget package (CringePlugins) (push) Successful in 2m56s
Build / Build Nuget package (SharedCringe) (push) Successful in 1m52s
Build / Build Launcher (push) Successful in 3m52s
All checks were successful
Build / Compute Version (push) Successful in 17s
Build / Build Nuget package (CringeBootstrap.Abstractions) (push) Successful in 3m5s
Build / Build Nuget package (NuGet) (push) Successful in 2m34s
Build / Build Nuget package (CringePlugins) (push) Successful in 2m56s
Build / Build Nuget package (SharedCringe) (push) Successful in 1m52s
Build / Build Launcher (push) Successful in 3m52s
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Net;
|
||||
using System.Net.Http.Json;
|
||||
using System.Text.Json;
|
||||
using System.Web;
|
||||
using NuGet.Converters;
|
||||
using NuGet.Models;
|
||||
using NuGet.Versioning;
|
||||
@@ -9,9 +10,11 @@ namespace NuGet;
|
||||
|
||||
public class NuGetClient
|
||||
{
|
||||
private readonly Uri _index;
|
||||
private readonly HttpClient _client;
|
||||
private readonly Uri _packageBaseAddress;
|
||||
private readonly Uri _registration;
|
||||
private readonly Uri _search;
|
||||
|
||||
public static JsonSerializerOptions SerializerOptions { get; } = new(JsonSerializerDefaults.Web)
|
||||
{
|
||||
@@ -24,11 +27,13 @@ public class NuGetClient
|
||||
WriteIndented = true
|
||||
};
|
||||
|
||||
private NuGetClient(HttpClient client, Uri packageBaseAddress, Uri registration)
|
||||
private NuGetClient(Uri index, HttpClient client, Uri packageBaseAddress, Uri registration, Uri search)
|
||||
{
|
||||
_index = index;
|
||||
_client = client;
|
||||
_packageBaseAddress = packageBaseAddress;
|
||||
_registration = registration;
|
||||
_search = search;
|
||||
}
|
||||
|
||||
public Task<Stream> GetPackageContentStreamAsync(string id, NuGetVersion version)
|
||||
@@ -61,6 +66,37 @@ public class NuGetClient
|
||||
return _client.GetFromJsonAsync<CatalogEntry>(url, SerializerOptions)!;
|
||||
}
|
||||
|
||||
public Task<SearchResult> SearchPackagesAsync(string? query = null, int? skip = null, int? take = null,
|
||||
bool? includePrerelease = null, NuGetVersion? minVersion = null, string? packageType = null)
|
||||
{
|
||||
var queryParameters = HttpUtility.ParseQueryString(string.Empty);
|
||||
|
||||
if (!string.IsNullOrEmpty(query))
|
||||
queryParameters.Add("q", query);
|
||||
|
||||
if (skip.HasValue)
|
||||
queryParameters.Add("skip", skip.Value.ToString());
|
||||
|
||||
if (take.HasValue)
|
||||
queryParameters.Add("take", take.Value.ToString());
|
||||
|
||||
if (includePrerelease.HasValue)
|
||||
queryParameters.Add("prerelease", includePrerelease.Value.ToString());
|
||||
|
||||
if (minVersion is not null)
|
||||
queryParameters.Add("semVerLevel", minVersion.ToString());
|
||||
|
||||
if (!string.IsNullOrEmpty(packageType))
|
||||
queryParameters.Add("packageType", packageType);
|
||||
|
||||
var builder = new UriBuilder(_search)
|
||||
{
|
||||
Query = queryParameters.ToString()
|
||||
};
|
||||
|
||||
return _client.GetFromJsonAsync<SearchResult>(builder.Uri, SerializerOptions)!;
|
||||
}
|
||||
|
||||
public static async Task<NuGetClient> CreateFromIndexUrlAsync(string indexUrl)
|
||||
{
|
||||
var client = new HttpClient(new HttpClientHandler
|
||||
@@ -71,13 +107,20 @@ public class NuGetClient
|
||||
var index = await client.GetFromJsonAsync<NuGetIndex>(indexUrl, SerializerOptions);
|
||||
|
||||
var (packageBaseAddress, _, _) = index!.Resources.First(b => b.Type.Id == "PackageBaseAddress");
|
||||
var (registration, _, _) = index!.Resources.First(b => b.Type.Id == "RegistrationsBaseUrl");
|
||||
var (registration, _, _) = index.Resources.First(b => b.Type.Id == "RegistrationsBaseUrl");
|
||||
var (search, _, _) = index.Resources.First(b => b.Type.Id == "SearchQueryService");
|
||||
|
||||
if (!packageBaseAddress.EndsWith('/'))
|
||||
packageBaseAddress += '/';
|
||||
if (!registration.EndsWith('/'))
|
||||
registration += '/';
|
||||
|
||||
return new NuGetClient(client, new Uri(packageBaseAddress), new Uri(registration));
|
||||
|
||||
return new NuGetClient(new Uri(indexUrl), client, new Uri(packageBaseAddress), new Uri(registration), new Uri(search));
|
||||
}
|
||||
|
||||
public override string ToString() => _index.ToString();
|
||||
|
||||
public override bool Equals(object? obj) => obj is NuGetClient { _index: { } index } && index == _index;
|
||||
|
||||
public override int GetHashCode() => _index.GetHashCode();
|
||||
}
|
Reference in New Issue
Block a user