diff --git a/src/NuGetForUnity/Editor/Models/NugetPackageV3.cs b/src/NuGetForUnity/Editor/Models/NugetPackageV3.cs
index c56cf26b..dd28706f 100644
--- a/src/NuGetForUnity/Editor/Models/NugetPackageV3.cs
+++ b/src/NuGetForUnity/Editor/Models/NugetPackageV3.cs
@@ -61,6 +61,10 @@ internal sealed class NugetPackageV3 : NugetPackageIdentifier, INugetPackage, IS
[NotNull]
private NugetPackageSourceV3 packageSource;
+ [SerializeField]
+ [NotNull]
+ private string releaseNotes;
+
///
/// Initializes a new instance of the class.
///
@@ -75,6 +79,7 @@ internal sealed class NugetPackageV3 : NugetPackageIdentifier, INugetPackage, IS
/// The short summary.
/// The human readable title.
/// The URL where the icon can be downloaded.
+ /// Release notes from the currently installed version.
/// All available versions.
public NugetPackageV3(
[NotNull] string id,
@@ -88,6 +93,7 @@ public NugetPackageV3(
[CanBeNull] string summary,
[CanBeNull] string title,
[CanBeNull] string iconUrl,
+ string releaseNotes,
List versions)
: base(id, version)
{
@@ -100,6 +106,7 @@ public NugetPackageV3(
Summary = summary;
Title = title;
this.iconUrl = iconUrl;
+ this.releaseNotes = releaseNotes;
Versions = versions;
}
@@ -178,7 +185,7 @@ public Task IconTask
}
///
- public string ReleaseNotes => string.Empty;
+ public string ReleaseNotes => releaseNotes;
///
public RepositoryType RepositoryType => RepositoryType.NotSpecified;
diff --git a/src/NuGetForUnity/Editor/PackageSource/NugetApiClientV3.cs b/src/NuGetForUnity/Editor/PackageSource/NugetApiClientV3.cs
index 8ba3ca3b..16f709a5 100644
--- a/src/NuGetForUnity/Editor/PackageSource/NugetApiClientV3.cs
+++ b/src/NuGetForUnity/Editor/PackageSource/NugetApiClientV3.cs
@@ -246,11 +246,13 @@ public async Task DownloadNupkgToFileAsync(
///
/// The package source that owns this client.
/// The package identifier to receive including the details.
+ /// True to include prerelease packages (alpha, beta, etc).
/// Token to cancel the HTTP request.
/// The package or null if we didn't find it.
public async Task GetPackageWithAllVersionsAsync(
NugetPackageSourceV3 packageSource,
INugetPackageIdentifier package,
+ bool includePrerelease,
CancellationToken cancellationToken = default)
{
var registrationItems = await GetRegistrationPageItemsAsync(packageSource, package, cancellationToken);
@@ -262,6 +264,7 @@ public async Task GetPackageWithAllVersionsAsync(
var versions = new List();
RegistrationLeafObject latestVersionItem = null;
NugetPackageVersion latestVersion = null;
+ var sb = new StringBuilder();
foreach (var item in registrationItems)
{
if (item.items is null || item.items.Count == 0)
@@ -269,6 +272,7 @@ public async Task GetPackageWithAllVersionsAsync(
item.items = await GetRegistrationPageLeafItems(packageSource, item, cancellationToken).ConfigureAwait(false);
}
+ var lastNote = string.Empty;
foreach (var leafObject in item.items)
{
var catalogEntry = leafObject.CatalogEntry;
@@ -280,7 +284,11 @@ public async Task GetPackageWithAllVersionsAsync(
}
var version = new NugetPackageVersion(catalogEntry.version);
- versions.Add(version);
+ if (includePrerelease || !version.IsPrerelease)
+ {
+ versions.Add(version);
+ }
+
if (latestVersion != null && version <= latestVersion)
{
continue;
@@ -288,11 +296,16 @@ public async Task GetPackageWithAllVersionsAsync(
latestVersion = version;
latestVersionItem = leafObject;
+ if (!string.IsNullOrWhiteSpace(catalogEntry.releaseNotes) && lastNote != catalogEntry.releaseNotes && version > package.PackageVersion)
+ {
+ sb.Append(catalogEntry.releaseNotes).Append("\n");
+ lastNote = catalogEntry.releaseNotes;
+ }
}
}
versions.Sort((v1, v2) => v2.CompareTo(v1));
- return CreatePackageFromRegistrationLeaf(packageSource, latestVersionItem, versions);
+ return CreatePackageFromRegistrationLeaf(packageSource, latestVersionItem, sb.ToString(), versions);
}
///
@@ -314,7 +327,7 @@ public async Task GetPackageWithDetailsAsync(
return null;
}
- return CreatePackageFromRegistrationLeaf(packageSource, leafItem);
+ return CreatePackageFromRegistrationLeaf(packageSource, leafItem, leafItem.CatalogEntry.releaseNotes);
}
///
@@ -343,6 +356,7 @@ public async Task> GetPackageDetailsAsync(
private static NugetPackageV3 CreatePackageFromRegistrationLeaf(
NugetPackageSourceV3 packageSource,
RegistrationLeafObject leafItem,
+ string releaseNotes,
List allVersions = null)
{
var entry = leafItem.CatalogEntry;
@@ -368,6 +382,7 @@ private static NugetPackageV3 CreatePackageFromRegistrationLeaf(
entry.summary,
entry.title,
entry.iconUrl,
+ releaseNotes,
allVersions ?? new List { new NugetPackageVersion(entry.version) })
{
DownloadUrl = leafItem.packageContent, Dependencies = ConvertDependencyGroups(entry),
@@ -443,6 +458,7 @@ private static List SearchResultToNugetPackages(List
/// The security vulnerabilities of the package.
///
diff --git a/src/NuGetForUnity/Editor/PackageSource/NugetPackageSourceV3.cs b/src/NuGetForUnity/Editor/PackageSource/NugetPackageSourceV3.cs
index 16f26afd..df74c107 100644
--- a/src/NuGetForUnity/Editor/PackageSource/NugetPackageSourceV3.cs
+++ b/src/NuGetForUnity/Editor/PackageSource/NugetPackageSourceV3.cs
@@ -264,7 +264,7 @@ public List GetUpdates(
var fetchedPackages = await Task.WhenAll(
packagesToFetch.Select(package =>
- ApiClient.GetPackageWithAllVersionsAsync(this, package, CancellationToken.None)))
+ ApiClient.GetPackageWithAllVersionsAsync(this, package, includePrerelease, CancellationToken.None)))
.ConfigureAwait(false);
return fetchedPackages.Where(fetchedPackage => !(fetchedPackage is null)).ToList();
}
diff --git a/src/NuGetForUnity/Editor/Ui/NugetWindow.cs b/src/NuGetForUnity/Editor/Ui/NugetWindow.cs
index 9e4b621b..d118c320 100644
--- a/src/NuGetForUnity/Editor/Ui/NugetWindow.cs
+++ b/src/NuGetForUnity/Editor/Ui/NugetWindow.cs
@@ -938,6 +938,7 @@ private void DrawUpdatesHeader()
{
showPrereleaseUpdates = showPrereleaseTemp;
UpdateUpdatePackages();
+ versionDropdownDataPerPackage.Clear();
}
var showDowngradesTemp = GUILayout.Toggle(
@@ -1290,7 +1291,11 @@ private void DrawPackage(INugetPackage package, GUIStyle backgroundStyle, bool c
if (!string.IsNullOrEmpty(package.ReleaseNotes))
{
EditorGUILayout.LabelField("Release Notes", EditorStyles.boldLabel);
- EditorGUILayout.LabelField(package.ReleaseNotes);
+ var releaseNotesContent = new GUIContent(package.ReleaseNotes);
+ var releaseNotesRect = EditorGUILayout.GetControlRect(
+ true,
+ labelStyle.CalcHeight(releaseNotesContent, EditorGUIUtility.currentViewWidth - 20f) + 12f);
+ EditorGUI.LabelField(releaseNotesRect, releaseNotesContent, labelStyle);
GUILayout.Space(4f);
}