Skip to content

Commit acc1c7b

Browse files
authored
Added support for update release notes in APIv3 (#748)
1 parent 9b5989b commit acc1c7b

4 files changed

Lines changed: 37 additions & 6 deletions

File tree

src/NuGetForUnity/Editor/Models/NugetPackageV3.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ internal sealed class NugetPackageV3 : NugetPackageIdentifier, INugetPackage, IS
6161
[NotNull]
6262
private NugetPackageSourceV3 packageSource;
6363

64+
[SerializeField]
65+
[NotNull]
66+
private string releaseNotes;
67+
6468
/// <summary>
6569
/// Initializes a new instance of the <see cref="NugetPackageV3" /> class.
6670
/// </summary>
@@ -75,6 +79,7 @@ internal sealed class NugetPackageV3 : NugetPackageIdentifier, INugetPackage, IS
7579
/// <param name="summary">The short summary.</param>
7680
/// <param name="title">The human readable title.</param>
7781
/// <param name="iconUrl">The URL where the icon can be downloaded.</param>
82+
/// <param name="releaseNotes">Release notes from the currently installed version.</param>
7883
/// <param name="versions">All available versions.</param>
7984
public NugetPackageV3(
8085
[NotNull] string id,
@@ -88,6 +93,7 @@ public NugetPackageV3(
8893
[CanBeNull] string summary,
8994
[CanBeNull] string title,
9095
[CanBeNull] string iconUrl,
96+
string releaseNotes,
9197
List<NugetPackageVersion> versions)
9298
: base(id, version)
9399
{
@@ -100,6 +106,7 @@ public NugetPackageV3(
100106
Summary = summary;
101107
Title = title;
102108
this.iconUrl = iconUrl;
109+
this.releaseNotes = releaseNotes;
103110
Versions = versions;
104111
}
105112

@@ -178,7 +185,7 @@ public Task<Texture2D> IconTask
178185
}
179186

180187
/// <inheritdoc />
181-
public string ReleaseNotes => string.Empty;
188+
public string ReleaseNotes => releaseNotes;
182189

183190
/// <inheritdoc />
184191
public RepositoryType RepositoryType => RepositoryType.NotSpecified;

src/NuGetForUnity/Editor/PackageSource/NugetApiClientV3.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,11 +246,13 @@ public async Task DownloadNupkgToFileAsync(
246246
/// </summary>
247247
/// <param name="packageSource">The package source that owns this client.</param>
248248
/// <param name="package">The package identifier to receive including the details.</param>
249+
/// <param name="includePrerelease">True to include prerelease packages (alpha, beta, etc).</param>
249250
/// <param name="cancellationToken">Token to cancel the HTTP request.</param>
250251
/// <returns>The package or null if we didn't find it.</returns>
251252
public async Task<NugetPackageV3> GetPackageWithAllVersionsAsync(
252253
NugetPackageSourceV3 packageSource,
253254
INugetPackageIdentifier package,
255+
bool includePrerelease,
254256
CancellationToken cancellationToken = default)
255257
{
256258
var registrationItems = await GetRegistrationPageItemsAsync(packageSource, package, cancellationToken);
@@ -262,13 +264,15 @@ public async Task<NugetPackageV3> GetPackageWithAllVersionsAsync(
262264
var versions = new List<NugetPackageVersion>();
263265
RegistrationLeafObject latestVersionItem = null;
264266
NugetPackageVersion latestVersion = null;
267+
var sb = new StringBuilder();
265268
foreach (var item in registrationItems)
266269
{
267270
if (item.items is null || item.items.Count == 0)
268271
{
269272
item.items = await GetRegistrationPageLeafItems(packageSource, item, cancellationToken).ConfigureAwait(false);
270273
}
271274

275+
var lastNote = string.Empty;
272276
foreach (var leafObject in item.items)
273277
{
274278
var catalogEntry = leafObject.CatalogEntry;
@@ -280,19 +284,28 @@ public async Task<NugetPackageV3> GetPackageWithAllVersionsAsync(
280284
}
281285

282286
var version = new NugetPackageVersion(catalogEntry.version);
283-
versions.Add(version);
287+
if (includePrerelease || !version.IsPrerelease)
288+
{
289+
versions.Add(version);
290+
}
291+
284292
if (latestVersion != null && version <= latestVersion)
285293
{
286294
continue;
287295
}
288296

289297
latestVersion = version;
290298
latestVersionItem = leafObject;
299+
if (!string.IsNullOrWhiteSpace(catalogEntry.releaseNotes) && lastNote != catalogEntry.releaseNotes && version > package.PackageVersion)
300+
{
301+
sb.Append(catalogEntry.releaseNotes).Append("\n");
302+
lastNote = catalogEntry.releaseNotes;
303+
}
291304
}
292305
}
293306

294307
versions.Sort((v1, v2) => v2.CompareTo(v1));
295-
return CreatePackageFromRegistrationLeaf(packageSource, latestVersionItem, versions);
308+
return CreatePackageFromRegistrationLeaf(packageSource, latestVersionItem, sb.ToString(), versions);
296309
}
297310

298311
/// <summary>
@@ -314,7 +327,7 @@ public async Task<NugetPackageV3> GetPackageWithDetailsAsync(
314327
return null;
315328
}
316329

317-
return CreatePackageFromRegistrationLeaf(packageSource, leafItem);
330+
return CreatePackageFromRegistrationLeaf(packageSource, leafItem, leafItem.CatalogEntry.releaseNotes);
318331
}
319332

320333
/// <summary>
@@ -343,6 +356,7 @@ public async Task<List<NugetFrameworkGroup>> GetPackageDetailsAsync(
343356
private static NugetPackageV3 CreatePackageFromRegistrationLeaf(
344357
NugetPackageSourceV3 packageSource,
345358
RegistrationLeafObject leafItem,
359+
string releaseNotes,
346360
List<NugetPackageVersion> allVersions = null)
347361
{
348362
var entry = leafItem.CatalogEntry;
@@ -368,6 +382,7 @@ private static NugetPackageV3 CreatePackageFromRegistrationLeaf(
368382
entry.summary,
369383
entry.title,
370384
entry.iconUrl,
385+
releaseNotes,
371386
allVersions ?? new List<NugetPackageVersion> { new NugetPackageVersion(entry.version) })
372387
{
373388
DownloadUrl = leafItem.packageContent, Dependencies = ConvertDependencyGroups(entry),
@@ -443,6 +458,7 @@ private static List<INugetPackage> SearchResultToNugetPackages(List<SearchResult
443458
item.summary,
444459
item.title,
445460
item.iconUrl,
461+
string.Empty,
446462
versions));
447463
}
448464

@@ -1017,6 +1033,9 @@ private sealed class CatalogEntry
10171033
[CanBeNull]
10181034
public string version;
10191035

1036+
[CanBeNull]
1037+
public string releaseNotes;
1038+
10201039
/// <summary>
10211040
/// The security vulnerabilities of the package.
10221041
/// </summary>

src/NuGetForUnity/Editor/PackageSource/NugetPackageSourceV3.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ public List<INugetPackage> GetUpdates(
264264

265265
var fetchedPackages = await Task.WhenAll(
266266
packagesToFetch.Select(package =>
267-
ApiClient.GetPackageWithAllVersionsAsync(this, package, CancellationToken.None)))
267+
ApiClient.GetPackageWithAllVersionsAsync(this, package, includePrerelease, CancellationToken.None)))
268268
.ConfigureAwait(false);
269269
return fetchedPackages.Where(fetchedPackage => !(fetchedPackage is null)).ToList<INugetPackage>();
270270
}

src/NuGetForUnity/Editor/Ui/NugetWindow.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -938,6 +938,7 @@ private void DrawUpdatesHeader()
938938
{
939939
showPrereleaseUpdates = showPrereleaseTemp;
940940
UpdateUpdatePackages();
941+
versionDropdownDataPerPackage.Clear();
941942
}
942943

943944
var showDowngradesTemp = GUILayout.Toggle(
@@ -1290,7 +1291,11 @@ private void DrawPackage(INugetPackage package, GUIStyle backgroundStyle, bool c
12901291
if (!string.IsNullOrEmpty(package.ReleaseNotes))
12911292
{
12921293
EditorGUILayout.LabelField("Release Notes", EditorStyles.boldLabel);
1293-
EditorGUILayout.LabelField(package.ReleaseNotes);
1294+
var releaseNotesContent = new GUIContent(package.ReleaseNotes);
1295+
var releaseNotesRect = EditorGUILayout.GetControlRect(
1296+
true,
1297+
labelStyle.CalcHeight(releaseNotesContent, EditorGUIUtility.currentViewWidth - 20f) + 12f);
1298+
EditorGUI.LabelField(releaseNotesRect, releaseNotesContent, labelStyle);
12941299
GUILayout.Space(4f);
12951300
}
12961301

0 commit comments

Comments
 (0)